feat: instruction for adding passkey

This commit is contained in:
Jacky 2024-09-16 23:27:17 +08:00
parent aa30b0b4af
commit 018a3f15fd
No known key found for this signature in database
GPG key ID: 215C21B10DF38B4D
28 changed files with 1851 additions and 763 deletions

3
app/components.d.ts vendored
View file

@ -7,9 +7,6 @@ export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
2FA2FAAuthorization: typeof import('./src/components/2FA/2FAAuthorization.vue')['default']
2FAAuthorization: typeof import('./src/components/2FA/Authorization.vue')['default']
2FAOTPAuthorization: typeof import('./src/components/2FA/OTPAuthorization.vue')['default']
AAlert: typeof import('ant-design-vue/es')['Alert']
AAutoComplete: typeof import('ant-design-vue/es')['AutoComplete']
AAvatar: typeof import('ant-design-vue/es')['Avatar']

View file

@ -69,7 +69,7 @@
"less": "^4.2.0",
"postcss": "^8.4.47",
"tailwindcss": "^3.4.11",
"typescript": "5.5.4",
"typescript": "5.3.3",
"unplugin-auto-import": "^0.18.3",
"unplugin-vue-components": "^0.27.4",
"unplugin-vue-define-options": "^1.5.1",

335
app/pnpm-lock.yaml generated
View file

@ -13,7 +13,7 @@ importers:
version: 3.1.1
'@ant-design/icons-vue':
specifier: ^7.0.1
version: 7.0.1(vue@3.5.5(typescript@5.5.4))
version: 7.0.1(vue@3.5.5(typescript@5.3.3))
'@formkit/auto-animate':
specifier: ^0.8.2
version: 0.8.2
@ -28,13 +28,13 @@ importers:
version: 3.5.5
'@vueuse/components':
specifier: ^11.0.3
version: 11.0.3(vue@3.5.5(typescript@5.5.4))
version: 11.0.3(vue@3.5.5(typescript@5.3.3))
'@vueuse/core':
specifier: ^11.0.3
version: 11.0.3(vue@3.5.5(typescript@5.5.4))
version: 11.0.3(vue@3.5.5(typescript@5.3.3))
'@vueuse/integrations':
specifier: ^11.0.3
version: 11.0.3(async-validator@4.2.5)(axios@1.7.7)(nprogress@0.2.0)(sortablejs@1.15.3)(universal-cookie@7.2.0)(vue@3.5.5(typescript@5.5.4))
version: 11.0.3(async-validator@4.2.5)(axios@1.7.7)(nprogress@0.2.0)(sortablejs@1.15.3)(universal-cookie@7.2.0)(vue@3.5.5(typescript@5.3.3))
'@xterm/addon-attach':
specifier: ^0.11.0
version: 0.11.0(@xterm/xterm@5.5.0)
@ -46,7 +46,7 @@ importers:
version: 5.5.0
ant-design-vue:
specifier: ^4.2.4
version: 4.2.4(vue@3.5.5(typescript@5.5.4))
version: 4.2.4(vue@3.5.5(typescript@5.3.3))
apexcharts:
specifier: ^3.53.0
version: 3.53.0
@ -70,10 +70,10 @@ importers:
version: 0.2.0
pinia:
specifier: ^2.2.2
version: 2.2.2(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4))
version: 2.2.2(typescript@5.3.3)(vue@3.5.5(typescript@5.3.3))
pinia-plugin-persistedstate:
specifier: ^3.2.3
version: 3.2.3(pinia@2.2.2(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4)))
version: 3.2.3(pinia@2.2.2(typescript@5.3.3)(vue@3.5.5(typescript@5.3.3)))
reconnecting-websocket:
specifier: ^4.4.0
version: 4.4.0
@ -88,29 +88,29 @@ importers:
version: 0.3.6
vue:
specifier: ^3.5.5
version: 3.5.5(typescript@5.5.4)
version: 3.5.5(typescript@5.3.3)
vue-router:
specifier: ^4.4.5
version: 4.4.5(vue@3.5.5(typescript@5.5.4))
version: 4.4.5(vue@3.5.5(typescript@5.3.3))
vue3-ace-editor:
specifier: 2.2.4
version: 2.2.4(ace-builds@1.36.2)(vue@3.5.5(typescript@5.5.4))
version: 2.2.4(ace-builds@1.36.2)(vue@3.5.5(typescript@5.3.3))
vue3-apexcharts:
specifier: 1.5.3
version: 1.5.3(apexcharts@3.53.0)(vue@3.5.5(typescript@5.5.4))
version: 1.5.3(apexcharts@3.53.0)(vue@3.5.5(typescript@5.3.3))
vue3-gettext:
specifier: 3.0.0-beta.6
version: 3.0.0-beta.6(@vue/compiler-sfc@3.5.5)(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4))
version: 3.0.0-beta.6(@vue/compiler-sfc@3.5.5)(typescript@5.3.3)(vue@3.5.5(typescript@5.3.3))
vue3-otp-input:
specifier: ^0.5.21
version: 0.5.21(vue@3.5.5(typescript@5.5.4))
version: 0.5.21(vue@3.5.5(typescript@5.3.3))
vuedraggable:
specifier: ^4.1.0
version: 4.1.0(vue@3.5.5(typescript@5.5.4))
version: 4.1.0(vue@3.5.5(typescript@5.3.3))
devDependencies:
'@antfu/eslint-config-vue':
specifier: ^0.43.1
version: 0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4)
version: 0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3)
'@simplewebauthn/types':
specifier: ^10.0.0
version: 10.0.0
@ -125,16 +125,16 @@ importers:
version: 1.15.8
'@typescript-eslint/eslint-plugin':
specifier: ^6.21.0
version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/parser':
specifier: ^6.21.0
version: 6.21.0(eslint@8.57.0)(typescript@5.5.4)
version: 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@vitejs/plugin-vue':
specifier: ^5.1.3
version: 5.1.3(vite@5.4.5(@types/node@22.5.5)(less@4.2.0))(vue@3.5.5(typescript@5.5.4))
version: 5.1.3(vite@5.4.5(@types/node@22.5.5)(less@4.2.0))(vue@3.5.5(typescript@5.3.3))
'@vitejs/plugin-vue-jsx':
specifier: ^4.0.1
version: 4.0.1(vite@5.4.5(@types/node@22.5.5)(less@4.2.0))(vue@3.5.5(typescript@5.5.4))
version: 4.0.1(vite@5.4.5(@types/node@22.5.5)(less@4.2.0))(vue@3.5.5(typescript@5.3.3))
'@vue/compiler-sfc':
specifier: ^3.5.5
version: 3.5.5
@ -152,13 +152,13 @@ importers:
version: 8.57.0
eslint-import-resolver-alias:
specifier: ^1.1.2
version: 1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))
version: 1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))
eslint-import-resolver-typescript:
specifier: ^3.6.3
version: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0)
version: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0)
eslint-plugin-import:
specifier: ^2.30.0
version: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
version: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-plugin-regex:
specifier: ^1.10.0
version: 1.10.0(eslint@8.57.0)
@ -178,26 +178,26 @@ importers:
specifier: ^3.4.11
version: 3.4.11
typescript:
specifier: 5.5.4
version: 5.5.4
specifier: 5.3.3
version: 5.3.3
unplugin-auto-import:
specifier: ^0.18.3
version: 0.18.3(@vueuse/core@11.0.3(vue@3.5.5(typescript@5.5.4)))(rollup@4.21.3)(webpack-sources@3.2.3)
version: 0.18.3(@vueuse/core@11.0.3(vue@3.5.5(typescript@5.3.3)))(rollup@4.21.3)(webpack-sources@3.2.3)
unplugin-vue-components:
specifier: ^0.27.4
version: 0.27.4(@babel/parser@7.25.6)(rollup@4.21.3)(vue@3.5.5(typescript@5.5.4))(webpack-sources@3.2.3)
version: 0.27.4(@babel/parser@7.25.6)(rollup@4.21.3)(vue@3.5.5(typescript@5.3.3))(webpack-sources@3.2.3)
unplugin-vue-define-options:
specifier: ^1.5.1
version: 1.5.1(rollup@4.21.3)(vue@3.5.5(typescript@5.5.4))(webpack-sources@3.2.3)
version: 1.5.1(rollup@4.21.3)(vue@3.5.5(typescript@5.3.3))(webpack-sources@3.2.3)
vite:
specifier: ^5.4.5
version: 5.4.5(@types/node@22.5.5)(less@4.2.0)
vite-svg-loader:
specifier: ^5.1.0
version: 5.1.0(vue@3.5.5(typescript@5.5.4))
version: 5.1.0(vue@3.5.5(typescript@5.3.3))
vue-tsc:
specifier: ^2.1.6
version: 2.1.6(typescript@5.5.4)
version: 2.1.6(typescript@5.3.3)
packages:
@ -2920,6 +2920,11 @@ packages:
resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
engines: {node: '>= 0.4'}
typescript@5.3.3:
resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
engines: {node: '>=14.17'}
hasBin: true
typescript@5.5.4:
resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
engines: {node: '>=14.17'}
@ -3190,20 +3195,20 @@ snapshots:
'@ant-design/icons-svg@4.4.2': {}
'@ant-design/icons-vue@7.0.1(vue@3.5.5(typescript@5.5.4))':
'@ant-design/icons-vue@7.0.1(vue@3.5.5(typescript@5.3.3))':
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-svg': 4.4.2
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
'@antfu/eslint-config-basic@0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4)':
'@antfu/eslint-config-basic@0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3)':
dependencies:
'@stylistic/eslint-plugin-js': 0.0.4
eslint: 8.57.0
eslint-plugin-antfu: 0.43.1(eslint@8.57.0)(typescript@5.5.4)
eslint-plugin-antfu: 0.43.1(eslint@8.57.0)(typescript@5.3.3)
eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0)
eslint-plugin-html: 7.1.0
eslint-plugin-import: eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
eslint-plugin-import: eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
eslint-plugin-jsdoc: 46.10.1(eslint@8.57.0)
eslint-plugin-jsonc: 2.16.0(eslint@8.57.0)
eslint-plugin-markdown: 3.0.1(eslint@8.57.0)
@ -3211,7 +3216,7 @@ snapshots:
eslint-plugin-no-only-tests: 3.3.0
eslint-plugin-promise: 6.6.0(eslint@8.57.0)
eslint-plugin-unicorn: 48.0.1(eslint@8.57.0)
eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)
eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)
eslint-plugin-yml: 1.14.0(eslint@8.57.0)
jsonc-eslint-parser: 2.4.0
yaml-eslint-parser: 1.2.3
@ -3223,25 +3228,25 @@ snapshots:
- supports-color
- typescript
'@antfu/eslint-config-ts@0.43.1(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4)':
'@antfu/eslint-config-ts@0.43.1(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3)':
dependencies:
'@antfu/eslint-config-basic': 0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4)
'@stylistic/eslint-plugin-ts': 0.0.4(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@antfu/eslint-config-basic': 0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3)
'@stylistic/eslint-plugin-ts': 0.0.4(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
eslint: 8.57.0
eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
typescript: 5.5.4
eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)
typescript: 5.3.3
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- jest
- supports-color
'@antfu/eslint-config-vue@0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4)':
'@antfu/eslint-config-vue@0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3)':
dependencies:
'@antfu/eslint-config-basic': 0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4)
'@antfu/eslint-config-ts': 0.43.1(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4)
'@antfu/eslint-config-basic': 0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3)
'@antfu/eslint-config-ts': 0.43.1(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3)
eslint: 8.57.0
eslint-plugin-vue: 9.28.0(eslint@8.57.0)
local-pkg: 0.4.3
@ -3678,15 +3683,15 @@ snapshots:
esutils: 2.0.3
graphemer: 1.4.0
'@stylistic/eslint-plugin-ts@0.0.4(eslint@8.57.0)(typescript@5.5.4)':
'@stylistic/eslint-plugin-ts@0.0.4(eslint@8.57.0)(typescript@5.3.3)':
dependencies:
'@stylistic/eslint-plugin-js': 0.0.4
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
eslint: 8.57.0
graphemer: 1.4.0
typescript: 5.5.4
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
@ -3735,13 +3740,13 @@ snapshots:
'@types/web-bluetooth@0.0.20': {}
'@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)':
dependencies:
'@eslint-community/regexpp': 4.11.1
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/visitor-keys': 6.21.0
debug: 4.3.7
eslint: 8.57.0
@ -3749,22 +3754,22 @@ snapshots:
ignore: 5.3.2
natural-compare: 1.4.0
semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.5.4)
ts-api-utils: 1.3.0(typescript@5.3.3)
optionalDependencies:
typescript: 5.5.4
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3)':
dependencies:
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4)
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3)
'@typescript-eslint/visitor-keys': 6.21.0
debug: 4.3.7
eslint: 8.57.0
optionalDependencies:
typescript: 5.5.4
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
@ -3778,15 +3783,15 @@ snapshots:
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/visitor-keys': 6.21.0
'@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.3.3)':
dependencies:
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
debug: 4.3.7
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.5.4)
ts-api-utils: 1.3.0(typescript@5.3.3)
optionalDependencies:
typescript: 5.5.4
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
@ -3794,7 +3799,7 @@ snapshots:
'@typescript-eslint/types@6.21.0': {}
'@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4)':
'@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3)':
dependencies:
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/visitor-keys': 5.62.0
@ -3802,13 +3807,13 @@ snapshots:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.6.3
tsutils: 3.21.0(typescript@5.5.4)
tsutils: 3.21.0(typescript@5.3.3)
optionalDependencies:
typescript: 5.5.4
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)':
'@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3)':
dependencies:
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/visitor-keys': 6.21.0
@ -3817,20 +3822,20 @@ snapshots:
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.5.4)
ts-api-utils: 1.3.0(typescript@5.3.3)
optionalDependencies:
typescript: 5.5.4
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.3.3)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4)
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3)
eslint: 8.57.0
eslint-scope: 5.1.1
semver: 7.6.3
@ -3838,14 +3843,14 @@ snapshots:
- supports-color
- typescript
'@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.3.3)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4)
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3)
eslint: 8.57.0
semver: 7.6.3
transitivePeerDependencies:
@ -3864,20 +3869,20 @@ snapshots:
'@ungap/structured-clone@1.2.0': {}
'@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.5(@types/node@22.5.5)(less@4.2.0))(vue@3.5.5(typescript@5.5.4))':
'@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.5(@types/node@22.5.5)(less@4.2.0))(vue@3.5.5(typescript@5.3.3))':
dependencies:
'@babel/core': 7.25.2
'@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2)
'@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.2)
vite: 5.4.5(@types/node@22.5.5)(less@4.2.0)
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
transitivePeerDependencies:
- supports-color
'@vitejs/plugin-vue@5.1.3(vite@5.4.5(@types/node@22.5.5)(less@4.2.0))(vue@3.5.5(typescript@5.5.4))':
'@vitejs/plugin-vue@5.1.3(vite@5.4.5(@types/node@22.5.5)(less@4.2.0))(vue@3.5.5(typescript@5.3.3))':
dependencies:
vite: 5.4.5(@types/node@22.5.5)(less@4.2.0)
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
'@volar/language-core@2.4.5':
dependencies:
@ -3891,7 +3896,7 @@ snapshots:
path-browserify: 1.0.1
vscode-uri: 3.0.8
'@vue-macros/common@1.14.0(rollup@4.21.3)(vue@3.5.5(typescript@5.5.4))':
'@vue-macros/common@1.14.0(rollup@4.21.3)(vue@3.5.5(typescript@5.3.3))':
dependencies:
'@babel/types': 7.25.6
'@rollup/pluginutils': 5.1.0(rollup@4.21.3)
@ -3900,7 +3905,7 @@ snapshots:
local-pkg: 0.5.0
magic-string-ast: 0.6.2
optionalDependencies:
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
transitivePeerDependencies:
- rollup
@ -3971,7 +3976,7 @@ snapshots:
'@vue/devtools-api@6.6.4': {}
'@vue/language-core@2.1.6(typescript@5.5.4)':
'@vue/language-core@2.1.6(typescript@5.3.3)':
dependencies:
'@volar/language-core': 2.4.5
'@vue/compiler-dom': 3.5.5
@ -3982,7 +3987,7 @@ snapshots:
muggle-string: 0.4.1
path-browserify: 1.0.1
optionalDependencies:
typescript: 5.5.4
typescript: 5.3.3
'@vue/reactivity@3.5.5':
dependencies:
@ -4000,40 +4005,40 @@ snapshots:
'@vue/shared': 3.5.5
csstype: 3.1.3
'@vue/server-renderer@3.5.5(vue@3.5.5(typescript@5.5.4))':
'@vue/server-renderer@3.5.5(vue@3.5.5(typescript@5.3.3))':
dependencies:
'@vue/compiler-ssr': 3.5.5
'@vue/shared': 3.5.5
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
'@vue/shared@3.5.5': {}
'@vue/tsconfig@0.5.1': {}
'@vueuse/components@11.0.3(vue@3.5.5(typescript@5.5.4))':
'@vueuse/components@11.0.3(vue@3.5.5(typescript@5.3.3))':
dependencies:
'@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.5.4))
'@vueuse/shared': 11.0.3(vue@3.5.5(typescript@5.5.4))
vue-demi: 0.14.10(vue@3.5.5(typescript@5.5.4))
'@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.3.3))
'@vueuse/shared': 11.0.3(vue@3.5.5(typescript@5.3.3))
vue-demi: 0.14.10(vue@3.5.5(typescript@5.3.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@vueuse/core@11.0.3(vue@3.5.5(typescript@5.5.4))':
'@vueuse/core@11.0.3(vue@3.5.5(typescript@5.3.3))':
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 11.0.3
'@vueuse/shared': 11.0.3(vue@3.5.5(typescript@5.5.4))
vue-demi: 0.14.10(vue@3.5.5(typescript@5.5.4))
'@vueuse/shared': 11.0.3(vue@3.5.5(typescript@5.3.3))
vue-demi: 0.14.10(vue@3.5.5(typescript@5.3.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@vueuse/integrations@11.0.3(async-validator@4.2.5)(axios@1.7.7)(nprogress@0.2.0)(sortablejs@1.15.3)(universal-cookie@7.2.0)(vue@3.5.5(typescript@5.5.4))':
'@vueuse/integrations@11.0.3(async-validator@4.2.5)(axios@1.7.7)(nprogress@0.2.0)(sortablejs@1.15.3)(universal-cookie@7.2.0)(vue@3.5.5(typescript@5.3.3))':
dependencies:
'@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.5.4))
'@vueuse/shared': 11.0.3(vue@3.5.5(typescript@5.5.4))
vue-demi: 0.14.10(vue@3.5.5(typescript@5.5.4))
'@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.3.3))
'@vueuse/shared': 11.0.3(vue@3.5.5(typescript@5.3.3))
vue-demi: 0.14.10(vue@3.5.5(typescript@5.3.3))
optionalDependencies:
async-validator: 4.2.5
axios: 1.7.7
@ -4046,9 +4051,9 @@ snapshots:
'@vueuse/metadata@11.0.3': {}
'@vueuse/shared@11.0.3(vue@3.5.5(typescript@5.5.4))':
'@vueuse/shared@11.0.3(vue@3.5.5(typescript@5.3.3))':
dependencies:
vue-demi: 0.14.10(vue@3.5.5(typescript@5.5.4))
vue-demi: 0.14.10(vue@3.5.5(typescript@5.3.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@ -4094,10 +4099,10 @@ snapshots:
ansi-styles@6.2.1: {}
ant-design-vue@4.2.4(vue@3.5.5(typescript@5.5.4)):
ant-design-vue@4.2.4(vue@3.5.5(typescript@5.3.3)):
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-vue': 7.0.1(vue@3.5.5(typescript@5.5.4))
'@ant-design/icons-vue': 7.0.1(vue@3.5.5(typescript@5.3.3))
'@babel/runtime': 7.25.6
'@ctrl/tinycolor': 3.6.1
'@emotion/hash': 0.9.2
@ -4116,8 +4121,8 @@ snapshots:
shallow-equal: 1.2.1
stylis: 4.3.4
throttle-debounce: 5.0.2
vue: 3.5.5(typescript@5.5.4)
vue-types: 3.0.2(vue@3.5.5(typescript@5.5.4))
vue: 3.5.5(typescript@5.3.3)
vue-types: 3.0.2(vue@3.5.5(typescript@5.3.3))
warning: 4.0.3
any-promise@1.3.0: {}
@ -4365,14 +4370,14 @@ snapshots:
core-js@3.38.1: {}
cosmiconfig@9.0.0(typescript@5.5.4):
cosmiconfig@9.0.0(typescript@5.3.3):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.0
js-yaml: 4.1.0
parse-json: 5.2.0
optionalDependencies:
typescript: 5.5.4
typescript: 5.3.3
crc-32@1.2.2: {}
@ -4642,9 +4647,9 @@ snapshots:
eslint: 8.57.0
semver: 7.6.3
eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)):
eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)):
dependencies:
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-import-resolver-node@0.3.9:
dependencies:
@ -4654,39 +4659,39 @@ snapshots:
transitivePeerDependencies:
- supports-color
eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0):
eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.3.7
enhanced-resolve: 5.17.1
eslint: 8.57.0
eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
fast-glob: 3.3.2
get-tsconfig: 4.8.1
is-bun-module: 1.2.1
is-glob: 4.0.3
optionalDependencies:
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- supports-color
eslint-module-utils@2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0):
eslint-module-utils@2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0)
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0)
transitivePeerDependencies:
- supports-color
eslint-plugin-antfu@0.43.1(eslint@8.57.0)(typescript@5.5.4):
eslint-plugin-antfu@0.43.1(eslint@8.57.0)(typescript@5.3.3):
dependencies:
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
transitivePeerDependencies:
- eslint
- supports-color
@ -4709,13 +4714,13 @@ snapshots:
dependencies:
htmlparser2: 8.0.2
eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0):
eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0):
dependencies:
debug: 3.2.7
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
get-tsconfig: 4.8.1
is-glob: 4.0.3
minimatch: 3.1.2
@ -4727,7 +4732,7 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@ -4738,7 +4743,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@ -4749,18 +4754,18 @@ snapshots:
semver: 6.3.1
tsconfig-paths: 3.15.0
optionalDependencies:
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4):
eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3):
dependencies:
'@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3)
eslint: 8.57.0
optionalDependencies:
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)
transitivePeerDependencies:
- supports-color
- typescript
@ -4846,12 +4851,12 @@ snapshots:
semver: 7.6.3
strip-indent: 3.0.0
eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0):
eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0):
dependencies:
eslint: 8.57.0
eslint-rule-composer: 0.3.0
optionalDependencies:
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)
eslint-plugin-vue@9.28.0(eslint@8.57.0):
dependencies:
@ -5072,7 +5077,7 @@ snapshots:
glob: 7.2.3
parse5: 6.0.1
pofile: 1.0.11
typescript: 5.5.4
typescript: 5.3.3
github-buttons@2.29.0: {}
@ -5677,17 +5682,17 @@ snapshots:
pify@4.0.1: {}
pinia-plugin-persistedstate@3.2.3(pinia@2.2.2(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4))):
pinia-plugin-persistedstate@3.2.3(pinia@2.2.2(typescript@5.3.3)(vue@3.5.5(typescript@5.3.3))):
dependencies:
pinia: 2.2.2(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4))
pinia: 2.2.2(typescript@5.3.3)(vue@3.5.5(typescript@5.3.3))
pinia@2.2.2(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4)):
pinia@2.2.2(typescript@5.3.3)(vue@3.5.5(typescript@5.3.3)):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.5(typescript@5.5.4)
vue-demi: 0.14.10(vue@3.5.5(typescript@5.5.4))
vue: 3.5.5(typescript@5.3.3)
vue-demi: 0.14.10(vue@3.5.5(typescript@5.3.3))
optionalDependencies:
typescript: 5.5.4
typescript: 5.3.3
pirates@4.0.6: {}
@ -6121,9 +6126,9 @@ snapshots:
dependencies:
is-number: 7.0.0
ts-api-utils@1.3.0(typescript@5.5.4):
ts-api-utils@1.3.0(typescript@5.3.3):
dependencies:
typescript: 5.5.4
typescript: 5.3.3
ts-interface-checker@0.1.13: {}
@ -6138,10 +6143,10 @@ snapshots:
tslib@2.7.0: {}
tsutils@3.21.0(typescript@5.5.4):
tsutils@3.21.0(typescript@5.3.3):
dependencies:
tslib: 1.14.1
typescript: 5.5.4
typescript: 5.3.3
type-check@0.4.0:
dependencies:
@ -6185,6 +6190,8 @@ snapshots:
is-typed-array: 1.1.13
possible-typed-array-names: 1.0.0
typescript@5.3.3: {}
typescript@5.5.4: {}
typical@4.0.0: {}
@ -6228,7 +6235,7 @@ snapshots:
'@types/cookie': 0.6.0
cookie: 0.6.0
unplugin-auto-import@0.18.3(@vueuse/core@11.0.3(vue@3.5.5(typescript@5.5.4)))(rollup@4.21.3)(webpack-sources@3.2.3):
unplugin-auto-import@0.18.3(@vueuse/core@11.0.3(vue@3.5.5(typescript@5.3.3)))(rollup@4.21.3)(webpack-sources@3.2.3):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.0(rollup@4.21.3)
@ -6239,12 +6246,12 @@ snapshots:
unimport: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3)
unplugin: 1.14.1(webpack-sources@3.2.3)
optionalDependencies:
'@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.5.4))
'@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.3.3))
transitivePeerDependencies:
- rollup
- webpack-sources
unplugin-vue-components@0.27.4(@babel/parser@7.25.6)(rollup@4.21.3)(vue@3.5.5(typescript@5.5.4))(webpack-sources@3.2.3):
unplugin-vue-components@0.27.4(@babel/parser@7.25.6)(rollup@4.21.3)(vue@3.5.5(typescript@5.3.3))(webpack-sources@3.2.3):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.0(rollup@4.21.3)
@ -6256,7 +6263,7 @@ snapshots:
minimatch: 9.0.5
mlly: 1.7.1
unplugin: 1.14.1(webpack-sources@3.2.3)
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
optionalDependencies:
'@babel/parser': 7.25.6
transitivePeerDependencies:
@ -6264,9 +6271,9 @@ snapshots:
- supports-color
- webpack-sources
unplugin-vue-define-options@1.5.1(rollup@4.21.3)(vue@3.5.5(typescript@5.5.4))(webpack-sources@3.2.3):
unplugin-vue-define-options@1.5.1(rollup@4.21.3)(vue@3.5.5(typescript@5.3.3))(webpack-sources@3.2.3):
dependencies:
'@vue-macros/common': 1.14.0(rollup@4.21.3)(vue@3.5.5(typescript@5.5.4))
'@vue-macros/common': 1.14.0(rollup@4.21.3)(vue@3.5.5(typescript@5.3.3))
ast-walker-scope: 0.6.2
unplugin: 1.14.1(webpack-sources@3.2.3)
transitivePeerDependencies:
@ -6305,10 +6312,10 @@ snapshots:
node-object-hash: 3.0.0
typescript: 5.5.4
vite-svg-loader@5.1.0(vue@3.5.5(typescript@5.5.4)):
vite-svg-loader@5.1.0(vue@3.5.5(typescript@5.3.3)):
dependencies:
svgo: 3.3.2
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
vite@5.4.5(@types/node@22.5.5)(less@4.2.0):
dependencies:
@ -6322,9 +6329,9 @@ snapshots:
vscode-uri@3.0.8: {}
vue-demi@0.14.10(vue@3.5.5(typescript@5.5.4)):
vue-demi@0.14.10(vue@3.5.5(typescript@5.3.3)):
dependencies:
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
vue-eslint-parser@9.4.3(eslint@8.57.0):
dependencies:
@ -6339,67 +6346,67 @@ snapshots:
transitivePeerDependencies:
- supports-color
vue-router@4.4.5(vue@3.5.5(typescript@5.5.4)):
vue-router@4.4.5(vue@3.5.5(typescript@5.3.3)):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
vue-tsc@2.1.6(typescript@5.5.4):
vue-tsc@2.1.6(typescript@5.3.3):
dependencies:
'@volar/typescript': 2.4.5
'@vue/language-core': 2.1.6(typescript@5.5.4)
'@vue/language-core': 2.1.6(typescript@5.3.3)
semver: 7.6.3
typescript: 5.5.4
typescript: 5.3.3
vue-types@3.0.2(vue@3.5.5(typescript@5.5.4)):
vue-types@3.0.2(vue@3.5.5(typescript@5.3.3)):
dependencies:
is-plain-object: 3.0.1
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
vue3-ace-editor@2.2.4(ace-builds@1.36.2)(vue@3.5.5(typescript@5.5.4)):
vue3-ace-editor@2.2.4(ace-builds@1.36.2)(vue@3.5.5(typescript@5.3.3)):
dependencies:
ace-builds: 1.36.2
resize-observer-polyfill: 1.5.1
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
vue3-apexcharts@1.5.3(apexcharts@3.53.0)(vue@3.5.5(typescript@5.5.4)):
vue3-apexcharts@1.5.3(apexcharts@3.53.0)(vue@3.5.5(typescript@5.3.3)):
dependencies:
apexcharts: 3.53.0
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
vue3-gettext@3.0.0-beta.6(@vue/compiler-sfc@3.5.5)(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4)):
vue3-gettext@3.0.0-beta.6(@vue/compiler-sfc@3.5.5)(typescript@5.3.3)(vue@3.5.5(typescript@5.3.3)):
dependencies:
'@vue/compiler-sfc': 3.5.5
chalk: 4.1.2
command-line-args: 5.2.1
cosmiconfig: 9.0.0(typescript@5.5.4)
cosmiconfig: 9.0.0(typescript@5.3.3)
gettext-extractor: 3.8.0
glob: 10.4.5
parse5: 6.0.1
parse5-htmlparser2-tree-adapter: 6.0.1
pofile: 1.1.4
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
transitivePeerDependencies:
- typescript
vue3-otp-input@0.5.21(vue@3.5.5(typescript@5.5.4)):
vue3-otp-input@0.5.21(vue@3.5.5(typescript@5.3.3)):
dependencies:
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
vue@3.5.5(typescript@5.5.4):
vue@3.5.5(typescript@5.3.3):
dependencies:
'@vue/compiler-dom': 3.5.5
'@vue/compiler-sfc': 3.5.5
'@vue/runtime-dom': 3.5.5
'@vue/server-renderer': 3.5.5(vue@3.5.5(typescript@5.5.4))
'@vue/server-renderer': 3.5.5(vue@3.5.5(typescript@5.3.3))
'@vue/shared': 3.5.5
optionalDependencies:
typescript: 5.5.4
typescript: 5.3.3
vuedraggable@4.1.0(vue@3.5.5(typescript@5.5.4)):
vuedraggable@4.1.0(vue@3.5.5(typescript@5.3.3)):
dependencies:
sortablejs: 1.14.0
vue: 3.5.5(typescript@5.5.4)
vue: 3.5.5(typescript@5.3.3)
warning@4.0.3:
dependencies:

View file

@ -40,7 +40,7 @@ ace.config.setModuleUrl('ace/ext/searchbox', extSearchboxUrl)
/>
</template>
<style scoped>
<style lang="less" scoped>
:deep(.ace_placeholder) {
z-index: 1;
position: relative;

View file

@ -161,6 +161,7 @@ function view(id: number | string) {
get(id).then(() => {
visible.value = true
modifyMode.value = false
editMode.value = 'modify'
}).catch(e => {
message.error($gettext(e?.message ?? 'Server error'), 5)
})

View file

@ -30,7 +30,7 @@ const pageSize = computed({
class="pagination-container"
>
<APagination
v-model:pageSize="pageSize"
v-model:page-size="pageSize"
:disabled="loading"
:current="pagination.current_page"
show-size-changer

View file

@ -13,7 +13,7 @@ msgstr ""
msgid "2FA"
msgstr ""
#: src/views/preference/components/TOTP.vue:90
#: src/views/preference/AuthSettings.vue:58
msgid "2FA Settings"
msgstr ""
@ -37,7 +37,7 @@ msgstr "Username"
#: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
#: src/views/environment/envColumns.tsx:131
#: src/views/notification/notificationColumns.tsx:54
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
#: src/views/preference/AuthSettings.vue:27 src/views/stream/StreamList.vue:47
#: src/views/user/userColumns.tsx:60
msgid "Action"
msgstr "Action"
@ -52,6 +52,11 @@ msgstr "Action"
msgid "Add"
msgstr ""
#: src/views/preference/components/AddPasskey.vue:51
#: src/views/preference/components/AddPasskey.vue:55
msgid "Add a passkey"
msgstr ""
#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
#: src/views/config/ConfigEditor.vue:204
#, fuzzy
@ -90,6 +95,10 @@ msgstr "Add Location"
msgid "Advance Mode"
msgstr "Advance Mode"
#: src/views/preference/components/AddPasskey.vue:105
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/views/preference/OpenAISettings.vue:44
msgid "API Base Url"
msgstr ""
@ -110,11 +119,16 @@ msgstr ""
msgid "Arch"
msgstr ""
#: src/views/preference/AuthSettings.vue:96
#: src/views/preference/AuthSettings.vue:102
#, fuzzy
msgid "Are you sure to delete this banned IP immediately?"
msgstr "Are you sure you want to remove this directive?"
#: src/views/preference/components/Passkey.vue:119
#, fuzzy
msgid "Are you sure to delete this passkey immediately?"
msgstr "Are you sure you want to remove this directive?"
#: src/components/Notification/Notification.vue:86
#: src/views/notification/Notification.vue:40
#, fuzzy
@ -168,7 +182,7 @@ msgstr ""
msgid "Assistant"
msgstr ""
#: src/views/preference/AuthSettings.vue:17
#: src/views/preference/AuthSettings.vue:18
msgid "Attempts"
msgstr ""
@ -176,6 +190,14 @@ msgstr ""
msgid "Auth"
msgstr ""
#: src/components/2FA/Authorization.vue:126
msgid "Authenticate with a passkey"
msgstr ""
#: src/views/preference/AuthSettings.vue:63
msgid "Authentication Settings"
msgstr ""
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
msgid "Author"
@ -209,15 +231,15 @@ msgstr "Back"
msgid "Back to list"
msgstr ""
#: src/views/preference/AuthSettings.vue:70
#: src/views/preference/AuthSettings.vue:76
msgid "Ban Threshold Minutes"
msgstr ""
#: src/views/preference/AuthSettings.vue:84
#: src/views/preference/AuthSettings.vue:90
msgid "Banned IPs"
msgstr ""
#: src/views/preference/AuthSettings.vue:20
#: src/views/preference/AuthSettings.vue:21
msgid "Banned Until"
msgstr ""
@ -259,7 +281,7 @@ msgstr ""
msgid "CADir"
msgstr ""
#: src/views/preference/components/TOTP.vue:150
#: src/views/preference/components/TOTP.vue:151
msgid "Can't scan? Use text key binding"
msgstr ""
@ -273,6 +295,7 @@ msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:50
#: src/views/domain/ngx_conf/NgxServer.vue:80
#: src/views/domain/ngx_conf/NgxUpstream.vue:33
#: src/views/preference/components/Passkey.vue:147
#: src/views/stream/components/Deploy.vue:21
#: src/views/stream/components/RightSettings.vue:51
msgid "Cancel"
@ -435,6 +458,7 @@ msgid "Create Folder"
msgstr "Create Another"
#: src/views/notification/notificationColumns.tsx:48
#: src/views/preference/components/Passkey.vue:101
#: src/views/user/userColumns.tsx:48
msgid "Created at"
msgstr "Created at"
@ -456,12 +480,12 @@ msgstr ""
msgid "Credentials"
msgstr ""
#: src/views/preference/components/TOTP.vue:98
msgid "Current account is enabled 2FA."
#: src/views/preference/components/TOTP.vue:99
msgid "Current account is enabled TOTP."
msgstr ""
#: src/views/preference/components/TOTP.vue:95
msgid "Current account is not enabled 2FA."
#: src/views/preference/components/TOTP.vue:96
msgid "Current account is not enabled TOTP."
msgstr ""
#: src/views/system/Upgrade.vue:167
@ -682,6 +706,12 @@ msgstr ""
msgid "Dry run mode enabled"
msgstr ""
#: src/views/preference/components/AddPasskey.vue:107
msgid ""
"Due to the security policies of some browsers, you cannot use passkeys on "
"non-HTTPS websites, except when running on localhost."
msgstr ""
#: src/views/domain/components/SiteDuplicate.vue:122
#: src/views/domain/DomainList.vue:140
#: src/views/stream/components/StreamDuplicate.vue:122
@ -757,12 +787,7 @@ msgstr ""
msgid "Enable %{conf_name} in %{node_name} successfully"
msgstr ""
#: src/views/preference/components/TOTP.vue:124
#, fuzzy
msgid "Enable 2FA"
msgstr "Enabled"
#: src/views/preference/components/TOTP.vue:54
#: src/views/preference/components/TOTP.vue:55
#, fuzzy
msgid "Enable 2FA successfully"
msgstr "Enabled successfully"
@ -785,6 +810,11 @@ msgstr "Enabled successfully"
msgid "Enable TLS"
msgstr "Enable TLS"
#: src/views/preference/components/TOTP.vue:125
#, fuzzy
msgid "Enable TOTP"
msgstr "Enable TLS"
#: src/views/domain/components/RightSettings.vue:77
#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:29
#: src/views/environment/envColumns.tsx:104
@ -902,6 +932,12 @@ msgstr ""
msgid "Finished"
msgstr "Finished"
#: src/views/preference/components/AddPasskey.vue:77
msgid ""
"Follow the instructions in the dialog to complete the passkey registration "
"process."
msgstr ""
#: src/views/preference/BasicSettings.vue:43
msgid "For Chinese user: https://mirror.ghproxy.com/"
msgstr ""
@ -974,18 +1010,22 @@ msgstr ""
msgid "If left blank, the default CA Dir will be used."
msgstr ""
#: src/views/preference/AuthSettings.vue:62
#: src/views/preference/AuthSettings.vue:68
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:110
#: src/views/preference/components/TOTP.vue:111
msgid ""
"If you lose your mobile phone, you can use the recovery code to reset your "
"2FA."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:76
msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:109
msgid ""
"If your domain has CNAME records and you cannot obtain certificates, you "
@ -1001,7 +1041,7 @@ msgstr ""
msgid "Import Certificate"
msgstr "Certificate Status"
#: src/views/other/Login.vue:76
#: src/views/other/Login.vue:79
msgid "Incorrect username or password"
msgstr ""
@ -1017,12 +1057,12 @@ msgstr ""
msgid "Initialing core upgrader"
msgstr ""
#: src/views/preference/components/TOTP.vue:157
#: src/views/preference/components/TOTP.vue:158
msgid "Input the code from the app:"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:49
#: src/views/preference/components/TOTP.vue:170
#: src/components/2FA/Authorization.vue:87
#: src/views/preference/components/TOTP.vue:171
msgid "Input the recovery code:"
msgstr ""
@ -1044,7 +1084,7 @@ msgstr ""
msgid "Invalid"
msgstr "Invalid E-mail!"
#: src/views/other/Login.vue:86
#: src/views/other/Login.vue:89
msgid "Invalid 2FA or recovery code"
msgstr ""
@ -1058,11 +1098,11 @@ msgstr "Invalid E-mail!"
msgid "Invalid folder name"
msgstr ""
#: src/components/OTP/useOTPModal.ts:61
#: src/components/2FA/use2FAModal.ts:65
msgid "Invalid passcode or recovery code"
msgstr ""
#: src/views/preference/AuthSettings.vue:14
#: src/views/preference/AuthSettings.vue:15
msgid "IP"
msgstr ""
@ -1098,6 +1138,11 @@ msgstr ""
msgid "Last checked at"
msgstr ""
#: src/views/preference/components/Passkey.vue:102
#, fuzzy
msgid "Last used at"
msgstr "Created at"
#: src/views/user/userColumns.tsx:25
msgid "Leave blank for no change"
msgstr "Leave blank for no change"
@ -1163,11 +1208,11 @@ msgstr "Locations"
msgid "Log"
msgstr "Login"
#: src/routes/index.ts:305 src/views/other/Login.vue:207
#: src/routes/index.ts:305 src/views/other/Login.vue:247
msgid "Login"
msgstr "Login"
#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
#: src/views/other/Login.vue:133 src/views/other/Login.vue:66
msgid "Login successful"
msgstr "Login successful"
@ -1221,7 +1266,7 @@ msgstr "Manage Users"
msgid "Managed Certificate"
msgstr "Certificate is valid"
#: src/views/preference/AuthSettings.vue:76
#: src/views/preference/AuthSettings.vue:82
msgid "Max Attempts"
msgstr ""
@ -1281,6 +1326,7 @@ msgstr "Single Directive"
#: src/views/domain/DomainList.vue:13
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
#: src/views/environment/envColumns.tsx:9
#: src/views/preference/components/AddPasskey.vue:81
#: src/views/stream/components/RightSettings.vue:82
#: src/views/stream/components/StreamDuplicate.vue:129
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:188
@ -1367,7 +1413,7 @@ msgstr "Saved successfully"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
#: src/views/domain/ngx_conf/LocationEditor.vue:70
#: src/views/notification/Notification.vue:38
#: src/views/preference/AuthSettings.vue:98
#: src/views/preference/AuthSettings.vue:104
#: src/views/preference/BasicSettings.vue:101
#: src/views/stream/StreamList.vue:165
msgid "No"
@ -1469,6 +1515,10 @@ msgstr ""
msgid "OpenAI"
msgstr ""
#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
msgid "Or"
msgstr ""
#: src/views/config/components/Rename.vue:69
msgid "Original name"
msgstr ""
@ -1498,7 +1548,18 @@ msgstr ""
msgid "Params"
msgstr "Params"
#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
#: src/views/preference/components/Passkey.vue:65
msgid "Passkey"
msgstr ""
#: src/views/preference/components/Passkey.vue:68
msgid ""
"Passkeys are webauthn credentials that validate your identity using touch, "
"facial recognition, a device password, or a PIN. They can be used as a "
"password replacement or as a 2FA method."
msgstr ""
#: src/views/other/Login.vue:208 src/views/user/userColumns.tsx:18
msgid "Password"
msgstr "Password"
@ -1524,8 +1585,14 @@ msgstr ""
msgid "Performing core upgrade"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:37
msgid "Please enter the 2FA code:"
#: src/views/preference/components/AddPasskey.vue:75
msgid ""
"Please enter a name for the passkey you wish to create and click the OK "
"button below."
msgstr ""
#: src/components/2FA/Authorization.vue:75
msgid "Please enter the OTP code:"
msgstr ""
#: src/views/certificate/DNSCredential.vue:53
@ -1566,11 +1633,11 @@ msgstr ""
msgid "Please input your E-mail!"
msgstr "Please input your E-mail!"
#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
msgid "Please input your password!"
msgstr "Please input your password!"
#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
msgid "Please input your username!"
msgstr "Please input your username!"
@ -1634,16 +1701,16 @@ msgstr ""
msgid "Recovered Successfully"
msgstr "Saved successfully"
#: src/components/OTP/OTPAuthorization.vue:56
#: src/views/preference/components/TOTP.vue:177
#: src/components/2FA/Authorization.vue:94
#: src/views/preference/components/TOTP.vue:178
msgid "Recovery"
msgstr ""
#: src/views/preference/components/TOTP.vue:103
#: src/views/preference/components/TOTP.vue:104
msgid "Recovery Code"
msgstr ""
#: src/views/preference/components/TOTP.vue:112
#: src/views/preference/components/TOTP.vue:113
msgid "Recovery Code:"
msgstr ""
@ -1664,6 +1731,11 @@ msgstr ""
msgid "Register failed"
msgstr "Enable failed"
#: src/views/preference/components/AddPasskey.vue:26
#, fuzzy
msgid "Register passkey successfully"
msgstr "Enabled successfully"
#: src/views/certificate/ACMEUser.vue:67
#, fuzzy
msgid "Register successfully"
@ -1699,11 +1771,12 @@ msgstr ""
msgid "Reloading nginx"
msgstr ""
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/AuthSettings.vue:109
msgid "Remove"
msgstr ""
#: src/views/preference/AuthSettings.vue:47
#: src/views/preference/AuthSettings.vue:48
#: src/views/preference/components/Passkey.vue:50
#, fuzzy
msgid "Remove successfully"
msgstr "Saved successfully"
@ -1783,7 +1856,7 @@ msgstr ""
msgid "Reset"
msgstr ""
#: src/views/preference/components/TOTP.vue:132
#: src/views/preference/components/TOTP.vue:133
msgid "Reset 2FA"
msgstr ""
@ -1808,6 +1881,7 @@ msgstr ""
#: src/views/certificate/CertificateEditor.vue:254
#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
#: src/views/preference/components/Passkey.vue:136
#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
msgid "Save"
msgstr "Save"
@ -1836,7 +1910,7 @@ msgstr "Saved successfully"
msgid "Saved successfully"
msgstr "Saved successfully"
#: src/views/preference/components/TOTP.vue:93
#: src/views/preference/components/TOTP.vue:94
msgid "Scan the QR code with your mobile phone to add the account to the app."
msgstr ""
@ -1844,7 +1918,7 @@ msgstr ""
msgid "SDK"
msgstr ""
#: src/views/preference/components/TOTP.vue:149
#: src/views/preference/components/TOTP.vue:150
msgid "Secret has been copied"
msgstr ""
@ -1869,9 +1943,12 @@ msgstr "Send"
#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
#: src/views/environment/BatchUpgrader.vue:57
#: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
#: src/views/preference/AuthSettings.vue:49
#: src/views/preference/components/TOTP.vue:44
#: src/views/preference/components/TOTP.vue:57
#: src/views/preference/AuthSettings.vue:50
#: src/views/preference/components/Passkey.vue:26
#: src/views/preference/components/Passkey.vue:43
#: src/views/preference/components/Passkey.vue:56
#: src/views/preference/components/TOTP.vue:45
#: src/views/preference/components/TOTP.vue:58
#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
msgid "Server error"
@ -1916,6 +1993,10 @@ msgstr ""
msgid "Show"
msgstr ""
#: src/views/other/Login.vue:265
msgid "Sign in with a passkey"
msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:51
msgid "Single Directive"
msgstr "Single Directive"
@ -1949,7 +2030,7 @@ msgstr "Certificate Status"
msgid "SSL Certificate Path"
msgstr "Certificate Status"
#: src/views/other/Login.vue:189
#: src/views/other/Login.vue:223
#, fuzzy
msgid "SSO Login"
msgstr "Login"
@ -2120,7 +2201,7 @@ msgstr "Certificate Status"
msgid "The path exists, but the file is not a private key"
msgstr ""
#: src/views/preference/components/TOTP.vue:111
#: src/views/preference/components/TOTP.vue:112
msgid ""
"The recovery code is only displayed once, please save it in a safe place."
msgstr ""
@ -2184,7 +2265,8 @@ msgid ""
"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
msgstr ""
#: src/views/preference/AuthSettings.vue:61
#: src/views/preference/AuthSettings.vue:67
#: src/views/preference/components/AddPasskey.vue:71
#: src/views/preference/LogrotateSettings.vue:11
msgid "Tips"
msgstr ""
@ -2193,12 +2275,19 @@ msgstr ""
msgid "Title"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
#: src/views/preference/components/TOTP.vue:93
msgid ""
"To enable it, you need to install the Google or Microsoft Authenticator app "
"on your mobile phone."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:95
msgid ""
"To ensure security, Webauthn configuration cannot be added through the UI. "
"Please manually configure the following in the app.ini configuration file "
"and restart Nginx UI."
msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
msgid ""
"To make sure the certification auto-renewal can work normally, we need to "
@ -2211,11 +2300,15 @@ msgstr ""
msgid "Token is not valid"
msgstr ""
#: src/views/other/Login.vue:79
#: src/views/other/Login.vue:82
msgid "Too many login failed attempts, please try again later"
msgstr ""
#: src/views/preference/components/TOTP.vue:91
msgid "TOTP"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
msgid ""
"TOTP is a two-factor authentication method that uses a time-based one-time "
"password algorithm."
@ -2225,7 +2318,7 @@ msgstr ""
msgid "Trash"
msgstr ""
#: src/components/OTP/useOTPModal.ts:67
#: src/components/2FA/use2FAModal.ts:71
msgid "Two-factor authentication required"
msgstr ""
@ -2235,6 +2328,11 @@ msgstr ""
msgid "Type"
msgstr ""
#: src/views/preference/components/Passkey.vue:41
#, fuzzy
msgid "Update successfully"
msgstr "Saved successfully"
#: src/views/certificate/ACMEUser.vue:53
#: src/views/certificate/DNSCredential.vue:27
#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
@ -2281,11 +2379,11 @@ msgstr "Uptime:"
msgid "URL"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:69
#: src/components/2FA/Authorization.vue:107
msgid "Use OTP"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:65
#: src/components/2FA/Authorization.vue:103
msgid "Use recovery code"
msgstr ""
@ -2294,11 +2392,11 @@ msgstr ""
msgid "User"
msgstr "Username"
#: src/views/other/Login.vue:82
#: src/views/other/Login.vue:85
msgid "User is banned"
msgstr ""
#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
#: src/views/other/Login.vue:198 src/views/user/userColumns.tsx:9
msgid "Username"
msgstr "Username"
@ -2338,6 +2436,7 @@ msgstr "Basic Mode"
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
#: src/views/domain/DomainAdd.vue:112
#: src/views/notification/notificationColumns.tsx:19
#: src/views/preference/components/AddPasskey.vue:88
msgid "Warning"
msgstr "Warning"
@ -2368,7 +2467,7 @@ msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
#: src/views/domain/ngx_conf/LocationEditor.vue:69
#: src/views/preference/AuthSettings.vue:97
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/BasicSettings.vue:100
msgid "Yes"
msgstr "Yes"
@ -2381,6 +2480,20 @@ msgstr ""
msgid "You can check Nginx UI upgrade at this page."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:93
msgid ""
"You have not configured the settings of Webauthn, so you cannot add a "
"passkey."
msgstr ""
#: src/views/preference/components/Passkey.vue:81
msgid "Your passkeys"
msgstr ""
#, fuzzy
#~ msgid "Enable 2FA"
#~ msgstr "Enabled"
#, fuzzy
#~ msgid "Rename "
#~ msgstr "Username"

View file

@ -20,7 +20,7 @@ msgstr ""
msgid "2FA"
msgstr "2FA"
#: src/views/preference/components/TOTP.vue:90
#: src/views/preference/AuthSettings.vue:58
msgid "2FA Settings"
msgstr "Configuración de 2FA"
@ -43,7 +43,7 @@ msgstr "Usuario ACME"
#: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
#: src/views/environment/envColumns.tsx:131
#: src/views/notification/notificationColumns.tsx:54
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
#: src/views/preference/AuthSettings.vue:27 src/views/stream/StreamList.vue:47
#: src/views/user/userColumns.tsx:60
msgid "Action"
msgstr "Acción"
@ -58,6 +58,11 @@ msgstr "Acción"
msgid "Add"
msgstr "Agregar"
#: src/views/preference/components/AddPasskey.vue:51
#: src/views/preference/components/AddPasskey.vue:55
msgid "Add a passkey"
msgstr ""
#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
#: src/views/config/ConfigEditor.vue:204
msgid "Add Configuration"
@ -92,6 +97,10 @@ msgstr "Adicional"
msgid "Advance Mode"
msgstr "Modo avanzado"
#: src/views/preference/components/AddPasskey.vue:105
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/views/preference/OpenAISettings.vue:44
msgid "API Base Url"
msgstr "URL Base de la API"
@ -112,10 +121,15 @@ msgstr "Token de la API"
msgid "Arch"
msgstr "Arquitectura"
#: src/views/preference/AuthSettings.vue:96
#: src/views/preference/AuthSettings.vue:102
msgid "Are you sure to delete this banned IP immediately?"
msgstr "¿Está seguro de eliminar esta IP bloqueada inmediatamente?"
#: src/views/preference/components/Passkey.vue:119
#, fuzzy
msgid "Are you sure to delete this passkey immediately?"
msgstr "¿Está seguro de eliminar esta IP bloqueada inmediatamente?"
#: src/components/Notification/Notification.vue:86
#: src/views/notification/Notification.vue:40
msgid "Are you sure you want to clear all notifications?"
@ -161,7 +175,7 @@ msgstr "Preguntar por ayuda a ChatGPT"
msgid "Assistant"
msgstr "Asistente"
#: src/views/preference/AuthSettings.vue:17
#: src/views/preference/AuthSettings.vue:18
msgid "Attempts"
msgstr "Intentos"
@ -169,6 +183,14 @@ msgstr "Intentos"
msgid "Auth"
msgstr "Autenticación"
#: src/components/2FA/Authorization.vue:126
msgid "Authenticate with a passkey"
msgstr ""
#: src/views/preference/AuthSettings.vue:63
msgid "Authentication Settings"
msgstr ""
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
msgid "Author"
@ -201,15 +223,15 @@ msgstr "Volver al Inicio"
msgid "Back to list"
msgstr "Volver a la lista"
#: src/views/preference/AuthSettings.vue:70
#: src/views/preference/AuthSettings.vue:76
msgid "Ban Threshold Minutes"
msgstr "Umbral de Prohibición en Minutos"
#: src/views/preference/AuthSettings.vue:84
#: src/views/preference/AuthSettings.vue:90
msgid "Banned IPs"
msgstr "IPs prohibidas"
#: src/views/preference/AuthSettings.vue:20
#: src/views/preference/AuthSettings.vue:21
msgid "Banned Until"
msgstr "Bloqueado hasta"
@ -249,7 +271,7 @@ msgstr "Dir CA"
msgid "CADir"
msgstr "Directorio CA"
#: src/views/preference/components/TOTP.vue:150
#: src/views/preference/components/TOTP.vue:151
msgid "Can't scan? Use text key binding"
msgstr ""
@ -263,6 +285,7 @@ msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:50
#: src/views/domain/ngx_conf/NgxServer.vue:80
#: src/views/domain/ngx_conf/NgxUpstream.vue:33
#: src/views/preference/components/Passkey.vue:147
#: src/views/stream/components/Deploy.vue:21
#: src/views/stream/components/RightSettings.vue:51
msgid "Cancel"
@ -412,6 +435,7 @@ msgid "Create Folder"
msgstr "Crear carpeta"
#: src/views/notification/notificationColumns.tsx:48
#: src/views/preference/components/Passkey.vue:101
#: src/views/user/userColumns.tsx:48
msgid "Created at"
msgstr "Creado el"
@ -432,13 +456,15 @@ msgstr "Credencial"
msgid "Credentials"
msgstr "Credenciales"
#: src/views/preference/components/TOTP.vue:98
msgid "Current account is enabled 2FA."
#: src/views/preference/components/TOTP.vue:99
#, fuzzy
msgid "Current account is enabled TOTP."
msgstr ""
"La cuenta actual tiene habilitada la autenticación de dos factores (2FA)."
#: src/views/preference/components/TOTP.vue:95
msgid "Current account is not enabled 2FA."
#: src/views/preference/components/TOTP.vue:96
#, fuzzy
msgid "Current account is not enabled TOTP."
msgstr ""
"La cuenta actual no tiene habilitada la autenticación de dos factores (2FA)."
@ -652,6 +678,12 @@ msgstr "Descargando la última versión"
msgid "Dry run mode enabled"
msgstr "Modo de ejecución de prueba habilitado"
#: src/views/preference/components/AddPasskey.vue:107
msgid ""
"Due to the security policies of some browsers, you cannot use passkeys on "
"non-HTTPS websites, except when running on localhost."
msgstr ""
#: src/views/domain/components/SiteDuplicate.vue:122
#: src/views/domain/DomainList.vue:140
#: src/views/stream/components/StreamDuplicate.vue:122
@ -720,11 +752,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:124
msgid "Enable 2FA"
msgstr "Habilitar 2FA"
#: src/views/preference/components/TOTP.vue:54
#: src/views/preference/components/TOTP.vue:55
msgid "Enable 2FA successfully"
msgstr "Habilitar 2FA exitoso"
@ -745,6 +773,11 @@ msgstr "Habilitado con Éxito"
msgid "Enable TLS"
msgstr "Habilitar TLS"
#: src/views/preference/components/TOTP.vue:125
#, fuzzy
msgid "Enable TOTP"
msgstr "Habilitar TLS"
#: src/views/domain/components/RightSettings.vue:77
#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:29
#: src/views/environment/envColumns.tsx:104
@ -859,6 +892,12 @@ msgstr "Filtro"
msgid "Finished"
msgstr "Terminado"
#: src/views/preference/components/AddPasskey.vue:77
msgid ""
"Follow the instructions in the dialog to complete the passkey registration "
"process."
msgstr ""
#: src/views/preference/BasicSettings.vue:43
msgid "For Chinese user: https://mirror.ghproxy.com/"
msgstr "Para usuario chino: https://mirror.ghproxy.com/"
@ -927,7 +966,7 @@ msgstr "HTTP01"
msgid "If left blank, the default CA Dir will be used."
msgstr "Si se deja en blanco, se utilizará el directorio CA predeterminado."
#: src/views/preference/AuthSettings.vue:62
#: src/views/preference/AuthSettings.vue:68
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."
@ -936,7 +975,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:110
#: src/views/preference/components/TOTP.vue:111
msgid ""
"If you lose your mobile phone, you can use the recovery code to reset your "
"2FA."
@ -944,6 +983,10 @@ msgstr ""
"Si pierde su teléfono móvil, puede usar el código de recuperación para "
"restablecer su 2FA."
#: src/views/preference/components/AddPasskey.vue:76
msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:109
msgid ""
"If your domain has CNAME records and you cannot obtain certificates, you "
@ -960,7 +1003,7 @@ msgstr "Importar"
msgid "Import Certificate"
msgstr "Importar Certificado"
#: src/views/other/Login.vue:76
#: src/views/other/Login.vue:79
msgid "Incorrect username or password"
msgstr "Nombre de usuario o contraseña incorrectos"
@ -976,12 +1019,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:157
#: src/views/preference/components/TOTP.vue:158
msgid "Input the code from the app:"
msgstr "Ingrese el código de la aplicación:"
#: src/components/OTP/OTPAuthorization.vue:49
#: src/views/preference/components/TOTP.vue:170
#: src/components/2FA/Authorization.vue:87
#: src/views/preference/components/TOTP.vue:171
msgid "Input the recovery code:"
msgstr "Ingrese el código de recuperación:"
@ -1001,7 +1044,7 @@ msgstr "Intervalo"
msgid "Invalid"
msgstr "Inválido"
#: src/views/other/Login.vue:86
#: src/views/other/Login.vue:89
msgid "Invalid 2FA or recovery code"
msgstr "Código 2FA o de recuperación inválido"
@ -1014,11 +1057,11 @@ msgstr "Nombre de archivo inválido"
msgid "Invalid folder name"
msgstr "Nombre de carpeta inválido"
#: src/components/OTP/useOTPModal.ts:61
#: src/components/2FA/use2FAModal.ts:65
msgid "Invalid passcode or recovery code"
msgstr "Código de acceso o código de recuperación inválido"
#: src/views/preference/AuthSettings.vue:14
#: src/views/preference/AuthSettings.vue:15
msgid "IP"
msgstr "IP"
@ -1051,6 +1094,11 @@ msgstr "Tipo llave"
msgid "Last checked at"
msgstr "Comprobado por última vez el"
#: src/views/preference/components/Passkey.vue:102
#, fuzzy
msgid "Last used at"
msgstr "Comprobado por última vez el"
#: src/views/user/userColumns.tsx:25
msgid "Leave blank for no change"
msgstr "Para no modificar dejar en blanco"
@ -1110,11 +1158,11 @@ msgstr "Ubicaciones"
msgid "Log"
msgstr "Registro"
#: src/routes/index.ts:305 src/views/other/Login.vue:207
#: src/routes/index.ts:305 src/views/other/Login.vue:247
msgid "Login"
msgstr "Acceso"
#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
#: src/views/other/Login.vue:133 src/views/other/Login.vue:66
msgid "Login successful"
msgstr "Acceso exitoso"
@ -1172,7 +1220,7 @@ msgstr "Administrar usuarios"
msgid "Managed Certificate"
msgstr "Certificado Administrado"
#: src/views/preference/AuthSettings.vue:76
#: src/views/preference/AuthSettings.vue:82
msgid "Max Attempts"
msgstr "Intentos máximos"
@ -1227,6 +1275,7 @@ msgstr "Directiva multilínea"
#: src/views/domain/DomainList.vue:13
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
#: src/views/environment/envColumns.tsx:9
#: src/views/preference/components/AddPasskey.vue:81
#: src/views/stream/components/RightSettings.vue:82
#: src/views/stream/components/StreamDuplicate.vue:129
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:188
@ -1308,7 +1357,7 @@ msgstr "Nginx reiniciado con éxito"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
#: src/views/domain/ngx_conf/LocationEditor.vue:70
#: src/views/notification/Notification.vue:38
#: src/views/preference/AuthSettings.vue:98
#: src/views/preference/AuthSettings.vue:104
#: src/views/preference/BasicSettings.vue:101
#: src/views/stream/StreamList.vue:165
msgid "No"
@ -1409,6 +1458,10 @@ msgstr "En línea"
msgid "OpenAI"
msgstr "OpenAI"
#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
msgid "Or"
msgstr ""
#: src/views/config/components/Rename.vue:69
msgid "Original name"
msgstr "Nombre original"
@ -1437,7 +1490,18 @@ msgstr "Sobrescribir archivo existente"
msgid "Params"
msgstr "Parámetros"
#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
#: src/views/preference/components/Passkey.vue:65
msgid "Passkey"
msgstr ""
#: src/views/preference/components/Passkey.vue:68
msgid ""
"Passkeys are webauthn credentials that validate your identity using touch, "
"facial recognition, a device password, or a PIN. They can be used as a "
"password replacement or as a 2FA method."
msgstr ""
#: src/views/other/Login.vue:208 src/views/user/userColumns.tsx:18
msgid "Password"
msgstr "Contraseña"
@ -1463,8 +1527,15 @@ msgstr "Error al ejecutar la actualización del kernel"
msgid "Performing core upgrade"
msgstr "Realizando la actualizaciónd el kernel"
#: src/components/OTP/OTPAuthorization.vue:37
msgid "Please enter the 2FA code:"
#: src/views/preference/components/AddPasskey.vue:75
msgid ""
"Please enter a name for the passkey you wish to create and click the OK "
"button below."
msgstr ""
#: src/components/2FA/Authorization.vue:75
#, fuzzy
msgid "Please enter the OTP code:"
msgstr "Por favor, ingrese el código 2FA:"
#: src/views/certificate/DNSCredential.vue:53
@ -1510,11 +1581,11 @@ msgstr ""
msgid "Please input your E-mail!"
msgstr "¡Por favor ingrese su correo electrónico!"
#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
msgid "Please input your password!"
msgstr "¡Por favor ingrese su contraseña!"
#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
msgid "Please input your username!"
msgstr "¡Por favor ingrese su nombre de usuario!"
@ -1578,16 +1649,16 @@ msgstr "Recuperar"
msgid "Recovered Successfully"
msgstr "Recuperado con éxito"
#: src/components/OTP/OTPAuthorization.vue:56
#: src/views/preference/components/TOTP.vue:177
#: src/components/2FA/Authorization.vue:94
#: src/views/preference/components/TOTP.vue:178
msgid "Recovery"
msgstr "Recuperación"
#: src/views/preference/components/TOTP.vue:103
#: src/views/preference/components/TOTP.vue:104
msgid "Recovery Code"
msgstr "Código de Recuperación"
#: src/views/preference/components/TOTP.vue:112
#: src/views/preference/components/TOTP.vue:113
msgid "Recovery Code:"
msgstr "Código de Recuperación:"
@ -1607,6 +1678,11 @@ msgstr "Registrar"
msgid "Register failed"
msgstr "Fallo en el registro"
#: src/views/preference/components/AddPasskey.vue:26
#, fuzzy
msgid "Register passkey successfully"
msgstr "Registrado con éxito"
#: src/views/certificate/ACMEUser.vue:67
msgid "Register successfully"
msgstr "Registrado con éxito"
@ -1640,11 +1716,12 @@ msgstr "Recargando"
msgid "Reloading nginx"
msgstr "Recargando Nginx"
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/AuthSettings.vue:109
msgid "Remove"
msgstr "Eliminar"
#: src/views/preference/AuthSettings.vue:47
#: src/views/preference/AuthSettings.vue:48
#: src/views/preference/components/Passkey.vue:50
msgid "Remove successfully"
msgstr "Eliminado con éxito"
@ -1714,7 +1791,7 @@ msgstr "Pedido con parámetros incorrectos"
msgid "Reset"
msgstr "Limpiar"
#: src/views/preference/components/TOTP.vue:132
#: src/views/preference/components/TOTP.vue:133
msgid "Reset 2FA"
msgstr "Restablecer 2FA"
@ -1738,6 +1815,7 @@ msgstr "Corriendo"
#: src/views/certificate/CertificateEditor.vue:254
#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
#: src/views/preference/components/Passkey.vue:136
#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
msgid "Save"
msgstr "Guardar"
@ -1765,7 +1843,7 @@ msgstr "Guardado con éxito"
msgid "Saved successfully"
msgstr "Guardado con éxito"
#: src/views/preference/components/TOTP.vue:93
#: src/views/preference/components/TOTP.vue:94
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 "
@ -1775,7 +1853,7 @@ msgstr ""
msgid "SDK"
msgstr "SDK"
#: src/views/preference/components/TOTP.vue:149
#: src/views/preference/components/TOTP.vue:150
msgid "Secret has been copied"
msgstr ""
@ -1800,9 +1878,12 @@ msgstr "Enviado"
#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
#: src/views/environment/BatchUpgrader.vue:57
#: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
#: src/views/preference/AuthSettings.vue:49
#: src/views/preference/components/TOTP.vue:44
#: src/views/preference/components/TOTP.vue:57
#: src/views/preference/AuthSettings.vue:50
#: src/views/preference/components/Passkey.vue:26
#: src/views/preference/components/Passkey.vue:43
#: src/views/preference/components/Passkey.vue:56
#: src/views/preference/components/TOTP.vue:45
#: src/views/preference/components/TOTP.vue:58
#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
msgid "Server error"
@ -1848,6 +1929,10 @@ msgstr "Usando el proveedor de desafíos HTTP01"
msgid "Show"
msgstr "Mostrar"
#: src/views/other/Login.vue:265
msgid "Sign in with a passkey"
msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:51
msgid "Single Directive"
msgstr "Directiva de una sola línea"
@ -1876,7 +1961,7 @@ msgstr "Ruta de la llave del certificado SSL"
msgid "SSL Certificate Path"
msgstr "Ruta del certificado SSL"
#: src/views/other/Login.vue:189
#: src/views/other/Login.vue:223
msgid "SSO Login"
msgstr "Acceso SSO"
@ -2045,7 +2130,7 @@ msgstr "La ruta existe, pero el archivo no es un certificado"
msgid "The path exists, but the file is not a private key"
msgstr "La ruta existe, pero el archivo no es una clave privada"
#: src/views/preference/components/TOTP.vue:111
#: src/views/preference/components/TOTP.vue:112
msgid ""
"The recovery code is only displayed once, please save it in a safe place."
msgstr ""
@ -2117,7 +2202,8 @@ msgstr ""
"Esto actualizará o reinstalará la interfaz de usuario de Nginx en "
"%{nodeNames} a %{version}."
#: src/views/preference/AuthSettings.vue:61
#: src/views/preference/AuthSettings.vue:67
#: src/views/preference/components/AddPasskey.vue:71
#: src/views/preference/LogrotateSettings.vue:11
msgid "Tips"
msgstr "Consejos"
@ -2126,7 +2212,7 @@ msgstr "Consejos"
msgid "Title"
msgstr "Título"
#: src/views/preference/components/TOTP.vue:92
#: src/views/preference/components/TOTP.vue:93
msgid ""
"To enable it, you need to install the Google or Microsoft Authenticator app "
"on your mobile phone."
@ -2134,6 +2220,13 @@ msgstr ""
"Para habilitarlo, necesitas instalar la aplicación Google Authenticator o "
"Microsoft Authenticator en tu teléfono móvil."
#: src/views/preference/components/AddPasskey.vue:95
msgid ""
"To ensure security, Webauthn configuration cannot be added through the UI. "
"Please manually configure the following in the app.ini configuration file "
"and restart Nginx UI."
msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
msgid ""
"To make sure the certification auto-renewal can work normally, we need to "
@ -2150,13 +2243,17 @@ msgstr ""
msgid "Token is not valid"
msgstr "El token no es válido"
#: src/views/other/Login.vue:79
#: src/views/other/Login.vue:82
msgid "Too many login failed attempts, please try again later"
msgstr ""
"Demasiados intentos fallidos de inicio de sesión, por favor intente "
"nuevamente más tarde"
#: src/views/preference/components/TOTP.vue:91
msgid "TOTP"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
msgid ""
"TOTP is a two-factor authentication method that uses a time-based one-time "
"password algorithm."
@ -2168,7 +2265,7 @@ msgstr ""
msgid "Trash"
msgstr "Basura"
#: src/components/OTP/useOTPModal.ts:67
#: src/components/2FA/use2FAModal.ts:71
msgid "Two-factor authentication required"
msgstr "Se requiere autenticación de dos factores"
@ -2178,6 +2275,11 @@ msgstr "Se requiere autenticación de dos factores"
msgid "Type"
msgstr "Tipo"
#: src/views/preference/components/Passkey.vue:41
#, fuzzy
msgid "Update successfully"
msgstr "Actualización exitosa"
#: src/views/certificate/ACMEUser.vue:53
#: src/views/certificate/DNSCredential.vue:27
#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
@ -2221,11 +2323,11 @@ msgstr "Tiempo encendido:"
msgid "URL"
msgstr "URL"
#: src/components/OTP/OTPAuthorization.vue:69
#: src/components/2FA/Authorization.vue:107
msgid "Use OTP"
msgstr "Usar OTP"
#: src/components/OTP/OTPAuthorization.vue:65
#: src/components/2FA/Authorization.vue:103
msgid "Use recovery code"
msgstr "Usar código de recuperación"
@ -2233,11 +2335,11 @@ msgstr "Usar código de recuperación"
msgid "User"
msgstr "Usuario"
#: src/views/other/Login.vue:82
#: src/views/other/Login.vue:85
msgid "User is banned"
msgstr "El usuario está bloqueado"
#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
#: src/views/other/Login.vue:198 src/views/user/userColumns.tsx:9
msgid "Username"
msgstr "Nombre de usuario"
@ -2275,6 +2377,7 @@ msgstr "Modo de vista"
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
#: src/views/domain/DomainAdd.vue:112
#: src/views/notification/notificationColumns.tsx:19
#: src/views/preference/components/AddPasskey.vue:88
msgid "Warning"
msgstr "Advertencia"
@ -2309,7 +2412,7 @@ msgstr "Escribir certificado a disco"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
#: src/views/domain/ngx_conf/LocationEditor.vue:69
#: src/views/preference/AuthSettings.vue:97
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/BasicSettings.vue:100
msgid "Yes"
msgstr "Si"
@ -2322,6 +2425,19 @@ msgstr "Estás usando la última versión"
msgid "You can check Nginx UI upgrade at this page."
msgstr "Puede consultar la actualización de Nginx UI en esta página."
#: src/views/preference/components/AddPasskey.vue:93
msgid ""
"You have not configured the settings of Webauthn, so you cannot add a "
"passkey."
msgstr ""
#: src/views/preference/components/Passkey.vue:81
msgid "Your passkeys"
msgstr ""
#~ msgid "Enable 2FA"
#~ msgstr "Habilitar 2FA"
#, fuzzy
#~ msgid "Rename "
#~ msgstr "Renombrar"

View file

@ -15,7 +15,7 @@ msgstr ""
msgid "2FA"
msgstr ""
#: src/views/preference/components/TOTP.vue:90
#: src/views/preference/AuthSettings.vue:58
msgid "2FA Settings"
msgstr ""
@ -39,7 +39,7 @@ msgstr "Nom d'utilisateur"
#: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
#: src/views/environment/envColumns.tsx:131
#: src/views/notification/notificationColumns.tsx:54
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
#: src/views/preference/AuthSettings.vue:27 src/views/stream/StreamList.vue:47
#: src/views/user/userColumns.tsx:60
msgid "Action"
msgstr "Action"
@ -54,6 +54,11 @@ msgstr "Action"
msgid "Add"
msgstr "Ajouter"
#: src/views/preference/components/AddPasskey.vue:51
#: src/views/preference/components/AddPasskey.vue:55
msgid "Add a passkey"
msgstr ""
#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
#: src/views/config/ConfigEditor.vue:204
#, fuzzy
@ -92,6 +97,10 @@ msgstr "Supplémentaire"
msgid "Advance Mode"
msgstr "Mode avancé"
#: src/views/preference/components/AddPasskey.vue:105
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/views/preference/OpenAISettings.vue:44
msgid "API Base Url"
msgstr "URL de base de l'API"
@ -114,11 +123,16 @@ msgstr "Jeton d'API"
msgid "Arch"
msgstr "Arch"
#: src/views/preference/AuthSettings.vue:96
#: src/views/preference/AuthSettings.vue:102
#, fuzzy
msgid "Are you sure to delete this banned IP immediately?"
msgstr "Etes-vous sûr que vous voulez supprimer ?"
#: src/views/preference/components/Passkey.vue:119
#, fuzzy
msgid "Are you sure to delete this passkey immediately?"
msgstr "Etes-vous sûr que vous voulez supprimer ?"
#: src/components/Notification/Notification.vue:86
#: src/views/notification/Notification.vue:40
#, fuzzy
@ -170,7 +184,7 @@ msgstr "Modèle ChatGPT"
msgid "Assistant"
msgstr ""
#: src/views/preference/AuthSettings.vue:17
#: src/views/preference/AuthSettings.vue:18
msgid "Attempts"
msgstr ""
@ -179,6 +193,14 @@ msgstr ""
msgid "Auth"
msgstr "Autheur"
#: src/components/2FA/Authorization.vue:126
msgid "Authenticate with a passkey"
msgstr ""
#: src/views/preference/AuthSettings.vue:63
msgid "Authentication Settings"
msgstr ""
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
msgid "Author"
@ -211,15 +233,15 @@ msgstr "Retour au menu principal"
msgid "Back to list"
msgstr ""
#: src/views/preference/AuthSettings.vue:70
#: src/views/preference/AuthSettings.vue:76
msgid "Ban Threshold Minutes"
msgstr ""
#: src/views/preference/AuthSettings.vue:84
#: src/views/preference/AuthSettings.vue:90
msgid "Banned IPs"
msgstr ""
#: src/views/preference/AuthSettings.vue:20
#: src/views/preference/AuthSettings.vue:21
msgid "Banned Until"
msgstr ""
@ -261,7 +283,7 @@ msgstr ""
msgid "CADir"
msgstr ""
#: src/views/preference/components/TOTP.vue:150
#: src/views/preference/components/TOTP.vue:151
msgid "Can't scan? Use text key binding"
msgstr ""
@ -275,6 +297,7 @@ msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:50
#: src/views/domain/ngx_conf/NgxServer.vue:80
#: src/views/domain/ngx_conf/NgxUpstream.vue:33
#: src/views/preference/components/Passkey.vue:147
#: src/views/stream/components/Deploy.vue:21
#: src/views/stream/components/RightSettings.vue:51
msgid "Cancel"
@ -435,6 +458,7 @@ msgid "Create Folder"
msgstr "Créer un autre"
#: src/views/notification/notificationColumns.tsx:48
#: src/views/preference/components/Passkey.vue:101
#: src/views/user/userColumns.tsx:48
msgid "Created at"
msgstr "Créé le"
@ -456,12 +480,12 @@ msgstr "Identifiant"
msgid "Credentials"
msgstr "Identifiants"
#: src/views/preference/components/TOTP.vue:98
msgid "Current account is enabled 2FA."
#: src/views/preference/components/TOTP.vue:99
msgid "Current account is enabled TOTP."
msgstr ""
#: src/views/preference/components/TOTP.vue:95
msgid "Current account is not enabled 2FA."
#: src/views/preference/components/TOTP.vue:96
msgid "Current account is not enabled TOTP."
msgstr ""
#: src/views/system/Upgrade.vue:167
@ -682,6 +706,12 @@ msgstr "Téléchargement de la dernière version"
msgid "Dry run mode enabled"
msgstr ""
#: src/views/preference/components/AddPasskey.vue:107
msgid ""
"Due to the security policies of some browsers, you cannot use passkeys on "
"non-HTTPS websites, except when running on localhost."
msgstr ""
#: src/views/domain/components/SiteDuplicate.vue:122
#: src/views/domain/DomainList.vue:140
#: src/views/stream/components/StreamDuplicate.vue:122
@ -757,12 +787,7 @@ msgstr ""
msgid "Enable %{conf_name} in %{node_name} successfully"
msgstr ""
#: src/views/preference/components/TOTP.vue:124
#, fuzzy
msgid "Enable 2FA"
msgstr "Activé"
#: src/views/preference/components/TOTP.vue:54
#: src/views/preference/components/TOTP.vue:55
#, fuzzy
msgid "Enable 2FA successfully"
msgstr "Activé avec succès"
@ -785,6 +810,11 @@ msgstr "Activé avec succès"
msgid "Enable TLS"
msgstr "Activer TLS"
#: src/views/preference/components/TOTP.vue:125
#, fuzzy
msgid "Enable TOTP"
msgstr "Activer TLS"
#: src/views/domain/components/RightSettings.vue:77
#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:29
#: src/views/environment/envColumns.tsx:104
@ -905,6 +935,12 @@ msgstr "Filtrer"
msgid "Finished"
msgstr "Finie"
#: src/views/preference/components/AddPasskey.vue:77
msgid ""
"Follow the instructions in the dialog to complete the passkey registration "
"process."
msgstr ""
#: src/views/preference/BasicSettings.vue:43
#, fuzzy
msgid "For Chinese user: https://mirror.ghproxy.com/"
@ -975,18 +1011,22 @@ msgstr "HTTP01"
msgid "If left blank, the default CA Dir will be used."
msgstr ""
#: src/views/preference/AuthSettings.vue:62
#: src/views/preference/AuthSettings.vue:68
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:110
#: src/views/preference/components/TOTP.vue:111
msgid ""
"If you lose your mobile phone, you can use the recovery code to reset your "
"2FA."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:76
msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:109
msgid ""
"If your domain has CNAME records and you cannot obtain certificates, you "
@ -1003,7 +1043,7 @@ msgstr "Exporter"
msgid "Import Certificate"
msgstr "État du certificat"
#: src/views/other/Login.vue:76
#: src/views/other/Login.vue:79
#, fuzzy
msgid "Incorrect username or password"
msgstr "Le pseudo ou mot de passe est incorect"
@ -1020,12 +1060,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:157
#: src/views/preference/components/TOTP.vue:158
msgid "Input the code from the app:"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:49
#: src/views/preference/components/TOTP.vue:170
#: src/components/2FA/Authorization.vue:87
#: src/views/preference/components/TOTP.vue:171
msgid "Input the recovery code:"
msgstr ""
@ -1045,7 +1085,7 @@ msgstr ""
msgid "Invalid"
msgstr ""
#: src/views/other/Login.vue:86
#: src/views/other/Login.vue:89
msgid "Invalid 2FA or recovery code"
msgstr ""
@ -1058,11 +1098,11 @@ msgstr ""
msgid "Invalid folder name"
msgstr ""
#: src/components/OTP/useOTPModal.ts:61
#: src/components/2FA/use2FAModal.ts:65
msgid "Invalid passcode or recovery code"
msgstr ""
#: src/views/preference/AuthSettings.vue:14
#: src/views/preference/AuthSettings.vue:15
msgid "IP"
msgstr ""
@ -1098,6 +1138,11 @@ msgstr "Type"
msgid "Last checked at"
msgstr "Dernière vérification le"
#: src/views/preference/components/Passkey.vue:102
#, fuzzy
msgid "Last used at"
msgstr "Dernière vérification le"
#: src/views/user/userColumns.tsx:25
msgid "Leave blank for no change"
msgstr "Laisser vide pour aucun changement"
@ -1165,11 +1210,11 @@ msgstr "Localisations"
msgid "Log"
msgstr "Connexion"
#: src/routes/index.ts:305 src/views/other/Login.vue:207
#: src/routes/index.ts:305 src/views/other/Login.vue:247
msgid "Login"
msgstr "Connexion"
#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
#: src/views/other/Login.vue:133 src/views/other/Login.vue:66
msgid "Login successful"
msgstr "Connexion réussie"
@ -1223,7 +1268,7 @@ msgstr "Gérer les utilisateurs"
msgid "Managed Certificate"
msgstr "Changer de certificat"
#: src/views/preference/AuthSettings.vue:76
#: src/views/preference/AuthSettings.vue:82
msgid "Max Attempts"
msgstr ""
@ -1281,6 +1326,7 @@ msgstr "Directive multiligne"
#: src/views/domain/DomainList.vue:13
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
#: src/views/environment/envColumns.tsx:9
#: src/views/preference/components/AddPasskey.vue:81
#: src/views/stream/components/RightSettings.vue:82
#: src/views/stream/components/StreamDuplicate.vue:129
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:188
@ -1365,7 +1411,7 @@ msgstr "Nginx a redémarré avec succès"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
#: src/views/domain/ngx_conf/LocationEditor.vue:70
#: src/views/notification/Notification.vue:38
#: src/views/preference/AuthSettings.vue:98
#: src/views/preference/AuthSettings.vue:104
#: src/views/preference/BasicSettings.vue:101
#: src/views/stream/StreamList.vue:165
msgid "No"
@ -1467,6 +1513,10 @@ msgstr ""
msgid "OpenAI"
msgstr "OpenAI"
#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
msgid "Or"
msgstr ""
#: src/views/config/components/Rename.vue:69
msgid "Original name"
msgstr ""
@ -1495,7 +1545,18 @@ msgstr ""
msgid "Params"
msgstr "Paramètres"
#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
#: src/views/preference/components/Passkey.vue:65
msgid "Passkey"
msgstr ""
#: src/views/preference/components/Passkey.vue:68
msgid ""
"Passkeys are webauthn credentials that validate your identity using touch, "
"facial recognition, a device password, or a PIN. They can be used as a "
"password replacement or as a 2FA method."
msgstr ""
#: src/views/other/Login.vue:208 src/views/user/userColumns.tsx:18
msgid "Password"
msgstr "Mot de passe"
@ -1521,8 +1582,14 @@ msgstr "Erreur lors de la mise a niveau du core"
msgid "Performing core upgrade"
msgstr "Exécution de la mise à niveau du core"
#: src/components/OTP/OTPAuthorization.vue:37
msgid "Please enter the 2FA code:"
#: src/views/preference/components/AddPasskey.vue:75
msgid ""
"Please enter a name for the passkey you wish to create and click the OK "
"button below."
msgstr ""
#: src/components/2FA/Authorization.vue:75
msgid "Please enter the OTP code:"
msgstr ""
#: src/views/certificate/DNSCredential.vue:53
@ -1570,11 +1637,11 @@ msgstr ""
msgid "Please input your E-mail!"
msgstr "Veuillez saisir votre e-mail !"
#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
msgid "Please input your password!"
msgstr "Veuillez saisir votre mot de passe !"
#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
msgid "Please input your username!"
msgstr "Veuillez saisir votre nom d'utilisateur !"
@ -1640,16 +1707,16 @@ msgstr ""
msgid "Recovered Successfully"
msgstr "Enregistré avec succès"
#: src/components/OTP/OTPAuthorization.vue:56
#: src/views/preference/components/TOTP.vue:177
#: src/components/2FA/Authorization.vue:94
#: src/views/preference/components/TOTP.vue:178
msgid "Recovery"
msgstr ""
#: src/views/preference/components/TOTP.vue:103
#: src/views/preference/components/TOTP.vue:104
msgid "Recovery Code"
msgstr ""
#: src/views/preference/components/TOTP.vue:112
#: src/views/preference/components/TOTP.vue:113
msgid "Recovery Code:"
msgstr ""
@ -1671,6 +1738,11 @@ msgstr "Enregistrement de l'utilisateur"
msgid "Register failed"
msgstr "Enregistrement de l'utilisateur"
#: src/views/preference/components/AddPasskey.vue:26
#, fuzzy
msgid "Register passkey successfully"
msgstr "Activé avec succès"
#: src/views/certificate/ACMEUser.vue:67
#, fuzzy
msgid "Register successfully"
@ -1706,11 +1778,12 @@ msgstr "Rechargement"
msgid "Reloading nginx"
msgstr "Rechargement de nginx"
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/AuthSettings.vue:109
msgid "Remove"
msgstr ""
#: src/views/preference/AuthSettings.vue:47
#: src/views/preference/AuthSettings.vue:48
#: src/views/preference/components/Passkey.vue:50
#, fuzzy
msgid "Remove successfully"
msgstr "Enregistré avec succès"
@ -1790,7 +1863,7 @@ msgstr ""
msgid "Reset"
msgstr "Réinitialiser"
#: src/views/preference/components/TOTP.vue:132
#: src/views/preference/components/TOTP.vue:133
#, fuzzy
msgid "Reset 2FA"
msgstr "Réinitialiser"
@ -1815,6 +1888,7 @@ msgstr "En cours d'éxécution"
#: src/views/certificate/CertificateEditor.vue:254
#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
#: src/views/preference/components/Passkey.vue:136
#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
msgid "Save"
msgstr "Enregistrer"
@ -1842,7 +1916,7 @@ msgstr "Sauvegarde réussie"
msgid "Saved successfully"
msgstr "Enregistré avec succès"
#: src/views/preference/components/TOTP.vue:93
#: src/views/preference/components/TOTP.vue:94
msgid "Scan the QR code with your mobile phone to add the account to the app."
msgstr ""
@ -1850,7 +1924,7 @@ msgstr ""
msgid "SDK"
msgstr ""
#: src/views/preference/components/TOTP.vue:149
#: src/views/preference/components/TOTP.vue:150
msgid "Secret has been copied"
msgstr ""
@ -1875,9 +1949,12 @@ msgstr "Envoyer"
#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
#: src/views/environment/BatchUpgrader.vue:57
#: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
#: src/views/preference/AuthSettings.vue:49
#: src/views/preference/components/TOTP.vue:44
#: src/views/preference/components/TOTP.vue:57
#: src/views/preference/AuthSettings.vue:50
#: src/views/preference/components/Passkey.vue:26
#: src/views/preference/components/Passkey.vue:43
#: src/views/preference/components/Passkey.vue:56
#: src/views/preference/components/TOTP.vue:45
#: src/views/preference/components/TOTP.vue:58
#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
msgid "Server error"
@ -1924,6 +2001,10 @@ msgstr "Utilisation du fournisseur de challenge HTTP01"
msgid "Show"
msgstr ""
#: src/views/other/Login.vue:265
msgid "Sign in with a passkey"
msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:51
msgid "Single Directive"
msgstr "Directive unique"
@ -1954,7 +2035,7 @@ msgstr "Chemin de la clé du certificat SSL"
msgid "SSL Certificate Path"
msgstr "Chemin du certificat SSL"
#: src/views/other/Login.vue:189
#: src/views/other/Login.vue:223
#, fuzzy
msgid "SSO Login"
msgstr "Connexion"
@ -2126,7 +2207,7 @@ msgstr "Chemin de la clé du certificat SSL"
msgid "The path exists, but the file is not a private key"
msgstr ""
#: src/views/preference/components/TOTP.vue:111
#: src/views/preference/components/TOTP.vue:112
msgid ""
"The recovery code is only displayed once, please save it in a safe place."
msgstr ""
@ -2194,7 +2275,8 @@ msgid ""
"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
msgstr ""
#: src/views/preference/AuthSettings.vue:61
#: src/views/preference/AuthSettings.vue:67
#: src/views/preference/components/AddPasskey.vue:71
#: src/views/preference/LogrotateSettings.vue:11
msgid "Tips"
msgstr ""
@ -2203,12 +2285,19 @@ msgstr ""
msgid "Title"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
#: src/views/preference/components/TOTP.vue:93
msgid ""
"To enable it, you need to install the Google or Microsoft Authenticator app "
"on your mobile phone."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:95
msgid ""
"To ensure security, Webauthn configuration cannot be added through the UI. "
"Please manually configure the following in the app.ini configuration file "
"and restart Nginx UI."
msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
msgid ""
"To make sure the certification auto-renewal can work normally, we need to "
@ -2225,11 +2314,15 @@ msgstr ""
msgid "Token is not valid"
msgstr ""
#: src/views/other/Login.vue:79
#: src/views/other/Login.vue:82
msgid "Too many login failed attempts, please try again later"
msgstr ""
#: src/views/preference/components/TOTP.vue:91
msgid "TOTP"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
msgid ""
"TOTP is a two-factor authentication method that uses a time-based one-time "
"password algorithm."
@ -2239,7 +2332,7 @@ msgstr ""
msgid "Trash"
msgstr ""
#: src/components/OTP/useOTPModal.ts:67
#: src/components/2FA/use2FAModal.ts:71
msgid "Two-factor authentication required"
msgstr ""
@ -2249,6 +2342,11 @@ msgstr ""
msgid "Type"
msgstr "Type"
#: src/views/preference/components/Passkey.vue:41
#, fuzzy
msgid "Update successfully"
msgstr "Mis à jour avec succés"
#: src/views/certificate/ACMEUser.vue:53
#: src/views/certificate/DNSCredential.vue:27
#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
@ -2293,11 +2391,11 @@ msgstr "Disponibilité :"
msgid "URL"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:69
#: src/components/2FA/Authorization.vue:107
msgid "Use OTP"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:65
#: src/components/2FA/Authorization.vue:103
msgid "Use recovery code"
msgstr ""
@ -2306,11 +2404,11 @@ msgstr ""
msgid "User"
msgstr "Nom d'utilisateur"
#: src/views/other/Login.vue:82
#: src/views/other/Login.vue:85
msgid "User is banned"
msgstr ""
#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
#: src/views/other/Login.vue:198 src/views/user/userColumns.tsx:9
msgid "Username"
msgstr "Nom d'utilisateur"
@ -2351,6 +2449,7 @@ msgstr "Mode simple"
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
#: src/views/domain/DomainAdd.vue:112
#: src/views/notification/notificationColumns.tsx:19
#: src/views/preference/components/AddPasskey.vue:88
msgid "Warning"
msgstr "Avertissement"
@ -2383,7 +2482,7 @@ msgstr "Écriture du certificat sur le disque"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
#: src/views/domain/ngx_conf/LocationEditor.vue:69
#: src/views/preference/AuthSettings.vue:97
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/BasicSettings.vue:100
msgid "Yes"
msgstr "Oui"
@ -2396,6 +2495,20 @@ msgstr "Vous utilisez la dernière version"
msgid "You can check Nginx UI upgrade at this page."
msgstr "Vous pouvez vérifier la mise à niveau de Nginx UI sur cette page."
#: src/views/preference/components/AddPasskey.vue:93
msgid ""
"You have not configured the settings of Webauthn, so you cannot add a "
"passkey."
msgstr ""
#: src/views/preference/components/Passkey.vue:81
msgid "Your passkeys"
msgstr ""
#, fuzzy
#~ msgid "Enable 2FA"
#~ msgstr "Activé"
#, fuzzy
#~ msgid "Rename "
#~ msgstr "Nom d'utilisateur"

View file

@ -18,7 +18,7 @@ msgstr ""
msgid "2FA"
msgstr "2FA"
#: src/views/preference/components/TOTP.vue:90
#: src/views/preference/AuthSettings.vue:58
msgid "2FA Settings"
msgstr "2FA 설정"
@ -41,7 +41,7 @@ msgstr "ACME 사용자"
#: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
#: src/views/environment/envColumns.tsx:131
#: src/views/notification/notificationColumns.tsx:54
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
#: src/views/preference/AuthSettings.vue:27 src/views/stream/StreamList.vue:47
#: src/views/user/userColumns.tsx:60
msgid "Action"
msgstr "작업"
@ -56,6 +56,11 @@ msgstr "작업"
msgid "Add"
msgstr "추가"
#: src/views/preference/components/AddPasskey.vue:51
#: src/views/preference/components/AddPasskey.vue:55
msgid "Add a passkey"
msgstr ""
#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
#: src/views/config/ConfigEditor.vue:204
msgid "Add Configuration"
@ -90,6 +95,10 @@ msgstr "추가적인"
msgid "Advance Mode"
msgstr "고급 모드"
#: src/views/preference/components/AddPasskey.vue:105
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/views/preference/OpenAISettings.vue:44
msgid "API Base Url"
msgstr "API 기본 URL"
@ -110,10 +119,15 @@ msgstr "API 토큰"
msgid "Arch"
msgstr "아키텍처"
#: src/views/preference/AuthSettings.vue:96
#: src/views/preference/AuthSettings.vue:102
msgid "Are you sure to delete this banned IP immediately?"
msgstr "차단된 IP를 즉시 삭제하시겠습니까?"
#: src/views/preference/components/Passkey.vue:119
#, fuzzy
msgid "Are you sure to delete this passkey immediately?"
msgstr "차단된 IP를 즉시 삭제하시겠습니까?"
#: src/components/Notification/Notification.vue:86
#: src/views/notification/Notification.vue:40
msgid "Are you sure you want to clear all notifications?"
@ -159,7 +173,7 @@ msgstr "ChatGPT에게 도움 요청"
msgid "Assistant"
msgstr "조수"
#: src/views/preference/AuthSettings.vue:17
#: src/views/preference/AuthSettings.vue:18
msgid "Attempts"
msgstr "시도 횟수"
@ -167,6 +181,14 @@ msgstr "시도 횟수"
msgid "Auth"
msgstr "인증"
#: src/components/2FA/Authorization.vue:126
msgid "Authenticate with a passkey"
msgstr ""
#: src/views/preference/AuthSettings.vue:63
msgid "Authentication Settings"
msgstr ""
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
msgid "Author"
@ -199,15 +221,15 @@ msgstr "홈으로"
msgid "Back to list"
msgstr "목록으로 돌아가기"
#: src/views/preference/AuthSettings.vue:70
#: src/views/preference/AuthSettings.vue:76
msgid "Ban Threshold Minutes"
msgstr "차단 시간(분)"
#: src/views/preference/AuthSettings.vue:84
#: src/views/preference/AuthSettings.vue:90
msgid "Banned IPs"
msgstr "차단된 IP"
#: src/views/preference/AuthSettings.vue:20
#: src/views/preference/AuthSettings.vue:21
msgid "Banned Until"
msgstr "차단될 시간"
@ -247,7 +269,7 @@ msgstr "CA 디렉토리"
msgid "CADir"
msgstr "CA 디렉토리"
#: src/views/preference/components/TOTP.vue:150
#: src/views/preference/components/TOTP.vue:151
msgid "Can't scan? Use text key binding"
msgstr ""
@ -261,6 +283,7 @@ msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:50
#: src/views/domain/ngx_conf/NgxServer.vue:80
#: src/views/domain/ngx_conf/NgxUpstream.vue:33
#: src/views/preference/components/Passkey.vue:147
#: src/views/stream/components/Deploy.vue:21
#: src/views/stream/components/RightSettings.vue:51
msgid "Cancel"
@ -414,6 +437,7 @@ msgid "Create Folder"
msgstr "다른 것 생성하기"
#: src/views/notification/notificationColumns.tsx:48
#: src/views/preference/components/Passkey.vue:101
#: src/views/user/userColumns.tsx:48
msgid "Created at"
msgstr "생성 시간"
@ -435,12 +459,12 @@ msgstr "인증 정보"
msgid "Credentials"
msgstr "인증 정보들"
#: src/views/preference/components/TOTP.vue:98
msgid "Current account is enabled 2FA."
#: src/views/preference/components/TOTP.vue:99
msgid "Current account is enabled TOTP."
msgstr ""
#: src/views/preference/components/TOTP.vue:95
msgid "Current account is not enabled 2FA."
#: src/views/preference/components/TOTP.vue:96
msgid "Current account is not enabled TOTP."
msgstr ""
#: src/views/system/Upgrade.vue:167
@ -650,6 +674,12 @@ msgstr "최신 릴리스 다운로드 중"
msgid "Dry run mode enabled"
msgstr "드라이런 모드 활성화됨"
#: src/views/preference/components/AddPasskey.vue:107
msgid ""
"Due to the security policies of some browsers, you cannot use passkeys on "
"non-HTTPS websites, except when running on localhost."
msgstr ""
#: src/views/domain/components/SiteDuplicate.vue:122
#: src/views/domain/DomainList.vue:140
#: src/views/stream/components/StreamDuplicate.vue:122
@ -720,12 +750,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:124
#, fuzzy
msgid "Enable 2FA"
msgstr "활성화"
#: src/views/preference/components/TOTP.vue:54
#: src/views/preference/components/TOTP.vue:55
#, fuzzy
msgid "Enable 2FA successfully"
msgstr "성공적으로 활성화"
@ -747,6 +772,11 @@ msgstr "성공적으로 활성화"
msgid "Enable TLS"
msgstr "TLS 활성화"
#: src/views/preference/components/TOTP.vue:125
#, fuzzy
msgid "Enable TOTP"
msgstr "TLS 활성화"
#: src/views/domain/components/RightSettings.vue:77
#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:29
#: src/views/environment/envColumns.tsx:104
@ -864,6 +894,12 @@ msgstr "필터"
msgid "Finished"
msgstr "완료됨"
#: src/views/preference/components/AddPasskey.vue:77
msgid ""
"Follow the instructions in the dialog to complete the passkey registration "
"process."
msgstr ""
#: src/views/preference/BasicSettings.vue:43
msgid "For Chinese user: https://mirror.ghproxy.com/"
msgstr "중국 사용자를 위해: https://mirror.ghproxy.com/"
@ -936,18 +972,22 @@ msgstr "HTTP01"
msgid "If left blank, the default CA Dir will be used."
msgstr ""
#: src/views/preference/AuthSettings.vue:62
#: src/views/preference/AuthSettings.vue:68
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:110
#: src/views/preference/components/TOTP.vue:111
msgid ""
"If you lose your mobile phone, you can use the recovery code to reset your "
"2FA."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:76
msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:109
msgid ""
"If your domain has CNAME records and you cannot obtain certificates, you "
@ -963,7 +1003,7 @@ msgstr "가져오기"
msgid "Import Certificate"
msgstr "인증서 상태"
#: src/views/other/Login.vue:76
#: src/views/other/Login.vue:79
#, fuzzy
msgid "Incorrect username or password"
msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다"
@ -980,12 +1020,12 @@ msgstr "초기 코어 업그레이더 오류"
msgid "Initialing core upgrader"
msgstr "코어 업그레이더 초기화"
#: src/views/preference/components/TOTP.vue:157
#: src/views/preference/components/TOTP.vue:158
msgid "Input the code from the app:"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:49
#: src/views/preference/components/TOTP.vue:170
#: src/components/2FA/Authorization.vue:87
#: src/views/preference/components/TOTP.vue:171
msgid "Input the recovery code:"
msgstr ""
@ -1007,7 +1047,7 @@ msgstr "간격"
msgid "Invalid"
msgstr "유효함"
#: src/views/other/Login.vue:86
#: src/views/other/Login.vue:89
msgid "Invalid 2FA or recovery code"
msgstr ""
@ -1021,11 +1061,11 @@ msgstr "Invalid E-mail!"
msgid "Invalid folder name"
msgstr ""
#: src/components/OTP/useOTPModal.ts:61
#: src/components/2FA/use2FAModal.ts:65
msgid "Invalid passcode or recovery code"
msgstr ""
#: src/views/preference/AuthSettings.vue:14
#: src/views/preference/AuthSettings.vue:15
msgid "IP"
msgstr ""
@ -1061,6 +1101,11 @@ msgstr "키 유형"
msgid "Last checked at"
msgstr "마지막 확인 시간"
#: src/views/preference/components/Passkey.vue:102
#, fuzzy
msgid "Last used at"
msgstr "마지막 확인 시간"
#: src/views/user/userColumns.tsx:25
msgid "Leave blank for no change"
msgstr "변경사항이 없으면 비워두세요"
@ -1126,11 +1171,11 @@ msgstr "위치들"
msgid "Log"
msgstr "로그인"
#: src/routes/index.ts:305 src/views/other/Login.vue:207
#: src/routes/index.ts:305 src/views/other/Login.vue:247
msgid "Login"
msgstr "로그인"
#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
#: src/views/other/Login.vue:133 src/views/other/Login.vue:66
msgid "Login successful"
msgstr "로그인 성공"
@ -1189,7 +1234,7 @@ msgstr "사용자 관리"
msgid "Managed Certificate"
msgstr "인증서 유효"
#: src/views/preference/AuthSettings.vue:76
#: src/views/preference/AuthSettings.vue:82
msgid "Max Attempts"
msgstr ""
@ -1249,6 +1294,7 @@ msgstr "단일 지시문"
#: src/views/domain/DomainList.vue:13
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
#: src/views/environment/envColumns.tsx:9
#: src/views/preference/components/AddPasskey.vue:81
#: src/views/stream/components/RightSettings.vue:82
#: src/views/stream/components/StreamDuplicate.vue:129
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:188
@ -1335,7 +1381,7 @@ msgstr "Nginx가 성공적으로 재시작됨"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
#: src/views/domain/ngx_conf/LocationEditor.vue:70
#: src/views/notification/Notification.vue:38
#: src/views/preference/AuthSettings.vue:98
#: src/views/preference/AuthSettings.vue:104
#: src/views/preference/BasicSettings.vue:101
#: src/views/stream/StreamList.vue:165
msgid "No"
@ -1437,6 +1483,10 @@ msgstr "온라인"
msgid "OpenAI"
msgstr "오픈AI"
#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
msgid "Or"
msgstr ""
#: src/views/config/components/Rename.vue:69
msgid "Original name"
msgstr ""
@ -1466,7 +1516,18 @@ msgstr "기존 파일 덮어쓰기"
msgid "Params"
msgstr "파라미터"
#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
#: src/views/preference/components/Passkey.vue:65
msgid "Passkey"
msgstr ""
#: src/views/preference/components/Passkey.vue:68
msgid ""
"Passkeys are webauthn credentials that validate your identity using touch, "
"facial recognition, a device password, or a PIN. They can be used as a "
"password replacement or as a 2FA method."
msgstr ""
#: src/views/other/Login.vue:208 src/views/user/userColumns.tsx:18
msgid "Password"
msgstr "비밀번호"
@ -1492,8 +1553,14 @@ msgstr "핵심 업그레이드 오류 수행"
msgid "Performing core upgrade"
msgstr "핵심 업그레이드 수행 중"
#: src/components/OTP/OTPAuthorization.vue:37
msgid "Please enter the 2FA code:"
#: src/views/preference/components/AddPasskey.vue:75
msgid ""
"Please enter a name for the passkey you wish to create and click the OK "
"button below."
msgstr ""
#: src/components/2FA/Authorization.vue:75
msgid "Please enter the OTP code:"
msgstr ""
#: src/views/certificate/DNSCredential.vue:53
@ -1536,11 +1603,11 @@ msgstr "이름을 입력해주세요, 이것은 새 구성의 파일 이름으
msgid "Please input your E-mail!"
msgstr "이메일을 입력해주세요!"
#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
msgid "Please input your password!"
msgstr "비밀번호를 입력해주세요!"
#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
msgid "Please input your username!"
msgstr "사용자 이름을 입력해주세요!"
@ -1604,16 +1671,16 @@ msgstr ""
msgid "Recovered Successfully"
msgstr "성공적으로 제거됨"
#: src/components/OTP/OTPAuthorization.vue:56
#: src/views/preference/components/TOTP.vue:177
#: src/components/2FA/Authorization.vue:94
#: src/views/preference/components/TOTP.vue:178
msgid "Recovery"
msgstr ""
#: src/views/preference/components/TOTP.vue:103
#: src/views/preference/components/TOTP.vue:104
msgid "Recovery Code"
msgstr ""
#: src/views/preference/components/TOTP.vue:112
#: src/views/preference/components/TOTP.vue:113
msgid "Recovery Code:"
msgstr ""
@ -1635,6 +1702,11 @@ msgstr "사용자 등록 중"
msgid "Register failed"
msgstr "사용자 등록 중"
#: src/views/preference/components/AddPasskey.vue:26
#, fuzzy
msgid "Register passkey successfully"
msgstr "성공적으로 갱신됨"
#: src/views/certificate/ACMEUser.vue:67
#, fuzzy
msgid "Register successfully"
@ -1671,11 +1743,12 @@ msgstr "리로딩 중"
msgid "Reloading nginx"
msgstr "Nginx 리로딩 중"
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/AuthSettings.vue:109
msgid "Remove"
msgstr ""
#: src/views/preference/AuthSettings.vue:47
#: src/views/preference/AuthSettings.vue:48
#: src/views/preference/components/Passkey.vue:50
#, fuzzy
msgid "Remove successfully"
msgstr "성공적으로 제거됨"
@ -1755,7 +1828,7 @@ msgstr "잘못된 매개변수로 요청됨"
msgid "Reset"
msgstr "재설정"
#: src/views/preference/components/TOTP.vue:132
#: src/views/preference/components/TOTP.vue:133
#, fuzzy
msgid "Reset 2FA"
msgstr "재설정"
@ -1781,6 +1854,7 @@ msgstr "실행 중"
#: src/views/certificate/CertificateEditor.vue:254
#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
#: src/views/preference/components/Passkey.vue:136
#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
msgid "Save"
msgstr "저장"
@ -1809,7 +1883,7 @@ msgstr "성공적으로 저장됨"
msgid "Saved successfully"
msgstr "성공적으로 저장됨"
#: src/views/preference/components/TOTP.vue:93
#: src/views/preference/components/TOTP.vue:94
msgid "Scan the QR code with your mobile phone to add the account to the app."
msgstr ""
@ -1817,7 +1891,7 @@ msgstr ""
msgid "SDK"
msgstr ""
#: src/views/preference/components/TOTP.vue:149
#: src/views/preference/components/TOTP.vue:150
msgid "Secret has been copied"
msgstr ""
@ -1842,9 +1916,12 @@ msgstr "보내기"
#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
#: src/views/environment/BatchUpgrader.vue:57
#: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
#: src/views/preference/AuthSettings.vue:49
#: src/views/preference/components/TOTP.vue:44
#: src/views/preference/components/TOTP.vue:57
#: src/views/preference/AuthSettings.vue:50
#: src/views/preference/components/Passkey.vue:26
#: src/views/preference/components/Passkey.vue:43
#: src/views/preference/components/Passkey.vue:56
#: src/views/preference/components/TOTP.vue:45
#: src/views/preference/components/TOTP.vue:58
#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
msgid "Server error"
@ -1889,6 +1966,10 @@ msgstr "HTTP01 공급자 설정"
msgid "Show"
msgstr ""
#: src/views/other/Login.vue:265
msgid "Sign in with a passkey"
msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:51
msgid "Single Directive"
msgstr "단일 지시문"
@ -1921,7 +2002,7 @@ msgstr "SSL 인증서 키 경로"
msgid "SSL Certificate Path"
msgstr "SSL 인증서 경로"
#: src/views/other/Login.vue:189
#: src/views/other/Login.vue:223
#, fuzzy
msgid "SSO Login"
msgstr "SSO 로그인"
@ -2092,7 +2173,7 @@ msgstr "Certificate Status"
msgid "The path exists, but the file is not a private key"
msgstr "경로는 존재하지만 파일은 개인 키가 아닙니다"
#: src/views/preference/components/TOTP.vue:111
#: src/views/preference/components/TOTP.vue:112
msgid ""
"The recovery code is only displayed once, please save it in a safe place."
msgstr ""
@ -2158,7 +2239,8 @@ msgid ""
"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
msgstr ""
#: src/views/preference/AuthSettings.vue:61
#: src/views/preference/AuthSettings.vue:67
#: src/views/preference/components/AddPasskey.vue:71
#: src/views/preference/LogrotateSettings.vue:11
msgid "Tips"
msgstr "팁"
@ -2167,12 +2249,19 @@ msgstr "팁"
msgid "Title"
msgstr "제목"
#: src/views/preference/components/TOTP.vue:92
#: src/views/preference/components/TOTP.vue:93
msgid ""
"To enable it, you need to install the Google or Microsoft Authenticator app "
"on your mobile phone."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:95
msgid ""
"To ensure security, Webauthn configuration cannot be added through the UI. "
"Please manually configure the following in the app.ini configuration file "
"and restart Nginx UI."
msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
msgid ""
"To make sure the certification auto-renewal can work normally, we need to "
@ -2188,11 +2277,15 @@ msgstr ""
msgid "Token is not valid"
msgstr "토큰이 유효하지 않습니다"
#: src/views/other/Login.vue:79
#: src/views/other/Login.vue:82
msgid "Too many login failed attempts, please try again later"
msgstr ""
#: src/views/preference/components/TOTP.vue:91
msgid "TOTP"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
msgid ""
"TOTP is a two-factor authentication method that uses a time-based one-time "
"password algorithm."
@ -2202,7 +2295,7 @@ msgstr ""
msgid "Trash"
msgstr ""
#: src/components/OTP/useOTPModal.ts:67
#: src/components/2FA/use2FAModal.ts:71
msgid "Two-factor authentication required"
msgstr ""
@ -2212,6 +2305,11 @@ msgstr ""
msgid "Type"
msgstr "유형"
#: src/views/preference/components/Passkey.vue:41
#, fuzzy
msgid "Update successfully"
msgstr "성공적으로 저장되었습니다"
#: src/views/certificate/ACMEUser.vue:53
#: src/views/certificate/DNSCredential.vue:27
#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
@ -2258,11 +2356,11 @@ msgstr "가동 시간:"
msgid "URL"
msgstr "URL"
#: src/components/OTP/OTPAuthorization.vue:69
#: src/components/2FA/Authorization.vue:107
msgid "Use OTP"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:65
#: src/components/2FA/Authorization.vue:103
msgid "Use recovery code"
msgstr ""
@ -2271,11 +2369,11 @@ msgstr ""
msgid "User"
msgstr "사용자 이름"
#: src/views/other/Login.vue:82
#: src/views/other/Login.vue:85
msgid "User is banned"
msgstr ""
#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
#: src/views/other/Login.vue:198 src/views/user/userColumns.tsx:9
msgid "Username"
msgstr "사용자 이름"
@ -2317,6 +2415,7 @@ msgstr "기본 모드"
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
#: src/views/domain/DomainAdd.vue:112
#: src/views/notification/notificationColumns.tsx:19
#: src/views/preference/components/AddPasskey.vue:88
msgid "Warning"
msgstr "경고"
@ -2351,7 +2450,7 @@ msgstr "인증서를 디스크에 쓰기"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
#: src/views/domain/ngx_conf/LocationEditor.vue:69
#: src/views/preference/AuthSettings.vue:97
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/BasicSettings.vue:100
msgid "Yes"
msgstr "예"
@ -2364,6 +2463,20 @@ msgstr "최신 버전을 사용하고 있습니다"
msgid "You can check Nginx UI upgrade at this page."
msgstr "이 페이지에서 Nginx UI 업그레이드를 확인할 수 있습니다."
#: src/views/preference/components/AddPasskey.vue:93
msgid ""
"You have not configured the settings of Webauthn, so you cannot add a "
"passkey."
msgstr ""
#: src/views/preference/components/Passkey.vue:81
msgid "Your passkeys"
msgstr ""
#, fuzzy
#~ msgid "Enable 2FA"
#~ msgstr "활성화"
#, fuzzy
#~ msgid "Enter"
#~ msgstr "간격"

View file

@ -6,7 +6,7 @@ msgstr ""
msgid "2FA"
msgstr ""
#: src/views/preference/components/TOTP.vue:90
#: src/views/preference/AuthSettings.vue:58
msgid "2FA Settings"
msgstr ""
@ -32,7 +32,7 @@ msgstr ""
#: src/views/domain/DomainList.vue:47
#: src/views/environment/envColumns.tsx:131
#: src/views/notification/notificationColumns.tsx:54
#: src/views/preference/AuthSettings.vue:26
#: src/views/preference/AuthSettings.vue:27
#: src/views/stream/StreamList.vue:47
#: src/views/user/userColumns.tsx:60
msgid "Action"
@ -48,6 +48,11 @@ msgstr ""
msgid "Add"
msgstr ""
#: src/views/preference/components/AddPasskey.vue:51
#: src/views/preference/components/AddPasskey.vue:55
msgid "Add a passkey"
msgstr ""
#: src/routes/index.ts:112
#: src/views/config/ConfigEditor.vue:143
#: src/views/config/ConfigEditor.vue:204
@ -85,6 +90,10 @@ msgstr ""
msgid "Advance Mode"
msgstr ""
#: src/views/preference/components/AddPasskey.vue:105
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/views/preference/OpenAISettings.vue:44
msgid "API Base Url"
msgstr ""
@ -105,10 +114,14 @@ msgstr ""
msgid "Arch"
msgstr ""
#: src/views/preference/AuthSettings.vue:96
#: src/views/preference/AuthSettings.vue:102
msgid "Are you sure to delete this banned IP immediately?"
msgstr ""
#: src/views/preference/components/Passkey.vue:119
msgid "Are you sure to delete this passkey immediately?"
msgstr ""
#: src/components/Notification/Notification.vue:86
#: src/views/notification/Notification.vue:40
msgid "Are you sure you want to clear all notifications?"
@ -155,7 +168,7 @@ msgstr ""
msgid "Assistant"
msgstr ""
#: src/views/preference/AuthSettings.vue:17
#: src/views/preference/AuthSettings.vue:18
msgid "Attempts"
msgstr ""
@ -163,6 +176,14 @@ msgstr ""
msgid "Auth"
msgstr ""
#: src/components/2FA/Authorization.vue:126
msgid "Authenticate with a passkey"
msgstr ""
#: src/views/preference/AuthSettings.vue:63
msgid "Authentication Settings"
msgstr ""
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
msgid "Author"
@ -198,15 +219,15 @@ msgstr ""
msgid "Back to list"
msgstr ""
#: src/views/preference/AuthSettings.vue:70
#: src/views/preference/AuthSettings.vue:76
msgid "Ban Threshold Minutes"
msgstr ""
#: src/views/preference/AuthSettings.vue:84
#: src/views/preference/AuthSettings.vue:90
msgid "Banned IPs"
msgstr ""
#: src/views/preference/AuthSettings.vue:20
#: src/views/preference/AuthSettings.vue:21
msgid "Banned Until"
msgstr ""
@ -247,7 +268,7 @@ msgstr ""
msgid "CADir"
msgstr ""
#: src/views/preference/components/TOTP.vue:150
#: src/views/preference/components/TOTP.vue:151
msgid "Can't scan? Use text key binding"
msgstr ""
@ -261,6 +282,7 @@ msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:50
#: src/views/domain/ngx_conf/NgxServer.vue:80
#: src/views/domain/ngx_conf/NgxUpstream.vue:33
#: src/views/preference/components/Passkey.vue:147
#: src/views/stream/components/Deploy.vue:21
#: src/views/stream/components/RightSettings.vue:51
msgid "Cancel"
@ -412,6 +434,7 @@ msgid "Create Folder"
msgstr ""
#: src/views/notification/notificationColumns.tsx:48
#: src/views/preference/components/Passkey.vue:101
#: src/views/user/userColumns.tsx:48
msgid "Created at"
msgstr ""
@ -432,12 +455,12 @@ msgstr ""
msgid "Credentials"
msgstr ""
#: src/views/preference/components/TOTP.vue:98
msgid "Current account is enabled 2FA."
#: src/views/preference/components/TOTP.vue:99
msgid "Current account is enabled TOTP."
msgstr ""
#: src/views/preference/components/TOTP.vue:95
msgid "Current account is not enabled 2FA."
#: src/views/preference/components/TOTP.vue:96
msgid "Current account is not enabled TOTP."
msgstr ""
#: src/views/system/Upgrade.vue:167
@ -652,6 +675,10 @@ msgstr ""
msgid "Dry run mode enabled"
msgstr ""
#: src/views/preference/components/AddPasskey.vue:107
msgid "Due to the security policies of some browsers, you cannot use passkeys on non-HTTPS websites, except when running on localhost."
msgstr ""
#: src/views/domain/components/SiteDuplicate.vue:122
#: src/views/domain/DomainList.vue:140
#: src/views/stream/components/StreamDuplicate.vue:122
@ -722,11 +749,7 @@ msgstr ""
msgid "Enable %{conf_name} in %{node_name} successfully"
msgstr ""
#: src/views/preference/components/TOTP.vue:124
msgid "Enable 2FA"
msgstr ""
#: src/views/preference/components/TOTP.vue:54
#: src/views/preference/components/TOTP.vue:55
msgid "Enable 2FA successfully"
msgstr ""
@ -747,6 +770,10 @@ msgstr ""
msgid "Enable TLS"
msgstr ""
#: src/views/preference/components/TOTP.vue:125
msgid "Enable TOTP"
msgstr ""
#: src/views/domain/components/RightSettings.vue:77
#: src/views/domain/DomainEdit.vue:175
#: src/views/domain/DomainList.vue:29
@ -868,6 +895,10 @@ msgstr ""
msgid "Finished"
msgstr ""
#: src/views/preference/components/AddPasskey.vue:77
msgid "Follow the instructions in the dialog to complete the passkey registration process."
msgstr ""
#: src/views/preference/BasicSettings.vue:43
msgid "For Chinese user: https://mirror.ghproxy.com/"
msgstr ""
@ -937,14 +968,18 @@ msgstr ""
msgid "If left blank, the default CA Dir will be used."
msgstr ""
#: src/views/preference/AuthSettings.vue:62
#: src/views/preference/AuthSettings.vue:68
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:110
#: src/views/preference/components/TOTP.vue:111
msgid "If you lose your mobile phone, you can use the recovery code to reset your 2FA."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:76
msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:109
msgid "If your domain has CNAME records and you cannot obtain certificates, you need to enable this option."
msgstr ""
@ -958,7 +993,7 @@ msgstr ""
msgid "Import Certificate"
msgstr ""
#: src/views/other/Login.vue:76
#: src/views/other/Login.vue:79
msgid "Incorrect username or password"
msgstr ""
@ -975,12 +1010,12 @@ msgstr ""
msgid "Initialing core upgrader"
msgstr ""
#: src/views/preference/components/TOTP.vue:157
#: src/views/preference/components/TOTP.vue:158
msgid "Input the code from the app:"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:49
#: src/views/preference/components/TOTP.vue:170
#: src/components/2FA/Authorization.vue:87
#: src/views/preference/components/TOTP.vue:171
msgid "Input the recovery code:"
msgstr ""
@ -1001,7 +1036,7 @@ msgstr ""
msgid "Invalid"
msgstr ""
#: src/views/other/Login.vue:86
#: src/views/other/Login.vue:89
msgid "Invalid 2FA or recovery code"
msgstr ""
@ -1014,11 +1049,11 @@ msgstr ""
msgid "Invalid folder name"
msgstr ""
#: src/components/OTP/useOTPModal.ts:61
#: src/components/2FA/use2FAModal.ts:65
msgid "Invalid passcode or recovery code"
msgstr ""
#: src/views/preference/AuthSettings.vue:14
#: src/views/preference/AuthSettings.vue:15
msgid "IP"
msgstr ""
@ -1051,6 +1086,10 @@ msgstr ""
msgid "Last checked at"
msgstr ""
#: src/views/preference/components/Passkey.vue:102
msgid "Last used at"
msgstr ""
#: src/views/user/userColumns.tsx:25
msgid "Leave blank for no change"
msgstr ""
@ -1111,12 +1150,12 @@ msgid "Log"
msgstr ""
#: src/routes/index.ts:305
#: src/views/other/Login.vue:207
#: src/views/other/Login.vue:247
msgid "Login"
msgstr ""
#: src/views/other/Login.vue:130
#: src/views/other/Login.vue:63
#: src/views/other/Login.vue:133
#: src/views/other/Login.vue:66
msgid "Login successful"
msgstr ""
@ -1162,7 +1201,7 @@ msgstr ""
msgid "Managed Certificate"
msgstr ""
#: src/views/preference/AuthSettings.vue:76
#: src/views/preference/AuthSettings.vue:82
msgid "Max Attempts"
msgstr ""
@ -1219,6 +1258,7 @@ msgstr ""
#: src/views/domain/DomainList.vue:13
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
#: src/views/environment/envColumns.tsx:9
#: src/views/preference/components/AddPasskey.vue:81
#: src/views/stream/components/RightSettings.vue:82
#: src/views/stream/components/StreamDuplicate.vue:129
#: src/views/stream/StreamList.vue:13
@ -1303,7 +1343,7 @@ msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
#: src/views/domain/ngx_conf/LocationEditor.vue:70
#: src/views/notification/Notification.vue:38
#: src/views/preference/AuthSettings.vue:98
#: src/views/preference/AuthSettings.vue:104
#: src/views/preference/BasicSettings.vue:101
#: src/views/stream/StreamList.vue:165
msgid "No"
@ -1401,6 +1441,11 @@ msgstr ""
msgid "OpenAI"
msgstr ""
#: src/components/2FA/Authorization.vue:117
#: src/views/other/Login.vue:256
msgid "Or"
msgstr ""
#: src/views/config/components/Rename.vue:69
msgid "Original name"
msgstr ""
@ -1429,7 +1474,15 @@ msgstr ""
msgid "Params"
msgstr ""
#: src/views/other/Login.vue:174
#: src/views/preference/components/Passkey.vue:65
msgid "Passkey"
msgstr ""
#: src/views/preference/components/Passkey.vue:68
msgid "Passkeys are webauthn credentials that validate your identity using touch, facial recognition, a device password, or a PIN. They can be used as a password replacement or as a 2FA method."
msgstr ""
#: src/views/other/Login.vue:208
#: src/views/user/userColumns.tsx:18
msgid "Password"
msgstr ""
@ -1456,8 +1509,12 @@ msgstr ""
msgid "Performing core upgrade"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:37
msgid "Please enter the 2FA code:"
#: src/views/preference/components/AddPasskey.vue:75
msgid "Please enter a name for the passkey you wish to create and click the OK button below."
msgstr ""
#: src/components/2FA/Authorization.vue:75
msgid "Please enter the OTP code:"
msgstr ""
#: src/views/certificate/DNSCredential.vue:53
@ -1491,12 +1548,12 @@ msgid "Please input your E-mail!"
msgstr ""
#: src/views/other/Install.vue:44
#: src/views/other/Login.vue:44
#: src/views/other/Login.vue:47
msgid "Please input your password!"
msgstr ""
#: src/views/other/Install.vue:38
#: src/views/other/Login.vue:38
#: src/views/other/Login.vue:41
msgid "Please input your username!"
msgstr ""
@ -1559,16 +1616,16 @@ msgstr ""
msgid "Recovered Successfully"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:56
#: src/views/preference/components/TOTP.vue:177
#: src/components/2FA/Authorization.vue:94
#: src/views/preference/components/TOTP.vue:178
msgid "Recovery"
msgstr ""
#: src/views/preference/components/TOTP.vue:103
#: src/views/preference/components/TOTP.vue:104
msgid "Recovery Code"
msgstr ""
#: src/views/preference/components/TOTP.vue:112
#: src/views/preference/components/TOTP.vue:113
msgid "Recovery Code:"
msgstr ""
@ -1588,6 +1645,10 @@ msgstr ""
msgid "Register failed"
msgstr ""
#: src/views/preference/components/AddPasskey.vue:26
msgid "Register passkey successfully"
msgstr ""
#: src/views/certificate/ACMEUser.vue:67
msgid "Register successfully"
msgstr ""
@ -1621,11 +1682,12 @@ msgstr ""
msgid "Reloading nginx"
msgstr ""
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/AuthSettings.vue:109
msgid "Remove"
msgstr ""
#: src/views/preference/AuthSettings.vue:47
#: src/views/preference/AuthSettings.vue:48
#: src/views/preference/components/Passkey.vue:50
msgid "Remove successfully"
msgstr ""
@ -1689,7 +1751,7 @@ msgstr ""
msgid "Reset"
msgstr ""
#: src/views/preference/components/TOTP.vue:132
#: src/views/preference/components/TOTP.vue:133
msgid "Reset 2FA"
msgstr ""
@ -1714,6 +1776,7 @@ msgstr ""
#: src/views/config/ConfigEditor.vue:222
#: src/views/domain/DomainEdit.vue:260
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
#: src/views/preference/components/Passkey.vue:136
#: src/views/preference/Preference.vue:151
#: src/views/stream/StreamEdit.vue:252
msgid "Save"
@ -1744,7 +1807,7 @@ msgstr ""
msgid "Saved successfully"
msgstr ""
#: src/views/preference/components/TOTP.vue:93
#: src/views/preference/components/TOTP.vue:94
msgid "Scan the QR code with your mobile phone to add the account to the app."
msgstr ""
@ -1752,7 +1815,7 @@ msgstr ""
msgid "SDK"
msgstr ""
#: src/views/preference/components/TOTP.vue:149
#: src/views/preference/components/TOTP.vue:150
msgid "Secret has been copied"
msgstr ""
@ -1779,9 +1842,12 @@ msgstr ""
#: src/views/environment/BatchUpgrader.vue:57
#: src/views/environment/Environment.vue:15
#: src/views/other/Install.vue:68
#: src/views/preference/AuthSettings.vue:49
#: src/views/preference/components/TOTP.vue:44
#: src/views/preference/components/TOTP.vue:57
#: src/views/preference/AuthSettings.vue:50
#: src/views/preference/components/Passkey.vue:26
#: src/views/preference/components/Passkey.vue:43
#: src/views/preference/components/Passkey.vue:56
#: src/views/preference/components/TOTP.vue:45
#: src/views/preference/components/TOTP.vue:58
#: src/views/preference/Preference.vue:83
#: src/views/stream/StreamList.vue:113
#: src/views/stream/StreamList.vue:81
@ -1825,6 +1891,10 @@ msgstr ""
msgid "Show"
msgstr ""
#: src/views/other/Login.vue:265
msgid "Sign in with a passkey"
msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:51
msgid "Single Directive"
msgstr ""
@ -1853,7 +1923,7 @@ msgstr ""
msgid "SSL Certificate Path"
msgstr ""
#: src/views/other/Login.vue:189
#: src/views/other/Login.vue:223
msgid "SSO Login"
msgstr ""
@ -2001,7 +2071,7 @@ msgstr ""
msgid "The path exists, but the file is not a private key"
msgstr ""
#: src/views/preference/components/TOTP.vue:111
#: src/views/preference/components/TOTP.vue:112
msgid "The recovery code is only displayed once, please save it in a safe place."
msgstr ""
@ -2053,7 +2123,8 @@ msgstr ""
msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
msgstr ""
#: src/views/preference/AuthSettings.vue:61
#: src/views/preference/AuthSettings.vue:67
#: src/views/preference/components/AddPasskey.vue:71
#: src/views/preference/LogrotateSettings.vue:11
msgid "Tips"
msgstr ""
@ -2062,10 +2133,14 @@ msgstr ""
msgid "Title"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
#: src/views/preference/components/TOTP.vue:93
msgid "To enable it, you need to install the Google or Microsoft Authenticator app on your mobile phone."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:95
msgid "To ensure security, Webauthn configuration cannot be added through the UI. Please manually configure the following in the app.ini configuration file and restart Nginx UI."
msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
msgid "To make sure the certification auto-renewal can work normally, we need to add a location which can proxy the request from authority to backend, and we need to save this file and reload the Nginx. Are you sure you want to continue?"
msgstr ""
@ -2074,11 +2149,15 @@ msgstr ""
msgid "Token is not valid"
msgstr ""
#: src/views/other/Login.vue:79
#: src/views/other/Login.vue:82
msgid "Too many login failed attempts, please try again later"
msgstr ""
#: src/views/preference/components/TOTP.vue:91
msgid "TOTP"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
msgid "TOTP is a two-factor authentication method that uses a time-based one-time password algorithm."
msgstr ""
@ -2086,7 +2165,7 @@ msgstr ""
msgid "Trash"
msgstr ""
#: src/components/OTP/useOTPModal.ts:67
#: src/components/2FA/use2FAModal.ts:71
msgid "Two-factor authentication required"
msgstr ""
@ -2096,6 +2175,10 @@ msgstr ""
msgid "Type"
msgstr ""
#: src/views/preference/components/Passkey.vue:41
msgid "Update successfully"
msgstr ""
#: src/views/certificate/ACMEUser.vue:53
#: src/views/certificate/DNSCredential.vue:27
#: src/views/config/configColumns.ts:31
@ -2145,11 +2228,11 @@ msgstr ""
msgid "URL"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:69
#: src/components/2FA/Authorization.vue:107
msgid "Use OTP"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:65
#: src/components/2FA/Authorization.vue:103
msgid "Use recovery code"
msgstr ""
@ -2157,11 +2240,11 @@ msgstr ""
msgid "User"
msgstr ""
#: src/views/other/Login.vue:82
#: src/views/other/Login.vue:85
msgid "User is banned"
msgstr ""
#: src/views/other/Login.vue:164
#: src/views/other/Login.vue:198
#: src/views/user/userColumns.tsx:9
msgid "Username"
msgstr ""
@ -2201,6 +2284,7 @@ msgstr ""
#: src/views/config/InspectConfig.vue:33
#: src/views/domain/DomainAdd.vue:112
#: src/views/notification/notificationColumns.tsx:19
#: src/views/preference/components/AddPasskey.vue:88
msgid "Warning"
msgstr ""
@ -2227,7 +2311,7 @@ msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
#: src/views/domain/ngx_conf/LocationEditor.vue:69
#: src/views/preference/AuthSettings.vue:97
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/BasicSettings.vue:100
msgid "Yes"
msgstr ""
@ -2239,3 +2323,11 @@ msgstr ""
#: src/views/system/Upgrade.vue:166
msgid "You can check Nginx UI upgrade at this page."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:93
msgid "You have not configured the settings of Webauthn, so you cannot add a passkey."
msgstr ""
#: src/views/preference/components/Passkey.vue:81
msgid "Your passkeys"
msgstr ""

View file

@ -18,7 +18,7 @@ msgstr ""
msgid "2FA"
msgstr "2ФА"
#: src/views/preference/components/TOTP.vue:90
#: src/views/preference/AuthSettings.vue:58
msgid "2FA Settings"
msgstr "Настройки 2ФА"
@ -41,7 +41,7 @@ msgstr "Пользователь ACME"
#: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
#: src/views/environment/envColumns.tsx:131
#: src/views/notification/notificationColumns.tsx:54
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
#: src/views/preference/AuthSettings.vue:27 src/views/stream/StreamList.vue:47
#: src/views/user/userColumns.tsx:60
msgid "Action"
msgstr "Действие"
@ -56,6 +56,11 @@ msgstr "Действие"
msgid "Add"
msgstr "Добавить"
#: src/views/preference/components/AddPasskey.vue:51
#: src/views/preference/components/AddPasskey.vue:55
msgid "Add a passkey"
msgstr ""
#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
#: src/views/config/ConfigEditor.vue:204
msgid "Add Configuration"
@ -90,6 +95,10 @@ msgstr "Дополнительно"
msgid "Advance Mode"
msgstr "Расширенный режим"
#: src/views/preference/components/AddPasskey.vue:105
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/views/preference/OpenAISettings.vue:44
msgid "API Base Url"
msgstr "Базовый URL API"
@ -110,10 +119,15 @@ msgstr "API токен"
msgid "Arch"
msgstr "Архитектура"
#: src/views/preference/AuthSettings.vue:96
#: src/views/preference/AuthSettings.vue:102
msgid "Are you sure to delete this banned IP immediately?"
msgstr "Вы уверены, что хотите немедленно удалить этот заблокированный IP?"
#: src/views/preference/components/Passkey.vue:119
#, fuzzy
msgid "Are you sure to delete this passkey immediately?"
msgstr "Вы уверены, что хотите немедленно удалить этот заблокированный IP?"
#: src/components/Notification/Notification.vue:86
#: src/views/notification/Notification.vue:40
msgid "Are you sure you want to clear all notifications?"
@ -161,7 +175,7 @@ msgstr "Обратитесь за помощью к ChatGPT"
msgid "Assistant"
msgstr "Ассистент"
#: src/views/preference/AuthSettings.vue:17
#: src/views/preference/AuthSettings.vue:18
msgid "Attempts"
msgstr "Попытки"
@ -169,6 +183,14 @@ msgstr "Попытки"
msgid "Auth"
msgstr "Авторизация"
#: src/components/2FA/Authorization.vue:126
msgid "Authenticate with a passkey"
msgstr ""
#: src/views/preference/AuthSettings.vue:63
msgid "Authentication Settings"
msgstr ""
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
msgid "Author"
@ -201,15 +223,15 @@ msgstr "Вернуться на главную"
msgid "Back to list"
msgstr "Возврат к списку"
#: src/views/preference/AuthSettings.vue:70
#: src/views/preference/AuthSettings.vue:76
msgid "Ban Threshold Minutes"
msgstr "Порог блокировки в минутах"
#: src/views/preference/AuthSettings.vue:84
#: src/views/preference/AuthSettings.vue:90
msgid "Banned IPs"
msgstr "Заблокированные IP-адреса"
#: src/views/preference/AuthSettings.vue:20
#: src/views/preference/AuthSettings.vue:21
msgid "Banned Until"
msgstr "Заблокирован до"
@ -250,7 +272,7 @@ msgstr "Директория корневого сертификата"
msgid "CADir"
msgstr ""
#: src/views/preference/components/TOTP.vue:150
#: src/views/preference/components/TOTP.vue:151
msgid "Can't scan? Use text key binding"
msgstr ""
@ -264,6 +286,7 @@ msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:50
#: src/views/domain/ngx_conf/NgxServer.vue:80
#: src/views/domain/ngx_conf/NgxUpstream.vue:33
#: src/views/preference/components/Passkey.vue:147
#: src/views/stream/components/Deploy.vue:21
#: src/views/stream/components/RightSettings.vue:51
msgid "Cancel"
@ -413,6 +436,7 @@ msgid "Create Folder"
msgstr "Создать папку"
#: src/views/notification/notificationColumns.tsx:48
#: src/views/preference/components/Passkey.vue:101
#: src/views/user/userColumns.tsx:48
msgid "Created at"
msgstr "Создан в"
@ -433,12 +457,14 @@ msgstr "Учетные данные"
msgid "Credentials"
msgstr "Учетные данные"
#: src/views/preference/components/TOTP.vue:98
msgid "Current account is enabled 2FA."
#: src/views/preference/components/TOTP.vue:99
#, fuzzy
msgid "Current account is enabled TOTP."
msgstr "Текущая учетная запись имеет включенную 2ФА."
#: src/views/preference/components/TOTP.vue:95
msgid "Current account is not enabled 2FA."
#: src/views/preference/components/TOTP.vue:96
#, fuzzy
msgid "Current account is not enabled TOTP."
msgstr ""
"Текущая учетная запись не имеет включенной двухфакторной аутентификации."
@ -650,6 +676,12 @@ msgstr "Загрузка последней версии"
msgid "Dry run mode enabled"
msgstr "Включен пробный режим"
#: src/views/preference/components/AddPasskey.vue:107
msgid ""
"Due to the security policies of some browsers, you cannot use passkeys on "
"non-HTTPS websites, except when running on localhost."
msgstr ""
#: src/views/domain/components/SiteDuplicate.vue:122
#: src/views/domain/DomainList.vue:140
#: src/views/stream/components/StreamDuplicate.vue:122
@ -720,11 +752,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:124
msgid "Enable 2FA"
msgstr "Включить 2ФА"
#: src/views/preference/components/TOTP.vue:54
#: src/views/preference/components/TOTP.vue:55
msgid "Enable 2FA successfully"
msgstr "Двухфакторная аутентификация успешно включена"
@ -745,6 +773,11 @@ msgstr "Включено успешно"
msgid "Enable TLS"
msgstr "Включить TLS"
#: src/views/preference/components/TOTP.vue:125
#, fuzzy
msgid "Enable TOTP"
msgstr "Включить TLS"
#: src/views/domain/components/RightSettings.vue:77
#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:29
#: src/views/environment/envColumns.tsx:104
@ -858,6 +891,12 @@ msgstr "Фильтр"
msgid "Finished"
msgstr "Готово"
#: src/views/preference/components/AddPasskey.vue:77
msgid ""
"Follow the instructions in the dialog to complete the passkey registration "
"process."
msgstr ""
#: src/views/preference/BasicSettings.vue:43
msgid "For Chinese user: https://mirror.ghproxy.com/"
msgstr "Для китайских пользователей: https://mirror.ghproxy.com/"
@ -926,7 +965,7 @@ msgstr "HTTP01"
msgid "If left blank, the default CA Dir will be used."
msgstr "Если оставить пустым, будет использоваться каталог CA по умолчанию."
#: src/views/preference/AuthSettings.vue:62
#: src/views/preference/AuthSettings.vue:68
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."
@ -935,7 +974,7 @@ msgstr ""
"количества попыток в течение пороговых минут блокировки, IP будет "
"заблокирован на определенный период времени."
#: src/views/preference/components/TOTP.vue:110
#: src/views/preference/components/TOTP.vue:111
msgid ""
"If you lose your mobile phone, you can use the recovery code to reset your "
"2FA."
@ -943,6 +982,10 @@ msgstr ""
"Если вы потеряете свой мобильный телефон, вы можете использовать код "
"восстановления для сброса 2FA."
#: src/views/preference/components/AddPasskey.vue:76
msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:109
msgid ""
"If your domain has CNAME records and you cannot obtain certificates, you "
@ -959,7 +1002,7 @@ msgstr "Импорт"
msgid "Import Certificate"
msgstr "Импортировать сертификат"
#: src/views/other/Login.vue:76
#: src/views/other/Login.vue:79
msgid "Incorrect username or password"
msgstr "Неверное имя пользователя или пароль"
@ -975,12 +1018,12 @@ msgstr "Ошибка первоначального обновления ядр
msgid "Initialing core upgrader"
msgstr "Инициализация программы обновления ядра"
#: src/views/preference/components/TOTP.vue:157
#: src/views/preference/components/TOTP.vue:158
msgid "Input the code from the app:"
msgstr "Введите код из приложения:"
#: src/components/OTP/OTPAuthorization.vue:49
#: src/views/preference/components/TOTP.vue:170
#: src/components/2FA/Authorization.vue:87
#: src/views/preference/components/TOTP.vue:171
msgid "Input the recovery code:"
msgstr "Введите код восстановления:"
@ -1000,7 +1043,7 @@ msgstr "Интервал"
msgid "Invalid"
msgstr "Недействительно"
#: src/views/other/Login.vue:86
#: src/views/other/Login.vue:89
msgid "Invalid 2FA or recovery code"
msgstr "Неверный 2FA или код восстановления"
@ -1013,11 +1056,11 @@ msgstr "Неверное имя файла"
msgid "Invalid folder name"
msgstr "Недопустимое имя папки"
#: src/components/OTP/useOTPModal.ts:61
#: src/components/2FA/use2FAModal.ts:65
msgid "Invalid passcode or recovery code"
msgstr "Неверный пароль или код восстановления"
#: src/views/preference/AuthSettings.vue:14
#: src/views/preference/AuthSettings.vue:15
msgid "IP"
msgstr "IP"
@ -1050,6 +1093,11 @@ msgstr "Тип ключа"
msgid "Last checked at"
msgstr "Последняя проверка в"
#: src/views/preference/components/Passkey.vue:102
#, fuzzy
msgid "Last used at"
msgstr "Последняя проверка в"
#: src/views/user/userColumns.tsx:25
msgid "Leave blank for no change"
msgstr "Оставьте пустым без изменений"
@ -1109,11 +1157,11 @@ msgstr "Locations"
msgid "Log"
msgstr "Журнал"
#: src/routes/index.ts:305 src/views/other/Login.vue:207
#: src/routes/index.ts:305 src/views/other/Login.vue:247
msgid "Login"
msgstr "Логин"
#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
#: src/views/other/Login.vue:133 src/views/other/Login.vue:66
msgid "Login successful"
msgstr "Авторизация успешна"
@ -1170,7 +1218,7 @@ msgstr "Пользователи"
msgid "Managed Certificate"
msgstr "Управление сертификатом"
#: src/views/preference/AuthSettings.vue:76
#: src/views/preference/AuthSettings.vue:82
msgid "Max Attempts"
msgstr "Максимальное количество попыток"
@ -1225,6 +1273,7 @@ msgstr "Многострочная директива"
#: src/views/domain/DomainList.vue:13
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
#: src/views/environment/envColumns.tsx:9
#: src/views/preference/components/AddPasskey.vue:81
#: src/views/stream/components/RightSettings.vue:82
#: src/views/stream/components/StreamDuplicate.vue:129
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:188
@ -1306,7 +1355,7 @@ msgstr "Nginx успешно перезапущен"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
#: src/views/domain/ngx_conf/LocationEditor.vue:70
#: src/views/notification/Notification.vue:38
#: src/views/preference/AuthSettings.vue:98
#: src/views/preference/AuthSettings.vue:104
#: src/views/preference/BasicSettings.vue:101
#: src/views/stream/StreamList.vue:165
msgid "No"
@ -1407,6 +1456,10 @@ msgstr "Онлайн"
msgid "OpenAI"
msgstr "OpenAI"
#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
msgid "Or"
msgstr ""
#: src/views/config/components/Rename.vue:69
msgid "Original name"
msgstr "Оригинальное имя"
@ -1435,7 +1488,18 @@ msgstr "Перезаписать существующий файл"
msgid "Params"
msgstr "Параметры"
#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
#: src/views/preference/components/Passkey.vue:65
msgid "Passkey"
msgstr ""
#: src/views/preference/components/Passkey.vue:68
msgid ""
"Passkeys are webauthn credentials that validate your identity using touch, "
"facial recognition, a device password, or a PIN. They can be used as a "
"password replacement or as a 2FA method."
msgstr ""
#: src/views/other/Login.vue:208 src/views/user/userColumns.tsx:18
msgid "Password"
msgstr "Пароль"
@ -1461,8 +1525,15 @@ msgstr "Ошибка обновления ядра"
msgid "Performing core upgrade"
msgstr "Выполнение обновления ядра"
#: src/components/OTP/OTPAuthorization.vue:37
msgid "Please enter the 2FA code:"
#: src/views/preference/components/AddPasskey.vue:75
msgid ""
"Please enter a name for the passkey you wish to create and click the OK "
"button below."
msgstr ""
#: src/components/2FA/Authorization.vue:75
#, fuzzy
msgid "Please enter the OTP code:"
msgstr "Пожалуйста, введите код 2FA:"
#: src/views/certificate/DNSCredential.vue:53
@ -1508,11 +1579,11 @@ msgstr ""
msgid "Please input your E-mail!"
msgstr "Введите ваш E-mail!"
#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
msgid "Please input your password!"
msgstr "Введите ваш пароль!"
#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
msgid "Please input your username!"
msgstr "Введите ваше имя пользователя!"
@ -1576,16 +1647,16 @@ msgstr "Восстановить"
msgid "Recovered Successfully"
msgstr "Восстановлено успешно"
#: src/components/OTP/OTPAuthorization.vue:56
#: src/views/preference/components/TOTP.vue:177
#: src/components/2FA/Authorization.vue:94
#: src/views/preference/components/TOTP.vue:178
msgid "Recovery"
msgstr "Восстановление"
#: src/views/preference/components/TOTP.vue:103
#: src/views/preference/components/TOTP.vue:104
msgid "Recovery Code"
msgstr "Код восстановления"
#: src/views/preference/components/TOTP.vue:112
#: src/views/preference/components/TOTP.vue:113
msgid "Recovery Code:"
msgstr "Код восстановления:"
@ -1605,6 +1676,11 @@ msgstr "Регистрация"
msgid "Register failed"
msgstr "Регистрация не удалась"
#: src/views/preference/components/AddPasskey.vue:26
#, fuzzy
msgid "Register passkey successfully"
msgstr "Зарегистрировано успешно"
#: src/views/certificate/ACMEUser.vue:67
msgid "Register successfully"
msgstr "Зарегистрировано успешно"
@ -1638,11 +1714,12 @@ msgstr "Перезагружается"
msgid "Reloading nginx"
msgstr "Перезагружается nginx"
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/AuthSettings.vue:109
msgid "Remove"
msgstr "Удалить"
#: src/views/preference/AuthSettings.vue:47
#: src/views/preference/AuthSettings.vue:48
#: src/views/preference/components/Passkey.vue:50
msgid "Remove successfully"
msgstr "Удалено успешно"
@ -1713,7 +1790,7 @@ msgstr "Запрос с неправильными параметрами"
msgid "Reset"
msgstr "Сброс"
#: src/views/preference/components/TOTP.vue:132
#: src/views/preference/components/TOTP.vue:133
msgid "Reset 2FA"
msgstr "Сброс 2FA"
@ -1737,6 +1814,7 @@ msgstr "Выполняется"
#: src/views/certificate/CertificateEditor.vue:254
#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
#: src/views/preference/components/Passkey.vue:136
#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
msgid "Save"
msgstr "Сохранить"
@ -1764,7 +1842,7 @@ msgstr "Сохранено успешно"
msgid "Saved successfully"
msgstr "Успешно сохранено"
#: src/views/preference/components/TOTP.vue:93
#: src/views/preference/components/TOTP.vue:94
msgid "Scan the QR code with your mobile phone to add the account to the app."
msgstr ""
"Отсканируйте QR-код с помощью мобильного телефона, чтобы добавить учетную "
@ -1774,7 +1852,7 @@ msgstr ""
msgid "SDK"
msgstr "SDK"
#: src/views/preference/components/TOTP.vue:149
#: src/views/preference/components/TOTP.vue:150
msgid "Secret has been copied"
msgstr ""
@ -1799,9 +1877,12 @@ msgstr "Отправлено"
#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
#: src/views/environment/BatchUpgrader.vue:57
#: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
#: src/views/preference/AuthSettings.vue:49
#: src/views/preference/components/TOTP.vue:44
#: src/views/preference/components/TOTP.vue:57
#: src/views/preference/AuthSettings.vue:50
#: src/views/preference/components/Passkey.vue:26
#: src/views/preference/components/Passkey.vue:43
#: src/views/preference/components/Passkey.vue:56
#: src/views/preference/components/TOTP.vue:45
#: src/views/preference/components/TOTP.vue:58
#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
msgid "Server error"
@ -1847,6 +1928,10 @@ msgstr ""
msgid "Show"
msgstr "Показать"
#: src/views/other/Login.vue:265
msgid "Sign in with a passkey"
msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:51
msgid "Single Directive"
msgstr "Одиночная Директива"
@ -1875,7 +1960,7 @@ msgstr "Путь к ключу SSL-сертификата"
msgid "SSL Certificate Path"
msgstr "Путь к SSL сертификату"
#: src/views/other/Login.vue:189
#: src/views/other/Login.vue:223
msgid "SSO Login"
msgstr "SSO Вход"
@ -2042,7 +2127,7 @@ msgstr "Путь существует, но файл не является се
msgid "The path exists, but the file is not a private key"
msgstr "Путь существует, но файл не является приватным ключом"
#: src/views/preference/components/TOTP.vue:111
#: src/views/preference/components/TOTP.vue:112
msgid ""
"The recovery code is only displayed once, please save it in a safe place."
msgstr ""
@ -2114,7 +2199,8 @@ msgstr ""
"Это обновит или переустановит интерфейс Nginx на %{nodeNames} до версии "
"%{version}."
#: src/views/preference/AuthSettings.vue:61
#: src/views/preference/AuthSettings.vue:67
#: src/views/preference/components/AddPasskey.vue:71
#: src/views/preference/LogrotateSettings.vue:11
msgid "Tips"
msgstr "Советы"
@ -2123,7 +2209,7 @@ msgstr "Советы"
msgid "Title"
msgstr "Заголовок"
#: src/views/preference/components/TOTP.vue:92
#: src/views/preference/components/TOTP.vue:93
msgid ""
"To enable it, you need to install the Google or Microsoft Authenticator app "
"on your mobile phone."
@ -2131,6 +2217,13 @@ msgstr ""
"Чтобы включить это, вам нужно установить приложение Google или Microsoft "
"Authenticator на свой мобильный телефон."
#: src/views/preference/components/AddPasskey.vue:95
msgid ""
"To ensure security, Webauthn configuration cannot be added through the UI. "
"Please manually configure the following in the app.ini configuration file "
"and restart Nginx UI."
msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
msgid ""
"To make sure the certification auto-renewal can work normally, we need to "
@ -2147,11 +2240,15 @@ msgstr ""
msgid "Token is not valid"
msgstr "Токен недействителен"
#: src/views/other/Login.vue:79
#: src/views/other/Login.vue:82
msgid "Too many login failed attempts, please try again later"
msgstr "Слишком много неудачных попыток входа, попробуйте позже"
#: src/views/preference/components/TOTP.vue:91
msgid "TOTP"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
msgid ""
"TOTP is a two-factor authentication method that uses a time-based one-time "
"password algorithm."
@ -2163,7 +2260,7 @@ msgstr ""
msgid "Trash"
msgstr "Корзина"
#: src/components/OTP/useOTPModal.ts:67
#: src/components/2FA/use2FAModal.ts:71
msgid "Two-factor authentication required"
msgstr "Требуется двухфакторная аутентификация"
@ -2173,6 +2270,11 @@ msgstr "Требуется двухфакторная аутентификаци
msgid "Type"
msgstr "Тип"
#: src/views/preference/components/Passkey.vue:41
#, fuzzy
msgid "Update successfully"
msgstr "Успешно обновлено"
#: src/views/certificate/ACMEUser.vue:53
#: src/views/certificate/DNSCredential.vue:27
#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
@ -2216,11 +2318,11 @@ msgstr "Аптайм:"
msgid "URL"
msgstr "URL"
#: src/components/OTP/OTPAuthorization.vue:69
#: src/components/2FA/Authorization.vue:107
msgid "Use OTP"
msgstr "Использовать OTP"
#: src/components/OTP/OTPAuthorization.vue:65
#: src/components/2FA/Authorization.vue:103
msgid "Use recovery code"
msgstr "Использовать код восстановления"
@ -2228,11 +2330,11 @@ msgstr "Использовать код восстановления"
msgid "User"
msgstr "Пользователь"
#: src/views/other/Login.vue:82
#: src/views/other/Login.vue:85
msgid "User is banned"
msgstr "Пользователь заблокирован"
#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
#: src/views/other/Login.vue:198 src/views/user/userColumns.tsx:9
msgid "Username"
msgstr "Имя пользователя"
@ -2271,6 +2373,7 @@ msgstr "Простой режим"
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
#: src/views/domain/DomainAdd.vue:112
#: src/views/notification/notificationColumns.tsx:19
#: src/views/preference/components/AddPasskey.vue:88
msgid "Warning"
msgstr "Внимание"
@ -2305,7 +2408,7 @@ msgstr "Запись сертификата на диск"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
#: src/views/domain/ngx_conf/LocationEditor.vue:69
#: src/views/preference/AuthSettings.vue:97
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/BasicSettings.vue:100
msgid "Yes"
msgstr "Да"
@ -2318,6 +2421,19 @@ msgstr "Вы используете последнюю версию"
msgid "You can check Nginx UI upgrade at this page."
msgstr "Вы можете проверить обновление Nginx UI на этой странице."
#: src/views/preference/components/AddPasskey.vue:93
msgid ""
"You have not configured the settings of Webauthn, so you cannot add a "
"passkey."
msgstr ""
#: src/views/preference/components/Passkey.vue:81
msgid "Your passkeys"
msgstr ""
#~ msgid "Enable 2FA"
#~ msgstr "Включить 2ФА"
#, fuzzy
#~ msgid "Rename "
#~ msgstr "Имя пользователя"

View file

@ -13,7 +13,7 @@ msgstr ""
msgid "2FA"
msgstr ""
#: src/views/preference/components/TOTP.vue:90
#: src/views/preference/AuthSettings.vue:58
msgid "2FA Settings"
msgstr ""
@ -37,7 +37,7 @@ msgstr "Người dùng"
#: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
#: src/views/environment/envColumns.tsx:131
#: src/views/notification/notificationColumns.tsx:54
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
#: src/views/preference/AuthSettings.vue:27 src/views/stream/StreamList.vue:47
#: src/views/user/userColumns.tsx:60
msgid "Action"
msgstr "Hành động"
@ -52,6 +52,11 @@ msgstr "Hành động"
msgid "Add"
msgstr "Thêm"
#: src/views/preference/components/AddPasskey.vue:51
#: src/views/preference/components/AddPasskey.vue:55
msgid "Add a passkey"
msgstr ""
#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
#: src/views/config/ConfigEditor.vue:204
#, fuzzy
@ -90,6 +95,10 @@ msgstr "Tùy chọn bổ sung"
msgid "Advance Mode"
msgstr "Nâng cao"
#: src/views/preference/components/AddPasskey.vue:105
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/views/preference/OpenAISettings.vue:44
msgid "API Base Url"
msgstr ""
@ -110,11 +119,16 @@ msgstr ""
msgid "Arch"
msgstr ""
#: src/views/preference/AuthSettings.vue:96
#: src/views/preference/AuthSettings.vue:102
#, fuzzy
msgid "Are you sure to delete this banned IP immediately?"
msgstr "Bạn chắc chắn muốn xóa nó "
#: src/views/preference/components/Passkey.vue:119
#, fuzzy
msgid "Are you sure to delete this passkey immediately?"
msgstr "Bạn chắc chắn muốn xóa nó "
#: src/components/Notification/Notification.vue:86
#: src/views/notification/Notification.vue:40
#, fuzzy
@ -168,7 +182,7 @@ msgstr "Hỏi ChatGPT"
msgid "Assistant"
msgstr "Trợ lý"
#: src/views/preference/AuthSettings.vue:17
#: src/views/preference/AuthSettings.vue:18
msgid "Attempts"
msgstr ""
@ -177,6 +191,14 @@ msgstr ""
msgid "Auth"
msgstr "Tác giả"
#: src/components/2FA/Authorization.vue:126
msgid "Authenticate with a passkey"
msgstr ""
#: src/views/preference/AuthSettings.vue:63
msgid "Authentication Settings"
msgstr ""
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
msgid "Author"
@ -210,15 +232,15 @@ msgstr "Quay lại"
msgid "Back to list"
msgstr ""
#: src/views/preference/AuthSettings.vue:70
#: src/views/preference/AuthSettings.vue:76
msgid "Ban Threshold Minutes"
msgstr ""
#: src/views/preference/AuthSettings.vue:84
#: src/views/preference/AuthSettings.vue:90
msgid "Banned IPs"
msgstr ""
#: src/views/preference/AuthSettings.vue:20
#: src/views/preference/AuthSettings.vue:21
msgid "Banned Until"
msgstr ""
@ -261,7 +283,7 @@ msgstr ""
msgid "CADir"
msgstr ""
#: src/views/preference/components/TOTP.vue:150
#: src/views/preference/components/TOTP.vue:151
msgid "Can't scan? Use text key binding"
msgstr ""
@ -275,6 +297,7 @@ msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:50
#: src/views/domain/ngx_conf/NgxServer.vue:80
#: src/views/domain/ngx_conf/NgxUpstream.vue:33
#: src/views/preference/components/Passkey.vue:147
#: src/views/stream/components/Deploy.vue:21
#: src/views/stream/components/RightSettings.vue:51
msgid "Cancel"
@ -437,6 +460,7 @@ msgid "Create Folder"
msgstr "Tạo thêm"
#: src/views/notification/notificationColumns.tsx:48
#: src/views/preference/components/Passkey.vue:101
#: src/views/user/userColumns.tsx:48
msgid "Created at"
msgstr "Ngày tạo"
@ -458,12 +482,12 @@ msgstr "Chứng chỉ"
msgid "Credentials"
msgstr "Chứng chỉ"
#: src/views/preference/components/TOTP.vue:98
msgid "Current account is enabled 2FA."
#: src/views/preference/components/TOTP.vue:99
msgid "Current account is enabled TOTP."
msgstr ""
#: src/views/preference/components/TOTP.vue:95
msgid "Current account is not enabled 2FA."
#: src/views/preference/components/TOTP.vue:96
msgid "Current account is not enabled TOTP."
msgstr ""
#: src/views/system/Upgrade.vue:167
@ -687,6 +711,12 @@ msgstr "Đang tải phiên bản mới nhất"
msgid "Dry run mode enabled"
msgstr "Đã bật chế độ Dry run"
#: src/views/preference/components/AddPasskey.vue:107
msgid ""
"Due to the security policies of some browsers, you cannot use passkeys on "
"non-HTTPS websites, except when running on localhost."
msgstr ""
#: src/views/domain/components/SiteDuplicate.vue:122
#: src/views/domain/DomainList.vue:140
#: src/views/stream/components/StreamDuplicate.vue:122
@ -762,12 +792,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:124
#, fuzzy
msgid "Enable 2FA"
msgstr "Đã bật"
#: src/views/preference/components/TOTP.vue:54
#: src/views/preference/components/TOTP.vue:55
#, fuzzy
msgid "Enable 2FA successfully"
msgstr "Đã bật"
@ -790,6 +815,11 @@ msgstr "Đã bật"
msgid "Enable TLS"
msgstr "Bật TLS"
#: src/views/preference/components/TOTP.vue:125
#, fuzzy
msgid "Enable TOTP"
msgstr "Bật TLS"
#: src/views/domain/components/RightSettings.vue:77
#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:29
#: src/views/environment/envColumns.tsx:104
@ -908,6 +938,12 @@ msgstr "Lọc"
msgid "Finished"
msgstr "Đã hoàn thành"
#: src/views/preference/components/AddPasskey.vue:77
msgid ""
"Follow the instructions in the dialog to complete the passkey registration "
"process."
msgstr ""
#: src/views/preference/BasicSettings.vue:43
#, fuzzy
msgid "For Chinese user: https://mirror.ghproxy.com/"
@ -981,18 +1017,22 @@ msgstr ""
msgid "If left blank, the default CA Dir will be used."
msgstr ""
#: src/views/preference/AuthSettings.vue:62
#: src/views/preference/AuthSettings.vue:68
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:110
#: src/views/preference/components/TOTP.vue:111
msgid ""
"If you lose your mobile phone, you can use the recovery code to reset your "
"2FA."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:76
msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:109
msgid ""
"If your domain has CNAME records and you cannot obtain certificates, you "
@ -1009,7 +1049,7 @@ msgstr "Xuất"
msgid "Import Certificate"
msgstr "Chứng chỉ"
#: src/views/other/Login.vue:76
#: src/views/other/Login.vue:79
#, fuzzy
msgid "Incorrect username or password"
msgstr "Tên người dùng hoặc mật khẩu không chính xác"
@ -1026,12 +1066,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:157
#: src/views/preference/components/TOTP.vue:158
msgid "Input the code from the app:"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:49
#: src/views/preference/components/TOTP.vue:170
#: src/components/2FA/Authorization.vue:87
#: src/views/preference/components/TOTP.vue:171
msgid "Input the recovery code:"
msgstr ""
@ -1053,7 +1093,7 @@ msgstr ""
msgid "Invalid"
msgstr "Hợp lệ"
#: src/views/other/Login.vue:86
#: src/views/other/Login.vue:89
msgid "Invalid 2FA or recovery code"
msgstr ""
@ -1067,11 +1107,11 @@ msgstr "E-mail không chính xác!"
msgid "Invalid folder name"
msgstr ""
#: src/components/OTP/useOTPModal.ts:61
#: src/components/2FA/use2FAModal.ts:65
msgid "Invalid passcode or recovery code"
msgstr ""
#: src/views/preference/AuthSettings.vue:14
#: src/views/preference/AuthSettings.vue:15
msgid "IP"
msgstr ""
@ -1108,6 +1148,11 @@ msgstr "Loại"
msgid "Last checked at"
msgstr "Kiểm tra lần cuối lúc"
#: src/views/preference/components/Passkey.vue:102
#, fuzzy
msgid "Last used at"
msgstr "Kiểm tra lần cuối lúc"
#: src/views/user/userColumns.tsx:25
msgid "Leave blank for no change"
msgstr "Bỏ trống nếu không thay đổi"
@ -1173,11 +1218,11 @@ msgstr "Locations"
msgid "Log"
msgstr "Log"
#: src/routes/index.ts:305 src/views/other/Login.vue:207
#: src/routes/index.ts:305 src/views/other/Login.vue:247
msgid "Login"
msgstr "Đăng nhập"
#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
#: src/views/other/Login.vue:133 src/views/other/Login.vue:66
msgid "Login successful"
msgstr "Đăng nhập thành công"
@ -1230,7 +1275,7 @@ msgstr "Người dùng"
msgid "Managed Certificate"
msgstr ""
#: src/views/preference/AuthSettings.vue:76
#: src/views/preference/AuthSettings.vue:82
msgid "Max Attempts"
msgstr ""
@ -1290,6 +1335,7 @@ msgstr "Single Directive"
#: src/views/domain/DomainList.vue:13
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
#: src/views/environment/envColumns.tsx:9
#: src/views/preference/components/AddPasskey.vue:81
#: src/views/stream/components/RightSettings.vue:82
#: src/views/stream/components/StreamDuplicate.vue:129
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:188
@ -1376,7 +1422,7 @@ msgstr "Restart Nginx thành công"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
#: src/views/domain/ngx_conf/LocationEditor.vue:70
#: src/views/notification/Notification.vue:38
#: src/views/preference/AuthSettings.vue:98
#: src/views/preference/AuthSettings.vue:104
#: src/views/preference/BasicSettings.vue:101
#: src/views/stream/StreamList.vue:165
msgid "No"
@ -1478,6 +1524,10 @@ msgstr "Trực tuyến"
msgid "OpenAI"
msgstr ""
#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
msgid "Or"
msgstr ""
#: src/views/config/components/Rename.vue:69
msgid "Original name"
msgstr ""
@ -1507,7 +1557,18 @@ msgstr "Ghi đè tập tin đã tồn tại"
msgid "Params"
msgstr "Tham số"
#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
#: src/views/preference/components/Passkey.vue:65
msgid "Passkey"
msgstr ""
#: src/views/preference/components/Passkey.vue:68
msgid ""
"Passkeys are webauthn credentials that validate your identity using touch, "
"facial recognition, a device password, or a PIN. They can be used as a "
"password replacement or as a 2FA method."
msgstr ""
#: src/views/other/Login.vue:208 src/views/user/userColumns.tsx:18
msgid "Password"
msgstr "Mật khẩu"
@ -1533,8 +1594,14 @@ msgstr "Nâng cấp core không thành công"
msgid "Performing core upgrade"
msgstr "Nâng cấp core"
#: src/components/OTP/OTPAuthorization.vue:37
msgid "Please enter the 2FA code:"
#: src/views/preference/components/AddPasskey.vue:75
msgid ""
"Please enter a name for the passkey you wish to create and click the OK "
"button below."
msgstr ""
#: src/components/2FA/Authorization.vue:75
msgid "Please enter the OTP code:"
msgstr ""
#: src/views/certificate/DNSCredential.vue:53
@ -1579,11 +1646,11 @@ msgstr ""
msgid "Please input your E-mail!"
msgstr "Vui lòng nhập E-mail của bạn!"
#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
msgid "Please input your password!"
msgstr "Vui lòng nhập mật khẩu!"
#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
msgid "Please input your username!"
msgstr "Vui lòng nhập username!"
@ -1647,16 +1714,16 @@ msgstr ""
msgid "Recovered Successfully"
msgstr "Xoá thành công"
#: src/components/OTP/OTPAuthorization.vue:56
#: src/views/preference/components/TOTP.vue:177
#: src/components/2FA/Authorization.vue:94
#: src/views/preference/components/TOTP.vue:178
msgid "Recovery"
msgstr ""
#: src/views/preference/components/TOTP.vue:103
#: src/views/preference/components/TOTP.vue:104
msgid "Recovery Code"
msgstr ""
#: src/views/preference/components/TOTP.vue:112
#: src/views/preference/components/TOTP.vue:113
msgid "Recovery Code:"
msgstr ""
@ -1678,6 +1745,11 @@ msgstr "Đăng ký người dùng"
msgid "Register failed"
msgstr "Đăng ký người dùng"
#: src/views/preference/components/AddPasskey.vue:26
#, fuzzy
msgid "Register passkey successfully"
msgstr "Gia hạn chứng chỉ SSL"
#: src/views/certificate/ACMEUser.vue:67
#, fuzzy
msgid "Register successfully"
@ -1714,11 +1786,12 @@ msgstr "Đang tải lại"
msgid "Reloading nginx"
msgstr "Tải lại nginx"
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/AuthSettings.vue:109
msgid "Remove"
msgstr ""
#: src/views/preference/AuthSettings.vue:47
#: src/views/preference/AuthSettings.vue:48
#: src/views/preference/components/Passkey.vue:50
#, fuzzy
msgid "Remove successfully"
msgstr "Xoá thành công"
@ -1798,7 +1871,7 @@ msgstr "Yêu cầu có chứa tham số sai"
msgid "Reset"
msgstr "Đặt lại"
#: src/views/preference/components/TOTP.vue:132
#: src/views/preference/components/TOTP.vue:133
#, fuzzy
msgid "Reset 2FA"
msgstr "Đặt lại"
@ -1824,6 +1897,7 @@ msgstr "Running"
#: src/views/certificate/CertificateEditor.vue:254
#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
#: src/views/preference/components/Passkey.vue:136
#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
msgid "Save"
msgstr "Lưu"
@ -1852,7 +1926,7 @@ msgstr "Lưu thành công"
msgid "Saved successfully"
msgstr "Lưu thành công"
#: src/views/preference/components/TOTP.vue:93
#: src/views/preference/components/TOTP.vue:94
msgid "Scan the QR code with your mobile phone to add the account to the app."
msgstr ""
@ -1860,7 +1934,7 @@ msgstr ""
msgid "SDK"
msgstr ""
#: src/views/preference/components/TOTP.vue:149
#: src/views/preference/components/TOTP.vue:150
msgid "Secret has been copied"
msgstr ""
@ -1885,9 +1959,12 @@ msgstr "Gửi"
#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
#: src/views/environment/BatchUpgrader.vue:57
#: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
#: src/views/preference/AuthSettings.vue:49
#: src/views/preference/components/TOTP.vue:44
#: src/views/preference/components/TOTP.vue:57
#: src/views/preference/AuthSettings.vue:50
#: src/views/preference/components/Passkey.vue:26
#: src/views/preference/components/Passkey.vue:43
#: src/views/preference/components/Passkey.vue:56
#: src/views/preference/components/TOTP.vue:45
#: src/views/preference/components/TOTP.vue:58
#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
msgid "Server error"
@ -1933,6 +2010,10 @@ msgstr "Sử dụng HTTP01 để xác thực SSL"
msgid "Show"
msgstr ""
#: src/views/other/Login.vue:265
msgid "Sign in with a passkey"
msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:51
msgid "Single Directive"
msgstr "Single Directive"
@ -1962,7 +2043,7 @@ msgstr ""
msgid "SSL Certificate Path"
msgstr ""
#: src/views/other/Login.vue:189
#: src/views/other/Login.vue:223
msgid "SSO Login"
msgstr ""
@ -2130,7 +2211,7 @@ msgstr ""
msgid "The path exists, but the file is not a private key"
msgstr ""
#: src/views/preference/components/TOTP.vue:111
#: src/views/preference/components/TOTP.vue:112
msgid ""
"The recovery code is only displayed once, please save it in a safe place."
msgstr ""
@ -2193,7 +2274,8 @@ msgid ""
"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
msgstr ""
#: src/views/preference/AuthSettings.vue:61
#: src/views/preference/AuthSettings.vue:67
#: src/views/preference/components/AddPasskey.vue:71
#: src/views/preference/LogrotateSettings.vue:11
msgid "Tips"
msgstr ""
@ -2202,12 +2284,19 @@ msgstr ""
msgid "Title"
msgstr "Tiêu đề"
#: src/views/preference/components/TOTP.vue:92
#: src/views/preference/components/TOTP.vue:93
msgid ""
"To enable it, you need to install the Google or Microsoft Authenticator app "
"on your mobile phone."
msgstr ""
#: src/views/preference/components/AddPasskey.vue:95
msgid ""
"To ensure security, Webauthn configuration cannot be added through the UI. "
"Please manually configure the following in the app.ini configuration file "
"and restart Nginx UI."
msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
msgid ""
"To make sure the certification auto-renewal can work normally, we need to "
@ -2224,11 +2313,15 @@ msgstr ""
msgid "Token is not valid"
msgstr ""
#: src/views/other/Login.vue:79
#: src/views/other/Login.vue:82
msgid "Too many login failed attempts, please try again later"
msgstr ""
#: src/views/preference/components/TOTP.vue:91
msgid "TOTP"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
msgid ""
"TOTP is a two-factor authentication method that uses a time-based one-time "
"password algorithm."
@ -2238,7 +2331,7 @@ msgstr ""
msgid "Trash"
msgstr ""
#: src/components/OTP/useOTPModal.ts:67
#: src/components/2FA/use2FAModal.ts:71
msgid "Two-factor authentication required"
msgstr ""
@ -2248,6 +2341,11 @@ msgstr ""
msgid "Type"
msgstr "Loại"
#: src/views/preference/components/Passkey.vue:41
#, fuzzy
msgid "Update successfully"
msgstr "Cập nhật thành công"
#: src/views/certificate/ACMEUser.vue:53
#: src/views/certificate/DNSCredential.vue:27
#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
@ -2294,11 +2392,11 @@ msgstr "Thời gian hoạt động:"
msgid "URL"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:69
#: src/components/2FA/Authorization.vue:107
msgid "Use OTP"
msgstr ""
#: src/components/OTP/OTPAuthorization.vue:65
#: src/components/2FA/Authorization.vue:103
msgid "Use recovery code"
msgstr ""
@ -2307,11 +2405,11 @@ msgstr ""
msgid "User"
msgstr "Người dùng"
#: src/views/other/Login.vue:82
#: src/views/other/Login.vue:85
msgid "User is banned"
msgstr ""
#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
#: src/views/other/Login.vue:198 src/views/user/userColumns.tsx:9
msgid "Username"
msgstr "Username"
@ -2353,6 +2451,7 @@ msgstr "Cơ bản"
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
#: src/views/domain/DomainAdd.vue:112
#: src/views/notification/notificationColumns.tsx:19
#: src/views/preference/components/AddPasskey.vue:88
msgid "Warning"
msgstr "Lưu ý"
@ -2387,7 +2486,7 @@ msgstr "Ghi chứng chỉ vào disk"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
#: src/views/domain/ngx_conf/LocationEditor.vue:69
#: src/views/preference/AuthSettings.vue:97
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/BasicSettings.vue:100
msgid "Yes"
msgstr "Có"
@ -2400,6 +2499,20 @@ msgstr "Bạn đang sử dụng phiên bản mới nhất"
msgid "You can check Nginx UI upgrade at this page."
msgstr "Bạn có thể kiểm tra nâng cấp Nginx UI tại trang này"
#: src/views/preference/components/AddPasskey.vue:93
msgid ""
"You have not configured the settings of Webauthn, so you cannot add a "
"passkey."
msgstr ""
#: src/views/preference/components/Passkey.vue:81
msgid "Your passkeys"
msgstr ""
#, fuzzy
#~ msgid "Enable 2FA"
#~ msgstr "Đã bật"
#, fuzzy
#~ msgid "Rename "
#~ msgstr "Username"

Binary file not shown.

View file

@ -17,7 +17,7 @@ msgstr ""
msgid "2FA"
msgstr "2FA"
#: src/views/preference/components/TOTP.vue:90
#: src/views/preference/AuthSettings.vue:58
msgid "2FA Settings"
msgstr "2FA 设置"
@ -40,7 +40,7 @@ msgstr "ACME 用户"
#: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
#: src/views/environment/envColumns.tsx:131
#: src/views/notification/notificationColumns.tsx:54
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
#: src/views/preference/AuthSettings.vue:27 src/views/stream/StreamList.vue:47
#: src/views/user/userColumns.tsx:60
msgid "Action"
msgstr "操作"
@ -55,6 +55,11 @@ msgstr "操作"
msgid "Add"
msgstr "添加"
#: src/views/preference/components/AddPasskey.vue:51
#: src/views/preference/components/AddPasskey.vue:55
msgid "Add a passkey"
msgstr "添加 Passkey"
#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
#: src/views/config/ConfigEditor.vue:204
msgid "Add Configuration"
@ -89,6 +94,10 @@ msgstr "额外选项"
msgid "Advance Mode"
msgstr "高级模式"
#: src/views/preference/components/AddPasskey.vue:105
msgid "Afterwards, refresh this page and click add passkey again."
msgstr "然后,刷新此页面并再次点击添加 Passkey。"
#: src/views/preference/OpenAISettings.vue:44
msgid "API Base Url"
msgstr "API 地址"
@ -109,10 +118,14 @@ msgstr "API Token"
msgid "Arch"
msgstr "架构"
#: src/views/preference/AuthSettings.vue:96
#: src/views/preference/AuthSettings.vue:102
msgid "Are you sure to delete this banned IP immediately?"
msgstr "您确定要立即删除这个被禁用的 IP 吗?"
#: src/views/preference/components/Passkey.vue:119
msgid "Are you sure to delete this passkey immediately?"
msgstr "您确定要立即删除这个 Passkey 吗?"
#: src/components/Notification/Notification.vue:86
#: src/views/notification/Notification.vue:40
msgid "Are you sure you want to clear all notifications?"
@ -158,7 +171,7 @@ msgstr "与ChatGPT聊天"
msgid "Assistant"
msgstr "助手"
#: src/views/preference/AuthSettings.vue:17
#: src/views/preference/AuthSettings.vue:18
msgid "Attempts"
msgstr "尝试次数"
@ -166,6 +179,14 @@ msgstr "尝试次数"
msgid "Auth"
msgstr "认证"
#: src/components/2FA/Authorization.vue:126
msgid "Authenticate with a passkey"
msgstr "通过 Passkey 认证"
#: src/views/preference/AuthSettings.vue:63
msgid "Authentication Settings"
msgstr "认证设置"
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
msgid "Author"
@ -198,15 +219,15 @@ msgstr "返回首页"
msgid "Back to list"
msgstr "返回列表"
#: src/views/preference/AuthSettings.vue:70
#: src/views/preference/AuthSettings.vue:76
msgid "Ban Threshold Minutes"
msgstr "禁止阈值(分钟)"
#: src/views/preference/AuthSettings.vue:84
#: src/views/preference/AuthSettings.vue:90
msgid "Banned IPs"
msgstr "禁止 IP 列表"
#: src/views/preference/AuthSettings.vue:20
#: src/views/preference/AuthSettings.vue:21
msgid "Banned Until"
msgstr "禁用至"
@ -246,7 +267,7 @@ msgstr "CA Dir"
msgid "CADir"
msgstr "CADir"
#: src/views/preference/components/TOTP.vue:150
#: src/views/preference/components/TOTP.vue:151
msgid "Can't scan? Use text key binding"
msgstr "无法扫描?使用文本密钥绑定"
@ -260,6 +281,7 @@ msgstr "无法扫描?使用文本密钥绑定"
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:50
#: src/views/domain/ngx_conf/NgxServer.vue:80
#: src/views/domain/ngx_conf/NgxUpstream.vue:33
#: src/views/preference/components/Passkey.vue:147
#: src/views/stream/components/Deploy.vue:21
#: src/views/stream/components/RightSettings.vue:51
msgid "Cancel"
@ -407,6 +429,7 @@ msgid "Create Folder"
msgstr "创建文件夹"
#: src/views/notification/notificationColumns.tsx:48
#: src/views/preference/components/Passkey.vue:101
#: src/views/user/userColumns.tsx:48
msgid "Created at"
msgstr "创建时间"
@ -427,13 +450,13 @@ msgstr "DNS 凭证"
msgid "Credentials"
msgstr "凭证"
#: src/views/preference/components/TOTP.vue:98
msgid "Current account is enabled 2FA."
msgstr "当前账户已启用二步验证。"
#: src/views/preference/components/TOTP.vue:99
msgid "Current account is enabled TOTP."
msgstr "当前账户已启用 TOTP 验证。"
#: src/views/preference/components/TOTP.vue:95
msgid "Current account is not enabled 2FA."
msgstr "当前用户未启用二步验证。"
#: src/views/preference/components/TOTP.vue:96
msgid "Current account is not enabled TOTP."
msgstr "当前用户未启用 TOTP 验证。"
#: src/views/system/Upgrade.vue:167
msgid "Current Version"
@ -640,6 +663,14 @@ msgstr "下载最新版本"
msgid "Dry run mode enabled"
msgstr "试运行模式已启动"
#: src/views/preference/components/AddPasskey.vue:107
msgid ""
"Due to the security policies of some browsers, you cannot use passkeys on "
"non-HTTPS websites, except when running on localhost."
msgstr ""
"由于某些浏览器的安全策略,除非在 localhost 上使用,否则不能在非 HTTPS 网站上"
"使用 Passkey。"
#: src/views/domain/components/SiteDuplicate.vue:122
#: src/views/domain/DomainList.vue:140
#: src/views/stream/components/StreamDuplicate.vue:122
@ -708,11 +739,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:124
msgid "Enable 2FA"
msgstr "启用二步验证"
#: src/views/preference/components/TOTP.vue:54
#: src/views/preference/components/TOTP.vue:55
msgid "Enable 2FA successfully"
msgstr "二步验证启用成功"
@ -733,6 +760,10 @@ msgstr "启用成功"
msgid "Enable TLS"
msgstr "启用 TLS"
#: src/views/preference/components/TOTP.vue:125
msgid "Enable TOTP"
msgstr "启用 TOTP"
#: src/views/domain/components/RightSettings.vue:77
#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:29
#: src/views/environment/envColumns.tsx:104
@ -846,6 +877,12 @@ msgstr "过滤"
msgid "Finished"
msgstr "完成"
#: src/views/preference/components/AddPasskey.vue:77
msgid ""
"Follow the instructions in the dialog to complete the passkey registration "
"process."
msgstr "按照对话框中的指示完成 Passkey 的注册过程。"
#: src/views/preference/BasicSettings.vue:43
msgid "For Chinese user: https://mirror.ghproxy.com/"
msgstr "中国用户https://mirror.ghproxy.com/"
@ -914,7 +951,7 @@ msgstr "HTTP01"
msgid "If left blank, the default CA Dir will be used."
msgstr "如果留空,则使用默认 CA Dir。"
#: src/views/preference/AuthSettings.vue:62
#: src/views/preference/AuthSettings.vue:68
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."
@ -922,12 +959,16 @@ msgstr ""
"如果某个 IP 的登录失败次数达到禁用阈值分钟内的最大尝试次数,该 IP 将被禁止登"
"录一段时间。"
#: src/views/preference/components/TOTP.vue:110
#: src/views/preference/components/TOTP.vue:111
msgid ""
"If you lose your mobile phone, you can use the recovery code to reset your "
"2FA."
msgstr "如果丢失了手机,可以使用恢复代码重置二步验证。"
#: src/views/preference/components/AddPasskey.vue:76
msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
msgstr "如果您的浏览器支持 WebAuthn Passkey则会出现一个对话框。"
#: src/views/domain/cert/components/AutoCertStepOne.vue:109
msgid ""
"If your domain has CNAME records and you cannot obtain certificates, you "
@ -942,7 +983,7 @@ msgstr "导入"
msgid "Import Certificate"
msgstr "导入证书"
#: src/views/other/Login.vue:76
#: src/views/other/Login.vue:79
msgid "Incorrect username or password"
msgstr "用户名或密码错误"
@ -958,12 +999,12 @@ msgstr "初始化核心升级程序错误"
msgid "Initialing core upgrader"
msgstr "初始化核心升级器"
#: src/views/preference/components/TOTP.vue:157
#: src/views/preference/components/TOTP.vue:158
msgid "Input the code from the app:"
msgstr "输入应用程序中的代码:"
#: src/components/OTP/OTPAuthorization.vue:49
#: src/views/preference/components/TOTP.vue:170
#: src/components/2FA/Authorization.vue:87
#: src/views/preference/components/TOTP.vue:171
msgid "Input the recovery code:"
msgstr "输入恢复代码:"
@ -983,7 +1024,7 @@ msgstr "间隔"
msgid "Invalid"
msgstr "无效的"
#: src/views/other/Login.vue:86
#: src/views/other/Login.vue:89
msgid "Invalid 2FA or recovery code"
msgstr "无效的二步验证码或恢复密码"
@ -996,11 +1037,11 @@ msgstr "文件名无效"
msgid "Invalid folder name"
msgstr "无效文件夹名"
#: src/components/OTP/useOTPModal.ts:61
#: src/components/2FA/use2FAModal.ts:65
msgid "Invalid passcode or recovery code"
msgstr "二次验证码或恢复代码无效"
#: src/views/preference/AuthSettings.vue:14
#: src/views/preference/AuthSettings.vue:15
msgid "IP"
msgstr "IP"
@ -1033,6 +1074,10 @@ msgstr "密钥类型"
msgid "Last checked at"
msgstr "最后检查时间"
#: src/views/preference/components/Passkey.vue:102
msgid "Last used at"
msgstr "上次使用"
#: src/views/user/userColumns.tsx:25
msgid "Leave blank for no change"
msgstr "留空表示不修改"
@ -1092,11 +1137,11 @@ msgstr "Locations"
msgid "Log"
msgstr "日志"
#: src/routes/index.ts:305 src/views/other/Login.vue:207
#: src/routes/index.ts:305 src/views/other/Login.vue:247
msgid "Login"
msgstr "登录"
#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
#: src/views/other/Login.vue:133 src/views/other/Login.vue:66
msgid "Login successful"
msgstr "登录成功"
@ -1151,7 +1196,7 @@ msgstr "用户管理"
msgid "Managed Certificate"
msgstr "托管证书"
#: src/views/preference/AuthSettings.vue:76
#: src/views/preference/AuthSettings.vue:82
msgid "Max Attempts"
msgstr "最大尝试次数"
@ -1206,6 +1251,7 @@ msgstr "多行指令"
#: src/views/domain/DomainList.vue:13
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
#: src/views/environment/envColumns.tsx:9
#: src/views/preference/components/AddPasskey.vue:81
#: src/views/stream/components/RightSettings.vue:82
#: src/views/stream/components/StreamDuplicate.vue:129
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:188
@ -1287,7 +1333,7 @@ msgstr "Nginx 重启成功"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
#: src/views/domain/ngx_conf/LocationEditor.vue:70
#: src/views/notification/Notification.vue:38
#: src/views/preference/AuthSettings.vue:98
#: src/views/preference/AuthSettings.vue:104
#: src/views/preference/BasicSettings.vue:101
#: src/views/stream/StreamList.vue:165
msgid "No"
@ -1386,6 +1432,10 @@ msgstr "在线"
msgid "OpenAI"
msgstr "OpenAI"
#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
msgid "Or"
msgstr "或"
#: src/views/config/components/Rename.vue:69
msgid "Original name"
msgstr "原名"
@ -1414,7 +1464,20 @@ msgstr "覆盖现有文件"
msgid "Params"
msgstr "参数"
#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
#: src/views/preference/components/Passkey.vue:65
msgid "Passkey"
msgstr "Passkey"
#: src/views/preference/components/Passkey.vue:68
msgid ""
"Passkeys are webauthn credentials that validate your identity using touch, "
"facial recognition, a device password, or a PIN. They can be used as a "
"password replacement or as a 2FA method."
msgstr ""
"Passkey 是一种网络认证凭据,可通过指纹、面部识别、设备密码或 PIN 码验证身份。"
"它们可用作密码替代品或二步验证方法。"
#: src/views/other/Login.vue:208 src/views/user/userColumns.tsx:18
msgid "Password"
msgstr "密码"
@ -1440,9 +1503,15 @@ msgstr "执行核心升级错误"
msgid "Performing core upgrade"
msgstr "正在进行核心升级"
#: src/components/OTP/OTPAuthorization.vue:37
msgid "Please enter the 2FA code:"
msgstr "请输入二步验证码:"
#: src/views/preference/components/AddPasskey.vue:75
msgid ""
"Please enter a name for the passkey you wish to create and click the OK "
"button below."
msgstr "请为您要创建的 Passkey 输入一个名称,然后单击下面的 \"确定 \"按钮。"
#: src/components/2FA/Authorization.vue:75
msgid "Please enter the OTP code:"
msgstr "请输入 OTP"
#: src/views/certificate/DNSCredential.vue:53
msgid ""
@ -1482,11 +1551,11 @@ msgstr "请输入名称,这将被用作新配置的文件名!"
msgid "Please input your E-mail!"
msgstr "请输入您的邮箱!"
#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
msgid "Please input your password!"
msgstr "请输入您的密码!"
#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
msgid "Please input your username!"
msgstr "请输入您的用户名!"
@ -1548,16 +1617,16 @@ msgstr "恢复"
msgid "Recovered Successfully"
msgstr "恢复成功"
#: src/components/OTP/OTPAuthorization.vue:56
#: src/views/preference/components/TOTP.vue:177
#: src/components/2FA/Authorization.vue:94
#: src/views/preference/components/TOTP.vue:178
msgid "Recovery"
msgstr "恢复"
#: src/views/preference/components/TOTP.vue:103
#: src/views/preference/components/TOTP.vue:104
msgid "Recovery Code"
msgstr "恢复代码"
#: src/views/preference/components/TOTP.vue:112
#: src/views/preference/components/TOTP.vue:113
msgid "Recovery Code:"
msgstr "恢复代码:"
@ -1577,6 +1646,10 @@ msgstr "注册"
msgid "Register failed"
msgstr "注册失败"
#: src/views/preference/components/AddPasskey.vue:26
msgid "Register passkey successfully"
msgstr "Passkey 注册成功"
#: src/views/certificate/ACMEUser.vue:67
msgid "Register successfully"
msgstr "注册成功"
@ -1610,11 +1683,12 @@ msgstr "重载中"
msgid "Reloading nginx"
msgstr "正在重载 Nginx"
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/AuthSettings.vue:109
msgid "Remove"
msgstr "删除"
#: src/views/preference/AuthSettings.vue:47
#: src/views/preference/AuthSettings.vue:48
#: src/views/preference/components/Passkey.vue:50
msgid "Remove successfully"
msgstr "移除成功"
@ -1684,7 +1758,7 @@ msgstr "请求参数错误"
msgid "Reset"
msgstr "重置"
#: src/views/preference/components/TOTP.vue:132
#: src/views/preference/components/TOTP.vue:133
msgid "Reset 2FA"
msgstr "重置二步验证"
@ -1708,6 +1782,7 @@ msgstr "运行中"
#: src/views/certificate/CertificateEditor.vue:254
#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
#: src/views/preference/components/Passkey.vue:136
#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
msgid "Save"
msgstr "保存"
@ -1735,7 +1810,7 @@ msgstr "保存成功"
msgid "Saved successfully"
msgstr "保存成功"
#: src/views/preference/components/TOTP.vue:93
#: src/views/preference/components/TOTP.vue:94
msgid "Scan the QR code with your mobile phone to add the account to the app."
msgstr "用手机扫描二维码,将账户添加到应用程序中。"
@ -1743,7 +1818,7 @@ msgstr "用手机扫描二维码,将账户添加到应用程序中。"
msgid "SDK"
msgstr "SDK"
#: src/views/preference/components/TOTP.vue:149
#: src/views/preference/components/TOTP.vue:150
msgid "Secret has been copied"
msgstr "密钥已复制"
@ -1768,9 +1843,12 @@ msgstr "上传"
#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
#: src/views/environment/BatchUpgrader.vue:57
#: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
#: src/views/preference/AuthSettings.vue:49
#: src/views/preference/components/TOTP.vue:44
#: src/views/preference/components/TOTP.vue:57
#: src/views/preference/AuthSettings.vue:50
#: src/views/preference/components/Passkey.vue:26
#: src/views/preference/components/Passkey.vue:43
#: src/views/preference/components/Passkey.vue:56
#: src/views/preference/components/TOTP.vue:45
#: src/views/preference/components/TOTP.vue:58
#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
msgid "Server error"
@ -1814,6 +1892,10 @@ msgstr "使用 HTTP01 challenge provider"
msgid "Show"
msgstr "显示"
#: src/views/other/Login.vue:265
msgid "Sign in with a passkey"
msgstr "使用 Passkey 登录"
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:51
msgid "Single Directive"
msgstr "单行指令"
@ -1842,7 +1924,7 @@ msgstr "SSL证书密钥路径"
msgid "SSL Certificate Path"
msgstr "SSL证书路径"
#: src/views/other/Login.vue:189
#: src/views/other/Login.vue:223
msgid "SSO Login"
msgstr "SSO 登录"
@ -2000,7 +2082,7 @@ msgstr "路径存在,但文件不是证书"
msgid "The path exists, but the file is not a private key"
msgstr "路径存在,但文件不是私钥"
#: src/views/preference/components/TOTP.vue:111
#: src/views/preference/components/TOTP.vue:112
msgid ""
"The recovery code is only displayed once, please save it in a safe place."
msgstr "恢复密码只会显示一次,请妥善保存。"
@ -2063,7 +2145,8 @@ msgid ""
"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
msgstr "将 %{nodeNames} 上的 Nginx UI 升级或重新安装到 %{version} 版本。"
#: src/views/preference/AuthSettings.vue:61
#: src/views/preference/AuthSettings.vue:67
#: src/views/preference/components/AddPasskey.vue:71
#: src/views/preference/LogrotateSettings.vue:11
msgid "Tips"
msgstr "提示"
@ -2072,13 +2155,22 @@ msgstr "提示"
msgid "Title"
msgstr "标题"
#: src/views/preference/components/TOTP.vue:92
#: src/views/preference/components/TOTP.vue:93
msgid ""
"To enable it, you need to install the Google or Microsoft Authenticator app "
"on your mobile phone."
msgstr ""
"要启用该功能,您需要在手机上安装 Google 或 Microsoft Authenticator 应用程序。"
#: src/views/preference/components/AddPasskey.vue:95
msgid ""
"To ensure security, Webauthn configuration cannot be added through the UI. "
"Please manually configure the following in the app.ini configuration file "
"and restart Nginx UI."
msgstr ""
"为确保安全Webauthn 配置不能通过用户界面添加。请在 app.ini 配置文件中手动配"
"置以下内容,并重启 Nginx UI 服务。"
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
msgid ""
"To make sure the certification auto-renewal can work normally, we need to "
@ -2093,11 +2185,15 @@ msgstr ""
msgid "Token is not valid"
msgstr "Token 无效"
#: src/views/other/Login.vue:79
#: src/views/other/Login.vue:82
msgid "Too many login failed attempts, please try again later"
msgstr "登录失败次数过多,请稍后再试"
#: src/views/preference/components/TOTP.vue:91
msgid "TOTP"
msgstr "TOTP"
#: src/views/preference/components/TOTP.vue:92
msgid ""
"TOTP is a two-factor authentication method that uses a time-based one-time "
"password algorithm."
@ -2107,7 +2203,7 @@ msgstr "TOTP 是一种使用基于时间的一次性密码算法的双因素身
msgid "Trash"
msgstr "回收站"
#: src/components/OTP/useOTPModal.ts:67
#: src/components/2FA/use2FAModal.ts:71
msgid "Two-factor authentication required"
msgstr "需要两步验证"
@ -2117,6 +2213,10 @@ msgstr "需要两步验证"
msgid "Type"
msgstr "类型"
#: src/views/preference/components/Passkey.vue:41
msgid "Update successfully"
msgstr "更新成功"
#: src/views/certificate/ACMEUser.vue:53
#: src/views/certificate/DNSCredential.vue:27
#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
@ -2160,11 +2260,11 @@ msgstr "运行时间:"
msgid "URL"
msgstr "URL"
#: src/components/OTP/OTPAuthorization.vue:69
#: src/components/2FA/Authorization.vue:107
msgid "Use OTP"
msgstr "使用二步验证码"
#: src/components/OTP/OTPAuthorization.vue:65
#: src/components/2FA/Authorization.vue:103
msgid "Use recovery code"
msgstr "使用恢复代码"
@ -2172,11 +2272,11 @@ msgstr "使用恢复代码"
msgid "User"
msgstr "用户"
#: src/views/other/Login.vue:82
#: src/views/other/Login.vue:85
msgid "User is banned"
msgstr "用户被禁止"
#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
#: src/views/other/Login.vue:198 src/views/user/userColumns.tsx:9
msgid "Username"
msgstr "用户名"
@ -2214,6 +2314,7 @@ msgstr "预览模式"
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
#: src/views/domain/DomainAdd.vue:112
#: src/views/notification/notificationColumns.tsx:19
#: src/views/preference/components/AddPasskey.vue:88
msgid "Warning"
msgstr "警告"
@ -2245,7 +2346,7 @@ msgstr "正在将证书写入磁盘"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
#: src/views/domain/ngx_conf/LocationEditor.vue:69
#: src/views/preference/AuthSettings.vue:97
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/BasicSettings.vue:100
msgid "Yes"
msgstr "是的"
@ -2258,6 +2359,19 @@ msgstr "您使用的是最新版本"
msgid "You can check Nginx UI upgrade at this page."
msgstr "你可以在这个页面检查Nginx UI的升级。"
#: src/views/preference/components/AddPasskey.vue:93
msgid ""
"You have not configured the settings of Webauthn, so you cannot add a "
"passkey."
msgstr "您尚未配置 Webauthn 的设置,因此无法添加 Passkey。"
#: src/views/preference/components/Passkey.vue:81
msgid "Your passkeys"
msgstr "你的 Passkeys"
#~ msgid "Enable 2FA"
#~ msgstr "启用二步验证"
#~ msgid "Enter"
#~ msgstr "进入"

View file

@ -21,7 +21,7 @@ msgstr ""
msgid "2FA"
msgstr "多重要素驗證"
#: src/views/preference/components/TOTP.vue:90
#: src/views/preference/AuthSettings.vue:58
msgid "2FA Settings"
msgstr "多重要素驗證設定"
@ -44,7 +44,7 @@ msgstr "ACME 用戶"
#: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
#: src/views/environment/envColumns.tsx:131
#: src/views/notification/notificationColumns.tsx:54
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
#: src/views/preference/AuthSettings.vue:27 src/views/stream/StreamList.vue:47
#: src/views/user/userColumns.tsx:60
msgid "Action"
msgstr "操作"
@ -59,6 +59,11 @@ msgstr "操作"
msgid "Add"
msgstr "新增"
#: src/views/preference/components/AddPasskey.vue:51
#: src/views/preference/components/AddPasskey.vue:55
msgid "Add a passkey"
msgstr ""
#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
#: src/views/config/ConfigEditor.vue:204
msgid "Add Configuration"
@ -93,6 +98,10 @@ msgstr "其他設定"
msgid "Advance Mode"
msgstr "進階模式"
#: src/views/preference/components/AddPasskey.vue:105
msgid "Afterwards, refresh this page and click add passkey again."
msgstr ""
#: src/views/preference/OpenAISettings.vue:44
msgid "API Base Url"
msgstr "API 基礎網址"
@ -113,10 +122,15 @@ msgstr "API Token"
msgid "Arch"
msgstr "架構"
#: src/views/preference/AuthSettings.vue:96
#: src/views/preference/AuthSettings.vue:102
msgid "Are you sure to delete this banned IP immediately?"
msgstr "您確定要刪除這個被禁用的 IP 嗎?"
#: src/views/preference/components/Passkey.vue:119
#, fuzzy
msgid "Are you sure to delete this passkey immediately?"
msgstr "您確定要刪除這個被禁用的 IP 嗎?"
#: src/components/Notification/Notification.vue:86
#: src/views/notification/Notification.vue:40
msgid "Are you sure you want to clear all notifications?"
@ -162,7 +176,7 @@ msgstr "向 ChatGPT 尋求幫助"
msgid "Assistant"
msgstr "助理"
#: src/views/preference/AuthSettings.vue:17
#: src/views/preference/AuthSettings.vue:18
msgid "Attempts"
msgstr "嘗試次數"
@ -170,6 +184,14 @@ msgstr "嘗試次數"
msgid "Auth"
msgstr "身份驗證"
#: src/components/2FA/Authorization.vue:126
msgid "Authenticate with a passkey"
msgstr ""
#: src/views/preference/AuthSettings.vue:63
msgid "Authentication Settings"
msgstr ""
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
msgid "Author"
@ -202,15 +224,15 @@ msgstr "返回首頁"
msgid "Back to list"
msgstr "返回列表"
#: src/views/preference/AuthSettings.vue:70
#: src/views/preference/AuthSettings.vue:76
msgid "Ban Threshold Minutes"
msgstr "封禁閾值分鐘數"
#: src/views/preference/AuthSettings.vue:84
#: src/views/preference/AuthSettings.vue:90
msgid "Banned IPs"
msgstr "被禁止的 IP"
#: src/views/preference/AuthSettings.vue:20
#: src/views/preference/AuthSettings.vue:21
msgid "Banned Until"
msgstr "禁止至"
@ -250,7 +272,7 @@ msgstr "CA Dir"
msgid "CADir"
msgstr "CADir"
#: src/views/preference/components/TOTP.vue:150
#: src/views/preference/components/TOTP.vue:151
msgid "Can't scan? Use text key binding"
msgstr ""
@ -264,6 +286,7 @@ msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:50
#: src/views/domain/ngx_conf/NgxServer.vue:80
#: src/views/domain/ngx_conf/NgxUpstream.vue:33
#: src/views/preference/components/Passkey.vue:147
#: src/views/stream/components/Deploy.vue:21
#: src/views/stream/components/RightSettings.vue:51
msgid "Cancel"
@ -411,6 +434,7 @@ msgid "Create Folder"
msgstr "創建資料夾"
#: src/views/notification/notificationColumns.tsx:48
#: src/views/preference/components/Passkey.vue:101
#: src/views/user/userColumns.tsx:48
msgid "Created at"
msgstr "建立時間"
@ -431,12 +455,14 @@ msgstr "認證"
msgid "Credentials"
msgstr "認證資訊"
#: src/views/preference/components/TOTP.vue:98
msgid "Current account is enabled 2FA."
#: src/views/preference/components/TOTP.vue:99
#, fuzzy
msgid "Current account is enabled TOTP."
msgstr "當前帳戶已啟用多因素身份驗證。"
#: src/views/preference/components/TOTP.vue:95
msgid "Current account is not enabled 2FA."
#: src/views/preference/components/TOTP.vue:96
#, fuzzy
msgid "Current account is not enabled TOTP."
msgstr "當前帳戶未啟用多因素身份驗證。"
#: src/views/system/Upgrade.vue:167
@ -644,6 +670,12 @@ msgstr "正在下載最新版本"
msgid "Dry run mode enabled"
msgstr "試運轉模式已啟用"
#: src/views/preference/components/AddPasskey.vue:107
msgid ""
"Due to the security policies of some browsers, you cannot use passkeys on "
"non-HTTPS websites, except when running on localhost."
msgstr ""
#: src/views/domain/components/SiteDuplicate.vue:122
#: src/views/domain/DomainList.vue:140
#: src/views/stream/components/StreamDuplicate.vue:122
@ -712,11 +744,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:124
msgid "Enable 2FA"
msgstr "啟用多因素身份驗證"
#: src/views/preference/components/TOTP.vue:54
#: src/views/preference/components/TOTP.vue:55
msgid "Enable 2FA successfully"
msgstr "啟用多因素身份驗證成功"
@ -737,6 +765,11 @@ msgstr "啟用成功"
msgid "Enable TLS"
msgstr "啟用 TLS"
#: src/views/preference/components/TOTP.vue:125
#, fuzzy
msgid "Enable TOTP"
msgstr "啟用 TLS"
#: src/views/domain/components/RightSettings.vue:77
#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:29
#: src/views/environment/envColumns.tsx:104
@ -850,6 +883,12 @@ msgstr "篩選"
msgid "Finished"
msgstr "完成"
#: src/views/preference/components/AddPasskey.vue:77
msgid ""
"Follow the instructions in the dialog to complete the passkey registration "
"process."
msgstr ""
#: src/views/preference/BasicSettings.vue:43
msgid "For Chinese user: https://mirror.ghproxy.com/"
msgstr "中國使用者https://mirror.ghproxy.com/"
@ -918,7 +957,7 @@ msgstr "HTTP01"
msgid "If left blank, the default CA Dir will be used."
msgstr "如果留空,將使用默認的 CA Dir。"
#: src/views/preference/AuthSettings.vue:62
#: src/views/preference/AuthSettings.vue:68
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."
@ -926,12 +965,16 @@ msgstr ""
"如果來自某個 IP 的登錄失敗次數在禁止閾值分鐘內達到最大嘗試次數,該 IP 將被禁"
"止一段時間。"
#: src/views/preference/components/TOTP.vue:110
#: src/views/preference/components/TOTP.vue:111
msgid ""
"If you lose your mobile phone, you can use the recovery code to reset your "
"2FA."
msgstr "如果您丟失了手機,可以使用恢復碼重置您的多重因素驗證驗證。"
#: src/views/preference/components/AddPasskey.vue:76
msgid "If your browser supports WebAuthn Passkey, a dialog box will appear."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:109
msgid ""
"If your domain has CNAME records and you cannot obtain certificates, you "
@ -946,7 +989,7 @@ msgstr "導入"
msgid "Import Certificate"
msgstr "導入憑證"
#: src/views/other/Login.vue:76
#: src/views/other/Login.vue:79
msgid "Incorrect username or password"
msgstr "使用者名稱或密碼不正確"
@ -962,12 +1005,12 @@ msgstr "初始化核心升級程式錯誤"
msgid "Initialing core upgrader"
msgstr "正在初始化核心升級程式"
#: src/views/preference/components/TOTP.vue:157
#: src/views/preference/components/TOTP.vue:158
msgid "Input the code from the app:"
msgstr "請輸入應用程式中的代碼:"
#: src/components/OTP/OTPAuthorization.vue:49
#: src/views/preference/components/TOTP.vue:170
#: src/components/2FA/Authorization.vue:87
#: src/views/preference/components/TOTP.vue:171
msgid "Input the recovery code:"
msgstr "輸入恢復碼:"
@ -987,7 +1030,7 @@ msgstr "間隔"
msgid "Invalid"
msgstr "無效"
#: src/views/other/Login.vue:86
#: src/views/other/Login.vue:89
msgid "Invalid 2FA or recovery code"
msgstr "無效的多重因素驗證或恢復碼"
@ -1000,11 +1043,11 @@ msgstr "無效的檔案名"
msgid "Invalid folder name"
msgstr "無效的資料夾名稱"
#: src/components/OTP/useOTPModal.ts:61
#: src/components/2FA/use2FAModal.ts:65
msgid "Invalid passcode or recovery code"
msgstr "無效的密碼或恢復碼"
#: src/views/preference/AuthSettings.vue:14
#: src/views/preference/AuthSettings.vue:15
msgid "IP"
msgstr "IP"
@ -1037,6 +1080,11 @@ msgstr "密鑰類型"
msgid "Last checked at"
msgstr "上次檢查時間"
#: src/views/preference/components/Passkey.vue:102
#, fuzzy
msgid "Last used at"
msgstr "上次檢查時間"
#: src/views/user/userColumns.tsx:25
msgid "Leave blank for no change"
msgstr "留空表示不修改"
@ -1096,11 +1144,11 @@ msgstr "Locations"
msgid "Log"
msgstr "日誌"
#: src/routes/index.ts:305 src/views/other/Login.vue:207
#: src/routes/index.ts:305 src/views/other/Login.vue:247
msgid "Login"
msgstr "登入"
#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
#: src/views/other/Login.vue:133 src/views/other/Login.vue:66
msgid "Login successful"
msgstr "登入成功"
@ -1154,7 +1202,7 @@ msgstr "管理使用者"
msgid "Managed Certificate"
msgstr "受管理的憑證"
#: src/views/preference/AuthSettings.vue:76
#: src/views/preference/AuthSettings.vue:82
msgid "Max Attempts"
msgstr "最大嘗試次數"
@ -1209,6 +1257,7 @@ msgstr "多行指令"
#: src/views/domain/DomainList.vue:13
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
#: src/views/environment/envColumns.tsx:9
#: src/views/preference/components/AddPasskey.vue:81
#: src/views/stream/components/RightSettings.vue:82
#: src/views/stream/components/StreamDuplicate.vue:129
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:188
@ -1290,7 +1339,7 @@ msgstr "Nginx 重啟成功"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
#: src/views/domain/ngx_conf/LocationEditor.vue:70
#: src/views/notification/Notification.vue:38
#: src/views/preference/AuthSettings.vue:98
#: src/views/preference/AuthSettings.vue:104
#: src/views/preference/BasicSettings.vue:101
#: src/views/stream/StreamList.vue:165
msgid "No"
@ -1389,6 +1438,10 @@ msgstr "線上"
msgid "OpenAI"
msgstr "OpenAI"
#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
msgid "Or"
msgstr ""
#: src/views/config/components/Rename.vue:69
msgid "Original name"
msgstr "原始名稱"
@ -1417,7 +1470,18 @@ msgstr "覆蓋現有檔案"
msgid "Params"
msgstr "參數"
#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
#: src/views/preference/components/Passkey.vue:65
msgid "Passkey"
msgstr ""
#: src/views/preference/components/Passkey.vue:68
msgid ""
"Passkeys are webauthn credentials that validate your identity using touch, "
"facial recognition, a device password, or a PIN. They can be used as a "
"password replacement or as a 2FA method."
msgstr ""
#: src/views/other/Login.vue:208 src/views/user/userColumns.tsx:18
msgid "Password"
msgstr "密碼"
@ -1443,8 +1507,15 @@ msgstr "執行核心升級錯誤"
msgid "Performing core upgrade"
msgstr "正在執行核心升級"
#: src/components/OTP/OTPAuthorization.vue:37
msgid "Please enter the 2FA code:"
#: src/views/preference/components/AddPasskey.vue:75
msgid ""
"Please enter a name for the passkey you wish to create and click the OK "
"button below."
msgstr ""
#: src/components/2FA/Authorization.vue:75
#, fuzzy
msgid "Please enter the OTP code:"
msgstr "請輸入多重因素驗證碼:"
#: src/views/certificate/DNSCredential.vue:53
@ -1485,11 +1556,11 @@ msgstr "請輸入名稱,這將作為新設定的檔名!"
msgid "Please input your E-mail!"
msgstr "請輸入您的電子郵件!"
#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
#: src/views/other/Install.vue:44 src/views/other/Login.vue:47
msgid "Please input your password!"
msgstr "請輸入您的密碼!"
#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
#: src/views/other/Install.vue:38 src/views/other/Login.vue:41
msgid "Please input your username!"
msgstr "請輸入您的使用者名稱!"
@ -1551,16 +1622,16 @@ msgstr "恢復"
msgid "Recovered Successfully"
msgstr "恢復成功"
#: src/components/OTP/OTPAuthorization.vue:56
#: src/views/preference/components/TOTP.vue:177
#: src/components/2FA/Authorization.vue:94
#: src/views/preference/components/TOTP.vue:178
msgid "Recovery"
msgstr "恢復"
#: src/views/preference/components/TOTP.vue:103
#: src/views/preference/components/TOTP.vue:104
msgid "Recovery Code"
msgstr "恢復碼"
#: src/views/preference/components/TOTP.vue:112
#: src/views/preference/components/TOTP.vue:113
msgid "Recovery Code:"
msgstr "恢復碼:"
@ -1580,6 +1651,11 @@ msgstr "註冊"
msgid "Register failed"
msgstr "註冊失敗"
#: src/views/preference/components/AddPasskey.vue:26
#, fuzzy
msgid "Register passkey successfully"
msgstr "註冊成功"
#: src/views/certificate/ACMEUser.vue:67
msgid "Register successfully"
msgstr "註冊成功"
@ -1613,11 +1689,12 @@ msgstr "重新載入中"
msgid "Reloading nginx"
msgstr "正在重新載入 Nginx"
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/AuthSettings.vue:109
msgid "Remove"
msgstr "移除"
#: src/views/preference/AuthSettings.vue:47
#: src/views/preference/AuthSettings.vue:48
#: src/views/preference/components/Passkey.vue:50
msgid "Remove successfully"
msgstr "移除成功"
@ -1687,7 +1764,7 @@ msgstr "請求參數錯誤"
msgid "Reset"
msgstr "重設"
#: src/views/preference/components/TOTP.vue:132
#: src/views/preference/components/TOTP.vue:133
msgid "Reset 2FA"
msgstr "重置多重因素驗證"
@ -1711,6 +1788,7 @@ msgstr "執行中"
#: src/views/certificate/CertificateEditor.vue:254
#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
#: src/views/preference/components/Passkey.vue:136
#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
msgid "Save"
msgstr "儲存"
@ -1738,7 +1816,7 @@ msgstr "儲存成功"
msgid "Saved successfully"
msgstr "儲存成功"
#: src/views/preference/components/TOTP.vue:93
#: src/views/preference/components/TOTP.vue:94
msgid "Scan the QR code with your mobile phone to add the account to the app."
msgstr "用手機掃描二維碼將賬戶添加到應用程序中。"
@ -1746,7 +1824,7 @@ msgstr "用手機掃描二維碼將賬戶添加到應用程序中。"
msgid "SDK"
msgstr "SDK"
#: src/views/preference/components/TOTP.vue:149
#: src/views/preference/components/TOTP.vue:150
msgid "Secret has been copied"
msgstr ""
@ -1771,9 +1849,12 @@ msgstr "傳送"
#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
#: src/views/environment/BatchUpgrader.vue:57
#: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
#: src/views/preference/AuthSettings.vue:49
#: src/views/preference/components/TOTP.vue:44
#: src/views/preference/components/TOTP.vue:57
#: src/views/preference/AuthSettings.vue:50
#: src/views/preference/components/Passkey.vue:26
#: src/views/preference/components/Passkey.vue:43
#: src/views/preference/components/Passkey.vue:56
#: src/views/preference/components/TOTP.vue:45
#: src/views/preference/components/TOTP.vue:58
#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
msgid "Server error"
@ -1817,6 +1898,10 @@ msgstr "使用 HTTP01 挑戰提供者"
msgid "Show"
msgstr "顯示"
#: src/views/other/Login.vue:265
msgid "Sign in with a passkey"
msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:51
msgid "Single Directive"
msgstr "單一指令"
@ -1845,7 +1930,7 @@ msgstr "SSL 憑證金鑰路徑"
msgid "SSL Certificate Path"
msgstr "SSL 憑證路徑"
#: src/views/other/Login.vue:189
#: src/views/other/Login.vue:223
msgid "SSO Login"
msgstr "SSO 登錄"
@ -2003,7 +2088,7 @@ msgstr "路徑存在,但檔案不是憑證"
msgid "The path exists, but the file is not a private key"
msgstr "路徑存在,但檔案不是金鑰"
#: src/views/preference/components/TOTP.vue:111
#: src/views/preference/components/TOTP.vue:112
msgid ""
"The recovery code is only displayed once, please save it in a safe place."
msgstr "恢復碼僅顯示一次,請將其保存在安全的地方。"
@ -2066,7 +2151,8 @@ msgid ""
"This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
msgstr "這將在 %{nodeNames} 上升級或重新安裝 Nginx UI 到 %{version}。"
#: src/views/preference/AuthSettings.vue:61
#: src/views/preference/AuthSettings.vue:67
#: src/views/preference/components/AddPasskey.vue:71
#: src/views/preference/LogrotateSettings.vue:11
msgid "Tips"
msgstr "提示"
@ -2075,13 +2161,20 @@ msgstr "提示"
msgid "Title"
msgstr "標題"
#: src/views/preference/components/TOTP.vue:92
#: src/views/preference/components/TOTP.vue:93
msgid ""
"To enable it, you need to install the Google or Microsoft Authenticator app "
"on your mobile phone."
msgstr ""
"要啟用它,您需要在手機上安裝 Google 或 Microsoft Authenticator 應用程序。"
#: src/views/preference/components/AddPasskey.vue:95
msgid ""
"To ensure security, Webauthn configuration cannot be added through the UI. "
"Please manually configure the following in the app.ini configuration file "
"and restart Nginx UI."
msgstr ""
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
msgid ""
"To make sure the certification auto-renewal can work normally, we need to "
@ -2096,11 +2189,15 @@ msgstr ""
msgid "Token is not valid"
msgstr "令牌無效"
#: src/views/other/Login.vue:79
#: src/views/other/Login.vue:82
msgid "Too many login failed attempts, please try again later"
msgstr "登錄失敗次數過多,請稍後再試"
#: src/views/preference/components/TOTP.vue:91
msgid "TOTP"
msgstr ""
#: src/views/preference/components/TOTP.vue:92
msgid ""
"TOTP is a two-factor authentication method that uses a time-based one-time "
"password algorithm."
@ -2110,7 +2207,7 @@ msgstr "TOTP 是一種使用基於時間的一次性密碼算法的多重因素
msgid "Trash"
msgstr "垃圾桶"
#: src/components/OTP/useOTPModal.ts:67
#: src/components/2FA/use2FAModal.ts:71
msgid "Two-factor authentication required"
msgstr "需要多重因素驗證"
@ -2120,6 +2217,11 @@ msgstr "需要多重因素驗證"
msgid "Type"
msgstr "類型"
#: src/views/preference/components/Passkey.vue:41
#, fuzzy
msgid "Update successfully"
msgstr "更新成功"
#: src/views/certificate/ACMEUser.vue:53
#: src/views/certificate/DNSCredential.vue:27
#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
@ -2163,11 +2265,11 @@ msgstr "運作時間:"
msgid "URL"
msgstr "URL"
#: src/components/OTP/OTPAuthorization.vue:69
#: src/components/2FA/Authorization.vue:107
msgid "Use OTP"
msgstr "使用一次性密碼"
#: src/components/OTP/OTPAuthorization.vue:65
#: src/components/2FA/Authorization.vue:103
msgid "Use recovery code"
msgstr "使用恢復碼"
@ -2175,11 +2277,11 @@ msgstr "使用恢復碼"
msgid "User"
msgstr "使用者名稱"
#: src/views/other/Login.vue:82
#: src/views/other/Login.vue:85
msgid "User is banned"
msgstr "用戶被禁止"
#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
#: src/views/other/Login.vue:198 src/views/user/userColumns.tsx:9
msgid "Username"
msgstr "使用者名稱"
@ -2217,6 +2319,7 @@ msgstr "查看模式"
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
#: src/views/domain/DomainAdd.vue:112
#: src/views/notification/notificationColumns.tsx:19
#: src/views/preference/components/AddPasskey.vue:88
msgid "Warning"
msgstr "警告"
@ -2249,7 +2352,7 @@ msgstr "將憑證寫入磁碟"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
#: src/views/domain/ngx_conf/LocationEditor.vue:69
#: src/views/preference/AuthSettings.vue:97
#: src/views/preference/AuthSettings.vue:103
#: src/views/preference/BasicSettings.vue:100
msgid "Yes"
msgstr "是的"
@ -2262,6 +2365,19 @@ msgstr "您正在使用最新版本"
msgid "You can check Nginx UI upgrade at this page."
msgstr "您可以在此頁面檢查 Nginx UI 的升級。"
#: src/views/preference/components/AddPasskey.vue:93
msgid ""
"You have not configured the settings of Webauthn, so you cannot add a "
"passkey."
msgstr ""
#: src/views/preference/components/Passkey.vue:81
msgid "Your passkeys"
msgstr ""
#~ msgid "Enable 2FA"
#~ msgstr "啟用多因素身份驗證"
#, fuzzy
#~ msgid "Rename "
#~ msgstr "使用者名稱"

View file

@ -81,8 +81,8 @@ const visible: ComputedRef<sidebar[]> = computed(() => {
<Logo />
<AMenu
v-model:openKeys="openKeys"
v-model:selectedKeys="selectedKey"
v-model:open-keys="openKeys"
v-model:selected-keys="selectedKey"
mode="inline"
>
<EnvIndicator />

View file

@ -233,7 +233,7 @@ function goBack() {
>
<ACard class="col-right">
<ACollapse
v-model:activeKey="activeKey"
v-model:active-key="activeKey"
ghost
>
<ACollapsePanel

View file

@ -67,7 +67,7 @@ function on_change_enabled(checked: CheckedType) {
>
<ContextHolder />
<ACollapse
v-model:activeKey="active_key"
v-model:active-key="active_key"
ghost
>
<ACollapsePanel

View file

@ -183,7 +183,7 @@ const activeKey = ref(['3'])
</AFormItem>
<ACollapse
v-model:activeKey="activeKey"
v-model:active-key="activeKey"
ghost
>
<ACollapsePanel

View file

@ -95,7 +95,7 @@ provide('ngx_directives', ngx_directives)
<template>
<div>
<ContextHolder />
<ATabs v-model:activeKey="current_server_index">
<ATabs v-model:active-key="current_server_index">
<ATabPane
v-for="(v, k) in ngx_config.servers"
:key="k"

View file

@ -107,7 +107,7 @@ watch(ngx_directives, () => {
<ContextHolder />
<ATabs
v-if="ngx_config.upstreams && ngx_config.upstreams.length > 0"
v-model:activeKey="current_upstream_index"
v-model:active-key="current_upstream_index"
>
<ATabPane
v-for="(v, k) in ngx_config.upstreams"

View file

@ -9,7 +9,7 @@ import install from '@/api/install'
import SetLanguage from '@/components/SetLanguage/SetLanguage.vue'
import SwitchAppearance from '@/components/SwitchAppearance/SwitchAppearance.vue'
import Authorization from '@/components/2FA/Authorization.vue'
import gettext, { $gettext } from '@/gettext'
import gettext from '@/gettext'
import passkey from '@/api/passkey'
const thisYear = new Date().getFullYear()

View file

@ -0,0 +1,118 @@
<script setup lang="ts">
import { startRegistration } from '@simplewebauthn/browser'
import { message } from 'ant-design-vue'
import passkey from '@/api/passkey'
import { useUserStore } from '@/pinia'
const emit = defineEmits(['created'])
const user = useUserStore()
const passkeyName = ref('')
const addPasskeyModelOpen = ref(false)
const passkeyEnabled = ref(false)
const regLoading = ref(false)
async function registerPasskey() {
regLoading.value = true
try {
const options = await passkey.begin_registration()
const attestationResponse = await startRegistration(options.publicKey)
await passkey.finish_registration(attestationResponse, passkeyName.value)
emit('created')
message.success($gettext('Register passkey successfully'))
addPasskeyModelOpen.value = false
user.passkeyRawId = attestationResponse.rawId
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
catch (e: any) {
message.error($gettext(e.message ?? 'Server error'))
}
regLoading.value = false
}
function addPasskey() {
addPasskeyModelOpen.value = true
passkeyName.value = ''
}
passkey.get_config_status().then(r => {
passkeyEnabled.value = r.status
})
</script>
<template>
<div>
<AButton @click="addPasskey">
{{ $gettext('Add a passkey') }}
</AButton>
<AModal
v-model:open="addPasskeyModelOpen"
:title="$gettext('Add a passkey')"
centered
:mask="false"
:mask-closable="!passkeyEnabled"
:closable="!passkeyEnabled"
:footer="passkeyEnabled ? undefined : false"
:confirm-loading="regLoading"
@ok="registerPasskey"
>
<AForm
v-if="passkeyEnabled"
layout="vertical"
>
<div>
<AAlert
class="mb-4"
:message="$gettext('Tips')"
type="info"
>
<template #description>
<p>{{ $gettext('Please enter a name for the passkey you wish to create and click the OK button below.') }}</p>
<p>{{ $gettext('If your browser supports WebAuthn Passkey, a dialog box will appear.') }}</p>
<p>{{ $gettext('Follow the instructions in the dialog to complete the passkey registration process.') }}</p>
</template>
</AAlert>
</div>
<AFormItem :label="$gettext('Name')">
<AInput v-model:value="passkeyName" />
</AFormItem>
</AForm>
<div v-else>
<AAlert
class="mb-4"
:message="$gettext('Warning')"
type="warning"
show-icon
>
<template #description>
<p>{{ $gettext('You have not configured the settings of Webauthn, so you cannot add a passkey.') }}</p>
<p>
{{ $gettext('To ensure security, Webauthn configuration cannot be added through the UI. '
+ 'Please manually configure the following in the app.ini configuration file and restart Nginx UI.') }}
</p>
<pre>[webauthn]
# This is the display name
RPDisplayName = Nginx UI
# The domain name of Nginx UI
RPID = localhost
# The list of origin addresses
RPOrigins = http://localhost:3002</pre>
<p>{{ $gettext('Afterwards, refresh this page and click add passkey again.') }}</p>
<p>
{{ $gettext(`Due to the security policies of some browsers, you cannot use passkeys on non-HTTPS websites, except when running on localhost.`) }}
</p>
</template>
</AAlert>
</div>
</AModal>
</div>
</template>
<style scoped lang="less">
</style>

View file

@ -1,6 +1,5 @@
<script setup lang="ts">
import { message } from 'ant-design-vue'
import { startRegistration } from '@simplewebauthn/browser'
import { DeleteOutlined, EditOutlined, KeyOutlined } from '@ant-design/icons-vue'
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
@ -9,39 +8,15 @@ import type { Passkey } from '@/api/passkey'
import passkey from '@/api/passkey'
import ReactiveFromNow from '@/components/ReactiveFromNow/ReactiveFromNow.vue'
import { useUserStore } from '@/pinia'
import AddPasskey from '@/views/preference/components/AddPasskey.vue'
dayjs.extend(relativeTime)
const user = useUserStore()
const passkeyName = ref('')
const addPasskeyModelOpen = ref(false)
const regLoading = ref(false)
async function registerPasskey() {
regLoading.value = true
try {
const options = await passkey.begin_registration()
const attestationResponse = await startRegistration(options.publicKey)
await passkey.finish_registration(attestationResponse, passkeyName.value)
getList()
message.success($gettext('Register passkey successfully'))
addPasskeyModelOpen.value = false
user.passkeyRawId = attestationResponse.rawId
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
catch (e: any) {
message.error($gettext(e.message ?? 'Server error'))
}
regLoading.value = false
}
const getListLoading = ref(true)
const data = ref([]) as Ref<Passkey[]>
const passkeyName = ref('')
function getList() {
getListLoading.value = true
@ -81,11 +56,6 @@ function remove(item: Passkey) {
message.error(e?.message ?? $gettext('Server error'))
})
}
function addPasskey() {
addPasskeyModelOpen.value = true
passkeyName.value = ''
}
</script>
<template>
@ -110,9 +80,7 @@ function addPasskey() {
<div class="font-bold">
{{ $gettext('Your passkeys') }}
</div>
<AButton @click="addPasskey">
{{ $gettext('Add a passkey') }}
</AButton>
<AddPasskey @created="() => getList()" />
</div>
</template>
<template #renderItem="{ item, index }">
@ -139,7 +107,10 @@ function addPasskey() {
<AButton
type="link"
size="small"
@click="() => modifyIdx = index"
@click="() => {
modifyIdx = index
passkeyName = item.name
}"
>
<EditOutlined />
</AButton>
@ -180,23 +151,6 @@ function addPasskey() {
</AListItem>
</template>
</AList>
<AModal
v-model:open="addPasskeyModelOpen"
:title="$gettext('Add a passkey')"
centered
:mask="false"
:mask-closable="false"
:closable="false"
:confirm-loading="regLoading"
@ok="registerPasskey"
>
<AForm layout="vertical">
<AFormItem :label="$gettext('Name')">
<AInput v-model:value="passkeyName" />
</AFormItem>
</AForm>
</AModal>
</div>
</template>

View file

@ -66,7 +66,7 @@ function on_change_enabled(checked: CheckedType) {
>
<ContextHolder />
<ACollapse
v-model:activeKey="active_key"
v-model:active-key="active_key"
ghost
>
<ACollapsePanel

View file

@ -1,7 +1,7 @@
package settings
type Auth struct {
IPWhiteList []string `json:"ip_white_list" binding:"omitempty,dive,ip" ini:",,allowshadow"`
IPWhiteList []string `json:"ip_white_list" binding:"omitempty,dive,ip" ini:",,allowshadow" protected:"true"`
BanThresholdMinutes int `json:"ban_threshold_minutes" binding:"min=1"`
MaxAttempts int `json:"max_attempts" binding:"min=1"`
}

View file

@ -104,6 +104,11 @@ func Save() (err error) {
reflectFrom(k, v)
}
// fix unable to save empty slice
if len(ServerSettings.RecursiveNameservers) == 0 {
Conf.Section("server").Key("RecursiveNameservers").SetValue("")
}
err = Conf.SaveTo(ConfPath)
if err != nil {
return