diff --git a/.air.toml b/.air.toml index d436adcdd..ac2a1ea23 100644 --- a/.air.toml +++ b/.air.toml @@ -7,7 +7,7 @@ tmp_dir = "tmp" [build] # Just plain old shell command. You could use `make` as well. -cmd = "CGO_ENABLED=1 go build -trimpath -tags=jsoniter,unembed -ldflags=\"-X 'github.com/0xJacky/Nginx-UI/settings.buildTime=$(date +%s)'\" -v -o ./tmp/main ." +cmd = "CGO_ENABLED=1 go build -tags=jsoniter,unembed,dev -ldflags=\"-X 'github.com/0xJacky/Nginx-UI/settings.buildTime=$(date +%s)'\" -v -o ./tmp/main ." # Binary file yields from `cmd`. bin = "tmp/main" # Customize binary. @@ -15,7 +15,7 @@ full_bin = "APP_ENV=dev APP_USER=air ./tmp/main" # Watch these filename extensions. include_ext = ["go", "tpl", "tmpl", "html", "toml", "po", "conf"] # Ignore these filename extensions or directories. -exclude_dir = ["assets", "tmp", "vendor", "app/node_modules", "upload", "docs", "resources", ".idea", "cmd"] +exclude_dir = ["assets", "tmp", "vendor", "app/node_modules", "upload", "docs", "resources", ".idea", "cmd", ".go", "log-index"] # Watch these directories if you specified. include_dir = [] # Exclude files. diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 000000000..b978e1e45 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,28 @@ +{ + "permissions": { + "allow": [ + "Bash(pnpm typecheck:*)", + "Bash(pnpm lint:*)", + "Bash(npm run build:*)", + "Bash(go build:*)", + "Bash(npm run typecheck:*)", + "Bash(mkdir:*)", + "Bash(mv:*)", + "Bash(grep:*)", + "Bash(go test:*)", + "mcp__context7__resolve-library-id", + "mcp__context7__get-library-docs", + "Bash(find:*)", + "Bash(sed:*)", + "Bash(cp:*)", + "mcp__eslint__lint-files", + "Bash(go generate:*)", + "Bash(pnpm eslint:*)", + "Read(//workspaces/cosy/settings/**)", + "Bash(go doc:*)", + "Bash(pnpm exec eslint:*)", + "Bash(go:*)" + ], + "deny": [] + } +} \ No newline at end of file diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 8ea8aac94..612254ffb 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -4,9 +4,11 @@ services: image: nginx-ui-dev container_name: nginx-ui volumes: + - ~/.ssh:/root/.ssh - ../..:/workspaces:cached - - ./go-path:/root/go + - go-modules:/root/go - ./data/nginx:/etc/nginx + - ./data/nginx-logs:/var/log/nginx - /var/run/docker.sock:/var/run/docker.sock command: sleep infinity environment: @@ -80,3 +82,6 @@ services: networks: nginxui: + +volumes: + go-modules: diff --git a/.devcontainer/start.sh b/.devcontainer/start.sh index fd788472a..520c14fa4 100755 --- a/.devcontainer/start.sh +++ b/.devcontainer/start.sh @@ -1,5 +1,10 @@ #!/bin/bash +# setup git for claude +git config --global gpg.format ssh +git config --global user.signingkey ~/.ssh/id_ed25519.pub +git config --global commit.gpgsign true + # install air go install github.com/air-verse/air@latest diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 90313b681..880ed5546 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,13 +41,13 @@ on: jobs: build_app: - runs-on: macos-14 + runs-on: macos-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up nodejs - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: current @@ -56,29 +56,44 @@ jobs: corepack enable corepack prepare pnpm@latest --activate pnpm install - working-directory: app - name: Check frontend code style run: | - pnpm run lint - working-directory: app + pnpm lint - name: Check frontend types run: | - pnpm run typecheck - working-directory: app + pnpm typecheck - name: Build run: | npx update-browserslist-db@latest pnpm build - working-directory: app + + - name: Compress frontend with xz + run: | + # Create compressed archive of the entire dist directory + tar -C app -cf - dist | xz -9 -c > app/dist.tar.xz + + # Verify compression worked and show savings (macOS compatible) + ORIGINAL_SIZE=$(find app/dist -type f -exec stat -f%z {} \; | awk '{total += $1} END {print total}') + COMPRESSED_SIZE=$(stat -f%z app/dist.tar.xz) + + if [[ $ORIGINAL_SIZE -gt 0 ]]; then + SAVINGS=$((100 - COMPRESSED_SIZE * 100 / ORIGINAL_SIZE)) + echo "Original size: ${ORIGINAL_SIZE} bytes" + echo "Compressed size: ${COMPRESSED_SIZE} bytes" + echo "Compression savings: ${SAVINGS}%" + else + echo "Compressed size: ${COMPRESSED_SIZE} bytes" + fi - name: Archive app artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: app-dist - path: app/dist + path: | + app/dist.tar.xz - name: Prepare publish if: github.event_name == 'release' @@ -97,12 +112,12 @@ jobs: needs: build_app strategy: matrix: - goos: [ linux, darwin, windows ] + goos: [ linux, windows ] goarch: [ amd64, 386, arm64 ] - exclude: - # Exclude i386 on darwin. - - goarch: 386 - goos: darwin + # exclude: + # Exclude i386 on windows (if needed) + # - goarch: 386 + # goos: windows include: # BEGIN Linux ARM 5 6 7 - goos: linux @@ -136,12 +151,12 @@ jobs: GOARM: ${{ matrix.goarm }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: - go-version: ^1.24.5 + go-version: ^1.25.4 cache: false - name: Setup environment @@ -179,10 +194,10 @@ jobs: go-${{ runner.os }}-${{ runner.arch }}-${{ env.CACHE_NAME }}- - name: Download app artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: name: app-dist - path: app/dist + path: app/dist.tar.xz - name: Generate files env: @@ -206,17 +221,6 @@ jobs: echo "CXX=${{ env.ARCH_NAME }}-linux-musl${{ env.ABI }}-g++" >> $GITHUB_ENV echo "LD_FLAGS=-w --extldflags '-static'" >> $GITHUB_ENV - - name: Install darwin cross compiler - if: env.GOOS == 'darwin' - run: | - curl -L https://github.com/Hintay/crossosx/releases/latest/download/crossosx.tar.zst -o crossosx.tar.zst - tar xvaf crossosx.tar.zst - echo "LD_LIBRARY_PATH=$(pwd)/crossosx/lib/" >> $GITHUB_ENV - echo "PATH=$(pwd)/crossosx/bin/:$PATH" >> $GITHUB_ENV - echo "CC=${{ env.ARCH_NAME }}-clang" >> $GITHUB_ENV - echo "CXX=${{ env.ARCH_NAME }}-clang++" >> $GITHUB_ENV - echo "LD_FLAGS=-w" >> $GITHUB_ENV - - name: Setup for Windows if: env.GOOS == 'windows' run: | @@ -257,7 +261,7 @@ jobs: go build -trimpath -tags=jsoniter -ldflags "$LD_FLAGS -X 'github.com/0xJacky/Nginx-UI/settings.buildTime=$(date +%s)'" -o dist/$BINARY_NAME -v main.go - name: Archive backend artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: ${{ env.ARTIFACT }} path: dist/${{ env.BINARY_NAME }} @@ -295,21 +299,113 @@ jobs: run: | echo "Uploading ${{ env.DIST }}.tar.gz to R2..." aws s3 cp ./${{ env.DIST }}.tar.gz s3://nginx-ui-dev-build/${{ env.DIST }}.tar.gz --endpoint-url=${{ secrets.R2_S3_API_ENDPOINT }} - + echo "Uploading ${{ env.DIST }}.tar.gz.digest to R2..." aws s3 cp ./${{ env.DIST }}.tar.gz.digest s3://nginx-ui-dev-build/${{ env.DIST }}.tar.gz.digest --endpoint-url=${{ secrets.R2_S3_API_ENDPOINT }} - + + echo "Upload completed successfully" + + build_macos_native: + runs-on: macos-latest + needs: build_app + strategy: + matrix: + goarch: [amd64, arm64] + env: + CGO_ENABLED: 1 + GOOS: darwin + GOARCH: ${{ matrix.goarch }} + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: ^1.25.4 + cache: false + + - name: Setup environment + id: info + run: | + export _NAME=$(jq ".darwin[\"$GOARCH\"].name" -r < .github/build/build_info.json) + export _ARTIFACT=nginx-ui-darwin-$GOARCH + export _BINARY=nginx-ui + echo "GOOS: darwin, GOARCH: $GOARCH, RELEASE_NAME: $_NAME, ARTIFACT_NAME: $_ARTIFACT, BINARY_NAME: $_BINARY" + echo "CACHE_NAME=$_NAME" >> $GITHUB_ENV + echo "DIST=nginx-ui-$_NAME" >> $GITHUB_ENV + echo "ARTIFACT=$_ARTIFACT" >> $GITHUB_ENV + echo "BINARY_NAME=$_BINARY" >> $GITHUB_ENV + + - name: Setup Go build cache + uses: actions/cache@v4 + with: + path: | + ~/go/pkg/mod + ~/.cache/go-build + key: go-${{ runner.os }}-${{ runner.arch }}-${{ env.CACHE_NAME }}-${{ hashFiles('go.mod') }} + restore-keys: | + go-${{ runner.os }}-${{ runner.arch }}-${{ env.CACHE_NAME }}- + + - name: Download app artifacts + uses: actions/download-artifact@v6 + with: + name: app-dist + path: app/dist.tar.xz + + - name: Generate files + run: go generate cmd/version/generate.go + + - name: Build with native CGO + run: | + mkdir -p dist + go build -trimpath -tags=jsoniter -ldflags "-w -X 'github.com/0xJacky/Nginx-UI/settings.buildTime=$(date +%s)'" -o dist/$BINARY_NAME -v main.go + + - name: Archive backend artifacts + uses: actions/upload-artifact@v5 + with: + name: ${{ env.ARTIFACT }} + path: dist/${{ env.BINARY_NAME }} + + - name: Prepare publish + run: | + cp README*.md ./dist + cd dist && tar -zcvf ../${{ env.DIST }}.tar.gz . + cd .. + openssl dgst -sha512 ${{ env.DIST }}.tar.gz | sed 's/([^)]*)//g' | awk '{print $NF}' >> ${{ env.DIST }}.tar.gz.digest + + - name: Publish + uses: softprops/action-gh-release@v2 + if: github.event_name == 'release' + with: + files: | + ${{ env.DIST }}.tar.gz + ${{ env.DIST }}.tar.gz.digest + + - name: Upload to R2 using S3 API + if: github.event_name != 'pull_request' && github.ref == 'refs/heads/dev' + env: + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + AWS_REGION: us-east-1 + run: | + echo "Uploading ${{ env.DIST }}.tar.gz to R2..." + aws s3 cp ./${{ env.DIST }}.tar.gz s3://nginx-ui-dev-build/${{ env.DIST }}.tar.gz --endpoint-url=${{ secrets.R2_S3_API_ENDPOINT }} + + echo "Uploading ${{ env.DIST }}.tar.gz.digest to R2..." + aws s3 cp ./${{ env.DIST }}.tar.gz.digest s3://nginx-ui-dev-build/${{ env.DIST }}.tar.gz.digest --endpoint-url=${{ secrets.R2_S3_API_ENDPOINT }} + echo "Upload completed successfully" docker-build: if: github.event_name != 'pull_request' runs-on: ubuntu-latest - needs: build + needs: [build, build_macos_native] env: PLATFORMS: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6,linux/arm/v5 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Docker meta id: meta @@ -326,7 +422,7 @@ jobs: type=raw,value=latest,enable=${{ github.event_name == 'release' && !github.event.release.prerelease }} - name: Download artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: path: ./dist @@ -376,11 +472,11 @@ jobs: update-homebrew: runs-on: ubuntu-latest - needs: build + needs: [build, build_macos_native] if: github.event_name == 'release' steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Get release info id: release @@ -505,7 +601,7 @@ jobs: cat nginx-ui.rb - name: Checkout homebrew-tools repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: 0xJacky/homebrew-tools path: homebrew-tools @@ -556,11 +652,11 @@ jobs: publish-winget: runs-on: windows-latest - needs: build + needs: [build, build_macos_native] if: github.event_name == 'release' steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Publish to WinGet uses: vedantmgoyal9/winget-releaser@v2 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 0f6069a4f..057d9df5d 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -62,11 +62,11 @@ jobs: # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v3 + uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} @@ -94,6 +94,6 @@ jobs: exit 1 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 + uses: github/codeql-action/analyze@v4 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/documents.yml b/.github/workflows/documents.yml index eead0402f..3be9f32ca 100644 --- a/.github/workflows/documents.yml +++ b/.github/workflows/documents.yml @@ -32,13 +32,13 @@ on: jobs: build: - runs-on: macos-14 + runs-on: macos-15 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up nodejs - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 23.x @@ -54,7 +54,7 @@ jobs: working-directory: docs - name: Archive artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: dist path: docs/.vitepress/dist diff --git a/.github/workflows/sync-main-on-release.yml b/.github/workflows/sync-main-on-release.yml index 9d0b05d73..7f3b73fe8 100644 --- a/.github/workflows/sync-main-on-release.yml +++ b/.github/workflows/sync-main-on-release.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 ref: dev diff --git a/.github/workflows/weblate-pull.yml b/.github/workflows/weblate-pull.yml index 0e8779440..b3144dc17 100644 --- a/.github/workflows/weblate-pull.yml +++ b/.github/workflows/weblate-pull.yml @@ -16,12 +16,12 @@ jobs: if: github.event.pull_request.merged == true || github.event.action == 'published' || github.event_name == 'workflow_dispatch' steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: - python-version: '3.13.5' + python-version: '3.14.0' - name: Install wlc run: pip install wlc @@ -29,4 +29,4 @@ jobs: - name: Update Repository env: WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }} - run: wlc --key $WEBLATE_TOKEN pull + run: wlc --key $WEBLATE_TOKEN reset nginx-ui diff --git a/.github/workflows/weblate-sync.yml b/.github/workflows/weblate-sync.yml index 11d086e17..5072e298b 100644 --- a/.github/workflows/weblate-sync.yml +++ b/.github/workflows/weblate-sync.yml @@ -18,7 +18,7 @@ jobs: ahead: ${{ steps.check.outputs.ahead }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: ref: ${{ env.DEVELOP_BRANCH }} clean: false @@ -46,12 +46,12 @@ jobs: WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: - python-version: '3.13.5' + python-version: '3.14.0' - name: Install wlc run: pip install wlc @@ -69,7 +69,7 @@ jobs: if: ${{ needs.check.outputs.ahead > 0 || needs.check.outputs.behind > 0 && always() }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: ref: ${{ env.DEVELOP_BRANCH }} fetch-depth: 0 diff --git a/.gitignore b/.gitignore index 99140d39f..378edcfac 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ node_modules app.ini app.*.ini dist +dist.tar.xz *.exe *.po~ nginx-ui @@ -19,3 +20,9 @@ internal/**/*.gen.go .devcontainer/data .devcontainer/casdoor.pem .vscode/.i18n-gettext.secret +.go/ +/.cunzhi-memory +log-index/ +*.prof +*.test +GeoLite2-City.mmdb diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 3e59b9359..67cf98641 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -14,7 +14,7 @@ { "label": "[App] Start Frontend", "type": "shell", - "command": "cd app && pnpm dev", + "command": "pnpm dev", "isBackground": true, "presentation": { "panel": "new" @@ -24,7 +24,7 @@ { "label": "[Docs] Start Documentation", "type": "shell", - "command": "cd docs && pnpm docs:dev", + "command": "pnpm docs:dev", "isBackground": true, "presentation": { "panel": "new" @@ -48,7 +48,7 @@ { "label": "[App] Gettext Extract", "type": "shell", - "command": "cd app && pnpm gettext:extract", + "command": "pnpm gettext:extract", "isBackground": true, "presentation": { "panel": "new" @@ -58,7 +58,7 @@ { "label": "[App] ESLint Fix", "type": "shell", - "command": "cd app && pnpm lint --fix", + "command": "pnpm lint --fix", "presentation": { "panel": "new" }, @@ -67,7 +67,7 @@ { "label": "[App] Typecheck", "type": "shell", - "command": "cd app && pnpm typecheck", + "command": "pnpm typecheck", "presentation": { "panel": "new" }, @@ -76,7 +76,7 @@ { "label": "[App] Build", "type": "shell", - "command": "cd app && pnpm build", + "command": "pnpm build", "presentation": { "panel": "new" }, diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 000000000..d3fe818e8 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,82 @@ +# NGINX UI - Claude Code Guidelines + +This project is a web-based NGINX management interface built with Go backend and Vue.js frontend. + +## Package Manager +- **Use pnpm exclusively** for all frontend package management operations +- Commands: `pnpm install`, `pnpm run dev`, `pnpm typecheck` + +## Backend (Go) Development + +### Technologies & Frameworks +- **Go** with Gin web framework +- **GORM** for database operations +- **Gen** for query simplification +- **Cosy** framework (https://cosy.uozi.org/) + +### Code Organization +- **API Controllers**: Implement in `api/$module_name/` directory +- **Database Models**: Define in `model/` folder +- **Business Logic**: Place complex logic and error handling in `internal/$module_name/` +- **Routing**: Register routes in `router/` directory +- **Configuration**: Manage settings in `settings/` directory + +### Development Guidelines +- Write concise, maintainable Go code with clear examples +- Use Gen to streamline database queries and reduce boilerplate +- Follow Cosy Error Handler best practices for error management +- Implement standardized CRUD operations using Cosy framework +- Apply efficient database pagination for large datasets +- Keep files modular and well-organized by functionality +- **All comments and documentation must be in English** + +## Frontend (Vue.js) Development + +### Technology Stack +- **TypeScript** for all code +- **Vue 3** with Composition API +- **Vite** build tool +- **Vue Router** for routing +- **Pinia** for state management +- **VueUse** for utilities +- **Ant Design Vue** for UI components +- **UnoCSS** for styling + +### Code Standards +- Use functional and declarative programming patterns (avoid classes) +- Prefer interfaces over types for better extendability +- Use descriptive variable names with auxiliary verbs (e.g., `isLoading`, `hasError`) +- Always use Vue Composition API with ` + + diff --git a/app/src/components/AppProvider/index.ts b/app/src/components/AppProvider/index.ts new file mode 100644 index 000000000..0d4c3b8f2 --- /dev/null +++ b/app/src/components/AppProvider/index.ts @@ -0,0 +1,3 @@ +import AppProvider from './AppProvider.vue' + +export default AppProvider diff --git a/app/src/components/AutoCertForm/AutoCertForm.vue b/app/src/components/AutoCertForm/AutoCertForm.vue index ba1f6bae8..89c619ccd 100644 --- a/app/src/components/AutoCertForm/AutoCertForm.vue +++ b/app/src/components/AutoCertForm/AutoCertForm.vue @@ -9,6 +9,11 @@ const props = defineProps<{ hideNote?: boolean forceDnsChallenge?: boolean keyTypeReadOnly?: boolean + isDefaultServer?: boolean + hasWildcardServerName?: boolean + hasExplicitIpAddress?: boolean + isIpCertificate?: boolean + needsManualIpInput?: boolean }>() const data = defineModel('options', { @@ -16,24 +21,130 @@ const data = defineModel('options', { required: true, }) +// Local IP address buffer for manual input +const manualIpAddress = ref('') + +// Function to apply manual IP to domains when needed +function applyManualIpToDomains() { + if (props.needsManualIpInput && manualIpAddress.value?.trim()) { + if (!data.value.domains) + data.value.domains = [] + + const trimmedIp = manualIpAddress.value.trim() + if (!data.value.domains.includes(trimmedIp)) { + data.value.domains.push(trimmedIp) + } + } +} + onMounted(() => { if (!data.value.key_type) data.value.key_type = PrivateKeyTypeEnum.P256 if (props.forceDnsChallenge) data.value.challenge_method = AutoCertChallengeMethod.dns01 + else if (props.isIpCertificate) + data.value.challenge_method = AutoCertChallengeMethod.http01 }) watch(() => props.forceDnsChallenge, v => { if (v) data.value.challenge_method = AutoCertChallengeMethod.dns01 }) + +watch(() => props.isIpCertificate, v => { + if (v && !props.forceDnsChallenge) + data.value.challenge_method = AutoCertChallengeMethod.http01 +}) + +// Expose function for parent component to call before submission +defineExpose({ + applyManualIpToDomains, +}) + +// Check if IPv4 address is private +function isPrivateIPv4(ip: string): boolean { + const parts = ip.split('.').map(part => Number.parseInt(part, 10)) + const [a, b] = parts + + // 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8 (localhost) + return a === 10 + || (a === 172 && b >= 16 && b <= 31) + || (a === 192 && b === 168) + || a === 127 +} + +// IP address validation function +function validateIpAddress(_rule: unknown, value: string) { + if (!value || value.trim() === '') { + return Promise.reject($gettext('Please enter the server IP address')) + } + + // Basic IPv4 validation (simplified) + const ipv4Regex = /^(?:\d{1,3}\.){3}\d{1,3}$/ + // Basic IPv6 validation + const ipv6Regex = /^(?:[\da-f]{1,4}:){7}[\da-f]{1,4}$|^::1$|^::$/i + + const trimmedValue = value.trim() + + // Additional validation for IPv4 ranges + if (ipv4Regex.test(trimmedValue)) { + const parts = trimmedValue.split('.') + const validRange = parts.every(part => { + const num = Number.parseInt(part, 10) + return num >= 0 && num <= 255 + }) + if (!validRange) { + return Promise.reject($gettext('Please enter a valid IPv4 address (0-255 per octet)')) + } + + // Warn about private IP addresses + if (isPrivateIPv4(trimmedValue)) { + return Promise.reject($gettext('Warning: This appears to be a private IP address. ' + + 'Public CAs like Let\'s Encrypt cannot issue certificates for private IPs. ' + + 'Use a public IP address or consider using a private CA.')) + } + } + else if (!ipv6Regex.test(trimmedValue)) { + return Promise.reject($gettext('Please enter a valid IPv4 or IPv6 address')) + } + + return Promise.resolve() +} + + + + + + props.forceDnsChallenge, v => { {{ $gettext('HTTP01') }} - + {{ $gettext('DNS01') }} + + ({{ $gettext('Not supported for IP certificates') }}) + diff --git a/app/src/components/Chart/UsageProgressLine.vue b/app/src/components/Chart/UsageProgressLine.vue index 141e8bee6..0772f5953 100644 --- a/app/src/components/Chart/UsageProgressLine.vue +++ b/app/src/components/Chart/UsageProgressLine.vue @@ -1,6 +1,4 @@ - - - - diff --git a/app/src/components/ChatGPT/ChatMessageInput.vue b/app/src/components/ChatGPT/ChatMessageInput.vue deleted file mode 100644 index 8880c9dfe..000000000 --- a/app/src/components/ChatGPT/ChatMessageInput.vue +++ /dev/null @@ -1,81 +0,0 @@ - - - - - diff --git a/app/src/components/ChatGPT/ChatMessageList.vue b/app/src/components/ChatGPT/ChatMessageList.vue deleted file mode 100644 index dba81eadc..000000000 --- a/app/src/components/ChatGPT/ChatMessageList.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - diff --git a/app/src/components/ChatGPT/chatgpt.ts b/app/src/components/ChatGPT/chatgpt.ts deleted file mode 100644 index e42c19d2d..000000000 --- a/app/src/components/ChatGPT/chatgpt.ts +++ /dev/null @@ -1,281 +0,0 @@ -import type { ChatComplicationMessage } from '@/api/openai' -import { defineStore } from 'pinia' -import { computed, nextTick, ref } from 'vue' -import openai from '@/api/openai' -import { ChatService } from './chatService' - -export const useChatGPTStore = defineStore('chatgpt', () => { - // State - const path = ref('') // Path to the chat record file - const messages = ref([]) - const messageContainerRef = ref() - const loading = ref(false) - const editingIdx = ref(-1) - const editValue = ref('') - const askBuffer = ref('') - const streamingMessageIndex = ref(-1) // Track which message is currently streaming - - // Getters - const isEditing = computed(() => editingIdx.value !== -1) - const currentEditingMessage = computed(() => { - if (editingIdx.value !== -1 && messages.value[editingIdx.value]) { - return messages.value[editingIdx.value] - } - return null - }) - const hasMessages = computed(() => messages.value.length > 0) - const shouldShowStartButton = computed(() => messages.value.length === 0) - - // Actions - // Initialize messages for a specific file path - async function initMessages(filePath?: string) { - messages.value = [] - if (filePath) { - try { - const record = await openai.get_record(filePath) - messages.value = record.content || [] - } - catch (error) { - console.error('Failed to load chat record:', error) - } - path.value = filePath - } - } - - // Start editing a message at the specified index - function startEdit(index: number) { - if (index >= 0 && index < messages.value.length) { - editingIdx.value = index - editValue.value = messages.value[index].content - } - } - - // Save the edited message - function saveEdit() { - if (editingIdx.value !== -1 && messages.value[editingIdx.value]) { - messages.value[editingIdx.value].content = editValue.value - editingIdx.value = -1 - editValue.value = '' - } - } - - // Cancel editing and reset state - function cancelEdit() { - editingIdx.value = -1 - editValue.value = '' - } - - // Add a new user message - function addUserMessage(content: string) { - messages.value.push({ - role: 'user', - content, - }) - } - - // Add a new assistant message - function addAssistantMessage(content: string = '') { - messages.value.push({ - role: 'assistant', - content, - }) - } - - // Update the last assistant message content (for streaming) - function updateLastAssistantMessage(content: string) { - const lastMessage = messages.value[messages.value.length - 1] - if (lastMessage && lastMessage.role === 'assistant') { - lastMessage.content = content - } - } - - // Remove messages after the specified index for regeneration - function prepareRegenerate(index: number) { - messages.value = messages.value.slice(0, index) - cancelEdit() - } - - // Clear all messages - function clearMessages() { - messages.value = [] - cancelEdit() - } - - // Store chat record to server - async function storeRecord() { - if (!path.value) - return - - try { - // Filter out empty messages before storing - const validMessages = messages.value.filter(msg => msg.content.trim() !== '') - await openai.store_record({ - file_name: path.value, - messages: validMessages, - }) - } - catch (error) { - console.error('Failed to store chat record:', error) - } - } - - // Clear chat record on server - async function clearRecord() { - if (!path.value) - return - - try { - await openai.store_record({ - file_name: path.value, - messages: [], - }) - clearMessages() - } - catch (error) { - console.error('Failed to clear chat record:', error) - } - } - - // Set loading state - function setLoading(loadingState: boolean) { - loading.value = loadingState - } - - // Set ask buffer - function setAskBuffer(buffer: string) { - askBuffer.value = buffer - } - - // Clear ask buffer - function clearAskBuffer() { - askBuffer.value = '' - } - - // scroll to bottom - function scrollToBottom() { - messageContainerRef.value?.scrollTo({ - top: messageContainerRef.value.scrollHeight, - behavior: 'smooth', - }) - } - - // Set streaming message index - function setStreamingMessageIndex(index: number) { - streamingMessageIndex.value = index - } - - // Clear streaming message index - function clearStreamingMessageIndex() { - streamingMessageIndex.value = -1 - } - - // Request: Send messages to server using chat service - async function request() { - setLoading(true) - - // Set the streaming message index to the last message (assistant message) - setStreamingMessageIndex(messages.value.length - 1) - - try { - const chatService = new ChatService() - const assistantMessage = await chatService.request( - path.value, - messages.value.slice(0, -1), // Exclude the empty assistant message - message => { - // Update the current assistant message in real-time - updateLastAssistantMessage(message.content) - }, - ) - - // Update the final content - updateLastAssistantMessage(assistantMessage.content) - - // Auto scroll to bottom after response - await nextTick() - scrollToBottom() - } - catch (error) { - console.error('Chat request failed:', error) - // Remove the empty assistant message on error - if (messages.value.length > 0 && messages.value[messages.value.length - 1].content === '') { - messages.value.pop() - } - } - finally { - setLoading(false) - clearStreamingMessageIndex() // Clear streaming state - await storeRecord() - } - } - - // Send: Add user message into messages then call request - async function send(content: string, currentLanguage?: string) { - if (messages.value.length === 0) { - // The first message - addUserMessage(`${content}\n\nCurrent Language Code: ${currentLanguage}`) - } - else { - // Append user's new message - addUserMessage(askBuffer.value) - clearAskBuffer() - } - - // Add empty assistant message for real-time updates - addAssistantMessage('') - - await request() - } - - // Regenerate: Removes messages after index and re-request the answer - async function regenerate(index: number) { - prepareRegenerate(index) - - // Add empty assistant message for real-time updates - addAssistantMessage('') - - await request() - } - - watch(messages, () => { - scrollToBottom() - }, { immediate: true }) - // Return all state, getters, and actions - return { - // State - messages, - loading, - editingIdx, - editValue, - askBuffer, - messageContainerRef, - streamingMessageIndex, - - // Getters - isEditing, - currentEditingMessage, - hasMessages, - shouldShowStartButton, - - // Actions - initMessages, - startEdit, - saveEdit, - cancelEdit, - addUserMessage, - addAssistantMessage, - updateLastAssistantMessage, - prepareRegenerate, - clearMessages, - storeRecord, - clearRecord, - setLoading, - setAskBuffer, - clearAskBuffer, - setStreamingMessageIndex, - clearStreamingMessageIndex, - request, - send, - regenerate, - scrollToBottom, - } -}) diff --git a/app/src/components/ChatGPT/types.ts b/app/src/components/ChatGPT/types.ts deleted file mode 100644 index 7e78ac955..000000000 --- a/app/src/components/ChatGPT/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface CodeBlockState { - isInCodeBlock: boolean - backtickCount: number -} - -export interface ChatGPTProps { - content: string - path?: string -} diff --git a/app/src/components/CodeEditor/CodeCompletion.ts b/app/src/components/CodeEditor/CodeCompletion.ts index 58c3b3c12..cca5d866d 100644 --- a/app/src/components/CodeEditor/CodeCompletion.ts +++ b/app/src/components/CodeEditor/CodeCompletion.ts @@ -1,15 +1,26 @@ import type { Editor } from 'ace-builds' import type { Point } from 'ace-builds-internal/document' -import type ReconnectingWebSocket from 'reconnecting-websocket' +import ace from 'ace-builds' import { debounce } from 'lodash' import { v4 as uuidv4 } from 'uuid' -import openai from '@/api/openai' +import llm from '@/api/llm' +import { useWebSocket } from '@/lib/websocket' -// eslint-disable-next-line ts/no-explicit-any -function debug(...args: any[]) { +function debug(...args: unknown[]) { if (import.meta.env.DEV) { + // Create console method that skips one frame in stack trace // eslint-disable-next-line no-console - console.debug(`[CodeEditor]`, ...args) + const originalDebug = console.debug + const skipFrame = (...logArgs: unknown[]) => { + const stack = new Error('Debug trace').stack + const caller = stack?.split('\n')[3] // Skip debug() and skipFrame() + const match = caller?.match(/at\s[^(]+\([^:]+:(\d+):\d+\)/) || caller?.match(/at\s[^:]+:(\d+):\d+/) + const location = `line ${match?.[1] || '?'}` + + originalDebug(`[CodeEditor:${location}]`, ...logArgs) + } + + skipFrame(...args) } } @@ -27,8 +38,12 @@ function useCodeCompletion() { const editorRef = ref() const currentGhostText = ref('') const isConfigFile = ref(false) + const isLoading = ref(false) + const loadingMarkerId = ref(null) + const lastTriggerTime = ref(0) + const lastTriggerPosition = ref<{ row: number, column: number } | null>(null) - const ws = shallowRef() + const ws = shallowRef() // Check if the current file is a configuration file function checkIfConfigFile(filename: string, content: string): boolean { @@ -46,25 +61,228 @@ function useCodeCompletion() { return SENSITIVE_CONTENT_PATTERNS.some(pattern => pattern.test(content)) } - function getAISuggestions(code: string, context: string, position: Point, callback: (suggestion: string) => void, language: string = 'nginx', suffix: string = '', requestId: string) { + // Show loading spinner at cursor position + function showLoadingSpinner() { + if (!editorRef.value || isLoading.value) + return + + const position = editorRef.value.getCursorPosition() + const Range = ace.require('ace/range').Range + + // Create a small range at cursor position for the spinner + const range = new Range(position.row, position.column, position.row, position.column + 1) + + loadingMarkerId.value = editorRef.value.session.addMarker( + range, + 'completion-loading-spinner', + 'text', + false, + ) + + isLoading.value = true + debug('Loading spinner shown') + } + + // Clear loading spinner + function clearLoadingSpinner() { + if (!editorRef.value || !isLoading.value) + return + + if (loadingMarkerId.value !== null) { + editorRef.value.session.removeMarker(loadingMarkerId.value) + loadingMarkerId.value = null + } + + isLoading.value = false + debug('Loading spinner cleared') + } + + // Get current line indentation + function getCurrentLineIndent(editor: Editor): string { + const position = editor.getCursorPosition() + const currentLine = editor.session.getLine(position.row) + + // Extract indentation (spaces/tabs at the beginning of line) + const indentMatch = currentLine.match(/^(\s*)/) + return indentMatch ? indentMatch[1] : '' + } + + // Intelligent trigger condition checking + function checkRateLimit(): boolean { + const currentTime = Date.now() + if (currentTime - lastTriggerTime.value < 800) { + debug(`Skipping completion: too frequent triggers. Time diff: ${currentTime - lastTriggerTime.value}ms`) + return false + } + return true + } + + function checkPositionLimit(position: Point): boolean { + if (lastTriggerPosition.value) { + const rowDiff = Math.abs(position.row - lastTriggerPosition.value.row) + const colDiff = Math.abs(position.column - lastTriggerPosition.value.column) + + if (rowDiff === 0 && colDiff < 4) { + debug(`Skipping completion: cursor position too close to last trigger. Row diff: ${rowDiff}, Col diff: ${colDiff}`) + return false + } + } + return true + } + + function updateTriggerTracking(position: Point): void { + const currentTime = Date.now() + lastTriggerTime.value = currentTime + lastTriggerPosition.value = { row: position.row, column: position.column } + } + + function checkShortLineContext(editor: Editor, position: Point, beforeCursor: string): boolean { + if (beforeCursor.trim().length >= 2) + return true + + const isEmptyLineInBlock = /^\s+$/.test(beforeCursor) && beforeCursor.length > 0 + const prevLine = position.row > 0 ? editor.session.getLine(position.row - 1) : '' + const afterComment = /^\s*[#/]/.test(prevLine) + + if (!isEmptyLineInBlock && !afterComment) { + debug('Skipping completion: line too short and not in meaningful context') + return false + } + + if (isEmptyLineInBlock || afterComment) { + debug('Allowing completion: empty line in block or after comment') + updateTriggerTracking(position) + return true + } + + return false + } + + function checkWordBoundary(beforeCursor: string, afterCursor: string): boolean { + if (afterCursor.match(/^\w/) && !beforeCursor.endsWith('{')) { + debug('Skipping completion: cursor in middle of word') + return false + } + return true + } + + function checkCommentLine(currentLine: string, position: Point): boolean { + const isCommentLine = /^\s*[#/]/.test(currentLine) + if (isCommentLine) { + const commentContent = currentLine.replace(/^\s*[#/]+\s*/, '') + const hasDirectivePattern = /\b(?:proxy_pass|server_name|root|listen|location)\b/.test(commentContent) + + if (!hasDirectivePattern || position.column < currentLine.length - 1) { + debug('Skipping completion: comment line without directive pattern or not at end') + return false + } + } + return true + } + + function checkLineCompletion(currentLine: string, position: Point): boolean { + const trimmedLine = currentLine.trim() + const atLineEnd = position.column === currentLine.length + + if (trimmedLine.endsWith(';') || (trimmedLine.endsWith('}') && !atLineEnd)) { + debug('Skipping completion: line appears complete') + return false + } + return true + } + + function shouldTriggerCompletion(editor: Editor): boolean { + if (!editor) + return false + + const position = editor.getCursorPosition() + + if (!checkRateLimit() || !checkPositionLimit(position)) { + return false + } + + const currentLine = editor.session.getLine(position.row) + const beforeCursor = currentLine.substring(0, position.column) + const afterCursor = currentLine.substring(position.column) + + const shortLineResult = checkShortLineContext(editor, position, beforeCursor) + if (beforeCursor.trim().length < 2) { + return shortLineResult + } + + if (!checkWordBoundary(beforeCursor, afterCursor) || !checkCommentLine(currentLine, position) || !checkLineCompletion(currentLine, position)) { + return false + } + + const trimmedLine = currentLine.trim() + const atLineEnd = position.column === currentLine.length + + if (trimmedLine.endsWith('{') && atLineEnd) { + debug('Allowing completion after opening brace at line end') + return true + } + + if (/["'[(]\s*$/.test(beforeCursor)) { + debug('Skipping completion: cursor after quote/bracket') + return false + } + + if (beforeCursor.endsWith(' ')) { + debug('Skipping completion: multiple spaces detected') + return false + } + + // Check each trigger pattern individually for better debugging + const triggerPatterns = [ + { name: 'After directive keywords', pattern: /\b(?:server|location|upstream|if|proxy_pass|root|index|listen|server_name)\s+$/ }, + { name: 'Right after opening brace', pattern: /\{\s*$/ }, + { name: 'After semicolons', pattern: /;\s*$/ }, + { name: 'Partial directive names', pattern: /^\s+[a-z_]{3,}$/i }, + { name: 'Comment with directive', pattern: /^\s*#.*\b(?:proxy_pass|server_name|root|listen|location)\b/ }, + { name: 'Empty line in block', pattern: /^\s+$/ }, + ] + + let shouldTrigger = false + + for (const { name, pattern } of triggerPatterns) { + if (pattern.test(beforeCursor)) { + shouldTrigger = true + debug(`✅ Trigger match: ${name} | Line: "${currentLine}" | Pos: ${position.row}:${position.column}`) + break + } + } + + if (shouldTrigger) { + // Update trigger tracking + updateTriggerTracking(position) + } + + return shouldTrigger + } + + function getAISuggestions(code: string, context: string, position: Point, callback: (suggestion: string) => void, language: string = 'nginx', suffix: string = '', requestId: string, currentIndent: string = '') { if (!ws.value || ws.value.readyState !== WebSocket.OPEN) { debug('WebSocket is not open') + clearLoadingSpinner() return } if (!code.trim()) { debug('Code is empty') + clearLoadingSpinner() return } // Skip if not a config file or contains sensitive content if (!isConfigFile.value) { debug('Skipping AI suggestions for non-config file') + clearLoadingSpinner() return } if (containsSensitiveContent(context)) { debug('Skipping AI suggestions due to sensitive content') + clearLoadingSpinner() return } @@ -75,16 +293,22 @@ function useCodeCompletion() { language, position, request_id: requestId, + current_indent: currentIndent, } debug('Sending message', message) + // Show loading spinner when sending request + showLoadingSpinner() + ws.value.send(JSON.stringify(message)) ws.value.onmessage = event => { const data = JSON.parse(event.data) debug(`Received message`, data, requestId) if (data.request_id === requestId) { + // Clear loading spinner when receiving response + clearLoadingSpinner() callback(data.code) } } @@ -92,12 +316,15 @@ function useCodeCompletion() { function applyGhostText() { if (!editorRef.value) { - debug('Editor instance not available yet') return } if (!isConfigFile.value) { - debug('Skipping ghost text for non-config file') + return + } + + // Intelligent trigger check + if (!shouldTriggerCompletion(editorRef.value)) { return } @@ -130,6 +357,9 @@ function useCodeCompletion() { // Clear existing ghost text before making the request clearGhostText() + // Get current line indentation for proper formatting + const currentLineIndent = getCurrentLineIndent(editorRef.value) + // Get AI suggestions getAISuggestions( textUpToCursor, @@ -145,12 +375,15 @@ function useCodeCompletion() { // Get current cursor position (may have changed during async process) const newPosition = editorRef.value!.getCursorPosition() - editorRef.value!.setGhostText(suggestion, { + // Smart formatting: handle line-end completions + const formattedSuggestion = formatCompletionForPosition(suggestion, newPosition) + + editorRef.value!.setGhostText(formattedSuggestion, { column: newPosition.column, row: newPosition.row, }) - debug(`Ghost text set: ${suggestion}`) - currentGhostText.value = suggestion + debug(`Ghost text set: ${formattedSuggestion}`) + currentGhostText.value = formattedSuggestion } else if (suggestion) { debug('setGhostText method not available on editor instance') @@ -159,6 +392,7 @@ function useCodeCompletion() { editorRef.value.session.getMode()?.path?.split('/').pop() || 'text', textAfterCursor, // Pass text after cursor as suffix requestId, // Pass request ID + currentLineIndent, // Pass current line indentation ) } catch (error) { @@ -166,22 +400,27 @@ function useCodeCompletion() { } } - // Accept the ghost text suggestion with Tab key - function setupTabHandler(editor: Editor) { + // Accept the ghost text suggestion with Tab key and clear with Esc key + function setupKeyHandlers(editor: Editor) { if (!editor) { - debug('Editor not available in setupTabHandler') + debug('Editor not available in setupKeyHandlers') return } - debug('Setting up Tab key handler') + debug('Setting up key handlers') - // Remove existing command to avoid conflicts - const existingCommand = editor.commands.byName.acceptGhostText - if (existingCommand) { - editor.commands.removeCommand(existingCommand) + // Remove existing commands to avoid conflicts + const existingTabCommand = editor.commands.byName.acceptGhostText + if (existingTabCommand) { + editor.commands.removeCommand(existingTabCommand) } - // Register new Tab key handler command with highest priority + const existingEscCommand = editor.commands.byName.clearGhostText + if (existingEscCommand) { + editor.commands.removeCommand(existingEscCommand) + } + + // Register Tab key handler - accept ghost text editor.commands.addCommand({ name: 'acceptGhostText', bindKey: { win: 'Tab', mac: 'Tab' }, @@ -208,7 +447,24 @@ function useCodeCompletion() { readOnly: false, }) - debug('Tab key handler set up successfully') + // Register Esc key handler - clear ghost text + editor.commands.addCommand({ + name: 'clearGhostText', + bindKey: { win: 'Escape', mac: 'Escape' }, + exec: (_editor: Editor) => { + if (currentGhostText.value) { + debug('Clearing ghost text with Esc key') + clearGhostText() + return true // Prevent event propagation + } + + debug('No ghost text to clear, allowing default escape behavior') + return false // Allow default Escape behavior + }, + readOnly: false, + }) + + debug('Key handlers set up successfully') } // Clear ghost text and reset state @@ -220,6 +476,13 @@ function useCodeCompletion() { editorRef.value.removeGhostText() } currentGhostText.value = '' + + // Also clear loading spinner + clearLoadingSpinner() + + // Reset trigger tracking when manually clearing + lastTriggerTime.value = 0 + lastTriggerPosition.value = null } const debouncedApplyGhostText = debounce(applyGhostText, 1000, { leading: false, trailing: true }) @@ -227,13 +490,14 @@ function useCodeCompletion() { debug('Editor initialized') async function init(editor: Editor, filename: string = '') { - const { enabled } = await openai.get_code_completion_enabled_status() + const { enabled } = await llm.get_code_completion_enabled_status() if (!enabled) { debug('Code completion is not enabled') return } - ws.value = openai.code_completion() + const { ws: wsRef } = useWebSocket(llm.codeCompletionWebSocketUrl, false) + ws.value = wsRef.value! editorRef.value = editor @@ -242,26 +506,21 @@ function useCodeCompletion() { isConfigFile.value = checkIfConfigFile(filename, content) debug(`File type check: isConfigFile=${isConfigFile.value}, filename=${filename}`) - // Set up Tab key handler - setupTabHandler(editor) + // Set up key handlers (Tab and Esc) + setupKeyHandlers(editor) setTimeout(() => { editor.on('change', (e: { action: string }) => { - debug(`Editor change event: ${e.action}`) // If change is caused by user input, interrupt current completion clearGhostText() - if (e.action === 'insert' || e.action === 'remove') { - // Clear current ghost text - if (isConfigFile.value) { - debouncedApplyGhostText() - } + if ((e.action === 'insert' || e.action === 'remove') && isConfigFile.value) { + debouncedApplyGhostText() } }) // Listen for cursor changes, using debounce editor.selection.on('changeCursor', () => { - debug('Cursor changed') clearGhostText() if (isConfigFile.value) { debouncedApplyGhostText() @@ -271,12 +530,83 @@ function useCodeCompletion() { } function cleanUp() { + clearLoadingSpinner() + clearGhostText() if (ws.value) { ws.value.close() } debug('CodeCompletion unmounted') } + // Smart formatting for completion suggestions + function formatCompletionForPosition(suggestion: string, position: Point): string { + if (!editorRef.value) + return suggestion + + const currentLine = editorRef.value.session.getLine(position.row) + const beforeCursor = currentLine.substring(0, position.column) + + // Check if cursor is at the end of a non-empty line + const atEndOfLine = position.column === currentLine.length + const lineHasContent = beforeCursor.trim().length > 0 + + // If at end of line with content, and suggestion doesn't start with newline + if (atEndOfLine && lineHasContent && !suggestion.startsWith('\n')) { + // Check if suggestion should be on new line (block syntax, etc.) + const shouldNewline = shouldStartOnNewLine(suggestion, beforeCursor) + if (shouldNewline) { + const indent = getIndentForNewLine(beforeCursor) + return `\n${indent}${suggestion}` + } + } + + // If suggestion starts with newline but we're not at line end, remove it + if (!atEndOfLine && suggestion.startsWith('\n')) { + return suggestion.substring(1) + } + + return suggestion + } + + // Determine if completion should start on new line + function shouldStartOnNewLine(suggestion: string, beforeCursor: string): boolean { + // Nginx block patterns that usually need newlines + const blockPatterns = [ + /^\s*server\s*\{/, // server block + /^\s*location\s*(?:\S.*(?:[\n\r\u2028\u2029]\s*)?)?\{/, // location block + /^\s*upstream\s*\w+\s*\{/, // upstream block + /^\s*if\s*\(.*\)\s*\{/, // if block + ] + + const directivePatterns = [ + /^\s*(listen|server_name|root|index|location|proxy_pass|return)/, + /^\s*(error_page|access_log|error_log|ssl_certificate)/, + ] + + // If before cursor ends with { or ;, next content should be on new line + if (/[{;]\s*$/.test(beforeCursor)) { + return true + } + + // If suggestion looks like a new directive/block + const isBlockSuggestion = blockPatterns.some(pattern => pattern.test(suggestion)) + const isDirectiveSuggestion = directivePatterns.some(pattern => pattern.test(suggestion)) + + return isBlockSuggestion || isDirectiveSuggestion + } + + // Get appropriate indentation for new line + function getIndentForNewLine(beforeCursor: string): string { + const baseIndent = beforeCursor.match(/^\s*/)?.[0] || '' + + // If previous line ends with {, increase indentation + if (beforeCursor.trim().endsWith('{')) { + return `${baseIndent} ` // 4 spaces + } + + return baseIndent + } + return { init, cleanUp, diff --git a/app/src/components/CodeEditor/CodeEditor.vue b/app/src/components/CodeEditor/CodeEditor.vue index 2b1c21d77..5f7808dea 100644 --- a/app/src/components/CodeEditor/CodeEditor.vue +++ b/app/src/components/CodeEditor/CodeEditor.vue @@ -49,8 +49,8 @@ onUnmounted(() => { minHeight: defaultHeight || '100vh', borderRadius: props.noBorderRadius ? '0' : '5px', }" - :readonly - :placeholder + :readonly="props.readonly" + :placeholder="props.placeholder" @init="init" /> @@ -65,4 +65,36 @@ onUnmounted(() => { color: #6a737d; opacity: 0.8; } + +/* Loading spinner for code completion */ +:deep(.completion-loading-spinner) { + position: relative; + background: transparent; +} + +:deep(.completion-loading-spinner):before { + content: ''; + position: absolute; + top: 50%; + left: 0; + width: 12px; + height: 12px; + margin-top: -6px; + border: 2px solid #6a737d; + border-top: 2px solid transparent; + border-radius: 50%; + animation: completion-spin 1s linear infinite; + z-index: 10; +} + +@keyframes completion-spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* Dark theme support */ +.dark :deep(.completion-loading-spinner):before { + border-color: #8b949e; + border-top-color: transparent; +} diff --git a/app/src/components/ConfigHistory/ConfigHistory.vue b/app/src/components/ConfigHistory/ConfigHistory.vue index 9687a5070..b45d907c5 100644 --- a/app/src/components/ConfigHistory/ConfigHistory.vue +++ b/app/src/components/ConfigHistory/ConfigHistory.vue @@ -3,7 +3,6 @@ import type { Key } from 'ant-design-vue/es/_util/type' import type { ConfigBackup } from '@/api/config' import type { GetListResponse } from '@/api/curd' import { datetimeRender, StdPagination } from '@uozi-admin/curd' -import { message } from 'ant-design-vue' import config from '@/api/config' // Define props for the component @@ -14,6 +13,7 @@ const props = defineProps<{ // Define modal props using defineModel with boolean type const visible = defineModel('visible') const currentContent = defineModel('currentContent') +const { message } = useGlobalApp() // Import DiffViewer asynchronously with loading options const DiffViewer = defineAsyncComponent({ diff --git a/app/src/components/DevDebugPanel/DevDebugPanel.vue b/app/src/components/DevDebugPanel/DevDebugPanel.vue new file mode 100644 index 000000000..692ee1d6e --- /dev/null +++ b/app/src/components/DevDebugPanel/DevDebugPanel.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/app/src/components/DevDebugPanel/README.md b/app/src/components/DevDebugPanel/README.md new file mode 100644 index 000000000..cc7216abc --- /dev/null +++ b/app/src/components/DevDebugPanel/README.md @@ -0,0 +1,84 @@ +# DevDebugPanel Component + +A development-only debug panel component that provides a floating debug interface for troubleshooting and development purposes. + +## Features + +- **Development Only**: Automatically disabled in production builds +- **Floating Panel**: Positioned as a fixed overlay with toggle functionality +- **Customizable Content**: Uses slots for flexible debug information display +- **Modern Styling**: Dark theme with backdrop blur and professional appearance + +## Usage + +```vue + + + +``` + +## Props + +| Prop | Type | Default | Description | +|------|------|---------|-------------| +| `title` | `string` | `'Debug Panel'` | Panel title (currently not used in display) | +| `initialVisible` | `boolean` | `false` | Whether the panel starts visible | +| `debugData` | `Record` | `{}` | Debug data passed to slot | + +## Styling Classes + +The component provides several CSS classes for styling debug content: + +- `.debug-item` - Container for debug information rows +- `.debug-label` - Styling for debug labels +- `.debug-value` - Styling for debug values + +## Security + +- Component automatically detects and only renders in development environment +- Console warning is displayed if component is used in production +- No debug information is exposed in production builds + +## Example Implementations + +### Login Page Debug +Shows loading state, 2FA status, and route information with quick action buttons. + +### Log List Debug +Displays indexing status, processing information, and table metadata with modal controls. + +## Notes + +- The component uses a fixed position overlay that appears in the top-right corner +- Toggle button allows showing/hiding the debug panel +- Uses Ant Design components for consistent styling +- Fully supports dark/light theme switching diff --git a/app/src/components/DevDebugPanel/index.ts b/app/src/components/DevDebugPanel/index.ts new file mode 100644 index 000000000..de605843a --- /dev/null +++ b/app/src/components/DevDebugPanel/index.ts @@ -0,0 +1 @@ +export { default as DevDebugPanel } from './DevDebugPanel.vue' diff --git a/app/src/components/EnvGroupTabs/index.ts b/app/src/components/EnvGroupTabs/index.ts deleted file mode 100644 index d38d49cb2..000000000 --- a/app/src/components/EnvGroupTabs/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import EnvGroupTabs from './EnvGroupTabs.vue' - -export default EnvGroupTabs diff --git a/app/src/components/EnvIndicator/index.ts b/app/src/components/EnvIndicator/index.ts deleted file mode 100644 index 92a202b6e..000000000 --- a/app/src/components/EnvIndicator/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import EnvIndicator from './EnvIndicator.vue' - -export default EnvIndicator diff --git a/app/src/components/GeoLiteDownload/GeoLiteDownload.vue b/app/src/components/GeoLiteDownload/GeoLiteDownload.vue new file mode 100644 index 000000000..ae64083e4 --- /dev/null +++ b/app/src/components/GeoLiteDownload/GeoLiteDownload.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/app/src/components/GeoLiteDownload/index.ts b/app/src/components/GeoLiteDownload/index.ts new file mode 100644 index 000000000..21de43ced --- /dev/null +++ b/app/src/components/GeoLiteDownload/index.ts @@ -0,0 +1 @@ +export { default } from './GeoLiteDownload.vue' diff --git a/app/src/views/config/InspectConfig.vue b/app/src/components/InspectConfig/InspectConfig.vue similarity index 66% rename from app/src/views/config/InspectConfig.vue rename to app/src/components/InspectConfig/InspectConfig.vue index eb909219b..b9f3f869e 100644 --- a/app/src/views/config/InspectConfig.vue +++ b/app/src/components/InspectConfig/InspectConfig.vue @@ -1,25 +1,37 @@ + + + + diff --git a/app/src/components/LLM/ChatMessageList.vue b/app/src/components/LLM/ChatMessageList.vue new file mode 100644 index 000000000..a34fe0c5a --- /dev/null +++ b/app/src/components/LLM/ChatMessageList.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/app/src/components/LLM/LLM.vue b/app/src/components/LLM/LLM.vue new file mode 100644 index 000000000..a6f788c51 --- /dev/null +++ b/app/src/components/LLM/LLM.vue @@ -0,0 +1,248 @@ + + + + + diff --git a/app/src/components/LLM/LLMSessionTabs.vue b/app/src/components/LLM/LLMSessionTabs.vue new file mode 100644 index 000000000..ea4b31007 --- /dev/null +++ b/app/src/components/LLM/LLMSessionTabs.vue @@ -0,0 +1,1016 @@ + + + + + diff --git a/app/src/components/LLM/animationCoordinator.ts b/app/src/components/LLM/animationCoordinator.ts new file mode 100644 index 000000000..5f2bd9176 --- /dev/null +++ b/app/src/components/LLM/animationCoordinator.ts @@ -0,0 +1,189 @@ +// Animation Coordinator - Centralized state management for all animations and scrolling +import { readonly, ref, watch } from 'vue' + +export interface AnimationState { + messageStreaming: boolean + messageTyping: boolean + titleAnimating: boolean + scrolling: boolean +} + +class AnimationCoordinator { + private state = ref({ + messageStreaming: false, + messageTyping: false, + titleAnimating: false, + scrolling: false, + }) + + private callbacks: { + onMessageTypingComplete?: () => void + onTitleAnimationComplete?: () => void + onAllAnimationsComplete?: () => void + } = {} + + // Get current state (readonly) + getState() { + return readonly(this.state) + } + + // Check if any animation is in progress + isAnyAnimationActive() { + const s = this.state.value + return s.messageStreaming || s.messageTyping || s.titleAnimating || s.scrolling + } + + // Check if message-related animations are complete + isMessageAnimationComplete() { + const s = this.state.value + return !s.messageStreaming && !s.messageTyping + } + + // Set message streaming state + setMessageStreaming(streaming: boolean) { + if (this.state.value.messageStreaming === streaming) + return + + this.state.value.messageStreaming = streaming + + if (!streaming) { + // When streaming stops, message typing might still be active + this.checkTransitions() + } + } + + // Set message typing state + setMessageTyping(typing: boolean) { + // Prevent redundant state changes + if (this.state.value.messageTyping === typing) + return + + this.state.value.messageTyping = typing + + if (!typing) { + this.callbacks.onMessageTypingComplete?.() + this.checkTransitions() + } + } + + // Set title animation state + setTitleAnimating(animating: boolean) { + if (this.state.value.titleAnimating === animating) + return + + this.state.value.titleAnimating = animating + + if (!animating) { + this.callbacks.onTitleAnimationComplete?.() + this.checkTransitions() + } + } + + // Set scrolling state + setScrolling(scrolling: boolean) { + this.state.value.scrolling = scrolling + + if (!scrolling) { + this.checkTransitions() + } + } + + // Set callbacks + setCallbacks(callbacks: Partial) { + Object.assign(this.callbacks, callbacks) + } + + private titleAnimationTriggered = false + + // Check for state transitions and trigger appropriate actions + private checkTransitions() { + const s = this.state.value + + // If message animation is complete and title is not animating, we can start title animation + if (this.isMessageAnimationComplete() && !s.titleAnimating && !this.titleAnimationTriggered) { + this.titleAnimationTriggered = true + + // Small delay before starting title animation + setTimeout(() => { + if (this.isMessageAnimationComplete() && !this.state.value.titleAnimating) { + this.triggerTitleAnimation() + } + }, 200) + } + + // If all animations are complete + if (!this.isAnyAnimationActive()) { + this.callbacks.onAllAnimationsComplete?.() + } + } + + // Trigger title animation (to be called by external code) + private triggerTitleAnimation() { + // This will be handled by the LLM store + window.dispatchEvent(new CustomEvent('startTitleAnimation')) + } + + // Reset all states (useful when starting a new conversation) + reset() { + this.state.value = { + messageStreaming: false, + messageTyping: false, + titleAnimating: false, + scrolling: false, + } + this.titleAnimationTriggered = false + } + + // Wait for message animation to complete + async waitForMessageAnimationComplete(): Promise { + return new Promise(resolve => { + if (this.isMessageAnimationComplete()) { + resolve() + return + } + + const unwatch = watch( + () => this.isMessageAnimationComplete(), + complete => { + if (complete) { + unwatch() + resolve() + } + }, + ) + }) + } + + // Wait for all animations to complete + async waitForAllAnimationsComplete(): Promise { + return new Promise(resolve => { + if (!this.isAnyAnimationActive()) { + resolve() + return + } + + const unwatch = watch( + () => this.isAnyAnimationActive(), + active => { + if (!active) { + unwatch() + resolve() + } + }, + ) + }) + } +} + +// Global singleton instance +export const animationCoordinator = new AnimationCoordinator() + +// Composable for using in components +export function useAnimationCoordinator() { + return { + coordinator: animationCoordinator, + state: animationCoordinator.getState(), + isAnyAnimationActive: () => animationCoordinator.isAnyAnimationActive(), + isMessageAnimationComplete: () => animationCoordinator.isMessageAnimationComplete(), + } +} diff --git a/app/src/components/ChatGPT/chatService.ts b/app/src/components/LLM/chatService.ts similarity index 92% rename from app/src/components/ChatGPT/chatService.ts rename to app/src/components/LLM/chatService.ts index a1bddc7ce..796d6af81 100644 --- a/app/src/components/ChatGPT/chatService.ts +++ b/app/src/components/LLM/chatService.ts @@ -1,5 +1,5 @@ import type { CodeBlockState } from './types' -import type { ChatComplicationMessage } from '@/api/openai' +import type { ChatComplicationMessage } from '@/api/llm' import { storeToRefs } from 'pinia' import { urlJoin } from '@/lib/helper' import { useUserStore } from '@/pinia' @@ -49,9 +49,12 @@ export class ChatService { // request: Send messages to server, receive SSE, and process chunks async request( - path: string | undefined, + type: string | undefined, messages: ChatComplicationMessage[], onProgress?: (message: ChatComplicationMessage) => void, + language?: string, + nginxConfig?: string, + osInfo?: string, ): Promise { // Reset buffer flags each time this.buffer = '' @@ -67,15 +70,18 @@ export class ChatService { msg.role === 'user' || (msg.role === 'assistant' && msg.content.trim() !== ''), ) - const res = await fetch(urlJoin(window.location.pathname, '/api/chatgpt'), { + const res = await fetch(urlJoin(window.location.pathname, '/api/llm'), { method: 'POST', headers: { Accept: 'text/event-stream', Authorization: token.value, }, body: JSON.stringify({ - filepath: path, + type, messages: requestMessages, + language, + nginx_config: nginxConfig, + os_info: osInfo, }), }) diff --git a/app/src/components/ChatGPT/composables/useTypewriter.ts b/app/src/components/LLM/composables/useTypewriter.ts similarity index 95% rename from app/src/components/ChatGPT/composables/useTypewriter.ts rename to app/src/components/LLM/composables/useTypewriter.ts index 11bbc628e..ad1fd2fe4 100644 --- a/app/src/components/ChatGPT/composables/useTypewriter.ts +++ b/app/src/components/LLM/composables/useTypewriter.ts @@ -50,11 +50,11 @@ export function useTypewriter(options: TypewriterOptions = {}) { return } - // 一个字符一个字符地添加 + // Add character by character targetRef.value += chars[charIndex] charIndex++ - // Throttled scrolling - 减少滚动频率 + // Throttled scrolling - reduce scroll frequency if (onScroll && !scrollTimer) { scrollTimer = window.setTimeout(() => { onScroll() diff --git a/app/src/components/LLM/contextBuilder.ts b/app/src/components/LLM/contextBuilder.ts new file mode 100644 index 000000000..21ac1a720 --- /dev/null +++ b/app/src/components/LLM/contextBuilder.ts @@ -0,0 +1,144 @@ +import config from '@/api/config' + +// Interface for included file information +interface IncludedFile { + path: string + content: string + depth: number +} + +// Interface for context building result +export interface LLMContext { + mainFile: { + path: string + content: string + } + includedFiles: IncludedFile[] + contextText: string +} + +// Parse nginx config content to find include directives +function parseIncludeDirectives(content: string): string[] { + // More flexible regex that handles include with or without semicolon + const includePattern = /^\s*include\s+([^\s;]+)/g + const includes: string[] = [] + let match + + // eslint-disable-next-line no-cond-assign + while ((match = includePattern.exec(content)) !== null) { + const includePath = match[1].trim() + + // Skip wildcards as they require special handling + if (!includePath.includes('*') && !includePath.includes('?')) { + includes.push(includePath) + } + } + + return includes +} + +// Recursively load included files with depth limit to prevent infinite loops +async function loadIncludedFiles( + includes: string[], + visited: Set = new Set(), + depth: number = 0, + maxDepth: number = 10, +): Promise { + if (depth >= maxDepth) { + console.warn('Maximum include depth reached, stopping recursion') + return [] + } + + const includedFiles: IncludedFile[] = [] + + for (const includePath of includes) { + // Prevent circular includes + if (visited.has(includePath)) { + console.warn(`Circular include detected: ${includePath}`) + continue + } + + visited.add(includePath) + + try { + // Use config.getItem to fetch the included file + const response = await config.getItem(includePath) + const fileContent = response.content + + const includedFile: IncludedFile = { + path: includePath, + content: fileContent, + depth, + } + includedFiles.push(includedFile) + + // Recursively parse this file for more includes + const nestedIncludes = parseIncludeDirectives(fileContent) + if (nestedIncludes.length > 0) { + const nestedFiles = await loadIncludedFiles( + nestedIncludes, + new Set(visited), + depth + 1, + maxDepth, + ) + includedFiles.push(...nestedFiles) + } + } + catch (error) { + console.warn(`Failed to load included file: ${includePath}`, error) + // Continue processing other includes even if one fails + } + + visited.delete(includePath) + } + + return includedFiles +} + +// Build complete context including main file and all included files +export async function buildLLMContext(mainFilePath: string, mainFileContent: string): Promise { + const context: LLMContext = { + mainFile: { + path: mainFilePath, + content: mainFileContent, + }, + includedFiles: [], + contextText: '', + } + + try { + // Parse include directives from main file + const includes = parseIncludeDirectives(mainFileContent) + + if (includes.length > 0) { + // Load all included files recursively + context.includedFiles = await loadIncludedFiles(includes) + } + + // Build the complete context text + context.contextText = buildContextText(context) + } + catch (error) { + console.error('Error building LLM context:', error) + // Fallback to main file only + context.contextText = `Main File: ${mainFilePath}\n\n${mainFileContent}` + } + + return context +} + +// Build formatted context text for LLM +function buildContextText(context: LLMContext): string { + let contextText = `Main File: ${context.mainFile.path}\n\n${context.mainFile.content}` + + if (context.includedFiles.length > 0) { + contextText += '\n\n--- INCLUDED FILES ---\n' + + for (const includedFile of context.includedFiles) { + const indent = ' '.repeat(includedFile.depth) + contextText += `\n${indent}Included File: ${includedFile.path}\n${indent}${includedFile.content.replace(/\n/g, `\n${indent}`)}\n` + } + } + + return contextText +} diff --git a/app/src/components/ChatGPT/index.ts b/app/src/components/LLM/index.ts similarity index 84% rename from app/src/components/ChatGPT/index.ts rename to app/src/components/LLM/index.ts index 614cf4ddf..b745e6685 100644 --- a/app/src/components/ChatGPT/index.ts +++ b/app/src/components/LLM/index.ts @@ -1,4 +1,4 @@ -import ChatGPT from './ChatGPT.vue' +import LLM from './LLM.vue' export { default as ChatMessage } from './ChatMessage.vue' export { default as ChatMessageInput } from './ChatMessageInput.vue' @@ -7,4 +7,4 @@ export { ChatService } from './chatService' export { marked } from './markdown' export * from './types' export * from './utils' -export default ChatGPT +export default LLM diff --git a/app/src/components/LLM/llm.ts b/app/src/components/LLM/llm.ts new file mode 100644 index 000000000..7105b0779 --- /dev/null +++ b/app/src/components/LLM/llm.ts @@ -0,0 +1,550 @@ +import type { ChatComplicationMessage } from '@/api/llm' +import llm from '@/api/llm' +import { animationCoordinator } from './animationCoordinator' +import { ChatService } from './chatService' +import { useLLMSessionStore } from './sessionStore' + +export const useLLMStore = defineStore('llm', () => { + // State + const path = ref('') + const nginxConfig = ref('') + const currentSessionId = ref(null) + const messages = ref([]) + const messageContainerRef = ref() + const loading = ref(false) + const editingIdx = ref(-1) + const editValue = ref('') + const askBuffer = ref('') + const streamingMessageIndex = ref(-1) + const userScrolledUp = ref(false) + const messageTypingCompleted = ref(false) + + // Getters + const isEditing = computed(() => editingIdx.value !== -1) + const currentEditingMessage = computed(() => { + if (editingIdx.value !== -1 && messages.value[editingIdx.value]) { + return messages.value[editingIdx.value] + } + return null + }) + const hasMessages = computed(() => messages.value.length > 0) + + // Actions + // Initialize messages for a specific file path + async function initMessages(filePath?: string) { + messages.value = [] + if (filePath) { + try { + const record = await llm.get_messages(filePath) + messages.value = record.content || [] + } + catch (error) { + console.error('Failed to load chat record:', error) + } + path.value = filePath + } + } + + // Switch to a specific session + async function switchSession(sessionId: string) { + try { + currentSessionId.value = sessionId + const session = await llm.get_session(sessionId) + messages.value = session.messages || [] + // Only update path if it's not already set to terminal assistant + if (path.value !== '__terminal_assistant__') { + path.value = session.path || '' + } + cancelEdit() + } + catch (error) { + console.error('Failed to switch session:', error) + } + } + + // Save current messages to session + async function saveSession() { + if (!currentSessionId.value) + return + + try { + const validMessages = messages.value.filter(msg => msg.content.trim() !== '') + await llm.update_session(currentSessionId.value, { messages: validMessages }) + } + catch (error) { + console.error('Failed to save session:', error) + } + } + + // Start editing a message at the specified index + function startEdit(index: number) { + if (index >= 0 && index < messages.value.length) { + editingIdx.value = index + editValue.value = messages.value[index].content + } + } + + // Save the edited message + function saveEdit() { + if (editingIdx.value !== -1 && messages.value[editingIdx.value]) { + messages.value[editingIdx.value].content = editValue.value + editingIdx.value = -1 + editValue.value = '' + } + } + + // Cancel editing and reset state + function cancelEdit() { + editingIdx.value = -1 + editValue.value = '' + } + + // Add a new user message + function addUserMessage(content: string) { + messages.value.push({ + role: 'user', + content, + }) + } + + // Add a new assistant message + function addAssistantMessage(content: string = '') { + messages.value.push({ + role: 'assistant', + content, + }) + } + + // Update the last assistant message content (for streaming) + function updateLastAssistantMessage(content: string) { + const lastMessage = messages.value[messages.value.length - 1] + if (lastMessage && lastMessage.role === 'assistant') { + lastMessage.content = content + } + } + + // Remove messages after the specified index for regeneration + function prepareRegenerate(index: number) { + messages.value = messages.value.slice(0, index) + cancelEdit() + } + + // Clear all messages + function clearMessages() { + messages.value = [] + cancelEdit() + } + + // Store chat record to server + async function storeRecord() { + // Prefer session storage over legacy file storage + if (currentSessionId.value) { + await saveSession() + } + else if (path.value) { + try { + const validMessages = messages.value.filter(msg => msg.content.trim() !== '') + await llm.store_messages({ + file_name: path.value, + messages: validMessages, + }) + } + catch (error) { + console.error('Failed to store chat record:', error) + } + } + } + + // Current assistant type + const assistantType = ref('nginx') + + // Set assistant type for the current session + function setType(type: 'terminal') { + if (type === 'terminal') { + assistantType.value = 'terminal' + } + } + + // Clear chat record on server + async function clearRecord() { + if (!path.value) + return + + try { + await llm.store_messages({ + file_name: path.value, + messages: [], + }) + clearMessages() + } + catch (error) { + console.error('Failed to clear chat record:', error) + } + } + + // Set loading state + function setLoading(loadingState: boolean) { + loading.value = loadingState + } + + // Set ask buffer + function setAskBuffer(buffer: string) { + askBuffer.value = buffer + } + + // Clear ask buffer + function clearAskBuffer() { + askBuffer.value = '' + } + + // Auto-scroll state management + const isAutoScrolling = ref(false) + const scrollObserver = ref(null) + const mutationObserver = ref(null) + const lastScrollHeight = ref(0) + + // Check if container is at bottom + function isAtBottom() { + if (!messageContainerRef.value) + return true + + const container = messageContainerRef.value + const threshold = 10 // Very strict threshold for precision + const scrollBottom = container.scrollHeight - container.scrollTop - container.clientHeight + return scrollBottom <= threshold + } + + // Smooth scroll to bottom with high precision + function scrollToBottom(force = false) { + if (!messageContainerRef.value) + return + + const container = messageContainerRef.value + + // Always scroll if forced, or if user hasn't scrolled up + if (!force && userScrolledUp.value) { + return + } + + // Mark as auto-scrolling to prevent user scroll detection + isAutoScrolling.value = true + + // Immediate scroll + container.scrollTop = container.scrollHeight + + // Reset auto-scroll flag after a short delay + setTimeout(() => { + isAutoScrolling.value = false + userScrolledUp.value = false // Reset user scroll state + }, 50) + } + + // Enhanced scroll position detection + function checkScrollPosition() { + if (!messageContainerRef.value || isAutoScrolling.value) + return + + const wasAtBottom = isAtBottom() + userScrolledUp.value = !wasAtBottom + } + + // Start real-time scroll tracking for typewriter animations + function startScrollTracking() { + if (!messageContainerRef.value) + return + + const container = messageContainerRef.value + + // Stop any existing observers + stopScrollTracking() + + // Track size changes using ResizeObserver for real-time response + scrollObserver.value = new ResizeObserver(entries => { + for (const entry of entries) { + const newHeight = entry.target.scrollHeight + if (newHeight !== lastScrollHeight.value) { + lastScrollHeight.value = newHeight + + // Only auto-scroll if user hasn't scrolled up + if (!userScrolledUp.value) { + scrollToBottom() + } + } + } + }) + + // Start observing the container + scrollObserver.value.observe(container) + + // Also observe content changes using MutationObserver + mutationObserver.value = new MutationObserver(mutations => { + let shouldScroll = false + + for (const mutation of mutations) { + if (mutation.type === 'childList' || mutation.type === 'characterData') { + shouldScroll = true + break + } + } + + if (shouldScroll && !userScrolledUp.value) { + // Use RAF for smooth scrolling + requestAnimationFrame(() => { + scrollToBottom() + }) + } + }) + + // Observe all content changes + mutationObserver.value.observe(container, { + childList: true, + subtree: true, + characterData: true, + }) + + // Initial scroll to bottom + scrollToBottom(true) + } + + // Stop scroll tracking + function stopScrollTracking() { + if (scrollObserver.value) { + scrollObserver.value.disconnect() + scrollObserver.value = null + } + + if (mutationObserver.value) { + mutationObserver.value.disconnect() + mutationObserver.value = null + } + } + + // Set streaming message index + function setStreamingMessageIndex(index: number) { + streamingMessageIndex.value = index + } + + // Clear streaming message index + function clearStreamingMessageIndex() { + streamingMessageIndex.value = -1 + } + + // Request: Send messages to server using chat service + async function request(language?: string, osInfo?: string) { + setLoading(true) + animationCoordinator.reset() // Reset all animation states + animationCoordinator.setMessageStreaming(true) + + // Set the streaming message index to the last message (assistant message) + setStreamingMessageIndex(messages.value.length - 1) + + // Start real-time scroll tracking for typewriter animation + startScrollTracking() + + try { + const chatService = new ChatService() + const assistantMessage = await chatService.request( + assistantType.value, + messages.value.slice(0, -1), // Exclude the empty assistant message + message => { + // Update the current assistant message in real-time + updateLastAssistantMessage(message.content) + }, + language, + nginxConfig.value, + osInfo, + ) + + // Update the final content + updateLastAssistantMessage(assistantMessage.content) + + // If no typing animation starts within a reasonable time, end streaming + // This handles cases where content is too short for typewriter effect + setTimeout(() => { + if (animationCoordinator.getState().value.messageStreaming) { + animationCoordinator.setMessageStreaming(false) + } + }, 200) + + // Ensure content is rendered before scrolling + await nextTick() + await nextTick() // Double nextTick for complex content + scrollToBottom(true) // Force scroll when message is complete + } + catch (error) { + console.error('Chat request failed:', error) + // Remove the empty assistant message on error + if (messages.value.length > 0 && messages.value[messages.value.length - 1].content === '') { + messages.value.pop() + } + } + finally { + // Don't clear streaming index immediately - let typewriter animation complete first + + // Ensure all DOM updates are complete before final scroll + await nextTick() + await nextTick() + scrollToBottom(true) // Force scroll after loading completes + + await storeRecord() + + // Title animation will be triggered by coordinator when message animation completes + + // Wait for all animations to complete before ending loading state + setTimeout(async () => { + await animationCoordinator.waitForAllAnimationsComplete() + + // Now clear streaming state after all animations are done + clearStreamingMessageIndex() + + // Stop scroll tracking when all animations are done + stopScrollTracking() + + setLoading(false) + + // Final scroll after everything is truly complete + scrollToBottom(true) + + // Generate session title after everything is complete + await tryGenerateSessionTitle() + }, 100) + } + } + + // Send: Add user message into messages then call request + async function send(content: string, currentLanguage?: string, osInfo?: string) { + // Add user message directly without embedding file content + addUserMessage(content) + + // Clear ask buffer + clearAskBuffer() + + // Add empty assistant message for real-time updates + addAssistantMessage('') + + await request(currentLanguage, osInfo) + } + + // Regenerate: Removes messages after index and re-request the answer + async function regenerate(index: number, currentLanguage?: string, osInfo?: string) { + prepareRegenerate(index) + + // Add empty assistant message for real-time updates + addAssistantMessage('') + + await request(currentLanguage, osInfo) + } + + // Auto-generate title for sessions with user messages + async function tryGenerateSessionTitle() { + if (!currentSessionId.value) { + return + } + + // Check if there are user messages in the conversation + const hasUserMessages = messages.value.some(msg => msg.role === 'user') + if (!hasUserMessages) { + return + } + // Wait for message animation to complete before starting title animation + await animationCoordinator.waitForMessageAnimationComplete() + + try { + const sessionStore = useLLMSessionStore() + await sessionStore.generateSessionTitle(currentSessionId.value) + } + catch (error) { + console.error('Failed to auto-generate session title:', error) + } + } + + function setNginxConfig(config: string) { + nginxConfig.value = config + } + + // Listen for title animation trigger from coordinator + onMounted(() => { + window.addEventListener('startTitleAnimation', () => { + tryGenerateSessionTitle() + }) + }) + + onUnmounted(() => { + window.removeEventListener('startTitleAnimation', () => { + tryGenerateSessionTitle() + }) + + // Clean up observers when component unmounts + stopScrollTracking() + }) + + // Set up manual scroll detection when container ref changes + watch(messageContainerRef, newContainer => { + if (newContainer) { + // Simple scroll listener for detecting user manual scrolls + const handleScroll = () => { + // Only detect scroll if not auto-scrolling + if (!isAutoScrolling.value) { + checkScrollPosition() + } + } + + newContainer.addEventListener('scroll', handleScroll, { passive: true }) + + // Initial check + checkScrollPosition() + } + }) + // Return all state, getters, and actions + return { + // State + path, + nginxConfig, + currentSessionId, + messages, + loading, + editingIdx, + editValue, + askBuffer, + messageContainerRef, + streamingMessageIndex, + userScrolledUp, + messageTypingCompleted, + assistantType, + + // Getters + isEditing, + currentEditingMessage, + hasMessages, + + // Actions + initMessages, + setNginxConfig, + switchSession, + saveSession, + startEdit, + saveEdit, + cancelEdit, + addUserMessage, + addAssistantMessage, + updateLastAssistantMessage, + prepareRegenerate, + clearMessages, + storeRecord, + setType, + clearRecord, + setLoading, + setAskBuffer, + clearAskBuffer, + setStreamingMessageIndex, + clearStreamingMessageIndex, + request, + send, + regenerate, + scrollToBottom, + tryGenerateSessionTitle, + checkScrollPosition, + startScrollTracking, + stopScrollTracking, + } +}) diff --git a/app/src/components/ChatGPT/markdown.ts b/app/src/components/LLM/markdown.ts similarity index 100% rename from app/src/components/ChatGPT/markdown.ts rename to app/src/components/LLM/markdown.ts diff --git a/app/src/components/LLM/sessionStore.ts b/app/src/components/LLM/sessionStore.ts new file mode 100644 index 000000000..958515f52 --- /dev/null +++ b/app/src/components/LLM/sessionStore.ts @@ -0,0 +1,252 @@ +import type { ChatComplicationMessage, LLMSessionResponse } from '@/api/llm' +import llm from '@/api/llm' +import { animationCoordinator } from './animationCoordinator' + +export const useLLMSessionStore = defineStore('llm-session', () => { + // State + const sessions = ref([]) + const activeSessionId = ref(null) + const loading = ref(false) + const sessionDrawerVisible = ref(false) + const typewriterInProgress = ref(new Set()) + + // Getters + const activeSession = computed(() => { + if (!activeSessionId.value) + return null + return sessions.value.find(s => s.session_id === activeSessionId.value) || null + }) + + const sortedSessions = computed(() => { + return [...sessions.value].sort((a, b) => { + return new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime() + }) + }) + + const hasActiveSession = computed(() => activeSessionId.value !== null) + + // Actions + async function loadSessions(pathOrType?: string, isType?: boolean) { + loading.value = true + try { + const response = await llm.get_sessions(pathOrType, isType) + sessions.value = response + } + catch (error) { + console.error('Failed to load sessions:', error) + } + finally { + loading.value = false + } + } + + async function createSession(title: string, path?: string, type?: string) { + try { + const sessionData: { title: string, path?: string, type?: string } = { title } + + // For terminal type, don't pass path + if (type === 'terminal') { + sessionData.type = type + } + else if (path) { + sessionData.path = path + } + + const response = await llm.create_session(sessionData) + sessions.value.unshift(response) + activeSessionId.value = response.session_id + return response + } + catch (error) { + console.error('Failed to create session:', error) + throw error + } + } + + async function updateSession(sessionId: string, data: { title?: string, messages?: ChatComplicationMessage[], is_active?: boolean }) { + try { + const response = await llm.update_session(sessionId, data) + const index = sessions.value.findIndex(s => s.session_id === sessionId) + if (index !== -1) { + // If typewriter is in progress for this session, preserve the current title + if (typewriterInProgress.value.has(sessionId) && data.title) { + const currentTitle = sessions.value[index].title + sessions.value[index] = { ...response, title: currentTitle } + } + else { + sessions.value[index] = response + } + } + return response + } + catch (error) { + console.error('Failed to update session:', error) + throw error + } + } + + async function deleteSession(sessionId: string) { + try { + await llm.delete_session(sessionId) + sessions.value = sessions.value.filter(s => s.session_id !== sessionId) + + // If deleting active session, clear it + if (activeSessionId.value === sessionId) { + activeSessionId.value = null + } + } + catch (error) { + console.error('Failed to delete session:', error) + throw error + } + } + + async function duplicateSession(sessionId: string) { + try { + const response = await llm.duplicate_session(sessionId) + sessions.value.unshift(response) + activeSessionId.value = response.session_id + return response + } + catch (error) { + console.error('Failed to duplicate session:', error) + throw error + } + } + + async function generateSessionTitle(sessionId: string) { + try { + // Skip if typewriter is already in progress for this session + if (typewriterInProgress.value.has(sessionId)) { + return + } + + const response = await llm.generate_session_title(sessionId) + + // Update the session in the local store with typewriter effect + const index = sessions.value.findIndex(s => s.session_id === sessionId) + if (index !== -1) { + await typewriterEffect(sessionId, response.title) + } + + return response + } + catch (error) { + console.error('Failed to generate session title:', error) + throw error + } + } + + // Typewriter effect for session title + async function typewriterEffect(sessionId: string, newTitle: string) { + const index = sessions.value.findIndex(s => s.session_id === sessionId) + if (index === -1) { + return + } + + const session = sessions.value[index] + + // Mark typewriter as in progress + typewriterInProgress.value.add(sessionId) + animationCoordinator.setTitleAnimating(true) + + try { + let currentText = '' + + // Clear the current title first + session.title = '' + + // Type out the new title character by character + for (let i = 0; i <= newTitle.length; i++) { + // Double-check session still exists (in case of concurrent operations) + const currentIndex = sessions.value.findIndex(s => s.session_id === sessionId) + if (currentIndex === -1) { + break + } + + currentText = newTitle.substring(0, i) + sessions.value[currentIndex].title = currentText + + // Ensure Vue updates the DOM + await nextTick() + + // Wait between each character (adjust speed as needed) + await new Promise(resolve => setTimeout(resolve, 20)) + } + + // Ensure final title is set correctly + const finalIndex = sessions.value.findIndex(s => s.session_id === sessionId) + if (finalIndex !== -1) { + sessions.value[finalIndex].title = newTitle + } + } + finally { + // Always remove from progress tracking when done + typewriterInProgress.value.delete(sessionId) + animationCoordinator.setTitleAnimating(false) + } + } + + function setActiveSession(sessionId: string | null) { + activeSessionId.value = sessionId + } + + async function updateSessionActiveStatus(sessionId: string, isActive: boolean) { + try { + const response = await llm.update_session(sessionId, { is_active: isActive }) + const index = sessions.value.findIndex(s => s.session_id === sessionId) + if (index !== -1) { + sessions.value[index].is_active = isActive + } + return response + } + catch (error) { + console.error('Failed to update session active status:', error) + throw error + } + } + + function toggleSessionDrawer() { + sessionDrawerVisible.value = !sessionDrawerVisible.value + } + + function showSessionDrawer() { + sessionDrawerVisible.value = true + } + + function hideSessionDrawer() { + sessionDrawerVisible.value = false + } + + // Initialize (will be called with path from parent component) + // onMounted(() => { + // loadSessions() + // }) + + return { + // State + sessions, + activeSessionId, + loading, + sessionDrawerVisible, + typewriterInProgress, + + // Getters + activeSession, + sortedSessions, + hasActiveSession, + + // Actions + loadSessions, + createSession, + updateSession, + deleteSession, + duplicateSession, + generateSessionTitle, + setActiveSession, + updateSessionActiveStatus, + toggleSessionDrawer, + showSessionDrawer, + hideSessionDrawer, + } +}) diff --git a/app/src/components/LLM/types.ts b/app/src/components/LLM/types.ts new file mode 100644 index 000000000..022a76bb4 --- /dev/null +++ b/app/src/components/LLM/types.ts @@ -0,0 +1,23 @@ +export interface CodeBlockState { + isInCodeBlock: boolean + backtickCount: number +} + +export interface LLMProps { + content: string + path?: string +} + +export interface LLMSession { + id: string + title: string + path?: string + createdAt: Date + updatedAt: Date + messageCount: number +} + +export interface LLMSessionState { + sessions: LLMSession[] + activeSessionId: string | null +} diff --git a/app/src/components/ChatGPT/utils.ts b/app/src/components/LLM/utils.ts similarity index 93% rename from app/src/components/ChatGPT/utils.ts rename to app/src/components/LLM/utils.ts index 1f8c1b0c7..d369450e1 100644 --- a/app/src/components/ChatGPT/utils.ts +++ b/app/src/components/LLM/utils.ts @@ -57,7 +57,7 @@ let scrollTimeoutId: number | null = null * scrollToBottom: Scroll container to bottom with optimized performance */ export function scrollToBottom() { - // 更简单的防抖,避免过度优化导致的卡顿 + // Simple debounce to avoid stuttering from over-optimization if (scrollTimeoutId) { return } @@ -65,11 +65,11 @@ export function scrollToBottom() { scrollTimeoutId = window.setTimeout(() => { const container = document.querySelector('.right-settings .ant-card-body') if (container) { - // 直接设置scrollTop,避免动画导致的卡顿 + // Set scrollTop directly to avoid animation stuttering container.scrollTop = container.scrollHeight } scrollTimeoutId = null - }, 50) // 减少到50ms,提高响应性 + }, 50) // Reduced to 50ms for better responsiveness } /** diff --git a/app/src/components/NamespaceRender/NamespaceRender.vue b/app/src/components/NamespaceRender/NamespaceRender.vue new file mode 100644 index 000000000..41d1111a0 --- /dev/null +++ b/app/src/components/NamespaceRender/NamespaceRender.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/app/src/components/NamespaceRender/index.ts b/app/src/components/NamespaceRender/index.ts new file mode 100644 index 000000000..f44391574 --- /dev/null +++ b/app/src/components/NamespaceRender/index.ts @@ -0,0 +1 @@ +export { default } from './NamespaceRender.vue' diff --git a/app/src/components/EnvGroupTabs/EnvGroupTabs.vue b/app/src/components/NamespaceTabs/NamespaceTabs.vue similarity index 56% rename from app/src/components/EnvGroupTabs/EnvGroupTabs.vue rename to app/src/components/NamespaceTabs/NamespaceTabs.vue index bf69df6ce..893a13a5c 100644 --- a/app/src/components/EnvGroupTabs/EnvGroupTabs.vue +++ b/app/src/components/NamespaceTabs/NamespaceTabs.vue @@ -1,105 +1,80 @@
- - - +
@@ -207,7 +138,7 @@ function getAvailabilityResult(directive: NgxDirective) { diff --git a/app/src/components/NodeCard/index.ts b/app/src/components/NodeCard/index.ts new file mode 100644 index 000000000..928597dbd --- /dev/null +++ b/app/src/components/NodeCard/index.ts @@ -0,0 +1 @@ +export { default } from './NodeCard.vue' diff --git a/app/src/components/EnvIndicator/EnvIndicator.vue b/app/src/components/NodeIndicator/NodeIndicator.vue similarity index 74% rename from app/src/components/EnvIndicator/EnvIndicator.vue rename to app/src/components/NodeIndicator/NodeIndicator.vue index b547e860c..6bb686789 100644 --- a/app/src/components/EnvIndicator/EnvIndicator.vue +++ b/app/src/components/NodeIndicator/NodeIndicator.vue @@ -1,26 +1,25 @@ diff --git a/app/src/components/SelfCheck/AsyncErrorDisplay.vue b/app/src/components/SelfCheck/AsyncErrorDisplay.vue new file mode 100644 index 000000000..395facb65 --- /dev/null +++ b/app/src/components/SelfCheck/AsyncErrorDisplay.vue @@ -0,0 +1,17 @@ + + + diff --git a/app/src/components/SelfCheck/SelfCheck.vue b/app/src/components/SelfCheck/SelfCheck.vue index 0daacf2b6..35f2cab26 100644 --- a/app/src/components/SelfCheck/SelfCheck.vue +++ b/app/src/components/SelfCheck/SelfCheck.vue @@ -1,14 +1,31 @@ @@ -27,7 +44,7 @@ onMounted(() => { @@ -40,9 +57,14 @@ onMounted(() => { {{ item.description?.() }}
- - {{ $gettext(item.err?.message) }} - + + + +
diff --git a/app/src/components/SelfCheck/tasks/frontend/sse.ts b/app/src/components/SelfCheck/tasks/frontend/sse.ts deleted file mode 100644 index 0e044be7b..000000000 --- a/app/src/components/SelfCheck/tasks/frontend/sse.ts +++ /dev/null @@ -1,57 +0,0 @@ -import type { FrontendTask } from '../types' -import type { ReportStatusType } from '@/api/self_check' -import { ReportStatus } from '@/api/self_check' -import { useSSE } from '@/composables/useSSE' - -/** - * SSE Task - * - * Checks if the application is able to connect to the backend through the Server-Sent Events protocol - */ -const SSETask: FrontendTask = { - key: 'sse', - name: () => 'SSE', - description: () => $gettext('Support communication with the backend through the Server-Sent Events protocol. ' - + 'If your Nginx UI is being used via an Nginx reverse proxy, ' - + 'please refer to this link to write the corresponding configuration file: ' - + 'https://nginxui.com/guide/nginx-proxy-example.html'), - check: async (): Promise => { - try { - const connected = await new Promise(resolve => { - const { connect, disconnect } = useSSE() - - // Use the connect method from useSSE - connect({ - url: '/api/self_check/sse', - onMessage: () => { - resolve(true) - }, - onError: () => { - resolve(false) - disconnect() - }, - reconnectInterval: 0, - }) - - // Set a timeout for the connection attempt - setTimeout(() => { - resolve(false) - disconnect() - }, 5000) - }) - - if (connected) { - return ReportStatus.Success - } - else { - return ReportStatus.Error - } - } - catch (error) { - console.error(error) - return ReportStatus.Error - } - }, -} - -export default SSETask diff --git a/app/src/components/SelfCheck/tasks/frontend/websocket.ts b/app/src/components/SelfCheck/tasks/frontend/websocket.ts index c56bf03c0..410854cb2 100644 --- a/app/src/components/SelfCheck/tasks/frontend/websocket.ts +++ b/app/src/components/SelfCheck/tasks/frontend/websocket.ts @@ -1,6 +1,7 @@ import type { FrontendTask } from '../types' import type { ReportStatusType } from '@/api/self_check' import selfCheck, { ReportStatus } from '@/api/self_check' +import { useWebSocket } from '@/lib/websocket' /** * WebSocket Task @@ -17,11 +18,13 @@ const WebsocketTask: FrontendTask = { check: async (): Promise => { try { const connected = await new Promise(resolve => { - const ws = selfCheck.websocket() - ws.onopen = () => { + const { ws } = useWebSocket(selfCheck.websocketUrl, false) + const socket = ws.value! + socket.onopen = () => { + socket.close() resolve(true) } - ws.onerror = () => { + socket.onerror = () => { resolve(false) } // Set a timeout for the connection attempt diff --git a/app/src/components/SyncNodesPreview/SyncNodesPreview.vue b/app/src/components/SyncNodesPreview/SyncNodesPreview.vue new file mode 100644 index 000000000..f29ffe3a4 --- /dev/null +++ b/app/src/components/SyncNodesPreview/SyncNodesPreview.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/app/src/components/SyncNodesPreview/index.ts b/app/src/components/SyncNodesPreview/index.ts new file mode 100644 index 000000000..cae4da863 --- /dev/null +++ b/app/src/components/SyncNodesPreview/index.ts @@ -0,0 +1 @@ +export { default } from './SyncNodesPreview.vue' diff --git a/app/src/components/SystemRestore/SystemRestoreContent.vue b/app/src/components/SystemRestore/SystemRestoreContent.vue index d9c02695b..e974a61df 100644 --- a/app/src/components/SystemRestore/SystemRestoreContent.vue +++ b/app/src/components/SystemRestore/SystemRestoreContent.vue @@ -2,7 +2,6 @@ import type { UploadFile } from 'ant-design-vue' import type { RestoreOptions, RestoreResponse } from '@/api/backup' import { InboxOutlined } from '@ant-design/icons-vue' -import { message } from 'ant-design-vue' import backup from '@/api/backup' // Define props using TypeScript interface @@ -23,6 +22,7 @@ withDefaults(defineProps(), { }) const emit = defineEmits() +const { message } = useGlobalApp() // Use UploadFile from ant-design-vue const uploadFiles = ref([]) diff --git a/app/src/components/TabFilter/TabFilter.vue b/app/src/components/TabFilter/TabFilter.vue new file mode 100644 index 000000000..9197bf42d --- /dev/null +++ b/app/src/components/TabFilter/TabFilter.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/app/src/components/TabFilter/index.ts b/app/src/components/TabFilter/index.ts new file mode 100644 index 000000000..4c7579414 --- /dev/null +++ b/app/src/components/TabFilter/index.ts @@ -0,0 +1,5 @@ +import type { TabOption } from './TabFilter.vue' +import TabFilter from './TabFilter.vue' + +export { TabFilter, type TabOption } +export default TabFilter diff --git a/app/src/components/TwoFA/use2FAModal.ts b/app/src/components/TwoFA/use2FAModal.ts index da393873b..8110fd791 100644 --- a/app/src/components/TwoFA/use2FAModal.ts +++ b/app/src/components/TwoFA/use2FAModal.ts @@ -1,15 +1,18 @@ -import { message, Modal } from 'ant-design-vue' -import { createVNode, render } from 'vue' import twoFA from '@/api/2fa' import Authorization from '@/components/TwoFA/Authorization.vue' -import { useUserStore } from '@/pinia' +import { useAppStore, useUserStore } from '@/pinia' function use2FAModal() { + const app = useAppStore() + const { modal } = storeToRefs(app) const refOTPAuthorization = ref() // eslint-disable-next-line sonarjs/pseudo-random const randomId = Math.random().toString(36).substring(2, 8) const { secureSessionId } = storeToRefs(useUserStore()) + // Use global message API + const { message } = useGlobalApp() + const injectStyles = () => { const style = document.createElement('style') @@ -28,66 +31,60 @@ function use2FAModal() { return new Promise((resolve, reject) => { if (!twoFAStatus.enabled) { resolve('') - return } if (secureSessionId.value && secureSessionStatus) { resolve(secureSessionId.value) - return } - injectStyles() - let container: HTMLDivElement | null = document.createElement('div') - document.body.appendChild(container) - - const close = () => { - render(null, container!) - document.body.removeChild(container!) - container = null - } - - const setSessionId = (sessionId: string) => { - close() - secureSessionId.value = sessionId - resolve(sessionId) - } - const verifyOTP = (passcode: string, recovery: string) => { - twoFA.start_secure_session_by_otp(passcode, recovery).then(async r => { - setSessionId(r.session_id) - }).catch(async () => { - refOTPAuthorization.value?.clearInput() - await message.error($gettext('Invalid passcode or recovery code')) - }) - } + injectStyles() - const vnode = createVNode(Modal, { - open: true, + // Create modal instance to be able to destroy it later + const modalInstance = modal.value!.confirm({ title: $gettext('Two-factor authentication required'), centered: true, maskClosable: false, class: randomId, - footer: false, + footer: null, + appContext: getCurrentInstance()?.appContext, + width: '500px', + content: () => { + const verifyOTP = (passcode: string, recovery: string) => { + twoFA.start_secure_session_by_otp(passcode, recovery).then(async r => { + modalInstance.destroy() + secureSessionId.value = r.session_id + resolve(r.session_id) + }).catch(async () => { + refOTPAuthorization.value?.clearInput() + await message.error($gettext('Invalid passcode or recovery code')) + }) + } + + const setSessionId = (sessionId: string) => { + modalInstance.destroy() + secureSessionId.value = sessionId + resolve(sessionId) + } + + return h( + Authorization, + { + ref: refOTPAuthorization, + twoFAStatus, + class: 'mt-3 mr-34px', + onSubmitOTP: verifyOTP, + onSubmitSecureSessionID: setSessionId, + }, + ) + }, onCancel: () => { - close() + modalInstance.destroy() // eslint-disable-next-line prefer-promise-reject-errors reject() }, - }, { - default: () => h( - Authorization, - { - ref: refOTPAuthorization, - twoFAStatus, - class: 'mt-3', - onSubmitOTP: verifyOTP, - onSubmitSecureSessionID: setSessionId, - }, - ), }) - - render(vnode, container!) }) } diff --git a/app/src/components/UpstreamCards/UpstreamCards.vue b/app/src/components/UpstreamCards/UpstreamCards.vue new file mode 100644 index 000000000..e2cb898b6 --- /dev/null +++ b/app/src/components/UpstreamCards/UpstreamCards.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/app/src/components/UpstreamDetailModal/UpstreamDetailModal.vue b/app/src/components/UpstreamDetailModal/UpstreamDetailModal.vue new file mode 100644 index 000000000..dd7c4ec8d --- /dev/null +++ b/app/src/components/UpstreamDetailModal/UpstreamDetailModal.vue @@ -0,0 +1,165 @@ + + + + + + diff --git a/app/src/composables/useGeoTranslation.ts b/app/src/composables/useGeoTranslation.ts new file mode 100644 index 000000000..568111814 --- /dev/null +++ b/app/src/composables/useGeoTranslation.ts @@ -0,0 +1,181 @@ +import countries from 'i18n-iso-countries' +import ar from 'i18n-iso-countries/langs/ar.json' +import de from 'i18n-iso-countries/langs/de.json' +import en from 'i18n-iso-countries/langs/en.json' +import es from 'i18n-iso-countries/langs/es.json' +import fr from 'i18n-iso-countries/langs/fr.json' +import ja from 'i18n-iso-countries/langs/ja.json' +import ko from 'i18n-iso-countries/langs/ko.json' +import pt from 'i18n-iso-countries/langs/pt.json' +import ru from 'i18n-iso-countries/langs/ru.json' +import tr from 'i18n-iso-countries/langs/tr.json' +import uk from 'i18n-iso-countries/langs/uk.json' +import vi from 'i18n-iso-countries/langs/vi.json' +import zhCN from 'i18n-iso-countries/langs/zh.json' +import { useSettingsStore } from '@/pinia' + +// Register all supported languages +countries.registerLocale(en) +countries.registerLocale(zhCN) +countries.registerLocale(fr) +countries.registerLocale(es) +countries.registerLocale(de) +countries.registerLocale(ru) +countries.registerLocale(vi) +countries.registerLocale(ko) +countries.registerLocale(tr) +countries.registerLocale(ar) +countries.registerLocale(uk) +countries.registerLocale(ja) +countries.registerLocale(pt) + +export interface GeoData { + code: string + name?: string + region?: string + province?: string + city?: string + isp?: string + value: number + percent: number +} + +export function useGeoTranslation() { + const settings = useSettingsStore() + + // Language mapping from project language codes to i18n-iso-countries codes + const getLanguageCode = (settingsLang: string): string => { + const langMap: Record = { + en: 'en', + zh_CN: 'zh', + zh_TW: 'zh', // Note: i18n-iso-countries uses 'zh' for both + fr_FR: 'fr', + es: 'es', + de_DE: 'de', + ru_RU: 'ru', + vi_VN: 'vi', + ko_KR: 'ko', + tr_TR: 'tr', + ar: 'ar', + uk_UA: 'uk', + ja_JP: 'ja', + pt_PT: 'pt', + } + return langMap[settingsLang] || 'en' + } + + // Get current locale from settings store, fallback to browser language + const getCurrentLocale = (): string => { + const settingsLang = settings.language + if (settingsLang) { + return getLanguageCode(settingsLang) + } + + // Fallback to browser language if settings not available + const browserLocale = navigator.language.toLowerCase() + if (browserLocale.startsWith('zh-cn') || browserLocale.startsWith('zh-hans')) { + return 'zh' + } + if (browserLocale.startsWith('zh-tw') || browserLocale.startsWith('zh-hant')) { + return 'zh' + } + // Map other browser languages to supported codes + const browserLangCode = browserLocale.split('-')[0] + const supportedLangs = ['fr', 'es', 'de', 'ru', 'vi', 'ko', 'tr', 'ar', 'uk', 'ja', 'pt'] + if (supportedLangs.includes(browserLangCode)) { + return browserLangCode + } + return 'en' + } + + const locale = computed(() => getCurrentLocale()) + const isChineseLocale = computed(() => { + const settingsLang = settings.language + return settingsLang === 'zh_CN' || settingsLang === 'zh_TW' + }) + + // Translate country code to localized name + const translateCountry = (countryCode: string): string => { + if (!countryCode) + return '' + + // Handle special cases + if (countryCode === 'UNKNOWN') { + return isChineseLocale.value ? '未知' : 'Unknown' + } + + const currentLocale = locale.value + return countries.getName(countryCode, currentLocale) || countryCode + } + + // Format geographic display based on locale + const formatGeoDisplay = (data: GeoData): string => { + if (isChineseLocale.value) { + // For Chinese locales, show detailed geographic info + const parts: string[] = [] + + if (data.province) + parts.push(data.province) + if (data.city) + parts.push(data.city) + + return parts.length > 0 ? parts.join(' ') : translateCountry(data.code) + } + else { + // For other locales, only show country name + return translateCountry(data.code) + } + } + + // Format tooltip content based on locale + const formatTooltip = (data: GeoData): string => { + const countryName = translateCountry(data.code) + + if (isChineseLocale.value) { + // Show detailed info for Chinese locales + let content = `
${countryName}
` + + if (data.province) + content += `省份: ${data.province}
` + if (data.city) + content += `城市: ${data.city}
` + if (data.isp) + content += `ISP: ${data.isp}
` + + content += `访问量: ${data.value || 0}
` + content += `占比: ${(data.percent || 0).toFixed(2)}%
` + + return content + } + else { + // Show only country and stats for other locales + return ` +
+ ${countryName}
+ Visits: ${data.value || 0}
+ Percentage: ${(data.percent || 0).toFixed(2)}% +
+ ` + } + } + + // Get labels using gettext + const getLabels = () => { + return { + high: $gettext('High'), + low: $gettext('Low'), + visits: $gettext('Visits'), + percentage: $gettext('Percentage'), + noData: $gettext('No data'), + } + } + + return { + locale, + isChineseLocale, + translateCountry, + formatGeoDisplay, + formatTooltip, + getLabels, + } +} diff --git a/app/src/composables/useGlobalApp.ts b/app/src/composables/useGlobalApp.ts new file mode 100644 index 000000000..53ce79297 --- /dev/null +++ b/app/src/composables/useGlobalApp.ts @@ -0,0 +1,26 @@ +import { message as antMessage, notification as antNotification, Modal } from 'ant-design-vue' +import { useAppStore } from '@/pinia' + +/** + * Global composable for Ant Design Vue App context + * Provides message, modal, and notification APIs with fallback + */ +export function useGlobalApp() { + const appStore = useAppStore() + + const { message, modal, notification } = storeToRefs(appStore) + + return { + message: readonly(message.value || antMessage), + modal: readonly(modal.value || Modal), + notification: readonly(notification.value || antNotification), + } +} + +/** + * Legacy compatibility - mimics App.useApp() behavior + * @deprecated Use useGlobalApp() instead + */ +export function useApp() { + return useGlobalApp() +} diff --git a/app/src/composables/useNginxPerformance.ts b/app/src/composables/useNginxPerformance.ts index 5f003b658..d3c45c6b1 100644 --- a/app/src/composables/useNginxPerformance.ts +++ b/app/src/composables/useNginxPerformance.ts @@ -1,11 +1,12 @@ import type { NginxPerformanceInfo } from '@/api/ngx' import ngx from '@/api/ngx' +import { formatDateTime } from '@/lib/helper' export function useNginxPerformance() { const loading = ref(false) const error = ref('') const nginxInfo = ref(null) - const lastUpdateTime = ref(null) + const lastUpdateTime = ref('') // stub_status availability const stubStatusEnabled = ref(false) @@ -16,12 +17,12 @@ export function useNginxPerformance() { const formattedUpdateTime = computed(() => { if (!lastUpdateTime.value) return $gettext('Unknown') - return lastUpdateTime.value.toLocaleString() + return formatDateTime(lastUpdateTime.value) }) // Update the last update time function updateLastUpdateTime() { - lastUpdateTime.value = new Date() + lastUpdateTime.value = new Date().toISOString() } // Check stub_status availability and get initial data diff --git a/app/src/composables/useSSE.ts b/app/src/composables/useSSE.ts deleted file mode 100644 index d8bf1ec95..000000000 --- a/app/src/composables/useSSE.ts +++ /dev/null @@ -1,163 +0,0 @@ -import type { SSEvent } from 'sse.js' -import { storeToRefs } from 'pinia' -import { SSE } from 'sse.js' -import { urlJoin } from '@/lib/helper' -import { useSettingsStore, useUserStore } from '@/pinia' - -const userStore = useUserStore() -const { token } = storeToRefs(userStore) -const settings = useSettingsStore() - -export interface SSEOptions { - url: string - // eslint-disable-next-line ts/no-explicit-any - onMessage?: (data: any) => void - onError?: () => void - parseData?: boolean - reconnectInterval?: number -} - -/** - * Build SSE URL based on environment - */ -function buildSSEUrl(url: string): string { - // In development mode, connect directly to backend server - if (import.meta.env.DEV) { - const proxyTarget = import.meta.env.VITE_PROXY_TARGET || 'http://localhost:9000' - - return urlJoin(proxyTarget, url) - } - - // In production mode, use relative path - return urlJoin(window.location.pathname, url) -} - -/** - * SSE Composable - * Provide the ability to create, manage, and automatically clean up SSE connections - */ -export function useSSE() { - const sseInstance = shallowRef() - const reconnectTimer = shallowRef>() - const isReconnecting = ref(false) - const currentOptions = shallowRef() - - /** - * Clear reconnect timer - */ - function clearReconnectTimer() { - if (reconnectTimer.value) { - clearTimeout(reconnectTimer.value) - reconnectTimer.value = undefined - } - } - - /** - * Connect to SSE service - */ - function connect(options: SSEOptions) { - const { - url, - onMessage, - onError, - parseData = true, - reconnectInterval = 5000, - } = options - - // Store current options for reconnection - currentOptions.value = options - - // Clear any existing reconnect timer - clearReconnectTimer() - - // Disconnect existing connection before creating new one - if (sseInstance.value) { - sseInstance.value.close() - } - - const fullUrl = buildSSEUrl(url) - - const headers: Record = {} - - if (token.value) { - headers.Authorization = token.value - } - - if (settings.environment.id) { - headers['X-Node-ID'] = settings.environment.id.toString() - } - - const sse = new SSE(fullUrl, { - headers, - }) - - // Handle messages - sse.onmessage = (e: SSEvent) => { - if (!e.data) { - return - } - - // Reset reconnecting state on successful message - isReconnecting.value = false - - try { - const parsedData = parseData ? JSON.parse(e.data) : e.data - onMessage?.(parsedData) - } - catch (error) { - console.error('Error parsing SSE message:', error) - } - } - - // Handle errors and reconnect - sse.onerror = () => { - onError?.() - - // Only attempt reconnection if not already reconnecting and we have current options - if (!isReconnecting.value && currentOptions.value) { - isReconnecting.value = true - - // Clear any existing timer before setting new one - clearReconnectTimer() - - reconnectTimer.value = setTimeout(() => { - if (currentOptions.value && isReconnecting.value) { - connect(currentOptions.value) - } - }, reconnectInterval) - } - } - - sseInstance.value = sse - return sse - } - - /** - * Disconnect SSE connection - */ - function disconnect() { - // Clear reconnect timer and state - clearReconnectTimer() - isReconnecting.value = false - currentOptions.value = undefined - - if (sseInstance.value) { - sseInstance.value.close() - sseInstance.value = undefined - } - } - - // Automatically disconnect when the component is unmounted - if (getCurrentInstance()) { - onUnmounted(() => { - disconnect() - }) - } - - return { - connect, - disconnect, - sseInstance, - isReconnecting: readonly(isReconnecting), - } -} diff --git a/app/src/composables/useTerminalSession.ts b/app/src/composables/useTerminalSession.ts new file mode 100644 index 000000000..e5f90750c --- /dev/null +++ b/app/src/composables/useTerminalSession.ts @@ -0,0 +1,203 @@ +import type { TerminalTab } from '@/pinia/moudule/terminal' +import { FitAddon } from '@xterm/addon-fit' +import { Terminal } from '@xterm/xterm' +import { throttle } from 'lodash' +import { useWebSocket } from '@/lib/websocket' + +export interface TerminalSession { + tab: TerminalTab + terminal: Terminal + websocket: WebSocket + fitAddon: FitAddon + ping?: ReturnType + isWebSocketReady: boolean + lostConnection: boolean +} + +export interface TerminalSessionCallbacks { + onInput?: (tabId: string, data: string) => void + onConnectionLost?: (tabId: string) => void + onConnectionReady?: (tabId: string) => void +} + +interface Message { + Type: number + Data: string | null | { Cols: number, Rows: number } +} + +export function useTerminalSession() { + const sessions = new Map() + + const createSession = async ( + tab: TerminalTab, + containerId: string, + secureSessionId: string, + callbacks?: TerminalSessionCallbacks, + ): Promise => { + const terminal = new Terminal({ + convertEol: true, + fontSize: 14, + cursorStyle: 'block', + scrollback: 1000, + theme: { + background: '#000', + }, + }) + + const fitAddon = new FitAddon() + terminal.loadAddon(fitAddon) + + const { ws } = useWebSocket(`/api/pty?X-Secure-Session-ID=${secureSessionId}`, false) + const websocket = ws.value! + + const session: TerminalSession = { + tab, + terminal, + websocket, + fitAddon, + isWebSocketReady: false, + lostConnection: false, + } + + const fit = throttle(() => { + fitAddon.fit() + }, 50) + + const sendMessage = (data: Message) => { + if (session.websocket && session.isWebSocketReady) { + session.websocket.send(JSON.stringify(data)) + } + } + + const wsOnMessage = (msg: { data: string | Uint8Array }) => { + terminal.write(msg.data) + } + + const wsOnOpen = () => { + session.isWebSocketReady = true + session.lostConnection = false + session.ping = setInterval(() => { + sendMessage({ Type: 3, Data: null }) + }, 30000) + callbacks?.onConnectionReady?.(tab.id) + } + + const handleConnectionLost = () => { + session.lostConnection = true + session.isWebSocketReady = false + callbacks?.onConnectionLost?.(tab.id) + } + + const wsOnError = handleConnectionLost + const wsOnClose = handleConnectionLost + + websocket.onmessage = wsOnMessage + websocket.onopen = wsOnOpen + websocket.onerror = wsOnError + websocket.onclose = wsOnClose + + terminal.onData(key => { + const order: Message = { + Data: key, + Type: 1, + } + + callbacks?.onInput?.(tab.id, key) + sendMessage(order) + }) + + terminal.onBinary(data => { + sendMessage({ Type: 1, Data: data }) + }) + + terminal.onResize(data => { + sendMessage({ Type: 2, Data: { Cols: data.cols, Rows: data.rows } }) + }) + + const container = document.getElementById(containerId) + if (!container) { + throw new Error(`Terminal container with id "${containerId}" not found`) + } + + terminal.open(container) + + setTimeout(() => { + fitAddon.fit() + }, 60) + + window.addEventListener('resize', fit) + terminal.focus() + + sessions.set(tab.id, session) + return session + } + + const destroySession = (tabId: string) => { + const session = sessions.get(tabId) + if (!session) + return + + clearInterval(session.ping) + session.terminal.dispose() + session.websocket.close() + sessions.delete(tabId) + } + + const getSession = (tabId: string): TerminalSession | undefined => { + return sessions.get(tabId) + } + + const focusSession = (tabId: string) => { + const session = sessions.get(tabId) + if (session) { + session.terminal.focus() + setTimeout(() => { + session.fitAddon.fit() + }, 100) + } + } + + const resizeSession = (tabId: string) => { + const session = sessions.get(tabId) + if (session) { + setTimeout(() => { + session.fitAddon.fit() + }, 100) + } + } + + const resizeAllSessions = () => { + sessions.forEach(session => { + setTimeout(() => { + session.fitAddon.fit() + }, 100) + }) + } + + const getSessionConnectionStatus = (tabId: string) => { + const session = sessions.get(tabId) + if (!session) { + return { isReady: false, lostConnection: false } + } + return { + isReady: session.isWebSocketReady, + lostConnection: session.lostConnection, + } + } + + const hasAnyConnectionLoss = computed(() => { + return Array.from(sessions.values()).some(session => session.lostConnection) + }) + + return { + createSession, + destroySession, + getSession, + focusSession, + resizeSession, + resizeAllSessions, + getSessionConnectionStatus, + hasAnyConnectionLoss, + sessions: readonly(sessions), + } +} diff --git a/app/src/composables/useUpstreamStatus.ts b/app/src/composables/useUpstreamStatus.ts new file mode 100644 index 000000000..0df8fcfde --- /dev/null +++ b/app/src/composables/useUpstreamStatus.ts @@ -0,0 +1,208 @@ +// Composable for managing upstream status logic shared between components +import type { Namespace } from '@/api/namespace' +import type { ProxyTarget } from '@/api/site' +import { useNodeAvailabilityStore } from '@/pinia/moudule/nodeAvailability' +import { useNodeGroupStore } from '@/pinia/moudule/nodeGroupStore' +import { useProxyAvailabilityStore } from '@/pinia/moudule/proxyAvailability' + +export function useUpstreamStatus(namespaceId?: Ref) { + const proxyStore = useProxyAvailabilityStore() + const nodeStore = useNodeAvailabilityStore() + const nodeGroupStore = useNodeGroupStore() + + // Check if should show multi-node display based on group configuration + const shouldShowMultiNodeDisplay = computed(() => { + if (!namespaceId?.value) { + return false + } + + const group = nodeGroupStore.getGroupById(namespaceId.value) + const testType = group?.upstream_test_type || 'local' + return testType === 'remote' || testType === 'mirror' + }) + + // Get target color based on online status + function getTargetColor(target: ProxyTarget): string { + if (!shouldShowMultiNodeDisplay.value) { + // Fallback to single-node display + const result = proxyStore.getAvailabilityResult(target) + if (!result) + return 'default' + return result.online ? 'green' : 'red' + } + + return getMultiNodeColor(target) + } + + // Helper function to get color for multi-node display + function getMultiNodeColor(target: ProxyTarget): string { + const group = nodeGroupStore.getGroupById(namespaceId!.value!) + const testType = group?.upstream_test_type || 'local' + const totalNodes = calculateTotalNodes(group, testType) + const onlineCount = calculateOnlineCount(target, group, testType) + + if (onlineCount === totalNodes) + return 'green' + if (onlineCount === 0) + return 'red' + return 'orange' // Partial online + } + + // Calculate total nodes based on test type + function calculateTotalNodes(group: Namespace | undefined, testType: string): number { + return testType === 'remote' + ? (group?.sync_node_ids?.length || 0) // remote: only sync nodes + : (group?.sync_node_ids?.length || 0) + 1 // mirror: sync nodes + main node + } + + // Calculate online nodes count + function calculateOnlineCount(target: ProxyTarget, group: Namespace | undefined, testType: string): number { + const multiNodeStatus = proxyStore.getMultiNodeStatus(target) + let onlineCount = 0 + + if (multiNodeStatus) { + // Count online nodes from multi-node data + onlineCount = Object.values(multiNodeStatus).filter(status => status.online).length + } + + // For mirror mode, also include main node status + if (testType === 'mirror') { + const mainNodeStatus = proxyStore.getAvailabilityResult(target) + if (mainNodeStatus && mainNodeStatus.online) { + onlineCount++ + } + } + + return onlineCount + } + + // Format socket address for display (handles IPv6 addresses) + function formatSocketAddress(host: string, port: string): string { + // Check if this is an IPv6 address by looking for colons + if (host.includes(':')) { + // IPv6 address - check if it already has brackets + if (!host.startsWith('[')) { + return `[${host}]:${port}` + } + // Already has brackets, just append port + return `${host}:${port}` + } + // IPv4 address or hostname + return `${host}:${port}` + } + + // Get target display text + function getTargetText(target: ProxyTarget): string { + const socketAddress = formatSocketAddress(target.host, target.port) + + if (!shouldShowMultiNodeDisplay.value) { + // Fallback to single-node display + const result = proxyStore.getAvailabilityResult(target) + if (!result) + return socketAddress + + if (result.online) { + return `${socketAddress} (${result.latency.toFixed(2)}ms)` + } + else { + return socketAddress + } + } + + const group = nodeGroupStore.getGroupById(namespaceId!.value!) + const testType = group?.upstream_test_type || 'local' + const totalNodes = calculateTotalNodes(group, testType) + const onlineCount = calculateOnlineCount(target, group, testType) + + return `${socketAddress} (${onlineCount}/${totalNodes})` + } + + // Get target tooltip title + function getTargetTitle(target: ProxyTarget): string { + return `${$gettext('Type')}: ${target.type === 'upstream' ? $gettext('Upstream') : $gettext('Proxy Pass')}` + } + + // Get node name by ID + function getNodeName(nodeId: string): string { + const node = nodeStore.nodes[Number.parseInt(nodeId)] + return node?.name || `Node ${nodeId}` + } + + // Get all node statuses for modal display + function getAllNodeStatuses(target: ProxyTarget) { + if (!namespaceId?.value) + return [] + + const group = nodeGroupStore.getGroupById(namespaceId.value) + const testType = group?.upstream_test_type || 'local' + const allStatuses: Array<{ nodeId: string, name: string, status: { online: boolean, latency: number }, isMainNode: boolean }> = [] + + // Add main node data first for local and mirror modes + if (testType === 'local' || testType === 'mirror') { + const mainNodeStatus = proxyStore.getAvailabilityResult(target) + if (mainNodeStatus) { + allStatuses.push({ + nodeId: 'main', + name: $gettext('Main Node'), + status: { + online: mainNodeStatus.online, + latency: mainNodeStatus.latency, + }, + isMainNode: true, + }) + } + } + + // Add all child nodes data (both online and offline) + if (group?.sync_node_ids) { + const multiNodeStatus = proxyStore.getMultiNodeStatus(target) + + for (const nodeId of group.sync_node_ids) { + const nodeIdStr = nodeId.toString() + const nodeStatus = multiNodeStatus?.[nodeIdStr] + + allStatuses.push({ + nodeId: nodeIdStr, + name: getNodeName(nodeIdStr), + status: nodeStatus || { + online: false, + latency: 0, + }, + isMainNode: false, + }) + } + } + + return allStatuses + } + + // Get status summary for modal + function getStatusSummary(target: ProxyTarget) { + const allStatuses = getAllNodeStatuses(target) + const onlineNodes = allStatuses.filter(node => node.status.online) + const totalNodes = allStatuses.length + const onlineCount = onlineNodes.length + + let avgLatency = 0 + if (onlineCount > 0) { + avgLatency = onlineNodes.reduce((sum, node) => sum + node.status.latency, 0) / onlineCount + } + + return { + onlineCount, + totalNodes, + avgLatency, + } + } + + return { + shouldShowMultiNodeDisplay, + getTargetColor, + getTargetText, + getTargetTitle, + getNodeName, + getAllNodeStatuses, + getStatusSummary, + proxyStore, + } +} diff --git a/app/src/composables/useWebSocketEventBus.ts b/app/src/composables/useWebSocketEventBus.ts deleted file mode 100644 index f6621c333..000000000 --- a/app/src/composables/useWebSocketEventBus.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { v4 as uuidv4 } from 'uuid' -import ws from '@/lib/websocket' - -export interface WebSocketMessage { - event: string - // eslint-disable-next-line ts/no-explicit-any - data: any -} - -// eslint-disable-next-line ts/no-explicit-any -export type EventHandler = (data: T) => void - -export interface EventSubscription { - id: string - event: string - handler: EventHandler -} - -class WebSocketEventBus { - private static instance: WebSocketEventBus - private ws: WebSocket | null = null - private subscriptions: Map = new Map() - private isConnected = false - - private constructor() {} - - static getInstance(): WebSocketEventBus { - if (!WebSocketEventBus.instance) { - WebSocketEventBus.instance = new WebSocketEventBus() - } - return WebSocketEventBus.instance - } - - // Connect to WebSocket - connect(): void { - if (this.ws && this.isConnected) { - return - } - - // Close existing connection - if (this.ws) { - this.ws.close() - } - - // Use the lib/websocket to create connection with auto-reconnect - this.ws = ws('/api/events', true) as WebSocket - - this.ws.onopen = () => { - this.isConnected = true - } - - this.ws.onmessage = (event: MessageEvent) => { - try { - const message: WebSocketMessage = JSON.parse(event.data) - this.handleMessage(message) - } - catch (error) { - console.error('Error parsing WebSocket message:', error) - } - } - - this.ws.onclose = () => { - this.isConnected = false - } - - this.ws.onerror = error => { - console.error('WebSocket error:', error) - this.isConnected = false - } - } - - // Handle incoming WebSocket message - private handleMessage(message: WebSocketMessage): void { - // Find all subscriptions for this event - this.subscriptions.forEach(subscription => { - if (subscription.event === message.event) { - try { - subscription.handler(message.data) - } - catch (error) { - console.error(`Error handling event ${message.event}:`, error) - } - } - }) - } - - // Subscribe to an event - // eslint-disable-next-line ts/no-explicit-any - subscribe(event: string, handler: EventHandler): string { - const id = uuidv4() - - this.subscriptions.set(id, { - id, - event, - handler, - }) - - // Ensure WebSocket is connected - if (!this.isConnected) { - this.connect() - } - - return id - } - - // Unsubscribe from an event - unsubscribe(subscriptionId: string): void { - this.subscriptions.delete(subscriptionId) - } - - // Disconnect WebSocket - disconnect(): void { - this.isConnected = false - this.subscriptions.clear() - - if (this.ws) { - this.ws.close() - this.ws = null - } - } - - // Get connection status - getConnectionStatus(): boolean { - return this.isConnected - } -} - -// WebSocket Event Bus Composable -export function useWebSocketEventBus() { - const eventBus = WebSocketEventBus.getInstance() - const subscriptionIds = ref([]) - - // Subscribe to an event - // eslint-disable-next-line ts/no-explicit-any - function subscribe(event: string, handler: EventHandler): string { - const id = eventBus.subscribe(event, handler) - subscriptionIds.value.push(id) - return id - } - - // Unsubscribe from an event - function unsubscribe(subscriptionId: string): void { - eventBus.unsubscribe(subscriptionId) - const index = subscriptionIds.value.indexOf(subscriptionId) - if (index > -1) { - subscriptionIds.value.splice(index, 1) - } - } - - // Connect to WebSocket - function connect(): void { - eventBus.connect() - } - - // Disconnect from WebSocket - function disconnect(): void { - eventBus.disconnect() - } - - // Get connection status - const isConnected = computed(() => eventBus.getConnectionStatus()) - - // Auto cleanup on unmount - if (getCurrentInstance()) { - onUnmounted(() => { - // Unsubscribe all subscriptions for this component - subscriptionIds.value.forEach(id => { - eventBus.unsubscribe(id) - }) - subscriptionIds.value = [] - }) - } - - return { - subscribe, - unsubscribe, - connect, - disconnect, - isConnected: readonly(isConnected), - } -} diff --git a/app/src/views/config/constants.ts b/app/src/constants/config.ts similarity index 100% rename from app/src/views/config/constants.ts rename to app/src/constants/config.ts diff --git a/app/src/constants/errors/analytic.ts b/app/src/constants/errors/analytic.ts new file mode 100644 index 000000000..05d10398c --- /dev/null +++ b/app/src/constants/errors/analytic.ts @@ -0,0 +1,3 @@ +export default { + 54001: () => $gettext('Node analytics failed: {0}'), +} diff --git a/app/src/constants/errors/backup.ts b/app/src/constants/errors/backup.ts index 139bd21bc..8b221ac16 100644 --- a/app/src/constants/errors/backup.ts +++ b/app/src/constants/errors/backup.ts @@ -13,7 +13,6 @@ export default { 4014: () => $gettext('Failed to cleanup temporary directory: {0}'), 4101: () => $gettext('Config path is empty'), 4102: () => $gettext('Failed to copy config file: {0}'), - 4103: () => $gettext('Failed to copy database directory: {0}'), 4104: () => $gettext('Failed to copy database file: {0}'), 4105: () => $gettext('Failed to calculate hash: {0}'), 4106: () => $gettext('Nginx config directory is not set'), @@ -30,14 +29,12 @@ export default { 4303: () => $gettext('Failed to open source file: {0}'), 4304: () => $gettext('Failed to create zip header: {0}'), 4305: () => $gettext('Failed to copy file content: {0}'), - 4306: () => $gettext('Failed to write to zip buffer: {0}'), 4501: () => $gettext('Failed to create restore directory: {0}'), 4505: () => $gettext('Failed to extract archive: {0}'), 4506: () => $gettext('Failed to decrypt Nginx UI directory: {0}'), 4507: () => $gettext('Failed to decrypt Nginx directory: {0}'), 4508: () => $gettext('Failed to verify hashes: {0}'), 4509: () => $gettext('Failed to restore Nginx configs: {0}'), - 4510: () => $gettext('Failed to restore Nginx UI files: {0}'), 4511: () => $gettext('Backup file not found: {0}'), 4512: () => $gettext('Invalid security token format'), 4513: () => $gettext('Invalid AES key format: {0}'), @@ -49,27 +46,18 @@ export default { 4605: () => $gettext('Failed to open zip entry: {0}'), 4606: () => $gettext('Failed to create symbolic link: {0}'), 4607: () => $gettext('Invalid file path: {0}'), - 4608: () => $gettext('Failed to evaluate symbolic links: {0}'), 4701: () => $gettext('Failed to read encrypted file: {0}'), 4702: () => $gettext('Failed to decrypt file: {0}'), 4703: () => $gettext('Failed to write decrypted file: {0}'), 4801: () => $gettext('Failed to read hash info file: {0}'), 4802: () => $gettext('Failed to calculate Nginx UI hash: {0}'), 4803: () => $gettext('Failed to calculate Nginx hash: {0}'), - 4804: () => $gettext('Hash verification failed: file integrity compromised'), - 4901: () => $gettext('Backup path not in granted access paths: {0}'), - 4902: () => $gettext('Storage path not in granted access paths: {0}'), 4903: () => $gettext('Backup path is required for custom directory backup'), 4904: () => $gettext('S3 configuration is incomplete: missing {0}'), 4905: () => $gettext('Unsupported backup type: {0}'), - 4906: () => $gettext('Failed to create backup directory: {0}'), 4907: () => $gettext('Failed to write backup file: {0}'), 4908: () => $gettext('Failed to write security key file: {0}'), 4909: () => $gettext('S3 upload failed: {0}'), - 4920: () => $gettext('S3 connection test failed: {0}'), - 4921: () => $gettext('S3 bucket access denied: {0}'), - 4922: () => $gettext('S3 credentials are invalid: {0}'), - 4923: () => $gettext('S3 endpoint is invalid: {0}'), 4910: () => $gettext('Invalid path: {0}'), 4911: () => $gettext('Path not in granted access paths: {0}'), 4912: () => $gettext('Backup path does not exist: {0}'), diff --git a/app/src/constants/errors/cert.ts b/app/src/constants/errors/cert.ts index 7905a824c..b63a0fe67 100644 --- a/app/src/constants/errors/cert.ts +++ b/app/src/constants/errors/cert.ts @@ -22,4 +22,5 @@ export default { 50021: () => $gettext('Write private.key error: {0}'), 50022: () => $gettext('Obtain cert error: {0}'), 50023: () => $gettext('Revoke cert error: {0}'), + 50031: () => $gettext('No certificate available'), } diff --git a/app/src/constants/errors/docker.ts b/app/src/constants/errors/docker.ts index aadb21ffd..0defc301b 100644 --- a/app/src/constants/errors/docker.ts +++ b/app/src/constants/errors/docker.ts @@ -12,4 +12,6 @@ export default { 500011: () => $gettext('Failed to inspect current container: {0}'), 500012: () => $gettext('Failed to create temp container: {0}'), 500013: () => $gettext('Failed to start temp container: {0}'), + 500014: () => $gettext('Could not find old container name'), + 500015: () => $gettext('Could not find temp container'), } diff --git a/app/src/constants/errors/geolite.ts b/app/src/constants/errors/geolite.ts new file mode 100644 index 000000000..ade7d9820 --- /dev/null +++ b/app/src/constants/errors/geolite.ts @@ -0,0 +1,13 @@ +export default { + 60000: () => $gettext('Failed to download GeoLite2 database: {0}'), + 60001: () => $gettext('Failed to decompress GeoLite2 database: {0}'), + 60002: () => $gettext('GeoLite2 database not found at {0}'), + 60003: () => $gettext('Failed to get file size: {0}'), + 60004: () => $gettext('Failed to create file: {0}'), + 60005: () => $gettext('Failed to save downloaded file: {0}'), + 60006: () => $gettext('Failed to open file: {0}'), + 60007: () => $gettext('Failed to create xz reader: {0}'), + 60008: () => $gettext('Failed to write decompressed data: {0}'), + 60009: () => $gettext('Failed to read compressed data: {0}'), + 60010: () => $gettext('Decompression succeeded but failed to delete compressed file: {0}'), +} diff --git a/app/src/constants/errors/nginx_log.indexer.ts b/app/src/constants/errors/nginx_log.indexer.ts new file mode 100644 index 000000000..e145227a2 --- /dev/null +++ b/app/src/constants/errors/nginx_log.indexer.ts @@ -0,0 +1,3 @@ +export default { + 50201: () => $gettext('Log parser is not initialized; call indexer.InitLogParser() before use'), +} diff --git a/app/src/constants/errors/nginx_log.parser.ts b/app/src/constants/errors/nginx_log.parser.ts new file mode 100644 index 000000000..f3e4eb0ab --- /dev/null +++ b/app/src/constants/errors/nginx_log.parser.ts @@ -0,0 +1,6 @@ +export default { + 50101: () => $gettext('Empty log line'), + 50102: () => $gettext('Log line exceeds maximum length'), + 50103: () => $gettext('Unsupported log format'), + 50104: () => $gettext('Invalid timestamp format'), +} diff --git a/app/src/constants/errors/nginx_log.ts b/app/src/constants/errors/nginx_log.ts index 9cc350163..b3ae2c44d 100644 --- a/app/src/constants/errors/nginx_log.ts +++ b/app/src/constants/errors/nginx_log.ts @@ -6,4 +6,22 @@ export default { 50005: () => $gettext('Directive params is empty'), 50006: () => $gettext('Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui.com/guide/config-nginx.html for more information'), 50007: () => $gettext('Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui.com/guide/config-nginx.html for more information'), + 50011: () => $gettext('Log indexer not available'), + 50012: () => $gettext('Analytics service not available'), + 50013: () => $gettext('Log file does not exist'), + 50014: () => $gettext('Log path is not under whitelist'), + 50015: () => $gettext('Cannot access log file'), + 50016: () => $gettext('Background log service not available'), + 50017: () => $gettext('File path is required'), + 50018: () => $gettext('Failed to rebuild index'), + 50019: () => $gettext('Failed to rebuild file index'), + 50020: () => $gettext('Failed to delete file index'), + 50021: () => $gettext('Failed to delete all indexes'), + 50022: () => $gettext('Failed to get index status'), + 50023: () => $gettext('Failed to get persistence stats'), + 50024: () => $gettext('Log file is not a regular file'), + 50025: () => $gettext('Invalid websocket message type'), + 50026: () => $gettext('Modern searcher service not available'), + 50027: () => $gettext('Modern analytics service not available'), + 50028: () => $gettext('Modern indexer service not available'), } diff --git a/app/src/constants/errors/notification.ts b/app/src/constants/errors/notification.ts index ace06cdc5..8f123830e 100644 --- a/app/src/constants/errors/notification.ts +++ b/app/src/constants/errors/notification.ts @@ -1,4 +1,7 @@ export default { 404001: () => $gettext('Notifier not found'), 400001: () => $gettext('Invalid notifier config'), + 400002: () => $gettext('Invalid notification ID'), + 404002: () => $gettext('External notification configuration not found'), + 400003: () => $gettext('Invalid Telegram Chat ID: cannot be zero'), } diff --git a/app/src/constants/errors/performance.ts b/app/src/constants/errors/performance.ts index 5c226835a..a4ce37fcc 100644 --- a/app/src/constants/errors/performance.ts +++ b/app/src/constants/errors/performance.ts @@ -6,4 +6,5 @@ export default { 51004: () => $gettext('Failed to execute template: {0}'), 51005: () => $gettext('Failed to parse nginx config: {0}'), 51006: () => $gettext('Failed to build nginx config: {0}'), + 51007: () => $gettext('Failed to get nginx.conf path'), } diff --git a/app/src/constants/errors/self_check.ts b/app/src/constants/errors/self_check.ts index 606167822..528f6b87b 100644 --- a/app/src/constants/errors/self_check.ts +++ b/app/src/constants/errors/self_check.ts @@ -20,4 +20,6 @@ export default { 40416: () => $gettext('Sbin path not exist'), 40417: () => $gettext('Access log path not exist'), 40418: () => $gettext('Error log path not exist'), + 40419: () => $gettext('Conf.d directory not exists'), + 40420: () => $gettext('GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database for geographic IP analysis'), } diff --git a/app/src/constants/errors/upgrader.ts b/app/src/constants/errors/upgrader.ts new file mode 100644 index 000000000..ce74140d1 --- /dev/null +++ b/app/src/constants/errors/upgrader.ts @@ -0,0 +1,7 @@ +export default { + 52001: () => $gettext('Upgrader core downloadUrl is empty'), + 52002: () => $gettext('Upgrader core digest is empty'), + 52003: () => $gettext('Digest file content is empty'), + 52004: () => $gettext('Executable binary file is empty'), + 52005: () => $gettext('Update already in progress'), +} diff --git a/app/src/constants/errors/user.ts b/app/src/constants/errors/user.ts index c66d2ed5d..2c6fddb63 100644 --- a/app/src/constants/errors/user.ts +++ b/app/src/constants/errors/user.ts @@ -12,4 +12,7 @@ export default { 40401: () => $gettext('Session not found'), 40402: () => $gettext('Token is empty'), 50005: () => $gettext('Invalid claims type'), + 50006: () => $gettext('Config not found'), + 50007: () => $gettext('Db file not found'), + 50008: () => $gettext('Init user not exists'), } diff --git a/app/src/constants/errors/version.ts b/app/src/constants/errors/version.ts new file mode 100644 index 000000000..019001ba0 --- /dev/null +++ b/app/src/constants/errors/version.ts @@ -0,0 +1,4 @@ +export default { + 53001: () => $gettext('Invalid commit SHA'), + 53002: () => $gettext('Release API request failed: {0}'), +} diff --git a/app/src/constants/index.ts b/app/src/constants/index.ts index a023929d9..a72b8864f 100644 --- a/app/src/constants/index.ts +++ b/app/src/constants/index.ts @@ -7,8 +7,9 @@ export enum ConfigStatus { } export enum AutoCertState { - Disable = 0, + Disable = -1, Enable = 1, + Sync = 2, } export enum NotificationTypeT { @@ -32,6 +33,22 @@ export enum NginxStatus { Stopped, } +export const PostSyncActionMask = { + none: () => $gettext('No Action'), + reload_nginx: () => $gettext('Reload Nginx'), +} as const + +export const UpstreamTestTypeMask = { + local: () => $gettext('Local'), + remote: () => $gettext('Remote'), + mirror: () => $gettext('Mirror'), +} as const + +export const DeployModeMask = { + local: () => $gettext('Local'), + remote: () => $gettext('Remote'), +} as const + export const PrivateKeyTypeMask = { 2048: 'RSA2048', 3072: 'RSA3072', @@ -42,8 +59,8 @@ export const PrivateKeyTypeMask = { } as const export const PrivateKeyTypeList - = Object.entries(PrivateKeyTypeMask).map(([key, name]) => - ({ key, name })) + = Object.entries(PrivateKeyTypeMask).map(([key, name]) => + ({ key, name })) export type PrivateKeyType = keyof typeof PrivateKeyTypeMask export const PrivateKeyTypeEnum = { diff --git a/app/src/constants/site-status.ts b/app/src/constants/site-status.ts new file mode 100644 index 000000000..57577c6ac --- /dev/null +++ b/app/src/constants/site-status.ts @@ -0,0 +1,34 @@ +// Site health check status constants +export const SiteStatus = { + ONLINE: 'online', + OFFLINE: 'offline', + ERROR: 'error', + CHECKING: 'checking', +} as const + +// Type for site status +export type SiteStatusType = typeof SiteStatus[keyof typeof SiteStatus] + +// Status display configuration +export const SiteStatusConfig = { + [SiteStatus.ONLINE]: { + label: 'Online', + color: 'success', + icon: 'CheckCircleOutlined', + }, + [SiteStatus.OFFLINE]: { + label: 'Offline', + color: 'error', + icon: 'CloseCircleOutlined', + }, + [SiteStatus.ERROR]: { + label: 'Error', + color: 'warning', + icon: 'ExclamationCircleOutlined', + }, + [SiteStatus.CHECKING]: { + label: 'Checking', + color: 'processing', + icon: 'SyncOutlined', + }, +} as const diff --git a/app/src/language/ar/app.po b/app/src/language/ar/app.po index e2ea6c8c2..689c2841c 100644 --- a/app/src/language/ar/app.po +++ b/app/src/language/ar/app.po @@ -14,92 +14,138 @@ msgstr "" "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Weblate 5.12.2\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "" "[Nginx UI] مستخدم ACME: %{name}، البريد الإلكتروني: %{email}، دليل CA: " "%{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "[Nginx UI] يتم إنشاء نسخة احتياطية من الشهادة الحالية لإلغائها لاحقًا" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] تم تجديد الشهادة بنجاح" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] تم إلغاء الشهادة بنجاح" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "[Nginx UI] تم استخدام الشهادة للخادم، إعادة تحميل شهادة TLS للخادم" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] إنشاء عميل لتسهيل الاتصال مع خادم CA" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] تم تنظيف متغيرات البيئة" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] تم الانتهاء" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] تم إصدار الشهادة بنجاح" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] الحصول على الشهادة" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] التحضير لإلغاء الشهادة" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] إعداد تكوينات ليغو" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] إعادة تحميل nginx" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] اكتمال الإلغاء" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] إلغاء الشهادة" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] إبطال الشهادة القديمة" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] تعيين موفر تحدي DNS01" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] تعيين متغيرات البيئة" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] تعيين موفر تحدي HTTP01" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] كتابة مفتاح الشهادة الخاص إلى القرص" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] كتابة الشهادة على القرص" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "تم نسخ {label} إلى الحافظة" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* يتضمن عقدًا من مجموعة %{groupName} وعقدًا مختارة يدويًا" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "" +"* يتم تخزين ملفات الفهرس في دليل \"log-index\" ضمن مسار تكوين واجهة NGINX " +"افتراضيًا." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* تم قياس مقاييس الأداء على Apple M2 Pro (12 نواة) مع 32 جيجابايت من ذاكرة " +"الوصول العشوائي. قد يختلف الأداء الفعلي بناءً على تكوين الأجهزة لديك." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{start}-%{end} من %{total} عنصر" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "حد أدنى نواة واحدة" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "1 جيجابايت من ذاكرة الوصول العشوائي كحد أدنى" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "يُوصى بمعالجتين أو أكثر" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "إحصائيات UV/PV لمدة 24 ساعة" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "المصادقة الثنائية" @@ -108,11 +154,15 @@ msgstr "المصادقة الثنائية" msgid "2FA Settings" msgstr "إعدادات المصادقة الثنائية" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "يوصى بذاكرة وصول عشوائي 4 جيجابايت فأكثر" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "عن" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "سجل الوصول" @@ -121,30 +171,28 @@ msgid "Access log path not exist" msgstr "مسار سجل الوصول غير موجود" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "سجلات الدخول" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "مستخدم ACME" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "إجراء" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "الإجراءات" @@ -159,15 +207,15 @@ msgid "Actual worker to configured ratio" msgstr "نسبة العامل الفعلي إلى المُهيأ" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "إضافة" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "إضافة مفتاح مرور" @@ -181,10 +229,14 @@ msgstr "إضافة تكوين" msgid "Add Directive Below" msgstr "أضف التوجيه أدناه" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "إضافة نطاق" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "إضافة رأس" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -198,15 +250,15 @@ msgstr "إضافة خادم" msgid "Add Site" msgstr "أضف موقع" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "أضف Stream" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "إضافة upstream" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "تمت الإضافة بنجاح" @@ -214,25 +266,49 @@ msgstr "تمت الإضافة بنجاح" msgid "Additional" msgstr "إضافي" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "الوضع المتقدم" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "تم تمكين الفهرسة المتقدمة ولكن فشل بدء إعادة البناء" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "تم تمكين الفهرسة المتقدمة بنجاح" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "ميزات الفهرسة المتقدمة للسجلات مجانية ومفتوحة المصدر لجميع المستخدمين" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "نظام تجميع الذاكرة المتقدم" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "البحث المتقدم والتصفية" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "الإعدادات المتقدمة" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "بعد ذلك، قم بتحديث هذه الصفحة وانقر على إضافة مفتاح مرور مرة أخرى." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "الكل" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "جميع المكونات" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "تم استخدام جميع رموز الاسترداد" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." @@ -240,6 +316,26 @@ msgstr "" "يجب أن تنتمي جميع النطاقات الفرعية المحددة إلى نفس موفر DNS، وإلا فشل طلب " "الشهادة." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"بدلاً من ذلك، إذا لم تتمكن من تنزيل قاعدة البيانات، يمكنك وضع ملف " +"GeoLite2-City.mmdb يدويًا في نفس دليل ملف app.ini." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "خدمة التحليلات غير متوفرة" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "أي" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "يمكن استخدام أي عنوان IP قابل للوصول مع سلطات الشهادات الخاصة" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "عنوان URL الأساسي لAPI" @@ -260,36 +356,40 @@ msgstr "رمز API" msgid "API Type" msgstr "نوع API" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "التطبيق" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "تطبيق" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "أرك" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "هل أنت متأكد من حذف عنوان IP المحظور هذا على الفور؟" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "هل أنت متأكد من حذف مفتاح المرور هذا على الفور؟" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "هل أنت متأكد من رغبتك في إنشاء رموز استرداد جديدة؟" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "هل أنت متأكد من رغبتك في إعادة تعيين المصادقة الثنائية؟" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "هل أنت متأكد أنك تريد مسح كافة التنبيهات؟" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "هل أنت متأكد أنك تريد مسح سجل المحادثة؟" @@ -297,16 +397,16 @@ msgstr "هل أنت متأكد أنك تريد مسح سجل المحادثة؟" msgid "Are you sure you want to delete permanently?" msgstr "هل أنت متأكد أنك تريد الحذف نهائيًا؟" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "هل أنت متأكد أنك تريد الحذف؟" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "هل أنت متأكد أنك تريد إعادة تحميل Nginx على عقد المزامنة التالية؟" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "هل أنت متأكد أنك تريد إزالة هذا التوجيه؟" @@ -318,7 +418,7 @@ msgstr "هل أنت متأكد أنك تريد إزالة هذا العنصر؟" msgid "Are you sure you want to remove this location?" msgstr "هل أنت متأكد أنك تريد إزالة هذا المكان؟" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "هل أنت متأكد أنك تريد إعادة تشغيل Nginx على عقد المزامنة التالية؟" @@ -326,23 +426,27 @@ msgstr "هل أنت متأكد أنك تريد إعادة تشغيل Nginx عل msgid "Are you sure you want to restore?" msgstr "هل أنت متأكد أنك تريد الاستعادة؟" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "اطلب المساعدة من ChatGPT" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "تصاعدي" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "المساعد" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "مساحة قرص متاحة لا تقل عن 20 جيجابايت" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "محاولة الإصلاح" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "محاولات" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "مصادقة" @@ -350,12 +454,12 @@ msgstr "مصادقة" msgid "Authenticate with a passkey" msgstr "المصادقة باستخدام مفتاح المرور" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "إعدادات المصادقة" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "يتم المصادقة..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "الكاتب" @@ -389,28 +493,27 @@ msgstr "فشل النسخ الاحتياطي التلقائي" msgid "Auto Backup Storage Failed" msgstr "فشل تخزين النسخ الاحتياطي التلقائي" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "التحديث التلقائي" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "تم تعطيل التحديث التلقائي" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "تمكين التحديث التلقائي" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "تم تعطيل التجديد التلقائي لـ‎%{name}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "تم تمكين التجديد التلقائي لـ‏%{name}" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert قيد التشغيل، يرجى الانتظار..." @@ -419,16 +522,32 @@ msgstr "AutoCert قيد التشغيل، يرجى الانتظار..." msgid "AutoCert is running..." msgstr "AutoCert قيد التشغيل..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "الكشف التلقائي عن تدوير السجلات" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "إعادة التشغيل التلقائي" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "متوسط زمن الوصول" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "متوسط الزوار اليوميين" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "متوسط/زيارة الصفحة" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "رجوع" @@ -440,6 +559,20 @@ msgstr "العودة إلى الصفحة الرئيسية" msgid "Back to List" msgstr "العودة إلى القائمة" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "الخلفية" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "الفهرسة الخلفية قيد التقدم. سيتم تحديث البيانات تلقائيًا عند الانتهاء." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "خدمة السجل الخلفي غير متاحة" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "النسخ الاحتياطي" @@ -448,7 +581,7 @@ msgstr "النسخ الاحتياطي" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "فشل التحقق من سلامة ملف النسخ الاحتياطي، ربما تم التلاعب به" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "لم يتم العثور على ملف النسخ الاحتياطي: {0}" @@ -460,22 +593,18 @@ msgstr "تم تنزيل النسخة الاحتياطية بنجاح" msgid "Backup Path" msgstr "مسار النسخ الاحتياطي" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "مسار النسخ الاحتياطي غير موجود: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "مسار النسخ الاحتياطي ليس مجلدًا: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "مسار النسخ الاحتياطي مطلوب لنسخ الدليل المخصص" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "مسار النسخ الاحتياطي غير موجود في مسارات الوصول الممنوحة: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "جدول النسخ الاحتياطي" @@ -498,15 +627,15 @@ msgstr "فشل تنفيذ مهمة النسخ الاحتياطي %{backup_name} msgid "Backup Type" msgstr "نوع النسخ الاحتياطي" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "دقائق حد الحظر" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "عناوين IP المحظورة" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "محظور حتى" @@ -518,18 +647,18 @@ msgstr "بارك" msgid "Base information" msgstr "المعلومات الأساسية" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "أساسي" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "الوضع الأساسي" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "الإعدادات الأساسية" @@ -541,7 +670,7 @@ msgstr "تحرير المجموعة" msgid "Batch Modify" msgstr "تعديل متعدد" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "ترقية متعددة" @@ -553,11 +682,27 @@ msgstr "فيما يلي العناصر المحددة التي تريد تعدي msgid "Block is nil" msgstr "الكتلة فارغة" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "بناء مع" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "المتصفح" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "إحصائيات المتصفح" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"بتمكين الفهرسة المتقدمة، فإنك تقر بأن نظامك يستوفي المتطلبات وتفهم الآثار " +"المترتبة على الأداء. سيبدأ هذا في فهرسة ملفات السجل الموجودة على الفور." -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "دليل CA" @@ -565,11 +710,11 @@ msgstr "دليل CA" msgid "Cache" msgstr "الذاكرة المؤقتة" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "سيتم إزالة عناصر الذاكرة المؤقتة التي لم يتم الوصول إليها خلال هذا الوقت" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "حد وقت معالجة محمل الذاكرة المؤقتة" @@ -578,15 +723,15 @@ msgstr "حد وقت معالجة محمل الذاكرة المؤقتة" msgid "Cache manager processes" msgstr "عمليات مدير الذاكرة المؤقتة" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "عتبة وقت معالجة مدير الذاكرة المؤقتة" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "إعدادات مدير الذاكرة المؤقتة" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "مسار الذاكرة المؤقتة" @@ -595,7 +740,7 @@ msgstr "مسار الذاكرة المؤقتة" msgid "Cache Processes" msgstr "عمليات الذاكرة المؤقتة" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "هيكل مستويات الدليل الفرعي للذاكرة المؤقتة، على سبيل المثال 1:2" @@ -612,24 +757,33 @@ msgstr "" "يتم حسابه بناءً على worker_processes * worker_connections. الأداء الفعلي " "يعتمد على الأجهزة، التكوين، وحجم العمل" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "إلغاء" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "لا يمكن الوصول إلى مسار النسخ الاحتياطي {0}: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "لا يمكن الوصول إلى ملف السجل" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "لا يمكن الوصول إلى مسار التخزين {0}: {1}" @@ -653,7 +807,7 @@ msgstr "لا يمكن الحصول على بيانات الأداء في هذه msgid "Cannot remove initial user" msgstr "لا يمكن إزالة المستخدم الأولي" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "شهادة" @@ -661,6 +815,11 @@ msgstr "شهادة" msgid "Cert path is not under the nginx conf dir" msgstr "مسار الشهادة ليس ضمن دليل تكوين Nginx" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "شهادة" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "انتهت صلاحية الشهادة %{name}" @@ -675,6 +834,10 @@ msgstr "ستنتهي صلاحية الشهادة %{name} خلال %{days} يوم msgid "Certificate %{name} will expire in 1 day" msgstr "ستنتهي صلاحية الشهادة %{name} خلال يوم واحد" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "محتوى الشهادة ومحتوى المفتاح الخاص لا يمكن أن يكونا فارغين" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "خطأ في فك تشفير الشهادة" @@ -693,6 +856,14 @@ msgstr "انتهت صلاحية الشهادة" msgid "Certificate Expiring Soon" msgstr "انتهاء صلاحية الشهادة قريبًا" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "تم تنزيل ملفات الشهادة بنجاح" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "اسم الشهادة لا يمكن أن يكون فارغًا" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "الشهادة غير موجودة: %{error}" @@ -705,8 +876,8 @@ msgstr "خطأ في تحليل الشهادة" msgid "Certificate path is empty" msgstr "مسار الشهادة فارغ" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "تم إزالة الشهادة بنجاح" @@ -722,7 +893,7 @@ msgstr "تم تجديد الشهادة بنجاح" msgid "Certificate revoked successfully" msgstr "تم إبطال الشهادة بنجاح" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" @@ -733,7 +904,7 @@ msgstr[3] "حالة الشهادات" msgstr[4] "حالة الشهادات" msgstr[5] "حالة الشهادة" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "نوع الشهادة" @@ -742,7 +913,7 @@ msgstr "نوع الشهادة" msgid "Certificates" msgstr "شهادات" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "قائمة الشهادات" @@ -750,7 +921,7 @@ msgstr "قائمة الشهادات" msgid "Challenge error: {0}" msgstr "خطأ في التحدي: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "طريقة التحدي" @@ -777,26 +948,33 @@ msgstr[5] "الشهادات المعدلة" msgid "Changed Path" msgstr "المسار المتغير" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "القناة" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "دردشة" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "دردشة لـ %{path}" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "تحقق" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "تحقق مرة أخرى" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "فحص الأيقونة" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -827,6 +1005,22 @@ msgstr "" "استخدام ميزات Passkeys والحافظة" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "تحقق مما إذا كان دليل conf.d موجودًا ضمن دليل تكوين nginx" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"تحقق مما إذا كانت قاعدة بيانات GeoLite2 متاحة عند تمكين فهرسة السجلات. " +"تتطلب فهرسة السجلات قاعدة بيانات GeoLite2 لتحليل العنوان الجغرافي للـ IP. " +"يمكنك تنزيلها من صفحة التفضيلات أو وضع GeoLite2-City.mmdb يدويًا في نفس " +"المجلد الذي يوجد فيه app.ini" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -842,15 +1036,15 @@ msgstr "" "راجع الوثائق لمزيد من التفاصيل: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "تحقق مما إذا كان دليل تكوين nginx موجودًا" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "تحقق مما إذا كان ملف إدخال تكوين nginx موجودًا" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -866,7 +1060,7 @@ msgstr "" "لمزيد من التفاصيل: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -880,23 +1074,23 @@ msgstr "" "Nginx. راجع الوثائق لمزيد من التفاصيل: " "https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "تحقق مما إذا كان مسار sbin لـ nginx موجودًا" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "تحقق مما إذا كان ملف nginx.conf يتضمن دليل conf.d" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "تحقق مما إذا كان nginx.conf يتضمن دليل sites-enabled" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "تحقق مما إذا كان nginx.conf يتضمن دليل streams-enabled" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" @@ -904,7 +1098,7 @@ msgstr "" "تحقق مما إذا كانت الدلائل sites-available و sites-enabled موجودة ضمن دليل " "تكوين nginx" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" @@ -912,6 +1106,19 @@ msgstr "" "تحقق مما إذا كانت الدلائل streams-available و streams-enabled موجودة ضمن " "دليل تكوين nginx" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "فترة الفحص (بالثواني)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "خريطة الوصول إلى الصين" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "خريطة الصين" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "النص المشفر قصير جدًا" @@ -920,13 +1127,13 @@ msgstr "النص المشفر قصير جدًا" msgid "Cleaning environment variables" msgstr "تنظيف متغيرات البيئة" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "مسح" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "تم المسح بنجاح" @@ -944,7 +1151,7 @@ msgstr "انقر أو اسحب الملفات إلى هذه المنطقة لل msgid "Click or drag folders to this area to upload" msgstr "انقر أو اسحب المجلدات إلى هذه المنطقة للتحميل" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "انقر لنسخ" @@ -952,10 +1159,18 @@ msgstr "انقر لنسخ" msgid "Client Body Buffer Size" msgstr "حجم العميل العازلة للعميل" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "شهادة العميل" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "حجم مخزن رأس العميل" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "مفتاح العميل" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "الحد الأقصى لحجم جسم العميل" @@ -984,6 +1199,14 @@ msgstr "إكمال الكود غير مفعّل" msgid "Code Completion Model" msgstr "نموذج إكمال التعليمات البرمجية" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "طي" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "إعدادات العمود" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "أمر" @@ -992,7 +1215,7 @@ msgstr "أمر" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "انتهت الأمر برمز خروج غير متوقع: {0}، خطأ: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -1015,11 +1238,34 @@ msgstr "قارن المحدد" msgid "Compare with Current" msgstr "قارن مع التيار" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "فهرسة كاملة مع إمكانيات البحث" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "المكونات" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "دعم ملفات السجل المضغوطة" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "مستوى الضغط ، 1 هو أدنى ، 9 هو الأعلى" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "حساب الإحصائيات" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "دليل conf.d موجود" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "دليل Conf.d غير موجود" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "التكوين" @@ -1032,22 +1278,30 @@ msgstr "دليل التكوين غير موجود" msgid "Config entry file not exist" msgstr "ملف إدخال التكوين غير موجود" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "لم يتم العثور على التكوين" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "مسار التكوين فارغ" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "قالب التكوين" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "التكوين" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "تم اختبار ملف التكوين بنجاح" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "تم اختبار ملف التكوين بنجاح في بيئة الرمل المعزولة" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "سجل التكوين" @@ -1068,11 +1322,20 @@ msgstr "التكوينات" msgid "Configure SSL" msgstr "تكوين SSL" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "تأكيد الحذف" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "تأكيد كلمة المرور الجديدة" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "مطلوب تأكيد" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "متصل" @@ -1080,9 +1343,9 @@ msgstr "متصل" msgid "Connection error, trying to reconnect..." msgstr "خطأ في الاتصال، جاري محاولة إعادة الاتصال..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "تم فقدان الاتصال، يرجى تحديث الصفحة." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "فقد الاتصال بهذا الطرف. يرجى التحديث إذا لزم الأمر." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1092,14 +1355,14 @@ msgstr "فترة مهلة الاتصال" msgid "Container status unknown" msgstr "حالة الحاوية غير معروفة" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "محتوى" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "تم النسخ" @@ -1112,14 +1375,38 @@ msgstr "تم النسخ!" msgid "Copy" msgstr "نسخ" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "نسخ الرموز" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "ترقية نواة" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "لم يتم العثور على اسم الحاوية القديمة" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "لم يتم العثور على الحاوية المؤقتة" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "عدد" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "البلد / المنطقة" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "وحدة المعالجة المركزية" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "حالة CPU" @@ -1161,10 +1448,10 @@ msgstr "" "سيتم تنزيل ملفات النسخ الاحتياطي تلقائيًا إلى جهاز الكمبيوتر الخاص بك." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "تم الإنشاء في" @@ -1189,11 +1476,15 @@ msgstr "بيانات الاعتماد" msgid "Cron Expression" msgstr "تعبير كرون" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "ارتباط الجدول الزمني عبر الملفات" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "TOTP مفعل للحساب الحالي." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "TOTP معطل للحساب الحالي." @@ -1213,12 +1504,12 @@ msgstr "كلمة المرور الحالية" msgid "Current usage" msgstr "الاستخدام الحالي" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "الإصدار الحالي" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "مخصص" @@ -1231,14 +1522,18 @@ msgstr "تعبير كرون مخصص" msgid "Custom Directory" msgstr "دليل مخصص" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "نطاقات مخصصة" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "شهادة النطاقات المخصصة" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "رؤوس مخصصة" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1249,6 +1544,10 @@ msgstr "قم بتخصيص اسم العقدة المحلية ليتم عرضها msgid "Daily" msgstr "يومي" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "اتجاهات الوصول اليومية" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "يوميًا في الساعة %{time}" @@ -1256,10 +1555,18 @@ msgstr "يوميًا في الساعة %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "لوحة المعلومات" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "التاريخ" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "نطاق التاريخ" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "يوم الشهر" @@ -1272,34 +1579,48 @@ msgstr "يوم الأسبوع" msgid "Days" msgstr "أيام" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "ملف قاعدة البيانات غير موجود" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "تم التفكيك بنجاح لكن فشل حذف الملف المضغوط: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "فشل فك التشفير" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "النطاق الافتراضي" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "حدد اسم منطقة الذاكرة المشتركة والحجم، على سبيل المثال proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "حذف" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "فشل حذف %{path} على %{env_name}" +msgid "Delete %{path} on %{node_name} failed" +msgstr "فشل حذف %{path} على %{node_name}" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "تم حذف %{path} على %{env_name} بنجاح" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "تم حذف %{path} على %{node_name} بنجاح" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "حذف الشهادة" @@ -1319,43 +1640,44 @@ msgstr "خطأ في حذف التكوين البعيد" msgid "Delete Remote Config Success" msgstr "نجاح حذف التكوين البعيد" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "خطأ حذف الموقع البعيد" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "نجح حذف الموقع البعيد" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "خطأ في حذف البث عن بُعد" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "نجاح حذف البث عن بُعد" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "فشل حذف الموقع %{name} من %{node}" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "تم حذف الموقع %{name} من %{node} بنجاح" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "حذف الموقع: ‎%{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "فشل حذف الدفق %{name} من %{node}" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "تم حذف الدفق %{name} من %{node} بنجاح" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "حذف البث: ‎%{stream_name}" @@ -1371,8 +1693,16 @@ msgstr "عرض تجريبي" msgid "Deploy" msgstr "نشر" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "وضع النشر" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "تنازلي" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "وصف" @@ -1388,18 +1718,44 @@ msgstr "الملف الوجهة: {0} موجود بالفعل" msgid "Details" msgstr "تفاصيل" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "تطوير" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "التطوير" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "وضع التطوير" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "الجهاز" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "إحصاءات الجهاز" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "نوع الجهاز" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "محتوى ملف الهضم فارغ" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "دينجتوك" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "مباشر" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "توجيه" @@ -1420,98 +1776,101 @@ msgstr "الفهرس خارج النطاق" msgid "Directives" msgstr "توجيهات" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "مستويات الدليل" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "مسار الدليل لتخزين ملفات الذاكرة المؤقتة" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "تعطيل" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "فشل تعطيل التجديد التلقائي لـ %{name}" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "خطأ تعطيل الموقع البعيد" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "خطأ في تعطيل صيانة الموقع البعيد" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "تعطيل صيانة الموقع البعيد بنجاح" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "تم تعطيل الموقع البعيد بنجاح" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "خطأ في تعطيل البث عن بُعد" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "تعطيل البث عن بُعد بنجاح" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "فشل تعطيل الموقع %{name} من %{node}" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "تم تعطيل الموقع %{name} من %{node} بنجاح" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "فشل تعطيل صيانة الموقع %{name} على %{node}" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "تم تعطيل صيانة الموقع %{name} على %{node} بنجاح" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "فشل تعطيل الدفق %{name} من %{node}" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "تم تعطيل الدفق %{name} من %{node} بنجاح" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "معطل" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "تم التعطيل بنجاح" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "غير متصل" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "إدخال/إخراج القرص" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "بيانات اعتماد DNS" @@ -1520,11 +1879,15 @@ msgstr "بيانات اعتماد DNS" msgid "DNS Provider" msgstr "مزود DNS" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "حل DNS" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "لا تقم بتمكين هذا الخيار إلا إذا كنت متأكدًا من أنك بحاجة إليه." @@ -1532,11 +1895,11 @@ msgstr "لا تقم بتمكين هذا الخيار إلا إذا كنت متأ msgid "Do you want to %{action} this site?" msgstr "هل تريد %{action} هذا الموقع؟" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "هل تريد %{action} هذا البث؟" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "هل تريد تعطيل التجديد التلقائي للشهادة؟" @@ -1549,7 +1912,7 @@ msgstr "هل تريد تفعيل TLS؟" msgid "Do you want to remove this server?" msgstr "هل تريد إزالة هذا الخادم؟" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "هل تريد إزالة هذا المصدر؟" @@ -1557,7 +1920,7 @@ msgstr "هل تريد إزالة هذا المصدر؟" msgid "Docker client not initialized" msgstr "عميل Docker غير مهيأ" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "مقبس Docker موجود" @@ -1576,14 +1939,35 @@ msgstr[3] "وثائق" msgstr[4] "وثيقة" msgstr[5] "وثيقة" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "عدد المستندات" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "نطاق" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "قائمة النطاقات فارغة، حاول إعادة فتح Auto Cert لـ %{config}" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "تنزيل ملفات الشهادة" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "اكتمال التنزيل" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "فشل التحميل" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "تحميل قاعدة بيانات GeoLite2" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "خطأ في تنزيل الإصدار الأخير" @@ -1592,12 +1976,19 @@ msgstr "خطأ في تنزيل الإصدار الأخير" msgid "Downloading latest release" msgstr "تنزيل الإصدار الأحدث" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "قم بإسقاط ملف الشهادة هنا" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "قم بإسقاط ملف المفتاح الخاص هنا" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "تمكين وضع التشغيل التجريبي" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1605,10 +1996,12 @@ msgstr "" "نظرًا لسياسات الأمان لبعض المتصفحات، لا يمكنك استخدام مفاتيح المرور على " "مواقع الويب غير HTTPS، إلا عند التشغيل على localhost." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "مكرر" @@ -1617,21 +2010,33 @@ msgstr "مكرر" msgid "Duplicate to local successfully" msgstr "تم النسخ إلى المحلي بنجاح" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "ديناميكي" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "إدارة الأجزاء الديناميكية" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "على سبيل المثال، 0 0 * * * (يوميًا عند منتصف الليل)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "مفتاح HMAC EAB" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "معرف مفتاح EAB" + #: src/language/curd.ts:8 msgid "Edit" msgstr "تعديل" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "تعديل %{n}" @@ -1648,7 +2053,7 @@ msgstr "تعديل الموقع" msgid "Edit Stream" msgstr "تعديل البث" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "بريد إلكتروني" @@ -1657,16 +2062,28 @@ msgstr "بريد إلكتروني" msgid "Email (*)" msgstr "البريد الإلكتروني (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "سجل فارغ" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "تمكين" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "تم تفعيل المصادقة الثنائية بنجاح" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "تمكين الفهرسة المتقدمة" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "تمكين الفهرسة المتقدمة للسجلات" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "فشل تفعيل التجديد التلقائي لـ %{name}" @@ -1690,57 +2107,61 @@ msgstr "تمكين HTTP/3" msgid "Enable HTTPS" msgstr "تمكين HTTPS" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "تمكين الفهرسة" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "تمكين ذاكرة التخزين المؤقت للوكيل" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "خطأ في تفعيل الموقع البعيد" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "خطأ في تمكين صيانة الموقع البعيد" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "تمكين صيانة الموقع البعيد بنجاح" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "نجح تفعيل الموقع البعيد" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "خطأ في تمكين البث عن بُعد" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "تمكين البث عن بُعد بنجاح" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "فشل تمكين الصيانة للموقع %{name} على %{node}" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "تم تمكين صيانة الموقع %{name} على %{node} بنجاح" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "فشل تمكين الموقع %{name} على %{node}" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "تم تمكين الموقع %{name} على %{node} بنجاح" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "فشل تمكين الدفق %{name} على %{node}" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "تم تمكين الدفق %{name} على %{node} بنجاح" @@ -1752,29 +2173,29 @@ msgstr "تمكين وحدة stub_status" msgid "Enable TLS" msgstr "تفعيل TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "تفعيل TOTP" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "مفعل" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "تم التفعيل بنجاح" @@ -1786,6 +2207,16 @@ msgstr "تمكين دعم HTTP/2 مع إمكانية تعدد الإرسال و msgid "Enables HTTP/3 support based on QUIC protocol for best performance" msgstr "تمكين دعم HTTP/3 بناءً على بروتوكول QUIC لأفضل أداء" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"تمكين الفهرسة المتقدمة للسجلات سيستهلك موارد حاسوبية كبيرة بما في ذلك وحدة " +"المعالجة المركزية والذاكرة. يرجى التأكد من أن نظامك يستوفي الحد الأدنى من " +"المتطلبات قبل المتابعة." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "تشفير الموقع باستخدام Let's Encrypt" @@ -1794,11 +2225,19 @@ msgstr "تشفير الموقع باستخدام Let's Encrypt" msgid "End" msgstr "النهاية" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "تاريخ الانتهاء" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "أدخل اسم النطاق" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "أدخل عنوان IP للخادم (مثال: 203.0.113.1 أو 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "أدخل نطاقك" @@ -1810,39 +2249,56 @@ msgstr "تكوين البيئة فارغ" msgid "Environment variables cleaned" msgstr "تم تنظيف متغيرات البيئة" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "البيئات" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "خطأ" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "تفاصيل الخطأ" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "خطأ في تهيئة عارض الاختلافات" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "سجل الأخطاء" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "تم اكتشاف سجل الأخطاء" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "مسار سجل الأخطاء غير موجود" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "سجلات الأخطاء" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "لا تدعم سجلات الأخطاء التحليل المنظم لأنها تحتوي على رسائل نصية حرة." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "التعرف على أنماط الأخطاء" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "خطأ في معالجة المحتوى" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "ملف الثنائي القابل للتنفيذ فارغ" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "مسار الملف التنفيذي" @@ -1858,6 +2314,22 @@ msgstr "تنفيذ كل يوم في الساعة %{time}" msgid "Execute on every month on day %{day} at %{time}" msgstr "تنفيذ في كل شهر في اليوم %{day} عند الساعة %{time}" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "توسيع" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "الأداء المتوقع" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "رموز الحالة المتوقعة" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "النص المتوقع" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1871,12 +2343,34 @@ msgstr "تنتهي في: %{date}" msgid "Export Excel" msgstr "تصدير إكسل" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "مفتاح HMAC لربط الحساب الخارجي (اختياري). يجب أن يكون بتنسيق Base64 URL." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "" +"معرف مفتاح الربط الحساب الخارجي (اختياري). مطلوب لبعض موفري ACME مثل " +"ZeroSSL." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "حاوية Docker خارجية" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "لم يتم العثور على تكوين الإخطار الخارجي" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "اختبار الإشعار الخارجي" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "إشعار خارجي" @@ -1905,15 +2399,15 @@ msgstr "فشل في إنشاء نسخة احتياطية لملفات واجهة msgid "Failed to build nginx config: {0}" msgstr "فشل في بناء تكوين nginx: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "فشل في حساب التجزئة: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "فشل في حساب تجزئة Nginx: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "فشل في حساب تجزئة واجهة مستخدم Nginx: {0}" @@ -1926,38 +2420,35 @@ msgid "Failed to copy config file: {0}" msgstr "فشل في نسخ ملف التكوين: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "فشل في نسخ دليل قاعدة البيانات: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "فشل في نسخ ملف قاعدة البيانات: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "فشل في نسخ محتوى الملف: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "فشل في نسخ دليل تكوين Nginx: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "فشل النسخ إلى الحافظة" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "فشل إنشاء نسخة احتياطية" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "فشل في إنشاء دليل النسخ الاحتياطي: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "فشل إنشاء ملف النسخ الاحتياطي: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "فشل إنشاء الدليل: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "فشل إنشاء الملف: {0}" @@ -1965,19 +2456,19 @@ msgstr "فشل إنشاء الملف: {0}" msgid "Failed to create hash info file: {0}" msgstr "فشل إنشاء ملف معلومات التجزئة: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "فشل إنشاء الدليل الرئيسي: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "فشل في إنشاء دليل الاستعادة: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "فشل في إنشاء دليل التخزين {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "فشل إنشاء رابط رمزي: {0}" @@ -1993,48 +2484,64 @@ msgstr "فشل إنشاء الدليل المؤقت" msgid "Failed to create temporary subdirectory" msgstr "فشل إنشاء مجلد فرعي مؤقت" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "فشل في إنشاء قارئ xz: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "فشل إنشاء أرشيف مضغوط: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "فشل في إنشاء إدخال مضغوط: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "فشل إنشاء ملف مضغوط: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "فشل إنشاء رأس ملف ZIP: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "فشل في تفكيك قاعدة بيانات GeoLite2: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "فشل فك تشفير البيانات: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "فشل فك تشفير الملف: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "فشل فك تشفير دليل Nginx: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "فشل فك تشفير دليل Nginx UI: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "فشل في حذف جميع الفهارس" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "فشل في حذف الشهادة" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "فشل حذف الشهادة من قاعدة البيانات: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "فشل في حذف فهرس الملف" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "فشل في تعطيل %{msg}" @@ -2042,20 +2549,32 @@ msgstr "فشل في تعطيل %{msg}" msgid "Failed to disable maintenance mode %{msg}" msgstr "فشل تعطيل وضع الصيانة %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "فشل تنزيل ملفات الشهادة" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "فشل في تحميل قاعدة بيانات GeoLite2: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "فشل في التفعيل %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "فشل تمكين الفهرسة المتقدمة" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "فشل تمكين وضع الصيانة %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "فشل في تشفير البيانات: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "فشل في تشفير الملف: {0}" @@ -2067,10 +2586,6 @@ msgstr "فشل في تشفير دليل Nginx: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "فشل في تشفير دليل Nginx UI: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "فشل في تقييم الروابط الرمزية: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "فشل تنفيذ الأمر: {0}" @@ -2079,7 +2594,7 @@ msgstr "فشل تنفيذ الأمر: {0}" msgid "Failed to execute template: {0}" msgstr "فشل تنفيذ القالب: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "فشل استخراج الأرشيف: {0}" @@ -2099,14 +2614,30 @@ msgstr "فشل في الحصول على معلومات الشهادة" msgid "Failed to get container id: {0}" msgstr "فشل في الحصول على معرف الحاوية: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "فشل في الحصول على حجم الملف: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "فشل في الحصول على حالة الفهرس" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "فشل في الحصول على إعدادات أداء Nginx" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "فشل في الحصول على مسار nginx.conf" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "فشل في الحصول على بيانات الأداء" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "فشل في الحصول على إحصائيات الثبات" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "فشل في الحصول على حالة الحالة المزيفة: {0}" @@ -2123,15 +2654,19 @@ msgstr "فشل فحص الحاوية الحالية: {0}" msgid "Failed to load history records" msgstr "فشل تحميل السجلات التاريخية" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "فشل في فتح الملف: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "فشل في فتح الملف المصدر: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "فشل في فتح مدخل الأرشيف: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "فشل في فتح ملف ZIP: {0}" @@ -2151,15 +2686,23 @@ msgstr "فشل تحليل القالب: {0}" msgid "Failed to pull image: {0}" msgstr "فشل في جلب الصورة: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "فشل في قراءة البيانات المضغوطة: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "فشل قراءة الملف المشفر: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "فشل قراءة الملف" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "فشل قراءة الملف: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "فشل قراءة ملف معلومات التجزئة: {0}" @@ -2175,57 +2718,97 @@ msgstr "فشل قراءة المخرجات: {0}" msgid "Failed to read response body: {0}" msgstr "فشل في قراءة نص الاستجابة: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "فشل في قراءة الرابط الرمزي: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "فشل إعادة بناء فهرس الملف" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "فشل إعادة بناء الفهرس" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "فشل في تحديث المواقع" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "فشل استعادة إعدادات Nginx: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "فشل استعادة ملفات واجهة NGINX: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "فشل إبطال الشهادة" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "فشل إلغاء الشهادة: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "فشل حفظ الإعدادات" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "فشل في حفظ الملف المحمل: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "فشل حفظ تكوين فحص الصحة" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "فشل حفظ إعدادات أداء Nginx" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "فشل حفظ الترتيب" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "فشل إرسال رسالة الاختبار" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "فشل بدء الحاوية المؤقتة: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "فشل تحديث الحالة" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "فشل تحميل الملف" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "فشل في التحقق من التجزئات: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "فشل في كتابة ملف النسخ الاحتياطي: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "فشل في كتابة البيانات المفكوك الضغط: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "فشل في كتابة الملف المفكوك تشفيره: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "فشل في كتابة الملف المشفر: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "فشل في كتابة ملف مفتاح الأمان: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "فشل الكتابة إلى مخزن zip المؤقت: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "الميزات" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2239,6 +2822,10 @@ msgstr "ملف" msgid "File exists" msgstr "الملف موجود" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "تم بدء إعادة بناء فهرس الملف بنجاح لـ %{path}" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "لم يتم العثور على الملف" @@ -2247,19 +2834,35 @@ msgstr "لم يتم العثور على الملف" msgid "File or directory not found: {0}" msgstr "الملف أو الدليل غير موجود: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "مسار الملف مطلوب" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "لا يمكن أن يتجاوز حجم الملف 5 ميجابايت" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "تم تحميل الملف بنجاح" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "اسم الملف فارغ" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "تصفيه" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "تصفية محتوى السجل" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "انتهى" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "المشاهدة الأولى" @@ -2271,7 +2874,11 @@ msgstr "مجلد" msgid "Folder" msgstr "مجلد" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "متابعة إعادة التوجيه" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2286,6 +2893,32 @@ msgstr "للمستخدمين الصينيين" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "للمستخدمين الصين: /https://cloud.nginxui.com" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "للاستخدام التجاري أو المهني، يرجى الاتصال بـ" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" +"بالنسبة لسجلات الأخطاء، يرجى استخدام عارض السجلات الخام للحصول على تجربة " +"عرض أفضل." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" +"بالنسبة لتكوينات الشهادات القائمة على IP، فإن طريقة التحدي HTTP-01 فقط هي " +"المدعومة. طريقة التحدي DNS-01 غير متوافقة مع الشهادات القائمة على IP." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "" +"بالنسبة للشهادات القائمة على IP، يرجى تحديد عنوان IP الخاص بالخادم الذي " +"سيتم تضمينه في الشهادة." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "فشل تحليل النموذج" @@ -2306,6 +2939,22 @@ msgstr "التنسيق: دقيقة ساعة يوم شهر يوم_الأسبوع" msgid "Friday" msgstr "الجمعة" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "من السجلات المفهرسة" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "واجهة المستخدم" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "بحث النص الكامل" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "دعم البحث النصي الكامل" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "شهادة عامة" @@ -2314,16 +2963,16 @@ msgstr "شهادة عامة" msgid "Generate" msgstr "توليد" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "إنشاء رموز استرداد جديدة" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "إنشاء رموز الاسترداد" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "تم إنشاء رموز الاسترداد بنجاح" @@ -2331,6 +2980,39 @@ msgstr "تم إنشاء رموز الاسترداد بنجاح" msgid "Generating private key for registering account" msgstr "توليد مفتاح خاص لتسجيل الحساب" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "جيو لايت" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "قاعدة بيانات GeoLite2" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "قاعدة بيانات GeoLite2 متاحة" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "تم تثبيت قاعدة بيانات GeoLite2" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "لم يتم العثور على قاعدة بيانات GeoLite2 في {0}" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"لم يتم العثور على قاعدة بيانات GeoLite2 في {0}. يتطلب فهرسة السجلات قاعدة " +"بيانات GeoLite2 لتحليل العنوان الجغرافي للـ IP" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "مكتبة GeoLite2 مطلوبة" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "خطأ في الحصول على مستخدم ACME: {0}" @@ -2343,8 +3025,7 @@ msgstr "فشل الحصول على البيانات" msgid "Get dns credential error: {0}" msgstr "خطأ في الحصول على بيانات اعتماد DNS: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "خطأ في الحصول على معلومات الإصدار" @@ -2356,10 +3037,39 @@ msgstr "جارٍ الحصول على الشهادة، يرجى الانتظار. msgid "Github Proxy" msgstr "وكيل Github" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "خريطة الوصول العالمية" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "خريطة العالم" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "الانتقال إلى عارض السجلات الخام" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "غوتيفاي" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" +"يتطلب فحص صحة gRPC أن يقوم الخادم بتنفيذ خدمة فحص صحة gRPC " +"(grpc.health.v1.Health)." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"يستخدم gRPTS تشفير TLS. يجب على الخادم تنفيذ خدمة فحص صحة gRPC. لأغراض " +"الاختبار، يتم تعطيل التحقق من صحة SSL افتراضيًا." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "ضغط GZIP" @@ -2372,25 +3082,51 @@ msgstr "مستوى ضغط GZIP" msgid "GZIP Min Length" msgstr "الحد الأدنى لطول GZIP" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "فشل التحقق من التجزئة: تم اختراق سلامة الملف" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "فحص الصحة" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "تكوين فحص الصحة" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "تم حفظ تكوين فحص الصحة" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "تم حفظ تكوين فحص الصحة بنجاح" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "حالة الصحة" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "إخفاء" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "إخفاء المساعد" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "مرتفع" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "القيمة الأعلى تعني إعادة استخدام أفضل للاتصال" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "السجل" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "الصفحة الرئيسية" @@ -2399,10 +3135,11 @@ msgid "Host" msgstr "المضيف" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "ساعة" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2410,7 +3147,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "منفذ تحدي HTTP" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "طريقة HTTP" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2418,15 +3159,15 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "بروتوكول HTTPS" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "رقم ICP" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "إذا تُرك فارغًا، سيتم استخدام دليل CA الافتراضي." - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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." @@ -2434,17 +3175,25 @@ msgstr "" "إذا وصل عدد محاولات تسجيل الدخول الفاشلة من عنوان IP إلى الحد الأقصى " "للمحاولات في حد دقائق الحظر، سيتم حظر عنوان IP لفترة من الوقت." -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "إذا كنت ترغب في إلغاء الشهادة القديمة تلقائيًا، يرجى تمكين هذا الخيار." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" +"إذا كنت ترغب في تغيير موقع التخزين، يمكنك تعيين `IndexPath` لقسم " +"`nginx_log` في تكوين واجهة Nginx." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "إذا كان متصفحك يدعم WebAuthn Passkey، ستظهر نافذة حوار." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2456,12 +3205,12 @@ msgstr "" msgid "Import" msgstr "استيراد" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "استيراد شهادة" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "وقت عدم النشاط" @@ -2473,7 +3222,46 @@ msgstr "" "يشمل العملية الرئيسية وعمليات العامل وعمليات التخزين المؤقت وعمليات Nginx " "الأخرى" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "مسح فهرس تدريجي" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "تم بدء إعادة بناء الفهرس والإحصائيات بنجاح" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "فشل الفهرسة" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "فشل الفهرسة، يرجى إعادة البناء" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "تم بدء إعادة بناء الفهرس" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "حالة الفهرسة" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "مفهرس" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "فهرسة" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "جاري فهرسة السجلات..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "جاري الفهرسة..." @@ -2481,10 +3269,14 @@ msgstr "جاري الفهرسة..." msgid "Indicator" msgstr "المؤشر" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "معلومات" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "المستخدم الأول غير موجود" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "خطأ في ترقية النواة الأولية" @@ -2493,7 +3285,7 @@ msgstr "خطأ في ترقية النواة الأولية" msgid "Initialing core upgrader" msgstr "بدء ترقية النواة" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "أدخل الرمز من التطبيق:" @@ -2508,7 +3300,7 @@ msgstr "تخطي التحقق غير الآمن" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "تثبيت" @@ -2536,27 +3328,36 @@ msgstr "" msgid "Interval" msgstr "فترة" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "غير صالح" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "تنسيق AES IV غير صالح: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "تنسيق مفتاح AES غير صالح: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "تنسيق الشهادة غير صالح" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "نوع المطالبات غير صالح" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "SHA الالتزام غير صالحة" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "كائن ملف غير صالح" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "مسار ملف غير صالح: {0}" @@ -2569,6 +3370,10 @@ msgstr "اسم ملف غير صالح" msgid "Invalid folder name" msgstr "اسم المجلد غير صالح" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "معرّف الإشعار غير صالح" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "تكوين المُنبّه غير صالح" @@ -2577,7 +3382,7 @@ msgstr "تكوين المُنبّه غير صالح" msgid "Invalid otp code" msgstr "رمز OTP غير صالح" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "حشو غير صالح في البيانات المشفرة" @@ -2585,10 +3390,15 @@ msgstr "حشو غير صالح في البيانات المشفرة" msgid "Invalid passcode or recovery code" msgstr "رمز المرور أو رمز الاسترداد غير صالح" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "مسار غير صالح: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "تنسيق المفتاح الخاص غير صالح" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "رمز الاسترداد غير صالح" @@ -2597,19 +3407,41 @@ msgstr "رمز الاسترداد غير صالح" msgid "Invalid request format" msgstr "تنسيق الطلب غير صالح" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "تنسيق رمز الأمان غير صالح" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "رقم الدردشة في تيليجرام غير صالح: لا يمكن أن يكون صفرًا" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "تنسيق الطابع الزمني غير صالح" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "نوع رسالة WebSocket غير صالح" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "عنوان IP" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "إشعار شهادة IP" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "إصدار شهادة" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "إصدار الشهادة" @@ -2629,7 +3461,7 @@ msgstr "عنصر(عناصر)" msgid "Jwt Secret" msgstr "سر JWT" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2641,12 +3473,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "مهلة الاتصال المستمر" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "نوع المفتاح" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "اللغة" @@ -2658,6 +3490,44 @@ msgstr "لارك" msgid "Lark Custom" msgstr "لارك المخصص" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "آخر 12 ساعة" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "آخر 14 يومًا" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "آخر 15 دقيقة" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "آخر 24 ساعة" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "آخر 30 يومًا" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "آخر 30 دقيقة" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "آخر 4 ساعات" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "آخر 7 أيام" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "آخر 90 يومًا" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "حالة النسخ الاحتياطي الأخيرة" @@ -2666,15 +3536,35 @@ msgstr "حالة النسخ الاحتياطي الأخيرة" msgid "Last Backup Time" msgstr "وقت آخر نسخة احتياطية" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "آخر التحقق" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "آخر فحص في" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "آخر ساعة" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "آخر فهرسة" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "الشهر الماضي" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "آخر تحديث" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "آخر تحديث:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "آخر استخدام في" @@ -2690,12 +3580,18 @@ msgstr "اتركه فارغًا للإعداد الافتراضي: /https://api. msgid "Leave blank if do not want to modify" msgstr "اتركه فارغًا إذا كنت لا تريد التعديل" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "اتركه فارغًا إذا لم يكن مطلوبًا من قبل موفر ACME الخاص بك" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "اتركه فارغًا إذا لم تكن بحاجة إلى ذلك." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "تركه فارغًا لن يغير شيئًا" @@ -2703,16 +3599,24 @@ msgstr "تركه فارغًا لن يغير شيئًا" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "لا يُسمح برمز الاسترداد القديم نظرًا لعدم تمكين TOTP" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "تعطيل دعم CNAME في Lego" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "رخصة" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "توزيع الرخصة" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "أنواع التراخيص" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "ربط" @@ -2728,32 +3632,32 @@ msgstr "يستمع" msgid "Load Average:" msgstr "متوسط التحميل:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "تحميل من الإعدادات" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "تم التحميل بنجاح" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "تم التحميل" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "ملفات المحمل" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "إعدادات المحمل" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "وقت توقف المحمل" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "عتبة المحمل" @@ -2761,9 +3665,15 @@ msgstr "عتبة المحمل" msgid "Loading data..." msgstr "جارٍ تحميل البيانات..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "جاري التحميل..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2782,11 +3692,11 @@ msgstr "مكان" msgid "Locations" msgstr "أماكن" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "سجل" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2796,23 +3706,59 @@ msgstr "" "Docker، يرجى الرجوع إلى " "https://nginxui.com/zh_CN/guide/config-nginx-log.html لمزيد من المعلومات." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "ملف السجل غير موجود" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "ملف السجل ليس ملفًا عاديًا" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "ملف السجل غير متوفر" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "ملف السجل غير مفهرس بعد" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "فهرس السجلات غير متاح" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "اكتمل فهرسة السجلات! جارٍ تحميل البيانات المحدثة..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "خط السجل يتجاوز الطول الأقصى" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "قائمة السجلات" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "لم يتم تهيئة محول السجلات؛ قم بتشغيل indexer.InitLogParser() قبل الاستخدام" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "مسار السجل ليس ضمن القائمة البيضاء" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "تسجيل الدخول" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "تم تسجيل الدخول بنجاح" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "تم تسجيل الخروج بنجاح" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "تدوير السجلات" @@ -2832,9 +3778,20 @@ msgstr "" "يدويًا. سيقوم مجدول المهام crontab الخاص بواجهة Nginx UI بتنفيذ أمر تدوير " "السجلات في الفاصل الزمني الذي تحدده بالدقائق." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "منخفض" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "العقدة الرئيسية" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "صيانة" @@ -2850,7 +3807,7 @@ msgstr "تم تمكين وضع الصيانة بنجاح" msgid "Make certificate dir error: {0}" msgstr "خطأ في إنشاء مجلد الشهادة: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2865,11 +3822,11 @@ msgstr "" msgid "Manage Configs" msgstr "إدارة التكوينات" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "إدارة المواقع" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "إدارة التدفقات" @@ -2881,15 +3838,15 @@ msgstr "إدارة المستخدمين" msgid "Managed Certificate" msgstr "شهادة مُدارة" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "ملفات المدير" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "نوم المدير" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "عتبة المدير" @@ -2915,7 +3872,7 @@ msgstr "العملية الرئيسية" msgid "Master Process" msgstr "العملية الرئيسية" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "الحد الأقصى للمحاولات" @@ -2923,11 +3880,15 @@ msgstr "الحد الأقصى للمحاولات" msgid "Max Concurrent Connections" msgstr "أقصى اتصالات متزامنة" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "أقصى عدد لإعادة التوجيه" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "الحد الأقصى للطلبات في الثانية" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "الحد الأقصى لحجم الذاكرة المؤقتة" @@ -2944,7 +3905,7 @@ msgstr "الحد الأقصى لعدد الاتصالات المتزامنة" msgid "Maximum number of connections per worker process" msgstr "الحد الأقصى لعدد الاتصالات لكل عملية عامل" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "الحجم الإجمالي الأقصى للذاكرة المؤقتة" @@ -2954,6 +3915,7 @@ msgstr "الحد الأقصى لعدد عمليات العامل:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "ذاكرة" @@ -2961,22 +3923,39 @@ msgstr "ذاكرة" msgid "Memory and Storage" msgstr "الذاكرة والتخزين" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "تصميم الذاكرة" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "استخدام الذاكرة (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "الطريقة" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "اسم الطريقة" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "الحد الأدنى لحجم الملف للضغط" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "الحد الأدنى للمساحة الحرة" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "المساحة الحرة الدنيا في دليل التخزين المؤقت" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "الحد الأدنى:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "دقيقة" @@ -2985,21 +3964,36 @@ msgstr "دقيقة" msgid "Minutes" msgstr "دقائق" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "مرآة" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "نموذج" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "خدمة التحليلات الحديثة غير متاحة" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "خدمة المفهرس الحديث غير متاحة" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "خدمة البحث الحديثة غير متاحة" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "تم التعديل في" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "تعديل" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "تعديل الشهادة" @@ -3007,7 +4001,7 @@ msgstr "تعديل الشهادة" msgid "Modify Config" msgstr "تعديل التكوين" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "الوحدة" @@ -3015,6 +4009,10 @@ msgstr "الوحدة" msgid "Modules" msgstr "الوحدات" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "تم تحديث ذاكرة التخزين المؤقت للوحدات" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "الاثنين" @@ -3027,39 +4025,66 @@ msgstr "شهري" msgid "Monthly on day %{day} at %{time}" msgstr "يوميًا في اليوم %{day} الساعة %{time}" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "تصور البيانات متعدد الأبعاد" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "توجيه متعدد الأسطر" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "يجب أن يكون عنوان IP عامًا يمكن الوصول إليه من الإنترنت" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "غير متاح" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "اسم" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "الاسم أو المحتوى" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "مساحة الاسم" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "مساحات الأسماء" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "يجب تمكين وحدة stub_status" @@ -3072,6 +4097,10 @@ msgstr "شبكة" msgid "Network Statistics" msgstr "إحصائيات الشبكة" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "دردشة جديدة" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "خطأ في مزود تحدي DNS الجديد: {0}" @@ -3100,18 +4129,18 @@ msgstr "مسار جديد" msgid "New transport error: {0}" msgstr "خطأ في النقل الجديد: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "تم إصدار نسخة جديدة" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "التالي" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3123,7 +4152,7 @@ msgstr "الناتج من Nginx -T فارغ" msgid "Nginx Access Log Path" msgstr "مسار سجل الوصول لـ Nginx" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "مسار سجل الوصول إلى Nginx موجود" @@ -3152,15 +4181,15 @@ msgstr "تكوين Nginx لا يتضمن sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "تكوين Nginx لا يتضمن stream-enabled" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "لم يتم تعيين دليل تكوين Nginx" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "دليل تكوين Nginx موجود" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "ملف إدخال تكوين Nginx موجود" @@ -3168,8 +4197,8 @@ msgstr "ملف إدخال تكوين Nginx موجود" msgid "Nginx configuration has been restored" msgstr "تمت استعادة تكوين Nginx" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "خطأ في تحليل تكوين Nginx" @@ -3198,7 +4227,7 @@ msgstr "معدل استخدام وحدة المعالجة المركزية لـ msgid "Nginx Error Log Path" msgstr "مسار سجل أخطاء Nginx" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "مسار سجل أخطاء Nginx موجود" @@ -3207,7 +4236,7 @@ msgid "Nginx error: {0}" msgstr "خطأ في Nginx: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3222,7 +4251,7 @@ msgstr "إن Nginx لا يعمل في حاوية أخرى" msgid "Nginx is running" msgstr "إن Nginx يعمل" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "سجل Nginx" @@ -3230,6 +4259,10 @@ msgstr "سجل Nginx" msgid "Nginx Log Directory Whitelist" msgstr "قائمة السماح لمجلد سجلات Nginx" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "فهرسة سجلات Nginx..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3239,7 +4272,7 @@ msgstr "استخدام ذاكرة Nginx" msgid "Nginx PID Path" msgstr "مسار PID لـ Nginx" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "مسار معرف عملية Nginx موجود" @@ -3252,7 +4285,7 @@ msgstr "أمر إعادة تحميل Nginx" msgid "Nginx reload failed: {0}" msgstr "فشل إعادة تحميل Nginx: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "تم إرسال عمليات إعادة تحميل Nginx إلى العقد البعيدة" @@ -3264,7 +4297,7 @@ msgstr "تم إعادة تحميل Nginx بنجاح" msgid "Nginx Restart Command" msgstr "أمر إعادة تشغيل Nginx" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "تم إرسال عمليات إعادة تشغيل Nginx إلى العقد البعيدة" @@ -3272,7 +4305,7 @@ msgstr "تم إرسال عمليات إعادة تشغيل Nginx إلى العق msgid "Nginx restarted successfully" msgstr "تم إعادة تشغيل Nginx بنجاح" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "مسار sbin لـ Nginx موجود" @@ -3303,41 +4336,73 @@ msgid "" "a few seconds." msgstr "تمت استعادة تكوين Nginx UI وسيتم إعادة التشغيل تلقائيًا خلال بضع ثوانٍ." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "يتضمن Nginx.conf دليل conf.d" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "يتضمن Nginx.conf دليل sites-enabled" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "يتضمن Nginx.conf دليل streams-enabled" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "لا" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "لا إجراء" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "لا يوجد شهادة متاحة" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "لا تتوفر بيانات جغرافية للصين" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "لا توجد بيانات" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "لا بيانات" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "لا توجد إدخالات في الصفحة الحالية" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "لا توجد بيانات جغرافية متاحة" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "لم يتم العثور على سجلات في النطاق الزمني المحدد." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "لم يتم تحديد أي عقد" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "لم يتم تحديد أي سجلات" @@ -3346,24 +4411,33 @@ msgstr "لم يتم تحديد أي سجلات" msgid "No servers configured" msgstr "لا توجد خوادم مُهيأة" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "لم يتم العثور على مواقع" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "" +"لم يتم العثور على عنوان IP محدد في تكوين server_name. يرجى تحديد عنوان IP " +"الخادم أدناه للحصول على الشهادة." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "لا توجد بيانات سجل منظمة متاحة" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "لا توجد مصادر علوية مهيأة" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "العقدة" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "مجموعة العقد" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "مجموعات العقد" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "فشل تحليل العقد: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3373,7 +4447,12 @@ msgstr "اسم العقدة" msgid "Node Secret" msgstr "سر العقدة" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "حالة العقدة" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "العقد" @@ -3381,26 +4460,38 @@ msgstr "العقد" msgid "Not After" msgstr "ليس بعد" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "نص غير متوقع" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "غير موجود" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "غير مفهرس" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "غير محمل" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "غير مدعوم لشهادات IP" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "غير صالح قبل: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "ملاحظة" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." @@ -3408,11 +4499,24 @@ msgstr "" "يرجى ملاحظة أنه إذا كان ملف التكوين يتضمن تكوينات أو شهادات أخرى، فيرجى " "مزامنتها مع العقد البعيدة مسبقًا." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"ملاحظة: إذا كان الخادم لا يدعم انعكاس gRPC، فقد تفشل عمليات فحص الصحة. يرجى " +"التأكد من تمكين الانعكاس على خادم gRPC الخاص بك." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "لا يوجد شيء للنسخ" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "إشعار" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "الإشعارات" @@ -3421,15 +4525,19 @@ msgstr "الإشعارات" msgid "Notifier not found" msgstr "لم يتم العثور على المُنبّه" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "نتفي" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "عدد عمليات العامل المتزامنة، يتم الضبط تلقائيًا على عدد نوى المعالج" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "عدد الملفات التي تتم معالجتها بواسطة محمل ذاكرة التخزين المؤقت في وقت واحد" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "عدد الملفات التي تتم معالجتها بواسطة مدير ذاكرة التخزين المؤقت في وقت واحد" @@ -3444,7 +4552,7 @@ msgstr "عدد عمليات العامل" msgid "Obtain cert error: {0}" msgstr "خطأ في الحصول على الشهادة: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "الحصول على شهادة" @@ -3452,11 +4560,11 @@ msgstr "الحصول على شهادة" msgid "Obtaining certificate" msgstr "الحصول على الشهادة" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "يجب تثبيت OCSP" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." @@ -3465,7 +4573,7 @@ msgstr "" "باستخدام Firefox." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "إيقاف" @@ -3473,48 +4581,58 @@ msgstr "إيقاف" msgid "Official Document" msgstr "الوثيقة الرسمية" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "غير متصل" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "تحليل GeoIP دون اتصال" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "حسنًا" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "تشغيل" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "بمجرد اكتمال التحقق، سيتم إزالة السجلات." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "متصل" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "عدد المتصلين" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "يُسمح فقط بملفات zip" @@ -3523,23 +4641,46 @@ msgstr "يُسمح فقط بملفات zip" msgid "Open" msgstr "مفتوح" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "قيود المصدر المفتوح" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "أوبن أي آي" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "نظام التشغيل" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "إحصائيات نظام التشغيل" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "أو" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "أو اسحب الملف إلى المحرر أدناه" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "أو أدخل السر: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "تم حفظ الطلب بنجاح" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "الاسم الأصلي" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "نظام التشغيل" @@ -3586,11 +4727,15 @@ msgstr "عوامل" msgid "Params Optimization" msgstr "تحسين المعلمات" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "أداء المحلل" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "مفتاح المرور" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3600,7 +4745,7 @@ msgstr "" "التعرف على الوجه أو كلمة مرور الجهاز أو رقم التعريف الشخصي. يمكن استخدامها " "كبديل لكلمة المرور أو كطريقة للمصادقة الثنائية." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "كلمة المرور" @@ -3629,11 +4774,13 @@ msgstr "كلمات المرور غير متطابقة" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "مسار" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "المسار غير موجود في مسارات الوصول الممنوحة: {0}" @@ -3645,12 +4792,28 @@ msgstr "المسار: {0} ليس ضمن دليل nginx conf: {1}" msgid "Payload resource is nil" msgstr "مورد الحمولة فارغ" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "ساعة الذروة" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "قيد الانتظار" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "النسبة المئوية" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "نفذ" @@ -3694,17 +4857,29 @@ msgstr "" "يرجى تمكين وحدة stub_status للحصول على إحصائيات الطلبات وعدد الاتصالات وما " "إلى ذلك." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "الرجاء إدخال" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." msgstr "يرجى إدخال اسم لمفتاح المرور الذي ترغب في إنشائه ثم انقر على زر موافق أدناه." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "الرجاء إدخال عنوان IPv4 صحيح (0-255 لكل جزء)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "الرجاء إدخال عنوان IPv4 أو IPv6 صالح" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "الرجاء إدخال نطاق منافذ صالح" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "الرجاء إدخال مجال واحد على الأقل" @@ -3721,6 +4896,10 @@ msgstr "الرجاء إدخال رمز الأمان" msgid "Please enter the security token received during backup" msgstr "الرجاء إدخال رمز الأمان الذي تم استلامه أثناء النسخ الاحتياطي" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "الرجاء إدخال عنوان IP الخادم" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "يرجى ملء جميع الحقول بشكل صحيح" @@ -3729,13 +4908,13 @@ msgstr "يرجى ملء جميع الحقول بشكل صحيح" msgid "Please fill in required S3 configuration fields" msgstr "يرجى ملء حقول تكوين S3 المطلوبة" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." msgstr "يرجى ملء بيانات اعتماد مصادقة API المقدمة من مزود DNS الخاص بك." -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3743,7 +4922,7 @@ msgstr "" "يرجى أولاً إضافة بيانات الاعتماد في الشهادات > بيانات اعتماد DNS، ثم اختيار " "أحد بيانات الاعتماد أدناه لطلب API لمزود DNS." -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3775,20 +4954,20 @@ msgstr "يرجى إدخال الاسم، سيتم استخدامه كاسم ال msgid "Please input your E-mail!" msgstr "يرجى إدخال بريدك الإلكتروني!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "يرجى إدخال كلمة المرور الخاصة بك!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "يرجى إدخال اسم المستخدم الخاص بك!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "الرجاء تسجيل الدخول." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "يرجى ملاحظة أن تكوين وحدات الوقت أدناه كلها بالثواني." @@ -3804,25 +4983,31 @@ msgstr "يرجى حفظ رمز الأمان هذا، ستحتاج إليه لل msgid "Please select a backup file" msgstr "الرجاء تحديد ملف النسخ الاحتياطي" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "الرجاء تحديد نوع الإشعار" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "الرجاء تحديد ملف %{type} صالح (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "الرجاء تحديد عنصر واحد على الأقل" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "الرجاء تحديد عقدة واحدة على الأقل لإعادة تحميل Nginx" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "الرجاء تحديد عقدة واحدة على الأقل لإعادة تشغيل Nginx" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "يرجى اختيار عقدة واحدة على الأقل للترقية" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "يرجى كتابة \"إلغاء\" للتأكيد" @@ -3835,23 +5020,26 @@ msgstr "الرجاء كتابة نص التأكيد بالضبط" msgid "Port" msgstr "المنفذ" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "يجب أن يكون المنفذ 80 مفتوحًا للتحقق من تحدي HTTP-01" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "ماسح المنافذ" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "إجراء ما بعد المزامنة" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "ما قبل الإصدار" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "تفضيل" @@ -3859,6 +5047,19 @@ msgstr "تفضيل" msgid "Preparing lego configurations" msgstr "تحضير تكوينات Lego" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "CA الخاصة:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "ستفشل عناوين IP الخاصة (192.168.x.x، 10.x.x.x، 172.16-31.x.x)" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "مفتاح خاص" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "العملية" @@ -3875,6 +5076,10 @@ msgstr "معلومات العملية" msgid "Processing {count}/{total}" msgstr "جاري المعالجة {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "خط الإنتاج" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "حظر تغيير كلمة مرور root في العرض التوضيحي" @@ -3891,6 +5096,10 @@ msgstr "فريق المشروع" msgid "Protected Directory" msgstr "دليل محمي" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "البروتوكول" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3900,7 +5109,7 @@ msgstr "" "إعدادات البروتوكول تتأثر فقط عند الاتصال المباشر. إذا كنت تستخدم خادم وكيل " "عكسي، يرجى تكوين البروتوكول بشكل منفصل في خادم الوكيل العكسي." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "مزود" @@ -3908,22 +5117,57 @@ msgstr "مزود" msgid "Provider not found: {0}" msgstr "لم يتم العثور على المزود: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "المحافظة / المنطقة" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "وكيل" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "مرور الوكيل" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "أهداف الوكيل" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "متطلبات CA العامة:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "رقم الأمن العام" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "زيارات الصفحة" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "في قائمة الانتظار" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "في قائمة انتظار الفهرسة..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "اختيار سريع" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "خام" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "إعادة تحميل قاعدة البيانات" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "فشل قراءة الدليل: {0}" @@ -3938,24 +5182,48 @@ msgstr "طلبات القراءة" msgid "Reads" msgstr "يقرأ" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "لوحة تحليلات في الوقت الفعلي" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "إعادة بناء" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "إعادة بناء الفهرس بالكامل" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "إعادة بناء فهرس الملف" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "إعادة بناء الفهرس" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "يستقبل" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "إعادة التحقق" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "مُوصى به:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "استرداد" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "رموز الاسترداد" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -3967,33 +5235,47 @@ msgstr "" msgid "Recursive Nameservers" msgstr "خوادم الأسماء التكرارية" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "المرجع" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "تحديث" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "تحديث ذاكرة التخزين المؤقت للوحدات" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "إعادة توليد الاستجابة" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "تسجيل" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." msgstr "تسجيل مستخدم أو استخدام هذا الحساب لإصدار شهادة عبر وكيل HTTP." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "فشل التسجيل" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "التسجيل عند بدء التشغيل" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "تم تسجيل مفتاح المرور بنجاح" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "تم التسجيل بنجاح" @@ -4001,28 +5283,30 @@ msgstr "تم التسجيل بنجاح" msgid "Registering user" msgstr "تسجيل المستخدم" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "حالة التسجيل" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "إعادة التثبيت" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "Falied to request Release API: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "ملاحظة الإصدار" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "إعادة تحميل" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "إعادة تحميل Nginx" @@ -4046,7 +5330,7 @@ msgstr "خطأ في إعادة تحميل Nginx البعيد" msgid "Reload Remote Nginx Success" msgstr "إعادة تحميل Nginx البعيد بنجاح" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "فشل طلب إعادة التحميل، يرجى التحقق من اتصال الشبكة لديك" @@ -4058,22 +5342,28 @@ msgstr "إعادة التحميل" msgid "Reloading nginx" msgstr "إعادة تحميل nginx" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "عن بُعد" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "إزالة" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "إزالة بنجاح" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "تمت الإزالة بنجاح" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4082,12 +5372,12 @@ msgid "Rename" msgstr "إعادة تسمية" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "فشل إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "فشل إعادة تسمية %{orig_path} إلى %{new_path} على %{node_name}" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "تم إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name} بنجاح" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "تمت إعادة تسمية %{orig_path} إلى %{new_path} على %{node_name} بنجاح" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4097,37 +5387,37 @@ msgstr "خطأ في إعادة تسمية التكوين البعيد" msgid "Rename Remote Config Success" msgstr "إعادة تسمية تكوين البعيد بنجاح" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "خطأ في إعادة تسمية الموقع البعيد" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "تم إعادة تسمية الموقع البعيد بنجاح" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "خطأ في إعادة تسمية البث عن بُعد" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "تمت إعادة تسمية الدفق البعيد بنجاح" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "فشل إعادة تسمية الموقع %{name} إلى %{new_name} على %{node}" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "تمت إعادة تسمية الموقع %{name} إلى %{new_name} على %{node} بنجاح" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "فشل إعادة تسمية الدفق %{name} إلى %{new_name} على %{node}" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "تمت إعادة تسمية الدفق %{name} إلى %{new_name} على %{node} بنجاح" @@ -4135,7 +5425,7 @@ msgstr "تمت إعادة تسمية الدفق %{name} إلى %{new_name} عل msgid "Rename successfully" msgstr "إعادة التسمية بنجاح" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4145,8 +5435,8 @@ msgstr "تمت إعادة التسمية بنجاح" msgid "Renew cert error: {0}" msgstr "خطأ في تجديد الشهادة: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "تجديد الشهادة" @@ -4158,11 +5448,23 @@ msgstr "خطأ في تجديد الشهادة" msgid "Renew Certificate Success" msgstr "تجديد الشهادة بنجاح" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "تم التجديد بنجاح" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "طلب" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "نص الطلب" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "مسار الطلب" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "إحصائيات الطلبات" @@ -4180,13 +5482,19 @@ msgid "Requests Per Connection" msgstr "الطلبات لكل اتصال" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "إعادة تعيين" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "إعادة تعيين التحقق بخطوتين" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "إعادة تعيين البحث" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4196,6 +5504,10 @@ msgstr "" "حجم مجموعة المقيم: الذاكرة الفعلية المقيمة في الذاكرة المادية، بما في ذلك " "ذاكرة المكتبة المشتركة، والتي سيتم حسابها بشكل متكرر للعديد من العمليات" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "تحذير استخدام الموارد" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4205,9 +5517,8 @@ msgstr "الردود" msgid "Restart" msgstr "إعادة تشغيل" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "إعادة تشغيل Nginx" @@ -4227,7 +5538,7 @@ msgstr "خطأ في إعادة تشغيل Nginx البعيد" msgid "Restart Remote Nginx Success" msgstr "إعادة تشغيل Nginx البعيد بنجاح" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "فشل طلب إعادة التشغيل، يرجى التحقق من اتصال الشبكة لديك" @@ -4266,8 +5577,8 @@ msgstr "استعادة هذه النسخة" msgid "Restored successfully" msgstr "تم الاستعادة بنجاح" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "إبطال" @@ -4275,15 +5586,15 @@ msgstr "إبطال" msgid "Revoke cert error: {0}" msgstr "خطأ في إلغاء الشهادة: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "إبطال الشهادة القديمة" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "إبطال هذه الشهادة" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." @@ -4291,15 +5602,15 @@ msgstr "" "إلغاء الشهادة سيؤثر على أي خدمات تستخدمها حالياً. لا يمكن التراجع عن هذا " "الإجراء." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "اسم العرض RP" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "أصول RP" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "معرّف الجهاز عن بُعد" @@ -4335,10 +5646,6 @@ msgstr "معرف مفتاح الوصول إلى S3 مطلوب" msgid "S3 Bucket" msgstr "دلو S3" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "تم رفض الوصول إلى حاوية S3: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "دلو S3 مطلوب" @@ -4347,7 +5654,7 @@ msgstr "دلو S3 مطلوب" msgid "S3 bucket name" msgstr "اسم دلو S3" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "تكوين S3 غير مكتمل: مفقود {0}" @@ -4355,27 +5662,15 @@ msgstr "تكوين S3 غير مكتمل: مفقود {0}" msgid "S3 connection test failed" msgstr "فشل اختبار اتصال S3" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "فشل اختبار اتصال S3: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "تم اختبار اتصال S3 بنجاح" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "بيانات اعتماد S3 غير صالحة: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "نقطة نهاية S3" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "نقطة نهاية S3 غير صالحة: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "نقطة نهاية S3 مطلوبة" @@ -4411,7 +5706,7 @@ msgstr "مفتاح الوصول السري لـ S3" msgid "S3 secret access key is required" msgstr "مفتاح الوصول السري لـ S3 مطلوب" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "فشل تحميل S3: {0}" @@ -4419,17 +5714,19 @@ msgstr "فشل تحميل S3: {0}" msgid "Saturday" msgstr "السبت" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "حفظ" @@ -4437,41 +5734,41 @@ msgstr "حفظ" msgid "Save Directive" msgstr "حفظ التوجيه" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "خطأ في الحفظ %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "حفظ الطلب" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "خطأ في حفظ الموقع البعيد" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "حفظ الموقع البعيد بنجاح" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "خطأ في حفظ البث عن بُعد" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "حفظ البث عن بُعد بنجاح" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "فشل حفظ الموقع %{name} إلى %{node}" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "تم حفظ الموقع %{name} على %{node} بنجاح" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "فشل حفظ الدفق %{name} إلى %{node}" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "تم حفظ الدفق %{name} في %{node} بنجاح" @@ -4479,16 +5776,17 @@ msgstr "تم حفظ الدفق %{name} في %{node} بنجاح" msgid "Save successful" msgstr "تم الحفظ بنجاح" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "تم الحفظ بنجاح" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "تم الحفظ بنجاح" @@ -4512,13 +5810,13 @@ msgstr "مسح المنافذ" msgid "Scan Results" msgstr "نتائج المسح" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "امسح رمز الاستجابة السريعة بهاتفك المحمول لإضافة الحساب إلى التطبيق." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "جارٍ فحص السجلات..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "مسح" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4533,16 +5831,37 @@ msgid "SDK" msgstr "حزمة تطوير البرمجيات SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "بحث" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "مرشحات البحث" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "البحث في محتوى السجل..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "اسم وحدة البحث" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "بحث الوحدات" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "نطاق البحث" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "البحث عن القوالب" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "تم نسخ السر" @@ -4559,13 +5878,21 @@ msgstr "رمز الأمان" msgid "Security Token Information" msgstr "معلومات رمز الأمان" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" +"حدد دليل CA مسبقًا أو أدخل دليلاً مخصصًا. اتركه فارغًا لاستخدام دليل CA " +"الافتراضي." + #: src/language/curd.ts:31 msgid "Select all" msgstr "تحديد الكل" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "اختر إجراءً بعد المزامنة" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "حدد أو أدخل عنوان URL لدليل CA" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4575,7 +5902,7 @@ msgstr "تم تحديد {count} ملفات" msgid "Selector" msgstr "المحدد" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "الفحص الذاتي" @@ -4589,11 +5916,15 @@ msgstr "فشل الفحص الذاتي، قد لا يعمل واجهة NGINX ب msgid "Send" msgstr "إرسال" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "إرسال رسالة اختبار" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "الخادم" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "خطأ في الخادم" @@ -4601,6 +5932,10 @@ msgstr "خطأ في الخادم" msgid "Server Info" msgstr "معلومات الخادم" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "عنوان IP الخادم" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "حجم جدول تجزئة أسماء الخوادم" @@ -4609,7 +5944,7 @@ msgstr "حجم جدول تجزئة أسماء الخوادم" msgid "Server names hash table size" msgstr "حجم جدول تجزئة أسماء الخوادم" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "اسم_الخادم غير موجود في التوجيهات" @@ -4617,6 +5952,10 @@ msgstr "اسم_الخادم غير موجود في التوجيهات" msgid "ServerIdx out of range" msgstr "معرف الخادم خارج النطاق" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "اسم الخدمة" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "الجلسة غير موجودة" @@ -4653,6 +5992,10 @@ msgstr "تعيين متغيرات البيئة" msgid "Setting HTTP01 challenge provider" msgstr "تعيين موفر تحدي HTTP01" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "الإعدادات" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4673,7 +6016,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "إعداد واجهة NGINX الخاصة بك" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "منطقة الذاكرة المشتركة" @@ -4681,10 +6024,18 @@ msgstr "منطقة الذاكرة المشتركة" msgid "Show" msgstr "عرض" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "إظهار المساعد" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "تسجيل الدخول باستخدام مفتاح المرور" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "معالجة تيار مُحسّنة باستخدام SIMD" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "توجيه واحد" @@ -4705,11 +6056,23 @@ msgstr "الموقع في وضع الصيانة" msgid "Site Logs" msgstr "سجلات الموقع" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "تنقل الموقع" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "الموقع غير موجود" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "تم بدء تحديث الموقع" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "المواقع" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "دليل المواقع موجود" @@ -4717,6 +6080,14 @@ msgstr "دليل المواقع موجود" msgid "Sites List" msgstr "قائمة المواقع" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" +"ستظهر المواقع هنا بمجرد تكوين كتل خادم nginx باستخدام توجيهات server_name " +"الصالحة." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "دليل Sites-available غير موجود" @@ -4726,6 +6097,8 @@ msgid "Sites-enabled directory not exist" msgstr "دليل sites-enabled غير موجود" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "الحجم" @@ -4733,19 +6106,36 @@ msgstr "الحجم" msgid "Skip Installation" msgstr "تخطي التثبيت" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "وقت الانتظار بين تكرارات محمل ذاكرة التخزين المؤقت" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "وقت الانتظار بين تكرارات مدير الذاكرة المؤقتة" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "المنفذ" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "مرتب حسب" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "IP المصدر" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "راعي" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "تخزين SSD لأداء أفضل في الإدخال/الإخراج" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "محتوى شهادة SSL" @@ -4757,15 +6147,20 @@ msgstr "يجب أن يكون ملف شهادة SSL ضمن دليل تكوين Ng msgid "SSL certificate file not found" msgstr "لم يتم العثور على ملف شهادة SSL" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "محتوى مفتاح شهادة SSL" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "مسار مفتاح شهادة SSL" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "مسار شهادة SSL" @@ -4790,13 +6185,12 @@ msgstr "مسار مفتاح SSL" msgid "SSL key path is required when HTTPS is enabled" msgstr "مسار مفتاح SSL مطلوب عند تمكين HTTPS" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "تسجيل الدخول عبر SSO" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "مستقر" @@ -4804,33 +6198,49 @@ msgstr "مستقر" msgid "Start" msgstr "بداية" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "تاريخ البدء" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "بدء الاستعادة" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "بدء التحميل..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "ثابت" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "الحالة" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "تم تحديث الحالة بنجاح" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "متوقف" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "تخزين" @@ -4856,10 +6266,6 @@ msgstr "مسار التخزين" msgid "Storage path is required" msgstr "مسار التخزين مطلوب" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "مسار التخزين غير موجود في مسارات الوصول الممنوحة: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4873,7 +6279,7 @@ msgstr "تم تمكين البث" msgid "Stream not found" msgstr "البث غير موجود" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "دليل Streams موجود" @@ -4885,6 +6291,10 @@ msgstr "دليل Streams-available غير موجود" msgid "Streams-enabled directory not exist" msgstr "دليل Streams-enabled غير موجود" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "منظم" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "منفذ حالة ستاب" @@ -4893,7 +6303,7 @@ msgstr "منفذ حالة ستاب" msgid "Stub_status is not enabled" msgstr "لم يتم تمكين Stub_status" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4904,17 +6314,6 @@ msgstr "نجاح" msgid "Sunday" msgstr "الأحد" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"دعم الاتصال مع الخلفية من خلال بروتوكول Server-Sent Events. إذا كنت تستخدم " -"واجهة Nginx UI عبر وكيل عكسي لـ Nginx، يرجى الرجوع إلى هذا الرابط لكتابة " -"ملف التكوين المقابل: https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -4962,12 +6361,12 @@ msgid "Sync Certificate" msgstr "مزامنة الشهادة" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "فشل مزامنة الشهادة %{cert_name} إلى %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "فشل مزامنة الشهادة %{cert_name} إلى %{node_name}" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "نجح مزامنة الشهادة %{cert_name} إلى %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "تمت مزامنة الشهادة %{cert_name} إلى %{node_name} بنجاح" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -4978,12 +6377,12 @@ msgid "Sync Certificate Success" msgstr "تمت مزامنة الشهادة بنجاح" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "فشل مزامنة التكوين %{config_name} إلى %{env_name}" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "فشل مزامنة التكوين %{config_name} إلى %{node_name}" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "تم مزامنة التكوين %{config_name} إلى %{env_name} بنجاح" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "تمت مزامنة التكوين %{config_name} إلى %{node_name} بنجاح" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -4993,24 +6392,29 @@ msgstr "خطأ في تزامن التكوين" msgid "Sync Config Success" msgstr "تمت مزامنة التكوين بنجاح" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "مزامنة العقد" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "معاينة المزامنة" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "استراتيجية المزامنة" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "مزامنة إلى" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "مزامنة" @@ -5027,10 +6431,14 @@ msgstr "نسخ احتياطي للنظام" msgid "System Check" msgstr "فحص النظام" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "مستخدم النظام الأولي" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "متطلبات النظام" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "استعادة النظام" @@ -5051,19 +6459,45 @@ msgstr "المهمة غير موجودة" msgid "Telegram" msgstr "تيليجرام" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "طرفية" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "مساعد الطرفية" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "أمر البدء في المحطة الطرفية" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "اختبار" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "فشل الاختبار: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "فشل الاختبار: تعذر إجراء فحص الحالة" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "تم إرسال رسالة الاختبار بنجاح" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "اختبار اتصال S3" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "تم الاختبار بنجاح! وقت الاستجابة: %{response_time} مللي ثانية" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " @@ -5072,17 +6506,33 @@ msgstr "" "سيتم فحص شهادة النطاق لمدة 30 دقيقة، وسيتم تجديدها إذا مر أكثر من أسبوع أو " "الفترة التي حددتها في الإعدادات منذ إصدارها الأخير." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "" +"يُحتاج إلى قاعدة بيانات GeoLite2 لتحليل العنوان IP الجغرافي دون اتصال " +"بالإنترنت. يرجى تنزيلها لتفعيل هذه الميزة." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "" +"قاعدة بيانات GeoLite2 تقدم معلومات جغرافية عن عناوين IP. يتم استخدامها " +"للتحليل الجغرافي غير المتصل في تحليل السجلات." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " "dashes, colons, and dots." msgstr "يجب أن يحتوي رقم ICP على أحرف، يونيكود، أرقام، شرطات، نقاط، ونقطتين فقط." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "الإدخال ليس شهادة SSL" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "المدخل ليس مفتاح شهادة SSL" @@ -5119,11 +6569,11 @@ msgstr "يجب أن يحتوي اسم العقدة على أحرف، يونيك msgid "The parameter of server_name is required" msgstr "معلمة server_name مطلوبة" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "المسار موجود، لكن الملف ليس شهادة" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "المسار موجود، لكن الملف ليس مفتاحًا خاصًا" @@ -5135,7 +6585,7 @@ msgstr "" "يجب أن يحتوي رقم الأمن العام على أحرف وunicode وأرقام وواصلات وشرطات ونقاط " "فقط." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5144,7 +6594,7 @@ msgstr "" "إصدار واجهة Nginx البعيد غير متوافق مع إصدار واجهة Nginx المحلي. لتجنب " "الأخطاء المحتملة، يرجى ترقية واجهة Nginx البعيدة لتتطابق مع الإصدار المحلي." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5174,7 +6624,7 @@ msgstr "الحد الأقصى النظري للاتصالات المتزامنة msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "أقصى حد نظري لعدد الطلبات في الثانية (RPS):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5184,11 +6634,15 @@ msgstr "" "والعوامل الثانية. إذا لم تتمكن من العثور على هذه الرموز، فستفقد الوصول إلى " "حسابك." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "مكونات الطرف الثالث" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "هذا العنصر في الشهادة التلقائية غير صالح، يرجى إزالته." -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "يتم إدارة هذه الشهادة بواسطة Nginx UI" @@ -5196,9 +6650,9 @@ msgstr "يتم إدارة هذه الشهادة بواسطة Nginx UI" msgid "This directory is protected and cannot be deleted for system safety." msgstr "هذا الدليل محمي ولا يمكن حذفه لأمان النظام." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "هذا الحقل مطلوب" @@ -5224,6 +6678,10 @@ msgid "" "-_./:" msgstr "يجب أن يحتوي هذا الحقل فقط على أحرف وأحرف يونيكود وأرقام و -_./:" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "هذه رسالة اختبار تم إرسالها في %{timestamp} من واجهة Nginx." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " @@ -5232,7 +6690,15 @@ msgstr "" "توفر هذه الوحدة إحصائيات طلبات Nginx وعدد الاتصالات وما إلى ذلك من " "البيانات. بعد تمكينها، يمكنك عرض إحصائيات الأداء" -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "هذا الشهر" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "هذا الإشعار معطل" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." @@ -5240,6 +6706,26 @@ msgstr "" "هذه العملية ستزيل الشهادة من قاعدة البيانات فقط. لن يتم حذف ملفات الشهادة " "على نظام الملفات." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"تم تكوين هذا الموقع كخادم افتراضي (default_server) لـ HTTPS (المنفذ 443). " +"تتطلب شهادات IP دعمًا من سلطة الشهادات (CA) وقد لا تكون متاحة مع جميع موفري " +"ACME." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"يستخدم هذا الموقع اسم خادم شامل (_) والذي يشير عادةً إلى شهادة قائمة على " +"عنوان IP. تتطلب شهادات IP دعمًا من سلطة الشهادات (CA) وقد لا تكون متاحة مع " +"جميع موفري ACME." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5256,6 +6742,18 @@ msgstr "هذه القيمة مستخدمة مسبقا" msgid "This will permanently delete the %{type}." msgstr "سيتم حذف %{type} نهائيًا." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"سيتم إعادة بناء فهرس السجل بالكامل. سيتم حذف جميع بيانات الفهرس الموجودة " +"وإعادة بنائها من الصفر. قد يستغرق هذا بعض الوقت. هل تريد المتابعة؟" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "سيتم إعادة بناء بيانات الفهرس لهذا الملف المحدد: %{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5274,11 +6772,11 @@ msgstr "" "سيؤدي هذا إلى استعادة ملفات التكوين وقاعدة البيانات. سيعاد تشغيل واجهة " "Nginx بعد اكتمال الاستعادة." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "سيتم ترقية أو إعادة تثبيت Nginx UI على %{nodeNames} إلى %{version}." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "كبح" @@ -5286,8 +6784,21 @@ msgstr "كبح" msgid "Thursday" msgstr "الخميس" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "الوقت" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "نطاق الوقت" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "الوقت المحدد (بالثواني)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "نصائح" @@ -5304,11 +6815,15 @@ msgstr "" msgid "Title" msgstr "عنوان" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "لتأكيد الحذف" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "لتأكيد الإلغاء، يرجى كتابة \"إلغاء\" في الحقل أدناه:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5316,7 +6831,7 @@ msgstr "" "لتفعيله، تحتاج إلى تثبيت تطبيق Google Authenticator أو Microsoft " "Authenticator على هاتفك المحمول." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5359,15 +6874,41 @@ msgstr "الرمز فارغ" msgid "Token is not valid" msgstr "الرمز غير صالح" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "أفضل 10 دول / مناطق" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "أفضل 10 مقاطعات / مناطق" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "أفضل 10 عناوين URL" + #: src/language/curd.ts:5 msgid "Total" msgstr "الإجمالي" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "إجمالي %{total} عنصر" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "إجمالي المكونات" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "إجمالي الاتصالات" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "إجمالي المدخلات" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5381,6 +6922,10 @@ msgstr "إجمالي عمليات Nginx" msgid "Total Nginx Processes" msgstr "إجمالي عمليات Nginx" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "إجمالي المشاهدات" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "إجمالي الاستقبال" @@ -5398,11 +6943,15 @@ msgstr "إجمالي الطلبات / إجمالي الاتصالات" msgid "Total Send" msgstr "إجمالي الإرسال" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "إجمالي الزوار الفريدين" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "كلمة مرور لمرة واحدة تعتمد على الوقت" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -5410,25 +6959,41 @@ msgstr "" "TOTP هو طريقة مصادقة ثنائية تستخدم خوارزمية كلمة مرور لمرة واحدة تعتمد على " "الوقت." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "حركة المرور" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "جاري ترجمة الخطأ..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "مهملات" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "حاول تعديل معايير البحث أو التنقل بين الصفحات المختلفة." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "حاول تعديل معايير البحث أو النطاق الزمني." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "الثلاثاء" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "يتطلب المصادقة الثنائية" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "نوع" @@ -5436,15 +7001,47 @@ msgstr "نوع" msgid "Type %{delete} to confirm" msgstr "اكتب %{delete} للتأكيد" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "اكتب أو اختر المتصفح" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "اكتب أو اختر الجهاز" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "اكتب أو اختر نظام التشغيل" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "اكتب أو اختر رموز الحالة" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "اكتب رسالتك هنا..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "صفحات فريدة" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "غير معروف" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "نوع النسخ الاحتياطي غير مدعوم: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "تنسيق السجل غير مدعوم" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "التحديث قيد التنفيذ بالفعل" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "تحديث كلمة المرور" @@ -5453,32 +7050,30 @@ msgstr "تحديث كلمة المرور" msgid "Update Profile" msgstr "تحديث الملف الشخصي" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "تم التحديث بنجاح" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "محدث في" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "ترقية" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "تمت ترقية Nginx UI على %{node} بنجاح 🎉" @@ -5486,11 +7081,22 @@ msgstr "تمت ترقية Nginx UI على %{node} بنجاح 🎉" msgid "Upgraded successfully" msgstr "تم الترقية بنجاح" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "هضم النواة المحدث فارغ" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "رابط تحميل نواة المحدث فارغ" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "جارٍ ترقية Nginx UI، يرجى الانتظار..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "تحميل ملف %{type}" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "تحميل الملفات" @@ -5499,19 +7105,29 @@ msgstr "تحميل الملفات" msgid "Upload Folders" msgstr "تحميل المجلدات" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "أعلى التيار" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "اسم المنبع" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "المآخذ العلوية" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "نوع اختبار المنبع" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "مدة التشغيل:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "عنوان URL" @@ -5523,14 +7139,19 @@ msgstr "استخدم كلمة المرور لمرة واحدة" msgid "Use recovery code" msgstr "استخدم رمز الاسترداد" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "استخدام المسار المؤقت" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "مستخدم" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "وكيل المستخدم" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "تم حظر المستخدم" @@ -5547,7 +7168,7 @@ msgstr "المستخدم لم يتم تفعيل OTP كعامل ثنائي" msgid "User Profile" msgstr "ملف المستخدم" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "اسم المستخدم" @@ -5560,12 +7181,20 @@ msgstr "اسم المستخدم (*)" msgid "Username length cannot exceed 255 characters" msgstr "يجب ألا يتجاوز طول اسم المستخدم 255 حرفًا" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "زيارة فريدة" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "صالح" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "التحقق من صحة شهادة SSL" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "القيمة" @@ -5575,45 +7204,65 @@ msgstr "القيمة" msgid "Verify Backup File Integrity" msgstr "التحقق من سلامة ملف النسخ الاحتياطي" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "التحقق من اسم المضيف" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "تحقق من متطلبات النظام" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "إصدار" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "عرض" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "عرض جميع التنبيهات" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "عرض على GitHub" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "عرض رموز الاسترداد" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "عرض المكونات الخارجية" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "تمت المشاهدة" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "الزيارات" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "عمليات الانتظار" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "تحذير" @@ -5627,13 +7276,27 @@ msgstr "" "تحذير: ستقوم عملية الاستعادة بالكتابة فوق التكوينات الحالية. تأكد من أن " "لديك ملف نسخ احتياطي صالحًا ورمزًا أمنيًا، واختر بعناية ما تريد استعادته." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"تحذير: يبدو أن هذا عنوان IP خاص. لا يمكن لسلطات التصديق العامة مثل Let's " +"Encrypt إصدار شهادات لعناوين IP الخاصة. استخدم عنوان IP عام أو فكر في " +"استخدام سلطة تصديق خاصة." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "نحن لا نقبل أي طلبات ميزات" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." msgstr "سنضيف سجل أو أكثر من سجلات TXT إلى سجلات DNS لنطاقك للتحقق من الملكية." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" @@ -5641,7 +7304,7 @@ msgstr "" "سنقوم بإزالة تكوين HTTPChallenge من هذا الملف وإعادة تحميل Nginx. هل أنت " "متأكد أنك تريد المتابعة؟" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "ويب أوثن" @@ -5649,10 +7312,18 @@ msgstr "ويب أوثن" msgid "WebAuthn settings are not configured" msgstr "إعدادات WebAuthn غير مضبوطة" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "خطأ في اتصال WebSocket" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "اتصال WebSocket غير متاح، يرجى الانتظار حتى يتم الاتصال" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "ويكوم" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "الأربعاء" @@ -5665,7 +7336,7 @@ msgstr "أسبوعي" msgid "Weekly on %{day} at %{time}" msgstr "أسبوعيًا يوم %{day} الساعة %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5675,26 +7346,26 @@ msgstr "" "التشغيل. بشكل عام، لا تقم بتمكين هذا إلا إذا كنت في بيئة تطوير وتستخدم " "Pebble كسلطة شهادات." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" "عند تمكين/تعطيل أو حذف أو حفظ هذا الموقع، سيتم مزامنة العقد المحددة في " -"مجموعة العقد والعقد المحددة أدناه." +"مساحة الاسم والعقد المحددة أدناه." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." msgstr "عند إنشاء رموز استرداد جديدة، يجب عليك تنزيلها أو طباعتها." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "ما إذا كان سيتم استخدام مسار مؤقت عند كتابة الملفات المؤقتة" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "شهادة البدل" @@ -5713,8 +7384,8 @@ msgstr "عمليات العامل" msgid "Workers" msgstr "العمال" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "مساحة العمل" @@ -5739,16 +7410,18 @@ msgstr "كتابة مفتاح الشهادة الخاص إلى القرص" msgid "Writing certificate to disk" msgstr "كتابة الشهادة إلى القرص" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "نعم" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5760,11 +7433,11 @@ msgstr "" msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "غير مسموح لك بحذف ملف خارج مسار تكوين nginx" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "أنت تستخدم أحدث إصدار" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "يمكنك التحقق من ترقية Nginx UI في هذه الصفحة." @@ -5776,23 +7449,23 @@ msgstr "يمكنك إغلاق هذه النافذة خلال %{countdown} ثان msgid "You can close this dialog now" msgstr "يمكنك إغلاق هذا الحوار الآن" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." msgstr "لم تقم بتكوين إعدادات Webauthn، لذا لا يمكنك إضافة مفتاح مرور." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" "لم تقم بتمكين المصادقة الثنائية بعد. يرجى تمكين المصادقة الثنائية لإنشاء " "رموز الاسترداد." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "لم تقم بإنشاء رموز الاسترداد بعد." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." @@ -5800,15 +7473,195 @@ msgstr "" "قد يكون رمز الاسترداد الحالي الخاص بك قديمًا وغير آمن. يرجى إنشاء رموز " "استرداد جديدة في أقرب وقت ممكن لضمان الأمان." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "رموزك القديمة لن تعمل بعد الآن." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "مفاتيح المرور الخاصة بك" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "خط أنابيب بدون تخصيص" + +#~ msgid "in the same directory as" +#~ msgstr "في نفس المجلد مع" + +#~ msgid "Sandbox test successful" +#~ msgstr "اختبار الساندبوكس ناجح" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "تم الاختبار في وضع الحماية المعزول" + +#~ msgid "All" +#~ msgstr "الكل" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "بناءً على اختبار M2 Pro (12 نواة)" + +#~ msgid "CPU Utilization" +#~ msgstr "استخدام وحدة المعالجة المركزية" + +#~ msgid "Indexing Throughput" +#~ msgstr "إنتاجية الفهرسة" + +#~ msgid "Memory Efficiency" +#~ msgstr "كفاءة الذاكرة" + +#~ msgid "Performance Impact Notice" +#~ msgstr "إشعار تأثير الأداء" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "تحسين خط الأنابيب بدون تخصيص" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "اطلب المساعدة من ChatGPT" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "رسم الخرائط الجغرافية والرؤى" + +#~ msgid "No feature requests accepted." +#~ msgstr "لا يتم قبول طلبات الميزات" + +#~ msgid "Time-series trend analysis" +#~ msgstr "تحليل اتجاهات السلاسل الزمنية" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "تحليل وكيل المستخدم والمتصفح" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ نواة (Apple M2 Pro أو ما يعادلها من Intel)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "ذاكرة وصول عشوائي بسعة 4 جيجابايت أو أكثر لأفضل أداء" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "تعديل حجم الدُفعة التكيفي" + +#~ msgid "CPU Architecture" +#~ msgstr "بنية وحدة المعالجة المركزية" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "تحليل GeoIP وعامل المستخدم" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "1 جيجابايت RAM كحد أدنى" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "وحدة معالجة مركزية حديثة (x86_64، ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "مراقبة الأداء في الوقت الحقيقي" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "أداء مستمر على الأجهزة الحديثة" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "مسار النسخ الاحتياطي غير موجود في مسارات الوصول الممنوحة: {0}" + +#~ msgid "Build with" +#~ msgstr "بناء مع" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "فشل في نسخ دليل قاعدة البيانات: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "فشل في إنشاء دليل النسخ الاحتياطي: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "فشل في تقييم الروابط الرمزية: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "فشل استعادة ملفات واجهة NGINX: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "فشل الكتابة إلى مخزن zip المؤقت: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "فشل التحقق من التجزئة: تم اختراق سلامة الملف" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "تم رفض الوصول إلى حاوية S3: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "فشل اختبار اتصال S3: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "بيانات اعتماد S3 غير صالحة: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "نقطة نهاية S3 غير صالحة: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "مسار التخزين غير موجود في مسارات الوصول الممنوحة: {0}" + +#~ msgid "files" +#~ msgstr "ملفات" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "جاري فهرسة السجلات، يرجى الانتظار..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "جاري تحميل بيانات لوحة التحكم..." + +#~ msgid "Today" +#~ msgstr "اليوم" + +#~ msgid "Data refreshed successfully" +#~ msgstr "تم تحديث البيانات بنجاح" + +#~ msgid "Failed to refresh data" +#~ msgstr "فشل في تحديث البيانات" + +#~ msgid "Log File:" +#~ msgstr "ملف السجل:" + +#~ msgid "Log path" +#~ msgstr "مسار السجل" + +#~ msgid "Index Size" +#~ msgstr "حجم الفهرس" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "حجم الصفحة" + +#~ msgid "Environments" +#~ msgstr "البيئات" + +#~ msgid "Node Group" +#~ msgstr "مجموعة العقد" + +#~ msgid "Node Groups" +#~ msgstr "مجموعات العقد" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "تحقق مما إذا كان دليل conf.d موجودًا" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "دعم الاتصال مع الخلفية من خلال بروتوكول Server-Sent Events. إذا كنت تستخدم " +#~ "واجهة Nginx UI عبر وكيل عكسي لـ Nginx، يرجى الرجوع إلى هذا الرابط لكتابة " +#~ "ملف التكوين المقابل: https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "إذا تُرك فارغًا، سيتم استخدام دليل CA الافتراضي." + +#~ msgid "Save error %{msg}" +#~ msgstr "خطأ في الحفظ %{msg}" + +#~ msgid "Main" +#~ msgstr "رئيسي" + +#~ msgid "Select an action after sync" +#~ msgstr "اختر إجراءً بعد المزامنة" + #~ msgid "Link Start" #~ msgstr "ابدأ الرابط" @@ -5842,9 +7695,6 @@ msgstr "مفاتيح المرور الخاصة بك" #~ msgid "Last Backup Error" #~ msgstr "خطأ آخر نسخة احتياطية" -#~ msgid "Apply" -#~ msgstr "تطبيق" - #~ msgid "Apply bulk action successfully" #~ msgstr "تم تطبيق الإجراء المجمع بنجاح" @@ -5881,10 +7731,6 @@ msgstr "مفاتيح المرور الخاصة بك" #~ msgid "Recovered Successfully" #~ msgstr "تم الاسترداد بنجاح" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "إجمالي %{total} عنصر" - #~ msgid "View Details" #~ msgstr "عرض التفاصيل" @@ -5932,9 +7778,6 @@ msgstr "مفاتيح المرور الخاصة بك" #~ msgid "Format error %{msg}" #~ msgstr "خطأ في التنسيق %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "فشل في الحفظ، تم اكتشاف خطأ(أخطاء) في بناء الجملة في التكوين." - #, fuzzy #~ msgid "" #~ "When you enable/disable, delete, or save this stream, the nodes set in the " @@ -5943,10 +7786,6 @@ msgstr "مفاتيح المرور الخاصة بك" #~ "عند تفعيل/تعطيل، حذف، أو حفظ هذا الموقع، سيتم مزامنة العقد المحددة في فئة " #~ "الموقع والعقد المحددة أدناه." -#, fuzzy -#~ msgid "Access Token" -#~ msgstr "سجلات الدخول" - #, fuzzy #~ msgid "Bot Token" #~ msgstr "رمز API" @@ -5968,10 +7807,6 @@ msgstr "مفاتيح المرور الخاصة بك" #~ msgid "Site Categories" #~ msgstr "فئات الموقع" -#, fuzzy -#~ msgid "Restart Required" -#~ msgstr "إعادة التشغيل" - #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "تم نشر %{conf_name} إلى %{node_name} بنجاح" @@ -6038,9 +7873,6 @@ msgstr "مفاتيح المرور الخاصة بك" #~ "إذا فقدت هاتفك المحمول، يمكنك استخدام رمز الاسترداد لإعادة تعيين المصادقة " #~ "الثنائية." -#~ msgid "Recovery Code:" -#~ msgstr "رمز الاسترداد:" - #~ msgid "The recovery code is only displayed once, please save it in a safe place." #~ msgstr "رمز الاسترداد يُعرض مرة واحدة فقط، يرجى حفظه في مكان آمن." diff --git a/app/src/language/constants.ts b/app/src/language/constants.ts index 448a59614..280533955 100644 --- a/app/src/language/constants.ts +++ b/app/src/language/constants.ts @@ -60,4 +60,7 @@ export const msg = [ $gettext('Search module name'), $gettext('Search'), + + $gettext('Access Log'), + $gettext('Error Log'), ] diff --git a/app/src/language/curd.ts b/app/src/language/curd.ts index cb5b9d3c2..a85f272c5 100644 --- a/app/src/language/curd.ts +++ b/app/src/language/curd.ts @@ -60,5 +60,14 @@ export const translations = { processing: $gettext('Processing {count}/{total}'), path: $gettext('Path'), size: $gettext('Size') - } + }, + 'Column Settings': $gettext('Column Settings'), + Apply: $gettext('Apply'), + 'Confirm Delete': $gettext('Confirm Delete'), + 'Please Input': $gettext('Please enter'), + 'to comfirm delete': $gettext('to confirm deletion'), + 'to confirm deletion': $gettext('to confirm deletion'), + refresh: $gettext('Refresh'), + collapse: $gettext('Collapse'), + expand: $gettext('Expand') } diff --git a/app/src/language/de_DE/app.po b/app/src/language/de_DE/app.po index 45c73dfcd..fbd47ae03 100644 --- a/app/src/language/de_DE/app.po +++ b/app/src/language/de_DE/app.po @@ -9,96 +9,143 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "" "[Nginx UI] ACME-Benutzer: %{name}, E-Mail: %{email}, CA-Verzeichnis: " "%{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "[Nginx UI] Aktuelles Zertifikat wird für spätere Widerrufung gesichert" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] Zertifikat erfolgreich erneuert" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] Zertifikat erfolgreich widerrufen" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" "[Nginx UI] Zertifikat wurde für den Server verwendet, Server-TLS-Zertifikat " "wird neu geladen" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "" "[Nginx UI] Erstellung eines Clients zur Erleichterung der Kommunikation mit " "dem CA-Server" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] Umgebungsvariablen bereinigt" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] Abgeschlossen" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] Zertifikat erfolgreich ausgestellt" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] Zertifikat wird abgerufen" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] Vorbereitung auf den Widerruf des Zertifikats" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] Vorbereiten der Lego-Konfigurationen" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] Nginx wird neu geladen" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] Widerruf abgeschlossen" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] Zertifikat wird widerrufen" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] Altes Zertifikat wird widerrufen" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] DNS01-Herausforderungsanbieter wird eingerichtet" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] Umgebungsvariablen werden gesetzt" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] HTTP01-Herausforderungsanbieter wird eingerichtet" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] Schreibe privaten Zertifikatsschlüssel auf die Festplatte" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] Zertifikat wird auf die Festplatte geschrieben" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} in die Zwischenablage kopiert" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* Enthält Knoten aus der Gruppe %{groupName} und manuell ausgewählte Knoten" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "" +"* Indexdateien werden standardmäßig im Verzeichnis \"log-index\" innerhalb " +"Ihres NGINX-UI-Konfigurationspfads gespeichert." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* Leistungskennzahlen gemessen auf Apple M2 Pro (12-Kern) mit 32 GB RAM. " +"Die tatsächliche Leistung kann je nach Ihrer Hardwarekonfiguration " +"variieren." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{start}-%{end} von %{total} Elementen" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "Mindestens 1 Kern" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "Mindestens 1 GB RAM" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "2+ Kerne empfohlen" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "24-Stunden-UV/PV-Statistiken" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "2FA" @@ -107,11 +154,15 @@ msgstr "2FA" msgid "2FA Settings" msgstr "2FA-Einstellungen" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "4 GB RAM oder mehr empfohlen" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "Über" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "Zugriffsprotokoll" @@ -120,30 +171,28 @@ msgid "Access log path not exist" msgstr "Zugriffsprotokollpfad existiert nicht" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "Zugriffslog" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "ACME-Benutzer" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "Aktion" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "Aktionen" @@ -158,15 +207,15 @@ msgid "Actual worker to configured ratio" msgstr "Tatsächliches Verhältnis von Arbeitern zu konfigurierten" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "Hinzufügen" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "Passkey hinzufügen" @@ -180,10 +229,14 @@ msgstr "Konfiguration hinzufügen" msgid "Add Directive Below" msgstr "Anweisung darunter hinzufügen" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "Domain hinzufügen" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "Header hinzufügen" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -197,15 +250,15 @@ msgstr "Server hinzufügen" msgid "Add Site" msgstr "Seite hinzufügen" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "Stream hinzufügen" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "Upstream hinzufügen" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "Erfolgreich hinzugefügt" @@ -213,27 +266,55 @@ msgstr "Erfolgreich hinzugefügt" msgid "Additional" msgstr "Zusätzlich" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "Erweiterter Modus" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "" +"Erweiterte Indizierung aktiviert, aber Neuerstellung konnte nicht gestartet " +"werden" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "Erweiterte Indizierung erfolgreich aktiviert" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" +"Erweiterte Protokollindizierungsfunktionen sind für alle Benutzer kostenlos " +"und Open Source" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "Fortgeschrittenes Speicherpoolsystem" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "Erweiterte Suche & Filterung" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "" "Aktualisieren Sie anschließend diese Seite und klicken Sie erneut auf " "\"Passkey hinzufügen\"." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "Alle" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "Alle Komponenten" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "Alle Wiederherstellungscodes wurden verwendet" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." @@ -241,6 +322,29 @@ msgstr "" "Alle ausgewählten Subdomains müssen zum selben DNS-Anbieter gehören, " "ansonsten schlägt die Zertifikatsbeantragung fehl." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"Alternativ können Sie, falls Sie die Datenbank nicht herunterladen können, " +"die Datei GeoLite2-City.mmdb manuell in dasselbe Verzeichnis wie app.ini " +"ablegen." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "Analysedienst nicht verfügbar" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "Beliebig" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "" +"Jede erreichbare IP-Adresse kann mit privaten Zertifizierungsstellen " +"verwendet werden" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "API-Basis-URL" @@ -261,36 +365,40 @@ msgstr "API-Token" msgid "API Type" msgstr "API-Typ" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "App" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "Anwenden" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "Arch" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "Sind Sie sicher, dass Sie diese gesperrte IP sofort löschen möchten?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "Sind Sie sicher, dass Sie diesen Passkey sofort löschen möchten?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "Sind Sie sicher, dass Sie neue Wiederherstellungscodes generieren möchten?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "Sind Sie sicher, dass Sie die 2FA zurücksetzen möchten?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "Möchten Sie wirklich alle Benachrichtigungen löschen?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "Sind Sie sicher, dass Sie den Chatverlauf löschen möchten?" @@ -298,18 +406,18 @@ msgstr "Sind Sie sicher, dass Sie den Chatverlauf löschen möchten?" msgid "Are you sure you want to delete permanently?" msgstr "Sind Sie sicher, dass Sie dauerhaft löschen möchten?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "Sind Sie sicher, dass Sie löschen möchten?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "" "Sind Sie sicher, dass Sie Nginx auf den folgenden Sync-Knoten neu laden " "möchten?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "Sind Sie sicher, dass Sie diese Anweisung entfernen möchten?" @@ -321,7 +429,7 @@ msgstr "Möchten Sie dieses Element wirklich entfernen?" msgid "Are you sure you want to remove this location?" msgstr "Sind Sie sicher, dass Sie diesen Standort entfernen möchten?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "" "Sind Sie sicher, dass Sie Nginx auf den folgenden Synchronisationsknoten " @@ -331,23 +439,27 @@ msgstr "" msgid "Are you sure you want to restore?" msgstr "Sind Sie sicher, dass Sie wiederherstellen möchten?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "Frage ChatGPT um Hilfe" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "Aufsteigend" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "Assistent" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "Mindestens 20 GB freier Festplattenspeicher" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "Versuchen zu beheben" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "Versuche" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "Authentifizierung" @@ -355,12 +467,12 @@ msgstr "Authentifizierung" msgid "Authenticate with a passkey" msgstr "Mit Passkey authentifizieren" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "Authentifizierungseinstellungen" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "Authentifizierung läuft..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "Autor" @@ -394,28 +506,27 @@ msgstr "Automatische Sicherung fehlgeschlagen" msgid "Auto Backup Storage Failed" msgstr "Automatische Sicherungsspeicherung fehlgeschlagen" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "Automatische Aktualisierung" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "Automatisches Aktualisieren deaktiviert" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "Automatisches Aktualisieren aktiviert" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "Automatische Verlängerung deaktiviert für %{name}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "Automatische Verlängerung aktiviert für %{name}" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert wird ausgeführt, bitte warten..." @@ -424,16 +535,32 @@ msgstr "AutoCert wird ausgeführt, bitte warten..." msgid "AutoCert is running..." msgstr "AutoCert wird ausgeführt..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "Automatische Erkennung der Log-Rotation" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "Automatischer Neustart" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "Durchschnittliche Latenz" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "Durchschnittliche tägliche UV" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "Durchschn./PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "Zurück" @@ -445,6 +572,22 @@ msgstr "Zurück zur Startseite" msgid "Back to List" msgstr "Zurück zur Liste" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "Backend" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "" +"Hintergrundindizierung läuft. Die Daten werden automatisch aktualisiert, " +"wenn sie bereit sind." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "Hintergrund-Logdienst nicht verfügbar" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "Sicherung" @@ -455,7 +598,7 @@ msgstr "" "Die Integritätsprüfung der Sicherungsdatei ist fehlgeschlagen, sie könnte " "manipuliert worden sein" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "Sicherungsdatei nicht gefunden: {0}" @@ -467,24 +610,20 @@ msgstr "Die Sicherung wurde erfolgreich heruntergeladen" msgid "Backup Path" msgstr "Sicherungspfad" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "Sicherungspfad existiert nicht: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "Der Sicherungspfad ist kein Verzeichnis: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "" "Der Sicherungspfad ist für die benutzerdefinierte Verzeichnissicherung " "erforderlich" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "Sicherungspfad nicht in den gewährten Zugriffspfaden: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "Sicherungszeitplan" @@ -511,15 +650,15 @@ msgstr "" msgid "Backup Type" msgstr "Sicherungstyp" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "Schwellenwert für Minuten sperren" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "Gesperrte IPs" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "Gesperrt bis" @@ -531,18 +670,18 @@ msgstr "Bark" msgid "Base information" msgstr "Basisinformationen" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "Basis" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "Basic-Modus" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "Grundeinstellungen" @@ -554,7 +693,7 @@ msgstr "Stapelverarbeitung" msgid "Batch Modify" msgstr "Stapelverarbeitung" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "Stapel-Upgrade" @@ -566,11 +705,28 @@ msgstr "Hier sind die ausgewählten Elemente, die Sie stapelweise ändern möcht msgid "Block is nil" msgstr "Block ist nil" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "Build mit" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "Browser" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "Browser-Statistiken" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"Durch die Aktivierung der erweiterten Indizierung bestätigen Sie, dass Ihr " +"System die Anforderungen erfüllt und die Leistungsauswirkungen versteht. " +"Dadurch wird die Indizierung vorhandener Protokolldateien sofort gestartet." -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "CA-Verzeichnis" @@ -578,13 +734,13 @@ msgstr "CA-Verzeichnis" msgid "Cache" msgstr "Cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "" "Cache-Elemente, die innerhalb dieser Zeit nicht aufgerufen wurden, werden " "entfernt" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "Schwellenwert für die Verarbeitungszeit des Cache-Loaders" @@ -593,15 +749,15 @@ msgstr "Schwellenwert für die Verarbeitungszeit des Cache-Loaders" msgid "Cache manager processes" msgstr "Cache-Manager-Prozesse" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "Verarbeitungszeitgrenzwert des Cache-Managers" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "Cache-Manager-Einstellungen" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "Cache-Pfad" @@ -610,7 +766,7 @@ msgstr "Cache-Pfad" msgid "Cache Processes" msgstr "Cache-Prozesse" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "Struktur der Cache-Unterverzeichnisebenen, z.B. 1:2" @@ -627,24 +783,33 @@ msgstr "" "Berechnet basierend auf worker_processes * worker_connections. Die " "tatsächliche Leistung hängt von Hardware, Konfiguration und Arbeitslast ab" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "Abbrechen" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "Auf den Sicherungspfad {0} kann nicht zugegriffen werden: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "Auf die Protokolldatei kann nicht zugegriffen werden" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "Auf den Speicherpfad {0} kann nicht zugegriffen werden: {1}" @@ -668,7 +833,7 @@ msgstr "In diesem Zustand können Leistungsdaten nicht erhalten" msgid "Cannot remove initial user" msgstr "Anfangsbenutzer kann nicht entfernt werden" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "Zertifikat" @@ -676,6 +841,11 @@ msgstr "Zertifikat" msgid "Cert path is not under the nginx conf dir" msgstr "Der Zertifikatspfad liegt nicht im nginx-Konfigurationsverzeichnis" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "Zertifikat" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "Das Zertifikat %{name} ist abgelaufen" @@ -690,6 +860,10 @@ msgstr "Das Zertifikat %{name} läuft in %{days} Tagen ab" msgid "Certificate %{name} will expire in 1 day" msgstr "Das Zertifikat %{name} läuft in 1 Tag ab" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "Der Zertifikatsinhalt und der private Schlüssel dürfen nicht leer sein" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "Fehler beim Dekodieren des Zertifikats" @@ -708,6 +882,14 @@ msgstr "Zertifikat abgelaufen" msgid "Certificate Expiring Soon" msgstr "Zertifikat läuft bald ab" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "Zertifikatsdateien erfolgreich heruntergeladen" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "Der Zertifikatsname darf nicht leer sein" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "Zertifikat nicht gefunden: %{error}" @@ -720,8 +902,8 @@ msgstr "Fehler beim Parsen des Zertifikats" msgid "Certificate path is empty" msgstr "Der Zertifikatspfad ist leer" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "Zertifikat erfolgreich entfernt" @@ -737,13 +919,13 @@ msgstr "Zertifikat erfolgreich erneuert" msgid "Certificate revoked successfully" msgstr "Zertifikat erfolgreich widerrufen" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Zertifikatsstatus" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "Zertifikatstyp" @@ -752,7 +934,7 @@ msgstr "Zertifikatstyp" msgid "Certificates" msgstr "Zertifikate" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "Zertifikatsliste" @@ -760,7 +942,7 @@ msgstr "Zertifikatsliste" msgid "Challenge error: {0}" msgstr "Herausforderungsfehler: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "Challenge-Methode" @@ -782,26 +964,33 @@ msgstr[0] "Geändertes Zertifikat" msgid "Changed Path" msgstr "Geänderter Pfad" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "Kanal" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "Chat" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "Chat für %{path}" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "Überprüfen" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "Erneut prüfen" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "Favicon prüfen" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -836,6 +1025,25 @@ msgstr "" "Zwischenablage-Funktionen" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "" +"Überprüfen Sie, ob sich das conf.d-Verzeichnis im " +"nginx-Konfigurationsverzeichnis befindet" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"Überprüfen Sie, ob die GeoLite2-Datenbank verfügbar ist, wenn die " +"Protokollindizierung aktiviert ist. Die GeoLite2-Datenbank ist für die " +"geografische IP-Analyse in der Protokollindizierung erforderlich. Sie " +"können sie auf der Einstellungsseite herunterladen oder GeoLite2-City.mmdb " +"manuell im gleichen Verzeichnis wie app.ini platzieren" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -852,15 +1060,15 @@ msgstr "" "Weitere Details finden Sie in der Dokumentation: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "Überprüfen Sie, ob das Nginx-Konfigurationsverzeichnis existiert" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "Überprüfen Sie, ob die Nginx-Konfigurationsdatei existiert" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -877,7 +1085,7 @@ msgstr "" "anzugeben. Weitere Details finden Sie in der Dokumentation: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -891,23 +1099,23 @@ msgstr "" "ändern, um den Nginx-PID-Pfad anzugeben. Weitere Details finden Sie in der " "Dokumentation: https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "Überprüfen Sie, ob der Pfad zu nginx sbin existiert" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "Überprüfen Sie, ob die nginx.conf das conf.d-Verzeichnis enthält" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "Überprüfen, ob die nginx.conf das sites-enabled-Verzeichnis enthält" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "Überprüfen Sie, ob die nginx.conf das streams-enabled-Verzeichnis enthält" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" @@ -915,7 +1123,7 @@ msgstr "" "Überprüfen Sie, ob die Verzeichnisse sites-available und sites-enabled im " "Nginx-Konfigurationsverzeichnis enthalten sind" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" @@ -923,6 +1131,19 @@ msgstr "" "Überprüfen Sie, ob die Verzeichnisse streams-available und streams-enabled " "im Nginx-Konfigurationsverzeichnis enthalten sind" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "Prüfintervall (Sekunden)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "China-Zugriffskarte" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "China-Karte" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "Der verschlüsselte Text ist zu kurz" @@ -931,13 +1152,13 @@ msgstr "Der verschlüsselte Text ist zu kurz" msgid "Cleaning environment variables" msgstr "Säuberung von Umgebungsvariablen" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "Säubern" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "Erfolgreich gelöscht" @@ -957,7 +1178,7 @@ msgstr "Klicken oder ziehen Sie Dateien in diesen Bereich zum Hochladen" msgid "Click or drag folders to this area to upload" msgstr "Klicken Sie oder ziehen Sie Ordner in diesen Bereich zum Hochladen" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "Klicken Sie hier, um zu kopieren" @@ -965,10 +1186,18 @@ msgstr "Klicken Sie hier, um zu kopieren" msgid "Client Body Buffer Size" msgstr "Client Body Puffer Größe" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "Client-Zertifikat" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "Client-Header-Puffergröße" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "Client-Schlüssel" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "Maximale Client-Körpergröße" @@ -997,6 +1226,14 @@ msgstr "Code-Vervollständigung ist nicht aktiviert" msgid "Code Completion Model" msgstr "Code-Vervollständigungsmodell" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "Zusammenklappen" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "Spalteneinstellungen" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "Befehl" @@ -1005,7 +1242,7 @@ msgstr "Befehl" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "Befehl wurde mit unerwartetem Exit-Code beendet: {0}, Fehler: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -1028,11 +1265,34 @@ msgstr "Vergleiche ausgewählt" msgid "Compare with Current" msgstr "Vergleiche mit Strom" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "Vollständige Indizierung mit Suchfunktionen" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "Komponenten" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "Unterstützung für komprimierte Protokolldateien" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "Kompressionsniveau, 1 ist am niedrigsten, 9 ist am höchsten" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "Statistiken berechnen" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "Conf.d-Verzeichnis existiert" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Conf.d-Verzeichnis existiert nicht" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "Konfiguration" @@ -1045,22 +1305,32 @@ msgstr "Konfigurationsverzeichnis existiert nicht" msgid "Config entry file not exist" msgstr "Konfigurations-Eingabedatei existiert nicht" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "Konfiguration nicht gefunden" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "Konfigurationspfad ist leer" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "Konfigurationsvorlage" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "Konfiguration" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "Konfigurationsdatei erfolgreich getestet" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "" +"Die Konfigurationsdatei wurde erfolgreich im isolierten Sandbox-Test " +"durchgeführt" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "Konfigurationsverlauf" @@ -1081,11 +1351,20 @@ msgstr "Konfigurationen" msgid "Configure SSL" msgstr "SSL konfigurieren" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "Löschen bestätigen" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "Neues Passwort bestätigen" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "Bestätigung erforderlich" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "Verbunden" @@ -1093,9 +1372,9 @@ msgstr "Verbunden" msgid "Connection error, trying to reconnect..." msgstr "Verbindungsfehler, versuche erneut zu verbinden..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "Ver" +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "Verbindung für dieses Terminal verloren. Bitte aktualisieren Sie bei Bedarf." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1105,14 +1384,14 @@ msgstr "Verbindungs-Timeout-Zeitraum" msgid "Container status unknown" msgstr "Container-Status unbekannt" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "Inhalt" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "Kopiert" @@ -1125,14 +1404,38 @@ msgstr "Kopiert!" msgid "Copy" msgstr "Kopieren" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "Codes kopieren" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "Core-Upgrade" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "Konnte den Namen der alten Container nicht finden" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "Temporäre Container nicht gefunden" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "Anzahl" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "Land / Region" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "CPU" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "CPU-Status" @@ -1177,10 +1480,10 @@ msgstr "" "Computer heruntergeladen." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "Erstellt" @@ -1205,11 +1508,15 @@ msgstr "Zugangsdaten" msgid "Cron Expression" msgstr "Cron-Ausdruck" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "Übergreifende Zeitachsenkorrelation" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "Aktuelles Konto ist TOTP aktiviert." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "Aktuelles Konto ist nicht TOTP aktiviert." @@ -1229,12 +1536,12 @@ msgstr "Aktuelles Passwort" msgid "Current usage" msgstr "Aktuelle Nutzung" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "Aktuelle Version" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "Benutzerdefiniert" @@ -1247,14 +1554,18 @@ msgstr "Benutzerdefinierter Cron-Ausdruck" msgid "Custom Directory" msgstr "Benutzerdefiniertes Verzeichnis" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "Benutzerdefinierte Domains" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "Benutzerdefinierte Domänenzertifikate" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "Benutzerdefinierte Header" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1265,6 +1576,10 @@ msgstr "Name des lokalen Knotens anpassen, der im Umgebungsindikator angezeigt w msgid "Daily" msgstr "Täglich" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "Tägliche Zugriffstrends" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "Täglich um %{time}" @@ -1272,10 +1587,18 @@ msgstr "Täglich um %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "Übersicht" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "Datum" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "Datumsbereich" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "Tag des Monats" @@ -1288,36 +1611,52 @@ msgstr "Wochentag" msgid "Days" msgstr "Tage" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "Datenbankdatei nicht gefunden" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "" +"Entpacken erfolgreich, aber das Entfernen der komprimierten Datei ist " +"fehlgeschlagen: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "Entschlüsselung fehlgeschlagen" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "Standardbereich" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "" "Geben Sie den Namen und die Größe der gemeinsamen Speicherzone an, z. B. " "proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "Löschen" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "Löschen von %{path} auf %{env_name} fehlgeschlagen" +msgid "Delete %{path} on %{node_name} failed" +msgstr "Löschen von %{path} auf %{node_name} fehlgeschlagen" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "%{path} auf %{env_name} erfolgreich gelöscht" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "%{path} auf %{node_name} erfolgreich gelöscht" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "Zertifikat löschen" @@ -1337,43 +1676,44 @@ msgstr "Fehler beim Löschen der Remote-Konfiguration" msgid "Delete Remote Config Success" msgstr "Entfernte Konfiguration erfolgreich gelöscht" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "Fehler beim Löschen der Remote-Site" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "Entfernte Website erfolgreich gelöscht" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "Fehler beim Löschen des Remote-Streams" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "Entfernten Stream erfolgreich gelöscht" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "Löschen der Site %{name} von %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "Website %{name} von %{node} erfolgreich gelöscht" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "Seite löschen: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "Löschen des Streams %{name} von %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "Stream %{name} wurde erfolgreich von %{node} gelöscht" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "Stream löschen: %{stream_name}" @@ -1389,8 +1729,16 @@ msgstr "Demo" msgid "Deploy" msgstr "Ausführen" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "Bereitstellungsmodus" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "Absteigend" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "Beschreibung" @@ -1406,18 +1754,44 @@ msgstr "Zieldatei: {0} existiert bereits" msgid "Details" msgstr "Details" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Entwicklung" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "Entwicklung" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "Entwicklungsmodus" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "Gerät" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "Gerätestatistiken" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "Gerätetyp" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "Der Inhalt der Prüfsummen-Datei ist leer" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "DingTalk" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "Direkt" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "Anweisung" @@ -1438,98 +1812,101 @@ msgstr "DirectiveIdx außerhalb des Bereichs" msgid "Directives" msgstr "Anweisung" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "Verzeichnisebenen" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "Verzeichnispfad zum Speichern der Cache-Dateien" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "Deaktivieren" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "Automatische Verlängerung für %{name} konnte nicht deaktiviert werden" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "Fehler beim Deaktivieren der Remote-Site" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "Fehler beim Deaktivieren der Remote-Site-Wartung" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "Wartungsmodus der Remote-Website erfolgreich deaktiviert" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "Remote-Site erfolgreich deaktiviert" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "Fehler beim Deaktivieren des Remote-Streams" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "Remote-Stream erfolgreich deaktiviert" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "Deaktivierung der Website %{name} von %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "Website %{name} auf %{node} erfolgreich deaktiviert" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "Deaktivierung der Wartung der Website %{name} auf %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "Wartung der Website %{name} auf %{node} erfolgreich deaktiviert" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "Deaktivieren des Streams %{name} von %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "Stream %{name} von %{node} erfolgreich deaktiviert" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "Deaktiviert" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "Erfolgreich deaktiviert" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "Getrennt" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "Festplatten-IO" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "DNS-Zugangsdaten" @@ -1538,11 +1915,15 @@ msgstr "DNS-Zugangsdaten" msgid "DNS Provider" msgstr "DNS-Anbieter" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "DNS-Resolver" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "" "Aktiviere diese Option nicht, es sei denn, du bist sicher, dass du sie " @@ -1552,11 +1933,11 @@ msgstr "" msgid "Do you want to %{action} this site?" msgstr "Möchten Sie diese Website %{action}?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "Möchten Sie diesen Stream %{action}?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "Möchtest du die automatische Zertifikatsverlängerung deaktivieren?" @@ -1569,7 +1950,7 @@ msgstr "Möchten Sie TLS aktivieren?" msgid "Do you want to remove this server?" msgstr "Möchten Sie diesen Server entfernen?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "Möchten Sie diesen Upstream entfernen?" @@ -1577,7 +1958,7 @@ msgstr "Möchten Sie diesen Upstream entfernen?" msgid "Docker client not initialized" msgstr "Docker-Client nicht initialisiert" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Docker-Socket vorhanden" @@ -1591,16 +1972,37 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "Dokument" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "Dokumentenanzahl" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "Domain" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "" "Domänenliste ist leer, versuche Auto-Zertifikat für %{config} erneut zu " "öffnen" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "Zertifikatsdateien herunterladen" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "Download abgeschlossen" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "Download fehlgeschlagen" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "GeoLite2-Datenbank herunterladen" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "Fehler beim Herunterladen der neuesten Version" @@ -1609,12 +2011,19 @@ msgstr "Fehler beim Herunterladen der neuesten Version" msgid "Downloading latest release" msgstr "Neueste Version wird heruntergeladen" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "Zertifikatsdatei hier ablegen" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "Private Schlüsseldatei hier ablegen" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "Dry-Run-Modus aktiviert" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1623,10 +2032,12 @@ msgstr "" "nicht auf Nicht-HTTPS-Websites verwenden, außer wenn sie auf localhost " "ausgeführt werden." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "Duplizieren" @@ -1635,21 +2046,33 @@ msgstr "Duplizieren" msgid "Duplicate to local successfully" msgstr "Erfolgreich lokal dupliziert" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "Dynamisch" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "Dynamische Shard-Verwaltung" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "z. B. 0 0 * * * (täglich um Mitternacht)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "EAB HMAC-Schlüssel" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "EAB-Schlüssel-ID" + #: src/language/curd.ts:8 msgid "Edit" msgstr "Bearbeiten" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "Bearbeiten %{n}" @@ -1666,7 +2089,7 @@ msgstr "Seite bearbeiten" msgid "Edit Stream" msgstr "Stream bearbeiten" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "E-Mail" @@ -1675,16 +2098,28 @@ msgstr "E-Mail" msgid "Email (*)" msgstr "Email (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "Leere Protokollzeile" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "aktivieren" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "2FA erfolgreich aktiviert" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "Erweiterte Indizierung aktivieren" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "Erweiterte Protokollindizierung aktivieren" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "Aktiviere automatische Verlängerung fehlgeschlagen für %{name}" @@ -1708,57 +2143,61 @@ msgstr "HTTP/3 aktivieren" msgid "Enable HTTPS" msgstr "HTTPS aktivieren" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "Indizierung aktivieren" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "Proxy-Cache aktivieren" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "Fehler beim Aktivieren der Remote-Site" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "Fehler beim Aktivieren der Remote-Site-Wartung" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "Wartungsmodus für Remote-Website erfolgreich aktiviert" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "Remote-Site erfolgreich aktiviert" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "Fehler beim Aktivieren des Remote-Streams" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "Stream erfolgreich aktiviert" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "Aktivierung der Wartung für die Website %{name} auf %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "Wartungsmodus für die Website %{name} auf %{node} erfolgreich aktiviert" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "Aktivierung der Website %{name} auf %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "Website %{name} auf %{node} erfolgreich aktiviert" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "Aktivierung des Streams %{name} auf %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "Stream %{name} auf %{node} erfolgreich aktiviert" @@ -1770,29 +2209,29 @@ msgstr "Aktiviere stub_status-Modul" msgid "Enable TLS" msgstr "Aktiviere TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "TOTP aktivieren" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "Aktiviert" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "Erfolgreich aktiviert" @@ -1806,6 +2245,17 @@ msgstr "" "Aktiviert HTTP/3-Unterstützung basierend auf dem QUIC-Protokoll für beste " "Leistung" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"Die Aktivierung der erweiterten Protokollindizierung verbraucht erhebliche " +"Rechenressourcen, einschließlich CPU und Speicher. Bitte stellen Sie " +"sicher, dass Ihr System die Mindestanforderungen erfüllt, bevor Sie " +"fortfahren." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Webseite mit Let's Encrypt verschlüsseln" @@ -1814,11 +2264,19 @@ msgstr "Webseite mit Let's Encrypt verschlüsseln" msgid "End" msgstr "Ende" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "Enddatum" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "Domänennamen eingeben" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "Geben Sie die Server-IP-Adresse ein (z.B. 203.0.113.1 oder 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "Geben Sie Ihre Domain ein" @@ -1830,39 +2288,58 @@ msgstr "Die Umgebungskonfiguration ist leer" msgid "Environment variables cleaned" msgstr "Umgebungsvariablen gesäubert" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "Umgebungen" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "Fehler" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "Fehlerdetails" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "Fehler beim Initialisieren des Diff-Viewers" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "Fehlerprotokoll" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "Fehlerprotokoll erkannt" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "Fehlerprotokollpfad existiert nicht" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "Feherlogs" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "" +"Fehlerprotokolle unterstützen keine strukturierte Analyse, da sie " +"Freitextnachrichten enthalten." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "Fehlermustererkennung" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "Fehler bei der Verarbeitung des Inhalts" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "Die ausführbare Binärdatei ist leer" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "Ausführbarer Pfad" @@ -1878,6 +2355,22 @@ msgstr "Täglich um %{time} ausführen" msgid "Execute on every month on day %{day} at %{time}" msgstr "Ausführen an jedem Tag %{day} des Monats um %{time}" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "Erweitern" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "Erwartete Leistung" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "Erwartete Statuscodes" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "Erwarteter Text" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1891,12 +2384,36 @@ msgstr "Abgelaufen am: %{date}" msgid "Export Excel" msgstr "Excel exportieren" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "" +"Externer Account Binding HMAC-Schlüssel (optional). Sollte im Base64 " +"URL-Kodierungsformat sein." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "" +"Externe Account-Binding-Schlüssel-ID (optional). Erforderlich für einige " +"ACME-Anbieter wie ZeroSSL." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "Externer Docker-Container" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "Externe Benachrichtigungskonfiguration nicht gefunden" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "Externer Benachrichtigungstest" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "Externe Benachrichtigung" @@ -1925,15 +2442,15 @@ msgstr "Fehler beim Sichern der Nginx-UI-Dateien: {0}" msgid "Failed to build nginx config: {0}" msgstr "Fehler beim Erstellen der nginx-Konfiguration: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "Hash-Berechnung fehlgeschlagen: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Berechnung des Nginx-Hashs fehlgeschlagen: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Berechnung des Nginx-UI-Hashs fehlgeschlagen: {0}" @@ -1946,38 +2463,35 @@ msgid "Failed to copy config file: {0}" msgstr "Fehler beim Kopieren der Konfigurationsdatei: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "Fehler beim Kopieren des Datenbankverzeichnisses: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "Fehler beim Kopieren der Datenbankdatei: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "Fehler beim Kopieren des Dateiinhalts: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Fehler beim Kopieren des Nginx-Konfigurationsverzeichnisses: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "In die Zwischenablage kopieren fehlgeschlagen" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "Sicherungskopie konnte nicht erstellt werden" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "Fehler beim Erstellen des Backup-Verzeichnisses: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "Fehler beim Erstellen der Sicherungsdatei: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "Fehler beim Erstellen des Verzeichnisses: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "Datei konnte nicht erstellt werden: {0}" @@ -1985,19 +2499,19 @@ msgstr "Datei konnte nicht erstellt werden: {0}" msgid "Failed to create hash info file: {0}" msgstr "Fehler beim Erstellen der Hash-Info-Datei: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "Fehler beim Erstellen des übergeordneten Verzeichnisses: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "Fehler beim Erstellen des Wiederherstellungsverzeichnisses: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "Fehler beim Erstellen des Speicherverzeichnisses {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "Symbolische Verknüpfung konnte nicht erstellt werden: {0}" @@ -2013,48 +2527,64 @@ msgstr "Fehler beim Erstellen des temporären Verzeichnisses" msgid "Failed to create temporary subdirectory" msgstr "Fehler beim Erstellen des temporären Unterverzeichnisses" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "Fehler beim Erstellen des xz-Lesers: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "Fehler beim Erstellen der ZIP-Archivdatei: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "Fehler beim Erstellen des ZIP-Eintrags: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "Fehler beim Erstellen der ZIP-Datei: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "Fehler beim Erstellen des ZIP-Headers: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "Fehler beim Dekomprimieren der GeoLite2-Datenbank: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "Daten konnten nicht entschlüsselt werden: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "Datei konnte nicht entschlüsselt werden: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Fehler beim Entschlüsseln des Nginx-Verzeichnisses: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Fehler beim Entschlüsseln des Nginx-UI-Verzeichnisses: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "Löschen aller Indizes fehlgeschlagen" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "Zertifikat konnte nicht gelöscht werden" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "Löschen des Zertifikats aus der Datenbank fehlgeschlagen: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "Löschen des Dateiindex fehlgeschlagen" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "Deaktivierung von %{msg} fehlgeschlagen" @@ -2062,20 +2592,32 @@ msgstr "Deaktivierung von %{msg} fehlgeschlagen" msgid "Failed to disable maintenance mode %{msg}" msgstr "Deaktivierung des Wartungsmodus fehlgeschlagen: %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "Herunterladen der Zertifikatsdateien fehlgeschlagen" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "Fehler beim Herunterladen der GeoLite2-Datenbank: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "Aktiviern von %{msg} fehlgeschlagen" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "Erweiterte Indizierung konnte nicht aktiviert werden" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "Wartungsmodus konnte nicht aktiviert werden: %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "Fehler beim Verschlüsseln der Daten: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "Datei konnte nicht verschlüsselt werden: {0}" @@ -2087,10 +2629,6 @@ msgstr "Fehler beim Verschlüsseln des Nginx-Verzeichnisses: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Fehler beim Verschlüsseln des Nginx-UI-Verzeichnisses: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "Fehler beim Auswerten der symbolischen Links: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "Befehl konnte nicht ausgeführt werden: {0}" @@ -2099,7 +2637,7 @@ msgstr "Befehl konnte nicht ausgeführt werden: {0}" msgid "Failed to execute template: {0}" msgstr "Fehler beim Ausführen der Vorlage: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "Fehler beim Entpacken des Archivs: {0}" @@ -2119,14 +2657,30 @@ msgstr "Fehler beim Abrufen von Zertifikatsinformationen" msgid "Failed to get container id: {0}" msgstr "Fehler beim Abrufen der Container-ID: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "Fehler beim Abrufen der Dateigröße: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "Fehler beim Abrufen des Indexstatus" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Fehler beim Abrufen der Nginx-Leistungseinstellungen" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "Fehler beim Abrufen des Pfades von nginx.conf" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "Fehler beim Abrufen der Leistungsdaten" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "Fehler beim Abrufen der Persistenzstatistiken" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "Fehler beim Abrufen des Stub-Status: {0}" @@ -2143,15 +2697,19 @@ msgstr "Fehler beim Untersuchen des aktuellen Containers: {0}" msgid "Failed to load history records" msgstr "Fehler beim Laden der Verlaufsdaten" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "Fehler beim Öffnen der Datei: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "Fehler beim Öffnen der Quelldatei: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "Fehler beim Öffnen des ZIP-Eintrags: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "Fehler beim Öffnen der ZIP-Datei: {0}" @@ -2171,15 +2729,23 @@ msgstr "Fehler beim Parsen der Vorlage: {0}" msgid "Failed to pull image: {0}" msgstr "Fehler beim Herunterladen des Images: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "Fehler beim Lesen der komprimierten Daten: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "Fehler beim Lesen der verschlüsselten Datei: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "Datei konnte nicht gelesen werden" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "Datei konnte nicht gelesen werden: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "Fehler beim Lesen der Hash-Info-Datei: {0}" @@ -2195,57 +2761,97 @@ msgstr "Fehler beim Lesen der Ausgabe: {0}" msgid "Failed to read response body: {0}" msgstr "Fehler beim Lesen des Antworttextes: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "Fehler beim Lesen der symbolischen Verknüpfung: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "Fehler beim Neuerstellen des Dateiindex" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "Fehler beim Neuerstellen des Index" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "Aktualisierung der Websites fehlgeschlagen" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Fehler beim Wiederherstellen der Nginx-Konfigurationen: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "Wiederherstellung der Nginx-UI-Dateien fehlgeschlagen: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "Zertifikat konnte nicht widerrufen werden" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "Zertifikat konnte nicht widerrufen werden: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "Konfiguration konnte nicht gespeichert werden" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "Fehler beim Speichern der heruntergeladenen Datei: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "Fehler beim Speichern der Gesundheitsprüfungskonfiguration" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Fehler beim Speichern der Nginx-Leistungseinstellungen" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "Reihenfolge konnte nicht gespeichert werden" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "Testnachricht konnte nicht gesendet werden" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "Fehler beim Starten des temporären Containers: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "Statusaktualisierung fehlgeschlagen" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "Datei konnte nicht hochgeladen werden" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "Hash-Überprüfung fehlgeschlagen: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "Fehler beim Schreiben der Sicherungsdatei: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "Fehler beim Schreiben der entpackten Daten: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "Fehler beim Schreiben der entschlüsselten Datei: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "Fehler beim Schreiben der verschlüsselten Datei: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "Fehler beim Schreiben der Sicherheitsschlüsseldatei: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "Fehler beim Schreiben in den Zip-Puffer: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "Funktionen" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2259,6 +2865,10 @@ msgstr "Datei" msgid "File exists" msgstr "Datei existiert" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "Die Neuerstellung des Dateiindex für %{path} wurde erfolgreich gestartet" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "FDatei nicht gefunden" @@ -2267,19 +2877,35 @@ msgstr "FDatei nicht gefunden" msgid "File or directory not found: {0}" msgstr "Datei oder Verzeichnis nicht gefunden: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "Dateipfad ist erforderlich" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "Die Dateigröße darf 5 MB nicht überschreiten" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "Datei erfolgreich hochgeladen" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "Der Dateiname ist leer" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "Filter" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "Loginhalt filtern" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "Erledigt" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "Erste Ansicht" @@ -2291,7 +2917,11 @@ msgstr "Ordner" msgid "Folder" msgstr "Ordner" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "Weiterleitungen folgen" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2308,6 +2938,33 @@ msgstr "Für chinesische Benutzer" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "Für chinesische Benutzer: https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "Für kommerzielle oder berufliche Nutzung kontaktieren Sie" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" +"Für Fehlerprotokolle verwenden Sie bitte den Raw Log Viewer für eine " +"bessere Anzeigeerfahrung." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" +"Für IP-basierte Zertifikatskonfigurationen wird nur die " +"HTTP-01-Herausforderungsmethode unterstützt. Die DNS-01-Herausforderung ist " +"nicht mit IP-basierten Zertifikaten kompatibel." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "" +"Für IP-basierte Zertifikate geben Sie bitte die Server-IP-Adresse an, die " +"im Zertifikat enthalten sein soll." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "Formularanalyse fehlgeschlagen" @@ -2328,6 +2985,22 @@ msgstr "Format: Minute Stunde Tag Monat Wochentag" msgid "Friday" msgstr "Freitag" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "Aus indizierten Protokollen" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "Frontend" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "Volltextsuche" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "Volltextsuche-Unterstützung" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "Allgemeines Zertifikat" @@ -2336,16 +3009,16 @@ msgstr "Allgemeines Zertifikat" msgid "Generate" msgstr "Generieren" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "Neue Wiederherstellungscodes generieren" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "Wiederherstellungscodes generieren" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "Wiederherstellungscodes erfolgreich generiert" @@ -2353,6 +3026,39 @@ msgstr "Wiederherstellungscodes erfolgreich generiert" msgid "Generating private key for registering account" msgstr "Generiere privaten Schlüssel zur Registrierung des Kontos" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "GeoLite2-Datenbank" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "GeoLite2-Datenbank verfügbar" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "GeoLite2-Datenbank installiert" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "GeoLite2-Datenbank nicht gefunden unter {0}" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"GeoLite2-Datenbank nicht gefunden unter {0}. Die Indizierung von " +"Protokollen erfordert die GeoLite2-Datenbank für die geografische IP-Analyse" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "GeoLite2-Datenbank erforderlich" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "Fehler beim Abrufen des ACME-Benutzers: {0}" @@ -2365,8 +3071,7 @@ msgstr "Datenabruf fehlgeschlagen" msgid "Get dns credential error: {0}" msgstr "Fehler beim Abrufen der DNS-Anmeldeinformationen: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "Fehler beim Abrufen der Release-Informationen" @@ -2378,10 +3083,40 @@ msgstr "Hole das Zertifikat, bitte warten..." msgid "Github Proxy" msgstr "Github-Proxy" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "Weltkarte der Zugriffe" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "Weltkarte" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "Zum Rohprotokoll-Viewer gehen" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" +"Die gRPC-Gesundheitsprüfung erfordert, dass der Server den " +"gRPC-Gesundheitsprüfungsdienst (grpc.health.v1.Health) implementiert." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"gRPCS verwendet TLS-Verschlüsselung. Der Server muss den " +"gRPC-Gesundheitscheck-Dienst implementieren. Für Tests ist die " +"SSL-Validierung standardmäßig deaktiviert." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "GZIP-Komprimierung" @@ -2394,25 +3129,51 @@ msgstr "GZIP-Komprimierungsstufe" msgid "GZIP Min Length" msgstr "GZIP-Mindestlänge" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "Hash-Überprüfung fehlgeschlagen: Dateiintegrität beeinträchtigt" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "Gesundheitsprüfung" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "Konfiguration der Gesundheitsprüfung" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "Konfiguration der Gesundheitsprüfung gespeichert" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "Die Konfiguration der Gesundheitsprüfung wurde erfolgreich gespeichert" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "Gesundheitszustand" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "Verstecken" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "Assistent ausblenden" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "Hoch" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "Ein höherer Wert bedeutet eine bessere Wiederverwendung der Verbindung" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "Verlauf" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "Startseite" @@ -2421,10 +3182,11 @@ msgid "Host" msgstr "Host" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "Stunde" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2432,7 +3194,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "HTTP-Herausforderungs-Port" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "HTTP-Methode" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2440,15 +3206,15 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "HTTPS-Protokoll" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "ICP-Nummer" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "Wenn leer, wird das Standard-CA-Verzeichnis verwendet." - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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." @@ -2457,7 +3223,7 @@ msgstr "" "maximalen Versuche in der Sperrschwellenzeit erreicht, wird die IP für eine " "bestimmte Zeit gesperrt." -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." @@ -2465,13 +3231,21 @@ msgstr "" "Wenn Sie das alte Zertifikat automatisch widerrufen möchten, aktivieren Sie " "bitte diese Option." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" +"Wenn Sie den Speicherort ändern möchten, können Sie den `IndexPath` des " +"Abschnitts `nginx_log` in der Nginx-UI-Konfiguration festlegen." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "" "Wenn dein Browser WebAuthn Passkey unterstützt, wird ein Dialogfeld " "angezeigt." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2483,12 +3257,12 @@ msgstr "" msgid "Import" msgstr "Import" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "Zertifikat importieren" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "Inaktive Zeit" @@ -2500,7 +3274,46 @@ msgstr "" "Beinhaltet Master-Prozess, Worker-Prozesse, Cache-Prozesse und andere " "Nginx-Prozesse" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "Inkrementelle Index-Scanning" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "Neuaufbau von Index und Statistiken erfolgreich gestartet" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "Indizierung fehlgeschlagen" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "Indizierung fehlgeschlagen, bitte versuchen Sie es erneut" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "Index-Neuerstellung gestartet" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "Indexstatus" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "Indiziert" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "Indizierung" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "Protokolle werden indiziert..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "Indizierung läuft..." @@ -2508,10 +3321,14 @@ msgstr "Indizierung läuft..." msgid "Indicator" msgstr "Indikator" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "Information" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "Init-Benutzer existiert nicht" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "Feher beim Initialisieren des Core-Upgraders" @@ -2520,7 +3337,7 @@ msgstr "Feher beim Initialisieren des Core-Upgraders" msgid "Initialing core upgrader" msgstr "Initialisierung des Core-Upgraders" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "Füge den Code aus der App ein:" @@ -2535,7 +3352,7 @@ msgstr "Unsicheres Überspringen der Überprüfung" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "Installieren" @@ -2563,27 +3380,36 @@ msgstr "" msgid "Interval" msgstr "Intervall" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "Ungültig" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "Ungültiges AES-IV-Format: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "Ungültiges AES-Schlüsselformat: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "Ungültiges Zertifikatsformat" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "Ungültiger Anspruchstyp" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "Ungültiges Commit-SHA" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "Ungültiges Dateiobjekt" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "Ungültiger Dateipfad: {0}" @@ -2596,6 +3422,10 @@ msgstr "Ungültiger Dateiname" msgid "Invalid folder name" msgstr "Ungültiger Ordnername" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "Ungültige Benachrichtigungs-ID" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "Ungültige Benachrichtiger-Konfiguration" @@ -2604,7 +3434,7 @@ msgstr "Ungültige Benachrichtiger-Konfiguration" msgid "Invalid otp code" msgstr "Ungültiger OTP-Code" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "Ungültige Auffüllung in entschlüsselten Daten" @@ -2612,10 +3442,15 @@ msgstr "Ungültige Auffüllung in entschlüsselten Daten" msgid "Invalid passcode or recovery code" msgstr "Ungültiger Passcode oder Wiederherstellungscode" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "Ungültiger Pfad: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "Ungültiges Format des privaten Schlüssels" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "Ungültiger Wiederherstellungscode" @@ -2624,19 +3459,41 @@ msgstr "Ungültiger Wiederherstellungscode" msgid "Invalid request format" msgstr "Ungültiges Anforderungsformat" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "Ungültiges Sicherheitstoken-Format" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "Ungültige Telegram-Chat-ID: darf nicht null sein" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "Ungültiges Zeitstempelformat" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "Ungültiger WebSocket-Nachrichtentyp" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "IP-Adresse" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "IP-Zertifikat-Hinweis" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "Zertifikat ausstellen" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "Zertifikat ausstellen" @@ -2656,7 +3513,7 @@ msgstr "Element(e)" msgid "Jwt Secret" msgstr "Jwt-Secret" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2668,12 +3525,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "Keepalive-Timeout" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "Schlüsseltyp" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "Sprache" @@ -2685,6 +3542,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark Benutzerdefiniert" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "Letzte 12 Stunden" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "Letzte 14 Tage" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "Letzte 15 Minuten" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "Letzte 24 Stunden" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "Letzte 30 Tage" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "Letzte 30 Minuten" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "Letzte 4 Stunden" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "Letzte 7 Tage" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "Letzte 90 Tage" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "Letzter Backup-Status" @@ -2693,15 +3588,35 @@ msgstr "Letzter Backup-Status" msgid "Last Backup Time" msgstr "Letzter Sicherungszeitpunkt" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "Letzte Überprüfung" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "Zuletzt überprüft am" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "Letzte Stunde" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "Zuletzt indiziert" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "Letzter Monat" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "Letzte Aktualisierung" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "Zuletzt aktualisiert:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "Zuletzt verwendet am" @@ -2717,12 +3632,18 @@ msgstr "Leer lassen für den Standard: https://api.openai.com/" msgid "Leave blank if do not want to modify" msgstr "Leer lassen, wenn keine Änderung gewünscht ist" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "Leer lassen, falls nicht von Ihrem ACME-Anbieter benötigt" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "Lassen Sie dieses Feld leer, wenn Sie es nicht benötigen." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "Leer lassen ändert nichts" @@ -2730,16 +3651,24 @@ msgstr "Leer lassen ändert nichts" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "Alter Wiederherstellungscode nicht erlaubt, da TOTP nicht aktiviert ist" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego deaktiviert CNAME-Unterstützung" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "Lizenz" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "Lizenzverteilung" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "Lizenztypen" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "Verknüpfung" @@ -2755,32 +3684,32 @@ msgstr "Lauschend" msgid "Load Average:" msgstr "Durchschnittliche Last:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "Aus Einstellungen laden" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "Erfolgreich geladen" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "Geladen" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "Lader-Dateien" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "Ladereinstellungen" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "Loader-Pause" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "Laderschwelle" @@ -2788,9 +3717,15 @@ msgstr "Laderschwelle" msgid "Loading data..." msgstr "Daten werden geladen..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "Wird geladen..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2809,11 +3744,11 @@ msgstr "Ort" msgid "Locations" msgstr "Orte" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "Protokoll" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2823,23 +3758,61 @@ msgstr "" "in einem Docker-Container verwenden, finden Sie weitere Informationen unter " "https://nginxui.com/zh_CN/guide/config-nginx-log.html." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "Protokolldatei existiert nicht" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "Die Protokolldatei ist keine reguläre Datei" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "Protokolldatei nicht verfügbar" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "Protokolldatei noch nicht indiziert" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "Log-Indexer nicht verfügbar" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "Protokollindizierung abgeschlossen! Aktualisierte Daten werden geladen..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "Protokollzeile überschreitet maximale Länge" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "Protokollliste" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" +"Der Protokollparser wurde nicht initialisiert; rufen Sie " +"indexer.InitLogParser() vor der Verwendung auf" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "Der Protokollpfad befindet sich nicht in der Whitelist" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "Login" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "Login erfolgreich" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "Logout erfolgreich" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Logrotate" @@ -2859,9 +3832,20 @@ msgstr "" "aktivieren. Der Crontab-Aufgabenplaner von Nginx UI führt den " "Logrotate-Befehl in dem von dir in Minuten festgelegten Intervall aus." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "Niedrig" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "Hauptknoten" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "Wartung" @@ -2877,7 +3861,7 @@ msgstr "Wartungsmodus erfolgreich aktiviert" msgid "Make certificate dir error: {0}" msgstr "Fehler beim Erstellen des Zertifikatverzeichnisses: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2893,11 +3877,11 @@ msgstr "" msgid "Manage Configs" msgstr "Verwalte Konfigurationen" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "Verwalte Seiten" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "Streams verwalten" @@ -2909,15 +3893,15 @@ msgstr "Verwalte Benutzer" msgid "Managed Certificate" msgstr "Verwaltetes Zertifikat" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "Manager-Dateien" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "Manager-Schlafzeit" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "Manager-Schwellenwert" @@ -2943,7 +3927,7 @@ msgstr "Master-Prozess" msgid "Master Process" msgstr "Master-Prozess" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "Maximale Versuche" @@ -2951,11 +3935,15 @@ msgstr "Maximale Versuche" msgid "Max Concurrent Connections" msgstr "Maximale gleichzeitige Verbindungen" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "Maximale Weiterleitungen" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "Maximale Anfragen pro Sekunde" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "Maximale Cache-Größe" @@ -2972,7 +3960,7 @@ msgstr "Maximale Anzahl gleichzeitiger Verbindungen" msgid "Maximum number of connections per worker process" msgstr "Maximale Anzahl von Verbindungen pro Worker-Prozess" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "Maximale Gesamtgröße des Caches" @@ -2982,6 +3970,7 @@ msgstr "Maximale Anzahl der Worker-Prozesse:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "Arbeitsspeicher" @@ -2989,22 +3978,39 @@ msgstr "Arbeitsspeicher" msgid "Memory and Storage" msgstr "Arbeitsspeicher und Speicher" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "Speicherdesign" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "Speichernutzung (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "Methode" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "Methodenname" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "Mindestdateigröße für die Komprimierung" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "Mindestfreier Speicherplatz" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "Mindestfreier Speicherplatz im Cache-Verzeichnis" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "Mindestanforderung:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "Minute" @@ -3013,21 +4019,36 @@ msgstr "Minute" msgid "Minutes" msgstr "Minuten" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "Spiegel" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "Modell" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "Moderner Analysedienst nicht verfügbar" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "Moderner Indexdienst nicht verfügbar" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "Moderner Suchdienst nicht verfügbar" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "Geändert am" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "Ändern" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "Zertifikat ändern" @@ -3035,7 +4056,7 @@ msgstr "Zertifikat ändern" msgid "Modify Config" msgstr "Konfiguration bearbeiten" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "Modul" @@ -3043,6 +4064,10 @@ msgstr "Modul" msgid "Modules" msgstr "Module" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "Modul-Cache aktualisiert" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "Montag" @@ -3055,39 +4080,66 @@ msgstr "Monatlich" msgid "Monthly on day %{day} at %{time}" msgstr "Monatlich am %{day}. um %{time}" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "Mehrdimensionale Datenvisualisierung" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "Mehrzeilige Direktive" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "Muss eine öffentliche IP-Adresse sein, die über das Internet erreichbar ist" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "N/V" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "Name" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "Name oder Inhalt" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "Namensraum" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "Namensräume" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "Das stub_status-Modul muss aktiviert werden" @@ -3100,6 +4152,10 @@ msgstr "Netzwerk" msgid "Network Statistics" msgstr "Netzwerkstatistiken" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "Neuer Chat" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "Fehler beim neuen DNS-Herausforderungsanbieter: {0}" @@ -3128,18 +4184,18 @@ msgstr "Neuer Pfad" msgid "New transport error: {0}" msgstr "Neuer Transportfehler: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "Neue Version veröffentlicht" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "Nächster" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3151,7 +4207,7 @@ msgstr "Die Ausgabe von Nginx -T ist leer" msgid "Nginx Access Log Path" msgstr "Nginx Zugriffslog-Pfad" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Der Pfad für den Nginx-Zugriffslog existiert" @@ -3180,15 +4236,15 @@ msgstr "Nginx-Konfiguration enthält keine sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "Nginx-Konfiguration enthält keinen stream-enabled-Ordner" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "Das Nginx-Konfigurationsverzeichnis ist nicht festgelegt" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Nginx-Konfigurationsverzeichnis existiert" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "Nginx-Konfigurationsdatei existiert" @@ -3196,8 +4252,8 @@ msgstr "Nginx-Konfigurationsdatei existiert" msgid "Nginx configuration has been restored" msgstr "Die Nginx-Konfiguration wurde wiederhergestellt" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Nginx-Konfigurationsanalysefehler" @@ -3226,7 +4282,7 @@ msgstr "Nginx-CPU-Auslastung" msgid "Nginx Error Log Path" msgstr "Nginx Fehlerlog-Pfad" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "Nginx-Fehlerprotokollpfad existiert" @@ -3235,7 +4291,7 @@ msgid "Nginx error: {0}" msgstr "Nginx-Fehler: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3250,7 +4306,7 @@ msgstr "Nginx läuft nicht in einem anderen Container" msgid "Nginx is running" msgstr "Nginx läuft" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Nginx-Log" @@ -3258,6 +4314,10 @@ msgstr "Nginx-Log" msgid "Nginx Log Directory Whitelist" msgstr "Nginx-Log-Verzeichnis-Whitelist" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Nginx-Protokollindizierung läuft..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3267,7 +4327,7 @@ msgstr "Nginx-Speichernutzung" msgid "Nginx PID Path" msgstr "Nginx PID-Pfad" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Nginx-PID-Pfad existiert" @@ -3280,7 +4340,7 @@ msgstr "Befehl zum Neuladen von Nginx" msgid "Nginx reload failed: {0}" msgstr "Nginx-Neustart fehlgeschlagen: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Die Nginx-Neuladevorgänge wurden an die entfernten Knoten gesendet" @@ -3292,7 +4352,7 @@ msgstr "Nginx erfolgreich neu geladen" msgid "Nginx Restart Command" msgstr "Beffehl zum Neustarten von Nginx" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Die Nginx-Neustart-Operationen wurden an die entfernten Knoten gesendet" @@ -3300,7 +4360,7 @@ msgstr "Die Nginx-Neustart-Operationen wurden an die entfernten Knoten gesendet" msgid "Nginx restarted successfully" msgstr "Nginx erfolgreich neu gestartet" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Der Nginx sbin-Pfad existiert" @@ -3333,41 +4393,73 @@ msgstr "" "Die Nginx-UI-Konfiguration wurde wiederhergestellt und wird in wenigen " "Sekunden automatisch neu gestartet." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf enthält das conf.d-Verzeichnis" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf enthält das sites-enabled-Verzeichnis" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf enthält das streams-enabled-Verzeichnis" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "Nein" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "Keine Aktion" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "Kein Zertifikat verfügbar" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "Keine geografischen Daten für China verfügbar" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "Keine Daten" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "Keine Daten" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "Keine Einträge auf der aktuellen Seite" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "Keine geografischen Daten verfügbar" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "Keine Protokolle im ausgewählten Zeitraum gefunden." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "Keine Knoten ausgewählt" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "Keine Datensätze ausgewählt" @@ -3376,24 +4468,33 @@ msgstr "Keine Datensätze ausgewählt" msgid "No servers configured" msgstr "Keine Server konfiguriert" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "Keine Websites gefunden" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "" +"Keine spezifische IP-Adresse in der server_name-Konfiguration gefunden. " +"Bitte geben Sie unten die Server-IP-Adresse für das Zertifikat an." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "Keine strukturierten Protokolldaten verfügbar" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "Keine Upstreams konfiguriert" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "Node" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "Node-Gruppe" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "Knotengruppen" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "Knotenanalyse fehlgeschlagen: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3403,7 +4504,12 @@ msgstr "Knotenname" msgid "Node Secret" msgstr "Node-Secret" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "Knotenstatus" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "Knoten" @@ -3411,26 +4517,38 @@ msgstr "Knoten" msgid "Not After" msgstr "Nicht nach" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "Nicht erwarteter Text" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "Nicth gefunden" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "Nicht indiziert" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "Nicht geladen" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "Nicht für IP-Zertifikate unterstützt" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "Nich gültig vor: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "Notiz" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." @@ -3439,11 +4557,25 @@ msgstr "" "Zertifikate enthält, synchronisiere sie bitte im Voraus mit den " "Remote-Knoten." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"Hinweis: Wenn der Server gRPC-Reflexion nicht unterstützt, können " +"Health-Checks fehlschlagen. Bitte stellen Sie sicher, dass Ihr gRPC-Server " +"die Reflexion aktiviert hat." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "Nichts zu kopieren" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "Benachrichtigung" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "Benachrichtigungen" @@ -3452,17 +4584,21 @@ msgstr "Benachrichtigungen" msgid "Notifier not found" msgstr "Benachrichtigung nicht gefunden" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "" "Anzahl der gleichzeitigen Worker-Prozesse, automatisch auf die Anzahl der " "CPU-Kerne eingestellt" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "Anzahl der Dateien, die vom Cache-Loader gleichzeitig verarbeitet werden" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "Anzahl der Dateien, die vom Cache-Manager gleichzeitig verarbeitet werden" @@ -3477,7 +4613,7 @@ msgstr "Anzahl der Worker-Prozesse" msgid "Obtain cert error: {0}" msgstr "Fehler beim Abrufen des Zertifikats: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "Zertifikat abrufen" @@ -3485,11 +4621,11 @@ msgstr "Zertifikat abrufen" msgid "Obtaining certificate" msgstr "Zertifikat wird abgerufen" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP Must Staple" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." @@ -3498,7 +4634,7 @@ msgstr "" "Fehler verursachen." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "Aus" @@ -3506,48 +4642,58 @@ msgstr "Aus" msgid "Official Document" msgstr "Offizielle Dokumentation" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "Offline" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "Offline-GeoIP-Analyse" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "OK" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "Ein" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "Sobaöd die Überprüfung abgeschlossen ist, werden die Einträge entfernt." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "Online" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "Anzahl Online" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "Nur ZIP-Dateien sind erlaubt" @@ -3556,23 +4702,46 @@ msgstr "Nur ZIP-Dateien sind erlaubt" msgid "Open" msgstr "Offen" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "Open-Source-Einschränkung" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "Betriebssystem" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "Betriebssystemstatistiken" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "Oder" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "oder Datei in den Editor unten ziehen" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "Oder geben Sie das Geheimnis ein: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "Reihenfolge erfolgreich gespeichert" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "Originalname" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "Betriebssystem" @@ -3619,11 +4788,15 @@ msgstr "Parameter" msgid "Params Optimization" msgstr "Parameteroptimierung" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "Parser-Leistung" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "Passkey" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3633,7 +4806,7 @@ msgstr "" "Berührung, Gesichtserkennung, ein Gerätepasswort oder eine PIN validieren. " "Sie können als Passwortersatz oder als 2FA-Methode verwendet werden." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "Passwort" @@ -3662,11 +4835,13 @@ msgstr "Passwörter stimmen nicht überein" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "Pfad" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "Pfad nicht in den gewährten Zugriffspfaden: {0}" @@ -3678,12 +4853,28 @@ msgstr "Pfad: {0} befindet sich nicht unter dem nginx-Konfigurationsverzeichnis: msgid "Payload resource is nil" msgstr "Die Nutzlast-Ressource ist null" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "Hauptverkehrszeit" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "Ausstehend" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "Prozentsatz" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "Ausführen" @@ -3727,7 +4918,11 @@ msgstr "" "Bitte aktivieren Sie das stub_status-Modul, um Anforderungsstatistiken, " "Verbindungsanzahl usw. zu erhalten." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "Bitte eingeben" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." @@ -3735,11 +4930,19 @@ msgstr "" "Bitte gib einen Namen für den Passkey ein, den du erstellen möchtest, und " "klicke auf die Schaltfläche OK." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "Bitte geben Sie eine gültige IPv4-Adresse ein (0-255 pro Oktett)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "Bitte geben Sie eine gültige IPv4- oder IPv6-Adresse ein" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "Bitte geben Sie einen gültigen Portbereich ein" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "Bitte geben Sie mindestens eine Domain ein" @@ -3756,6 +4959,10 @@ msgstr "Bitte geben Sie das Sicherheitstoken ein" msgid "Please enter the security token received during backup" msgstr "Bitte geben Sie das während der Sicherung erhaltene Sicherheitstoken ein" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "Bitte geben Sie die Server-IP-Adresse ein" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "Bitte füllen Sie alle Felder korrekt aus" @@ -3764,7 +4971,7 @@ msgstr "Bitte füllen Sie alle Felder korrekt aus" msgid "Please fill in required S3 configuration fields" msgstr "Bitte füllen Sie die erforderlichen S3-Konfigurationsfelder aus" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." @@ -3772,7 +4979,7 @@ msgstr "" "Bitte fülle die API-Authentifizierungsdaten aus, die dir von deinem " "DNS-Provider zur Verfügung gestellt wurden." -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3781,7 +4988,7 @@ msgstr "" "DNS-Anmeldeinformationen hinzu und wähle dann eine der unten aufgeführten " "Anmeldeinformationen aus, um die API des DNS-Anbieters anzufordern." -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3819,20 +5026,20 @@ msgstr "" msgid "Please input your E-mail!" msgstr "Bitte gib deine E-Mail-Adresse ein!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "Bitte gib dein Passwort ein!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "Bitte gib deinen Benutzernamen ein!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "Bitte melden Sie sich an." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "" "Bitte beachte, dass die Zeiteinheiten der unten aufgeführten " @@ -3852,25 +5059,31 @@ msgstr "" msgid "Please select a backup file" msgstr "Bitte wählen Sie eine Sicherungsdatei aus" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "Bitte wählen Sie einen Benachrichtigungstyp aus" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "Bitte wählen Sie eine gültige %{type}-Datei aus (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "Bitte wählen Sie mindestens einen Artikel aus" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Bitte wählen Sie mindestens einen Knoten aus, um Nginx neu zu laden" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Bitte wählen Sie mindestens einen Knoten aus, um Nginx neu zu starten" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "Bitte wähle mindestens einen Knoten zum Upgrade aus" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "Bitte geben Sie \"Widerrufen\" ein, um zu bestätigen" @@ -3883,23 +5096,26 @@ msgstr "Bitte geben Sie den genauen Bestätigungstext ein" msgid "Port" msgstr "Port" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "Port 80 muss für die HTTP-01-Challenge-Validierung geöffnet sein" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "Port-Scanner" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "Aktion nach der Synchronisierung" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "Vorabversion" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "Einstellungen" @@ -3907,6 +5123,19 @@ msgstr "Einstellungen" msgid "Preparing lego configurations" msgstr "Lego-Konfigurationen vorbereiten" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "Private CA:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) schlagen fehl" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "privater Schlüssel" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "Prozess" @@ -3923,6 +5152,10 @@ msgstr "Prozessinformationen" msgid "Processing {count}/{total}" msgstr "Verarbeite {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "Produktionspipeline" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "Verhindere das Ändern des Root-Passworts in der Demo" @@ -3939,6 +5172,10 @@ msgstr "Projektteam" msgid "Protected Directory" msgstr "Geschützter Ordner" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "Protokoll" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3949,7 +5186,7 @@ msgstr "" "eines Reverse Proxys konfigurieren Sie das Protokoll bitte separat im " "Reverse Proxy." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "Anbieter" @@ -3957,21 +5194,56 @@ msgstr "Anbieter" msgid "Provider not found: {0}" msgstr "Anbieter nicht gefunden: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "Provinz / Region" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "Proxy" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "Proxy-Weiterleitung" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "Proxy-Ziele" -#: src/views/preference/tabs/NodeSettings.vue:46 -msgid "Public Security Number" -msgstr "Öffentliche Sicherheitsnummer" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "Anforderungen der öffentlichen CA:" + +#: src/views/preference/tabs/NodeSettings.vue:46 +msgid "Public Security Number" +msgstr "Öffentliche Sicherheitsnummer" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "Seitenaufrufe" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "In Warteschlange" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "Zur Indizierung in der Warteschlange..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "Schnellauswahl" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "Roh" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "Datenbank erneut herunterladen" #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" @@ -3987,24 +5259,48 @@ msgstr "Leseanfragen" msgid "Reads" msgstr "Aufrufe" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "Echtzeit-Analyse-Dashboard" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "Neu aufbauen" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "Alle Indizes neu erstellen" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "Dateiindex neu erstellen" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "Index neu erstellen" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Empfangen" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "Erneut prüfen" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "Empfohlen:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "Wiederherstellung" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "Wiederherstellungscodes" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -4017,15 +5313,29 @@ msgstr "" msgid "Recursive Nameservers" msgstr "Rekursive Nameserver" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "Referer" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "Aktualisieren" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "Modul-Cache aktualisieren" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "Auffrischen der Antwort" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "Registrieren" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." @@ -4033,19 +5343,19 @@ msgstr "" "Registriere einen Benutzer oder verwende dieses Konto, um ein Zertifikat " "durch einen HTTP-Proxy auszustellen." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "Registrierung fehlgeschlagen" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "Registrieren beim Start" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "Passkey erfolgreich registriert" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "Erfolgreich registriert" @@ -4053,28 +5363,30 @@ msgstr "Erfolgreich registriert" msgid "Registering user" msgstr "Registriere Benutzer" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "Registrierungsstatus" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "Neuinstallieren" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "Release-API-Anfrage fehlgeschlagen: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "Änderungsprotokoll" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "Neu laden" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Nginx neu laden" @@ -4098,7 +5410,7 @@ msgstr "Fehler beim Neuladen von Remote-Nginx" msgid "Reload Remote Nginx Success" msgstr "Neustart von Remote-Nginx erfolgreich" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "" "Die Neulade-Anfrage ist fehlgeschlagen, bitte überprüfen Sie Ihre " @@ -4112,22 +5424,28 @@ msgstr "Lade neu" msgid "Reloading nginx" msgstr "Lade Nginx neu" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "Remote" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "Löschen" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "Erfolgreich entfernt" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "Erfolgreich entfernt" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4136,12 +5454,12 @@ msgid "Rename" msgstr "Umbenennen" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "Umbenennung von %{orig_path} in %{new_path} auf %{env_name} fehlgeschlagen" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "Umbenennung von %{orig_path} in %{new_path} auf %{node_name} fehlgeschlagen" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "%{orig_path} auf %{env_name} erfolgreich in %{new_path} umbenannt" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "%{orig_path} auf %{node_name} erfolgreich in %{new_path} umbenannt" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4151,37 +5469,37 @@ msgstr "Fehler beim Umbenennen der Remote-Konfiguration" msgid "Rename Remote Config Success" msgstr "Umbenennen der Remote-Konfiguration erfolgreich" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "Fehler beim Umbenennen der Remote-Site" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "Umbenennung der Remote-Site erfolgreich" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "Fehler beim Umbenennen des Remote-Streams" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "Umbenennung des Remote-Streams erfolgreich" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "Umbenennung der Site %{name} in %{new_name} auf %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "Die Umbenennung der Site %{name} in %{new_name} auf %{node} war erfolgreich" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "Umbenennung des Streams %{name} in %{new_name} auf %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "Stream %{name} auf %{node} erfolgreich in %{new_name} umbenannt" @@ -4189,7 +5507,7 @@ msgstr "Stream %{name} auf %{node} erfolgreich in %{new_name} umbenannt" msgid "Rename successfully" msgstr "Erfolgreich umbenannt" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4199,8 +5517,8 @@ msgstr "Erfolgreich umbenannt" msgid "Renew cert error: {0}" msgstr "Fehler beim Erneuern des Zertifikats: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "Zertifikat erneuern" @@ -4212,11 +5530,23 @@ msgstr "Fehler bei der Zertifikatsverlängerung" msgid "Renew Certificate Success" msgstr "Zertifikat erfolgreich verlängert" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "Erfolgreich erneuert" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "Anfrage" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "Anfragekörper" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "Anfragepfad" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "Anforderungsstatistiken" @@ -4234,13 +5564,19 @@ msgid "Requests Per Connection" msgstr "Anfragen pro Verbindung" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "Zurücksetzen" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "Setze 2FA zurück" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "Suche zurücksetzen" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4251,6 +5587,10 @@ msgstr "" "einschließlich aller gemeinsam genutzten Bibliotheksspeicher, der für " "mehrere Prozesse wiederholt berechnet wird" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "Warnung zur Ressourcennutzung" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4260,9 +5600,8 @@ msgstr "Antworten" msgid "Restart" msgstr "Neustart" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Nginx neu starten" @@ -4282,7 +5621,7 @@ msgstr "Fehler beim Neustart von Remote-Nginx" msgid "Restart Remote Nginx Success" msgstr "Neustart von Remote-Nginx erfolgreich" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "" "Neustart-Anforderung fehlgeschlagen, bitte überprüfen Sie Ihre " @@ -4323,8 +5662,8 @@ msgstr "Diese Version wiederherstellen" msgid "Restored successfully" msgstr "Erfolgreich wiederhergestellt" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "Widerrufen" @@ -4332,15 +5671,15 @@ msgstr "Widerrufen" msgid "Revoke cert error: {0}" msgstr "Fehler beim Widerrufen des Zertifikats: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "Altes Zertifikat widerrufen" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "Dieses Zertifikat widerrufen" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." @@ -4348,15 +5687,15 @@ msgstr "" "Das Widerrufen eines Zertifikats wirkt sich auf alle Dienste aus, die es " "derzeit verwenden. Diese Aktion kann nicht rückgängig gemacht werden." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "RP-Anzeigename" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "RP-Ursprünge" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4392,10 +5731,6 @@ msgstr "S3-Zugriffsschlüssel-ID ist erforderlich" msgid "S3 Bucket" msgstr "S3-Bucket" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "Zugriff auf S3-Bucket verweigert: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "S3-Bucket ist erforderlich" @@ -4404,7 +5739,7 @@ msgstr "S3-Bucket ist erforderlich" msgid "S3 bucket name" msgstr "S3-Bucket-Name" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "S3-Konfiguration ist unvollständig: Fehlend {0}" @@ -4412,27 +5747,15 @@ msgstr "S3-Konfiguration ist unvollständig: Fehlend {0}" msgid "S3 connection test failed" msgstr "S3-Verbindungstest fehlgeschlagen" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "S3-Verbindungstest fehlgeschlagen: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "S3-Verbindungstest erfolgreich" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "S3-Anmeldeinformationen sind ungültig: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "S3-Endpunkt" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "S3-Endpunkt ist ungültig: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "S3-Endpunkt ist erforderlich" @@ -4468,7 +5791,7 @@ msgstr "S3 Secret Access Key" msgid "S3 secret access key is required" msgstr "Der geheime S3-Zugangsschlüssel ist erforderlich" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "S3-Upload fehlgeschlagen: {0}" @@ -4476,17 +5799,19 @@ msgstr "S3-Upload fehlgeschlagen: {0}" msgid "Saturday" msgstr "Samstag" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "Speichern" @@ -4494,41 +5819,41 @@ msgstr "Speichern" msgid "Save Directive" msgstr "Anweisung speichern" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "Fehler beim Speichern %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "Reihenfolge speichern" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "Fehler beim Speichern der Remote-Site" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "Speichern der Remote-Site erfolgreich" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "Fehler beim Speichern des Remote-Streams" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "Remote-Stream erfolgreich gespeichert" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "Speichern der Site %{name} auf %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "Website %{name} erfolgreich auf %{node} gespeichert" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "Speichern des Streams %{name} auf %{node} fehlgeschlagen" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "Stream %{name} erfolgreich auf %{node} gespeichert" @@ -4536,16 +5861,17 @@ msgstr "Stream %{name} erfolgreich auf %{node} gespeichert" msgid "Save successful" msgstr "Erfolgreich gespeichert" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "Erfolgreich gespeichert" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "Speichern erfolgreich" @@ -4569,13 +5895,13 @@ msgstr "Ports scannen" msgid "Scan Results" msgstr "Scan-Ergebnisse" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "Scanne den QR-Code mit deinem Handy, um das Konto zur App hinzuzufügen." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "Protokolle werden gescannt..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "Scannen" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4590,16 +5916,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "Suchen" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "Suchfilter" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "In Protokollinhalten suchen..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "Modulname suchen" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "Module suchen" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "Suchbereich" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "Vorlagen suchen" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "Schlüssel wurde kopiert" @@ -4616,13 +5963,22 @@ msgstr "Sicherheitstoken" msgid "Security Token Information" msgstr "Sicherheitstoken-Informationen" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" +"Wählen Sie ein vordefiniertes CA-Verzeichnis aus oder geben Sie ein " +"benutzerdefiniertes ein. Lassen Sie es leer, um das Standard-CA-Verzeichnis " +"zu verwenden." + #: src/language/curd.ts:31 msgid "Select all" msgstr "Alle auswählen" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "Aktion nach der Synchronisierung auswählen" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "Wählen Sie eine CA-Verzeichnis-URL aus oder geben Sie sie ein" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4632,7 +5988,7 @@ msgstr "Ausgewählte {count} Dateien" msgid "Selector" msgstr "Auswähler" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "Selbstprüfung" @@ -4648,11 +6004,15 @@ msgstr "" msgid "Send" msgstr "Senden" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "Testnachricht senden" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "Server" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "Serverfehler" @@ -4660,6 +6020,10 @@ msgstr "Serverfehler" msgid "Server Info" msgstr "Serverinformationen" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "Server-IP-Adresse" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "Server-Namen-Hash-Bucket-Größe" @@ -4668,7 +6032,7 @@ msgstr "Server-Namen-Hash-Bucket-Größe" msgid "Server names hash table size" msgstr "Größe der Server-Namen-Hash-Tabelle" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "server_name wurde in den Anweisungen nicht gefunden" @@ -4676,6 +6040,10 @@ msgstr "server_name wurde in den Anweisungen nicht gefunden" msgid "ServerIdx out of range" msgstr "ServerIdx außerhalb des Bereichs" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "Dienstname" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "Sitzung nicht gefunden" @@ -4714,6 +6082,10 @@ msgstr "Setze Umgebungsvariablen" msgid "Setting HTTP01 challenge provider" msgstr "Setze HTTP01-Challengeanbieter" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "Einstellungen" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4734,7 +6106,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Richten Sie Ihre Nginx UI ein" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "Gemeinsamer Speicherbereich" @@ -4742,10 +6114,18 @@ msgstr "Gemeinsamer Speicherbereich" msgid "Show" msgstr "Zeige" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "Assistent anzeigen" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "Mit einem Passkey anmelden" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "SIMD-optimierte Stream-Verarbeitung" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "Einzige Anweisung" @@ -4766,11 +6146,23 @@ msgstr "Die Website befindet sich im Wartungsmodus" msgid "Site Logs" msgstr "Site-Protokolle" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "Seitennavigation" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "Website nicht gefunden" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "Seitenaktualisierung gestartet" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "Websites" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "Sites-Verzeichnis existiert" @@ -4778,6 +6170,14 @@ msgstr "Sites-Verzeichnis existiert" msgid "Sites List" msgstr "Liste der Seiten" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" +"Websites werden hier angezeigt, sobald Sie Nginx-Serverblöcke mit gültigen " +"server_name-Direktiven konfiguriert haben." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "Sites-available-Verzeichnis existiert nicht" @@ -4787,6 +6187,8 @@ msgid "Sites-enabled directory not exist" msgstr "Sites-enabled-Verzeichnis existiert nicht" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "Größe" @@ -4794,19 +6196,36 @@ msgstr "Größe" msgid "Skip Installation" msgstr "Installation überspringen" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "Wartezeit zwischen den Iterationen des Cache-Loaders" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "Wartezeit zwischen den Iterationen des Cache-Managers" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "Socket" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "Sortiert nach" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "Quell-IP" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "Sponsor" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "SSD-Speicher für bessere E/A-Leistung" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "SSL-Zertifikatsinhalt" @@ -4820,15 +6239,20 @@ msgstr "" msgid "SSL certificate file not found" msgstr "SSL-Zertifikatsdatei nicht gefunden" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "SSL-Zertifikatsschlüsselinhalt" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "SSL-Zertifikatsschlüssel-Pfad" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "SSL-Zertifikatspfad" @@ -4855,13 +6279,12 @@ msgstr "SSL-Schlüsselpfad" msgid "SSL key path is required when HTTPS is enabled" msgstr "Der SSL-Schlüsselpfad ist erforderlich, wenn HTTPS aktiviert ist" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "SSO-Anmeldung" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "Stabil" @@ -4869,33 +6292,49 @@ msgstr "Stabil" msgid "Start" msgstr "Start" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "Startdatum" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "Wiederherstellung starten" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "Ladevorgang wird gestartet..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "Statisch" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "Status" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "Status erfolgreich aktualisiert" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "Gestoppt" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "Speicher" @@ -4921,10 +6360,6 @@ msgstr "Speicherpfad" msgid "Storage path is required" msgstr "Speicherpfad ist erforderlich" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "Speicherpfad nicht in den gewährten Zugriffspfaden: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4938,7 +6373,7 @@ msgstr "Stream ist aktiviert" msgid "Stream not found" msgstr "Stream nicht gefunden" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "Streams-Verzeichnis existiert" @@ -4950,6 +6385,10 @@ msgstr "Streams-available-Verzeichnis existiert nicht" msgid "Streams-enabled directory not exist" msgstr "Streams-enabled-Verzeichnis existiert nicht" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "Strukturiert" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "Stub-Status-Port" @@ -4958,7 +6397,7 @@ msgstr "Stub-Status-Port" msgid "Stub_status is not enabled" msgstr "Stub_status ist nicht aktiviert" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4969,19 +6408,6 @@ msgstr "Erfolg" msgid "Sunday" msgstr "Sonntag" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Unterstützung der Kommunikation mit dem Backend über das Server-Sent " -"Events-Protokoll. Wenn Ihre Nginx UI über einen Nginx-Reverse-Proxy " -"verwendet wird, lesen Sie bitte diesen Link, um die entsprechende " -"Konfigurationsdatei zu schreiben: " -"https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -5030,12 +6456,12 @@ msgid "Sync Certificate" msgstr "Zertifikat synchronisieren" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "Synchronisierung des Zertifikats %{cert_name} mit %{env_name} fehlgeschlagen" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "Synchronisierung des Zertifikats %{cert_name} zu %{node_name} fehlgeschlagen" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "Zertifikat %{cert_name} erfolgreich auf %{env_name} synchronisiert" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "Zertifikat %{cert_name} erfolgreich auf %{node_name} synchronisiert" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -5046,14 +6472,14 @@ msgid "Sync Certificate Success" msgstr "Zertifikat erfolgreich synchronisiert" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" +msgid "Sync config %{config_name} to %{node_name} failed" msgstr "" -"Synchronisierung der Konfiguration %{config_name} mit %{env_name} " +"Synchronisierung der Konfiguration %{config_name} zu %{node_name} " "fehlgeschlagen" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "Konfiguration %{config_name} erfolgreich auf %{env_name} synchronisiert" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "Konfiguration %{config_name} erfolgreich auf %{node_name} synchronisiert" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -5063,24 +6489,29 @@ msgstr "Fehler beim Synchronisieren der Konfiguration" msgid "Sync Config Success" msgstr "Konfiguration erfolgreich synchronisiert" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "Synchrone Knoten" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "Synchronisierungsvorschau" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "Synchronisierungsstrategie" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "Synchronisieren mit" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "Synchronisation" @@ -5097,10 +6528,14 @@ msgstr "System-Backup" msgid "System Check" msgstr "Systemprüfung" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "System-Startbenutzer" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "Systemanforderungen" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "Systemwiederherstellung" @@ -5121,19 +6556,45 @@ msgstr "Aufgabe nicht gefunden" msgid "Telegram" msgstr "Telegram" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "Terminal" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "Terminal-Assistent" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "Terminal-Startbefehl" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "Test" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "Test fehlgeschlagen: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "Test fehlgeschlagen: Gesundheitsprüfung konnte nicht durchgeführt werden" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "Testnachricht erfolgreich gesendet" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "S3-Verbindung testen" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "Test erfolgreich! Antwortzeit: %{response_time}ms" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " @@ -5143,6 +6604,22 @@ msgstr "" "wenn seit der letzten Ausstellung mehr als 1 Woche oder der von Ihnen in " "den Einstellungen festgelegte Zeitraum vergangen ist." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "" +"Die GeoLite2-Datenbank ist für die Offline-Geografische IP-Analyse " +"erforderlich. Bitte laden Sie sie herunter, um diese Funktion zu aktivieren." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "" +"Die GeoLite2-Datenbank bietet geografische Informationen zu IP-Adressen. " +"Sie wird für die Offline-Geographieanalyse in Loganalysen verwendet." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " @@ -5151,11 +6628,11 @@ msgstr "" "Die ICP-Nummer sollte nur Buchstaben, Unicode, Zahlen, Bindestriche, " "Doppelpunkte und Punkte enthalten." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "Die Eingabe ist kein SSL-Zertifikat" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "Die Eingabe ist kein SSL-Zertifikatsschlüssel" @@ -5194,11 +6671,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "Der Parameter server_name ist erforderlich" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "Der Pfad existiert, aber die Datei ist kein Zertifikat" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "Der Pfad existiert, aber die Datei ist kein privater Schlüssel" @@ -5210,7 +6687,7 @@ msgstr "" "Die öffentliche Sicherheitsnummer sollte nur Buchstaben, Unicode, Zahlen, " "Bindestriche, Doppelpunkte und Punkte enthalten." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5220,7 +6697,7 @@ msgstr "" "Nginx-UI-Version kompatibel. Um potenzielle Fehler zu vermeiden, " "aktualisiere bitte das entfernte Nginx-UI, um die lokale Version anzupassen." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5250,7 +6727,7 @@ msgstr "Theoretische maximale gleichzeitige Verbindungen:" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "Theoretische maximale RPS (Requests Per Second):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5260,11 +6737,15 @@ msgstr "" "Ihr Passwort und die zweiten Faktoren verlieren. Wenn Sie diese Codes nicht " "finden können, verlieren Sie den Zugriff auf Ihr Konto." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "Drittanbieter-Komponenten" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "Dieses Auto-Zertifikatselement ist ungültig, bitte entferne es." -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "Dieses Zertifikat wird von Nginx UI verwaltet" @@ -5274,9 +6755,9 @@ msgstr "" "Dieses Verzeichnis ist geschützt und kann aus Sicherheitsgründen nicht " "gelöscht werden." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "Dieses Feld ist erforderlich" @@ -5302,6 +6783,12 @@ msgid "" "-_./:" msgstr "Dieses Feld darf nur Buchstaben, Unicode-Zeichen, Zahlen und -_./: enthalten" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "" +"Dies ist eine Testnachricht, die mit %{Timestamp} von Nginx UI gesendet " +"wurde." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " @@ -5310,7 +6797,15 @@ msgstr "" "Dieses Modul liefert Nginx-Anforderungsstatistiken, Verbindungsanzahl usw. " "Nach der Aktivierung können Sie Leistungsstatistiken einsehen." -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "Dieser Monat" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "Diese Benachrichtigung ist deaktiviert" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." @@ -5318,6 +6813,28 @@ msgstr "" "Diese Aktion entfernt das Zertifikat nur aus der Datenbank. Die " "Zertifikatsdateien im Dateisystem werden nicht gelöscht." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"Diese Website ist als Standard-Server (default_server) für HTTPS (Port 443) " +"konfiguriert. IP-Zertifikate erfordern die Unterstützung einer " +"Zertifizierungsstelle (CA) und sind möglicherweise nicht bei allen " +"ACME-Anbietern verfügbar." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"Diese Website verwendet einen Wildcard-Servernamen (_), der normalerweise " +"auf ein IP-basiertes Zertifikat hinweist. IP-Zertifikate erfordern die " +"Unterstützung einer Zertifizierungsstelle (CA) und sind möglicherweise " +"nicht bei allen ACME-Anbietern verfügbar." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5335,6 +6852,21 @@ msgstr "Dieser Wert ist bereits vergeben" msgid "This will permanently delete the %{type}." msgstr "Dadurch wird %{type} dauerhaft gelöscht." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"Dadurch wird der gesamte Log-Index neu aufgebaut. Alle vorhandenen " +"Indexdaten werden gelöscht und von Grund auf neu erstellt. Dies kann einige " +"Zeit dauern. Fortfahren?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "" +"Dadurch werden die Indexdaten für diese spezifische Datei neu aufgebaut: " +"%{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5353,13 +6885,13 @@ msgstr "" "Dadurch werden Konfigurationsdateien und Datenbank wiederhergestellt. Die " "Nginx UI wird nach Abschluss der Wiederherstellung neu gestartet." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" "Dies wird das Nginx UI auf %{nodeNames} auf %{version} aktualisieren oder " "neu installieren." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "Begrenzung" @@ -5367,8 +6899,21 @@ msgstr "Begrenzung" msgid "Thursday" msgstr "Donnerstag" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "Zeit" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "Zeitbereich" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "Timeout (Sekunden)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "Tipps" @@ -5385,13 +6930,17 @@ msgstr "" msgid "Title" msgstr "Titel" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "Löschung bestätigen" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "" "Um den Widerruf zu bestätigen, geben Sie bitte \"Widerrufen\" in das Feld " "unten ein:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5399,7 +6948,7 @@ msgstr "" "Um es zu aktivieren, musst du die Google- oder Microsoft Authenticator-App " "auf deinem Handy installieren." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5443,15 +6992,41 @@ msgstr "Token ist leer" msgid "Token is not valid" msgstr "Schlüssel ist ungültig" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "Top 10 Länder / Regionen" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "Top 10 Provinzen / Regionen" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "Top 10 URLs" + #: src/language/curd.ts:5 msgid "Total" msgstr "Gesamt" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "Insgesamt %{total} Elemente" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "Komponenten insgesamt" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "Verbindungen insgesamt" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "Gesamte Einträge" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5465,6 +7040,10 @@ msgstr "Gesamte Nginx-Prozesse" msgid "Total Nginx Processes" msgstr "Gesamtzahl der Nginx-Prozesse" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "Gesamt-PV" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "Gesamter Empfang" @@ -5482,11 +7061,15 @@ msgstr "Gesamte Anfragen / Gesamte Verbindungen" msgid "Total Send" msgstr "Gesendet insgesamt" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "Gesamte UV" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -5494,25 +7077,43 @@ msgstr "" "TOTP ist eine Zwei-Faktor-Authentifizierungsmethode, die einen " "zeitbasierten Einmalpasswortalgorithmus verwendet." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "Datenverkehr" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "Fehler wird übersetzt..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "Mülleimer" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "" +"Versuchen Sie, Ihre Suchkriterien anzupassen oder zu anderen Seiten zu " +"navigieren." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "Versuchen Sie, Ihre Suchkriterien oder den Zeitraum anzupassen." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "Dienstag" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "Zwei-Faktor-Authentifizierung erforderlich" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "Typ" @@ -5520,15 +7121,47 @@ msgstr "Typ" msgid "Type %{delete} to confirm" msgstr "Geben Sie %{delete} zur Bestätigung ein" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "Browser eingeben oder auswählen" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "Gerät eingeben oder auswählen" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "Eingeben oder Betriebssystem auswählen" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "Statuscodes eingeben oder auswählen" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "Geben Sie hier Ihre Nachricht ein..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "Einzigartige Seiten" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "Unbekannt" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "Nicht unterstützter Sicherungstyp: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "Nicht unterstütztes Log-Format" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "Aktualisierung läuft bereits" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "Passwort aktualisieren" @@ -5537,32 +7170,30 @@ msgstr "Passwort aktualisieren" msgid "Update Profile" msgstr "Profil aktualisieren" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "Erfolgreich aktualisiert" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "Aktualisiert am" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "Upgrade" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "Nginx UI auf %{node} erfolgreich aktualisiert 🎉" @@ -5570,11 +7201,22 @@ msgstr "Nginx UI auf %{node} erfolgreich aktualisiert 🎉" msgid "Upgraded successfully" msgstr "Erfolgreich aktualisiert" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "Der Kern-Hash des Upgraders ist leer" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "Der Download-URL des Upgrader-Kerns ist leer" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Upgrade von Nginx UI, bitte warten..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "%{type}-Datei hochladen" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "Dateien hochladen" @@ -5583,19 +7225,29 @@ msgstr "Dateien hochladen" msgid "Upload Folders" msgstr "Ordner hochladen" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "Upstream" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Upstream-Name" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "Upstream-Sockets" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "Upstream-Testtyp" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "Uptime:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5607,14 +7259,19 @@ msgstr "Benutze OTP" msgid "Use recovery code" msgstr "Benuzte Wiederherstellungscode" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "Temporären Pfad verwenden" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "Benutzer" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "User-Agent" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "Benutzer gesperrt" @@ -5631,7 +7288,7 @@ msgstr "Benutzer hat OTP nicht als 2FA aktiviert" msgid "User Profile" msgstr "Benutzerprofil" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "Benutzername" @@ -5644,12 +7301,20 @@ msgstr "Benutzername (*)" msgid "Username length cannot exceed 255 characters" msgstr "Die Benutzernamenslänge darf 255 Zeichen nicht überschreiten" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "UV" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "Gültig" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "SSL-Zertifikat validieren" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "Wert" @@ -5659,45 +7324,65 @@ msgstr "Wert" msgid "Verify Backup File Integrity" msgstr "Backup-Dateiintegrität überprüfen" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "Hostname überprüfen" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "Überprüfen Sie die Systemanforderungen" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "Version" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "Anzeigen" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "Alle Benachrichtigungen anzeigen" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "Auf GitHub anzeigen" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "Wiederherstellungscodes anzeigen" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "Drittanbieter-Komponenten anzeigen" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "Angesehen" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "Besuche" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "Warteverfahren" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "Warnung" @@ -5713,7 +7398,22 @@ msgstr "" "und ein Sicherheitstoken haben, und wählen Sie sorgfältig aus, was " "wiederhergestellt werden soll." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"Warnung: Dies scheint eine private IP-Adresse zu sein. Öffentliche " +"Zertifizierungsstellen wie Let's Encrypt können keine Zertifikate für " +"private IPs ausstellen. Verwenden Sie eine öffentliche IP-Adresse oder " +"erwägen Sie die Verwendung einer privaten Zertifizierungsstelle." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "Wir akzeptieren keine Funktionsanfragen" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." @@ -5721,7 +7421,7 @@ msgstr "" "Wir werden einen oder mehrere TXT-Einträge zu den DNS-Einträgen deiner " "Domain hinzufügen, um die Eigentumsverifizierung durchzuführen." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" @@ -5729,7 +7429,7 @@ msgstr "" "Wir werden die HTTPChallenge-Konfiguration aus dieser Datei entfernen und " "das Nginx neu laden. Möchtest du fortfahren?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "Webauthn" @@ -5737,10 +7437,18 @@ msgstr "Webauthn" msgid "WebAuthn settings are not configured" msgstr "WebAuthn-Einstellungen sind nicht konfiguriert" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "WebSocket-Verbindungsfehler" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket nicht verbunden, bitte warten Sie auf die Verbindung" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "WeCom" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "Mittwoch" @@ -5753,7 +7461,7 @@ msgstr "Wöchentlich" msgid "Weekly on %{day} at %{time}" msgstr "Wöchentlich am %{day} um %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5764,17 +7472,17 @@ msgstr "" "denn, du befindest dich in einer Entwicklerumgebung und verwendest Pebble " "als CA." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" "Wenn Sie diese Website aktivieren/deaktivieren, löschen oder speichern, " -"werden die im Node Group festgelegten Knoten und die unten ausgewählten " +"werden die im Namespace festgelegten Knoten und die unten ausgewählten " "Knoten synchronisiert." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." @@ -5782,13 +7490,13 @@ msgstr "" "Wenn Sie neue Wiederherstellungscodes generieren, müssen Sie die neuen " "Codes herunterladen oder ausdrucken." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "" "Ob ein temporärer Pfad beim Schreiben temporärer Dateien verwendet werden " "soll" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "Wildcard-Zertifikat" @@ -5807,8 +7515,8 @@ msgstr "Worker-Prozesse" msgid "Workers" msgstr "Worker" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "Arbeitsplatz" @@ -5833,16 +7541,18 @@ msgstr "Scrheibe Zertifikat-Privatschlüssel auf die Festplatte" msgid "Writing certificate to disk" msgstr "Schreibe Zertifikat auf die Festplatte" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "Ja" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5855,11 +7565,11 @@ msgstr "" msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "Sie dürfen keine Datei außerhalb des nginx-Konfigurationspfads löschen" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "Du verwendest die neueste Version" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "Du kannst das Nginx UI-Upgrade auf dieser Seite überprüfen." @@ -5871,7 +7581,7 @@ msgstr "Sie können diesen Dialog in %{countdown} Sekunden schließen" msgid "You can close this dialog now" msgstr "Sie können dieses Dialogfeld jetzt schließen" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." @@ -5879,17 +7589,17 @@ msgstr "" "Du hast die Einstellungen von Webauthn nicht konfiguriert, daher kannst du " "keinen Passkey hinzufügen." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" "Sie haben die 2FA noch nicht aktiviert. Bitte aktivieren Sie die 2FA, um " "Wiederherstellungscodes zu generieren." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "Sie haben noch keine Wiederherstellungscodes generiert." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." @@ -5898,15 +7608,197 @@ msgstr "" "Bitte generieren Sie so bald wie möglich neue Wiederherstellungscodes, um " "die Sicherheit zu gewährleisten." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "Ihre alten Codes funktionieren nicht mehr." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "Deine Passkeys" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "Allokationsfreie Pipeline" + +#~ msgid "in the same directory as" +#~ msgstr "im gleichen Verzeichnis wie" + +#~ msgid "Sandbox test successful" +#~ msgstr "Sandbox-Test erfolgreich" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "Im isolierten Sandbox-Modus getestet" + +#~ msgid "All" +#~ msgstr "Alle" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "Basierend auf Tests mit M2 Pro (12 Kerne)" + +#~ msgid "CPU Utilization" +#~ msgstr "CPU-Auslastung" + +#~ msgid "Indexing Throughput" +#~ msgstr "Indizierungsdurchsatz" + +#~ msgid "Memory Efficiency" +#~ msgstr "Speichereffizienz" + +#~ msgid "Performance Impact Notice" +#~ msgstr "Leistungsauswirkungshinweis" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "Optimierung der Null-Zuweisungs-Pipeline" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "Frage ChatGPT um Hilfe" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "Geografische Kartierung & Erkenntnisse" + +#~ msgid "No feature requests accepted." +#~ msgstr "Keine Funktionsanfragen akzeptiert" + +#~ msgid "Time-series trend analysis" +#~ msgstr "Zeitreihen-Trendanalyse" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "User-Agent- und Browser-Analysen" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ Kerne (Apple M2 Pro oder Intel-Äquivalent)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "4 GB+ RAM für optimale Leistung" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "Adaptive Batch-Größe" + +#~ msgid "CPU Architecture" +#~ msgstr "CPU-Architektur" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "GeoIP- und User-Agent-Analyse" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "Mindestens 1 GB RAM" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "Moderne CPU (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "Echtzeit-Leistungsüberwachung" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "Dauerhafte Leistung auf moderner Hardware" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "Sicherungspfad nicht in den gewährten Zugriffspfaden: {0}" + +#~ msgid "Build with" +#~ msgstr "Build mit" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "Fehler beim Kopieren des Datenbankverzeichnisses: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "Fehler beim Erstellen des Backup-Verzeichnisses: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "Fehler beim Auswerten der symbolischen Links: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "Wiederherstellung der Nginx-UI-Dateien fehlgeschlagen: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "Fehler beim Schreiben in den Zip-Puffer: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "Hash-Überprüfung fehlgeschlagen: Dateiintegrität beeinträchtigt" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "Zugriff auf S3-Bucket verweigert: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "S3-Verbindungstest fehlgeschlagen: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "S3-Anmeldeinformationen sind ungültig: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "S3-Endpunkt ist ungültig: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "Speicherpfad nicht in den gewährten Zugriffspfaden: {0}" + +#~ msgid "files" +#~ msgstr "Dateien" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "Protokolle werden indiziert, bitte warten..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "Lade Dashboard-Daten..." + +#~ msgid "Today" +#~ msgstr "Heute" + +#~ msgid "Data refreshed successfully" +#~ msgstr "Daten erfolgreich aktualisiert" + +#~ msgid "Failed to refresh data" +#~ msgstr "Datenaktualisierung fehlgeschlagen" + +#~ msgid "Log File:" +#~ msgstr "Protokolldatei:" + +#~ msgid "Log path" +#~ msgstr "Protokollpfad" + +#~ msgid "Index Size" +#~ msgstr "Indexgröße" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "Seitengröße" + +#~ msgid "Environments" +#~ msgstr "Umgebungen" + +#~ msgid "Node Group" +#~ msgstr "Node-Gruppe" + +#~ msgid "Node Groups" +#~ msgstr "Knotengruppen" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "Überprüfen Sie, ob das conf.d-Verzeichnis existiert" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Unterstützung der Kommunikation mit dem Backend über das Server-Sent " +#~ "Events-Protokoll. Wenn Ihre Nginx UI über einen Nginx-Reverse-Proxy " +#~ "verwendet wird, lesen Sie bitte diesen Link, um die entsprechende " +#~ "Konfigurationsdatei zu schreiben: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "Wenn leer, wird das Standard-CA-Verzeichnis verwendet." + +#~ msgid "Save error %{msg}" +#~ msgstr "Fehler beim Speichern %{msg}" + +#~ msgid "Main" +#~ msgstr "Haupt" + +#~ msgid "Select an action after sync" +#~ msgstr "Aktion nach der Synchronisierung auswählen" + #~ msgid "Link Start" #~ msgstr "Link Start" @@ -5940,9 +7832,6 @@ msgstr "Deine Passkeys" #~ msgid "Last Backup Error" #~ msgstr "Letzter Sicherungsfehler" -#~ msgid "Apply" -#~ msgstr "Anwenden" - #~ msgid "Apply bulk action successfully" #~ msgstr "Massenaktion erfolgreich angewendet" @@ -5979,11 +7868,6 @@ msgstr "Deine Passkeys" #~ msgid "Recovered Successfully" #~ msgstr "Erfolgreich wiederhergestellt" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "Gesamt %{total} Element" -#~ msgstr[1] "Gesamt %{total} Elemente" - #~ msgid "View Details" #~ msgstr "Details anzeigen" @@ -6032,9 +7916,6 @@ msgstr "Deine Passkeys" #~ msgid "Format error %{msg}" #~ msgstr "Fehler beim Speichern %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "Fehler beim Speichern, Syntaxfehler wurden in der Konfiguration erkannt." - #, fuzzy #~ msgid "" #~ "When you enable/disable, delete, or save this stream, the nodes set in the " @@ -6044,10 +7925,6 @@ msgstr "Deine Passkeys" #~ "werden die Knoten, die in der Seitenkategorie festgelegt sind, und die " #~ "unten " -#, fuzzy -#~ msgid "Access Token" -#~ msgstr "Zugriffslog" - #, fuzzy #~ msgid "Bot Token" #~ msgstr "API-Token" @@ -6070,10 +7947,6 @@ msgstr "Deine Passkeys" #~ msgid "Site Categories" #~ msgstr "Seitenkategorien" -#, fuzzy -#~ msgid "Restart Required" -#~ msgstr "Starte neu" - #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "Ausführen von %{conf_name} auf %{node_name} erfolgreich" @@ -6152,9 +8025,6 @@ msgstr "Deine Passkeys" #~ msgid "Incorrect username or password" #~ msgstr "Falcher Benutzername oder Passwort" -#~ msgid "Recovery Code:" -#~ msgstr "Wiederherstellungscode:" - #~ msgid "The recovery code is only displayed once, please save it in a safe place." #~ msgstr "" #~ "Der Wiederherstellungscode wird nur einmal angezeigt, bitte speichere ihn " @@ -6169,10 +8039,6 @@ msgstr "Deine Passkeys" #~ "the remote Nginx UI to the latest version" #~ msgstr "Speichern erfolgreich" -#, fuzzy -#~ msgid "Server Name" -#~ msgstr "Server Info" - #, fuzzy #~ msgid "Enable 2FA" #~ msgstr "Enabled" diff --git a/app/src/language/en/app.po b/app/src/language/en/app.po index 35a076029..7f58522ce 100644 --- a/app/src/language/en/app.po +++ b/app/src/language/en/app.po @@ -1,88 +1,130 @@ -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "" "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx UI " +"config path by default." +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "" @@ -91,11 +133,15 @@ msgstr "" msgid "2FA Settings" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "" @@ -104,30 +150,28 @@ msgid "Access log path not exist" msgstr "" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "" @@ -142,15 +186,15 @@ msgid "Actual worker to configured ratio" msgstr "" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "" @@ -164,10 +208,14 @@ msgstr "" msgid "Add Directive Below" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -181,15 +229,15 @@ msgstr "" msgid "Add Site" msgstr "" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "" @@ -197,30 +245,73 @@ msgstr "" msgid "Additional" msgstr "" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" +#: src/views/system/Licenses.vue:152 +msgid "All Components" msgstr "" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." msgstr "" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "" +"Any reachable IP address can be used with private Certificate Authorities" +msgstr "" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "" @@ -241,36 +332,40 @@ msgstr "" msgid "API Type" msgstr "" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "" @@ -278,16 +373,16 @@ msgstr "" msgid "Are you sure you want to delete permanently?" msgstr "" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "" @@ -299,7 +394,7 @@ msgstr "" msgid "Are you sure you want to remove this location?" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "" @@ -307,23 +402,27 @@ msgstr "" msgid "Are you sure you want to restore?" msgstr "" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "" @@ -331,12 +430,12 @@ msgstr "" msgid "Authenticate with a passkey" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." msgstr "" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "" @@ -370,28 +469,27 @@ msgstr "" msgid "Auto Backup Storage Failed" msgstr "" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "" @@ -400,16 +498,32 @@ msgstr "" msgid "AutoCert is running..." msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "" @@ -421,6 +535,20 @@ msgstr "" msgid "Back to List" msgstr "" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "" + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "" @@ -429,7 +557,7 @@ msgstr "" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "" @@ -441,22 +569,18 @@ msgstr "" msgid "Backup Path" msgstr "" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "" @@ -478,15 +602,15 @@ msgstr "" msgid "Backup Type" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "" @@ -498,18 +622,18 @@ msgstr "" msgid "Base information" msgstr "" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "" @@ -521,7 +645,7 @@ msgstr "" msgid "Batch Modify" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "" @@ -533,11 +657,25 @@ msgstr "" msgid "Block is nil" msgstr "" -#: src/views/system/About.vue:75 -msgid "Build with" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." msgstr "" -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "" @@ -545,11 +683,11 @@ msgstr "" msgid "Cache" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "" @@ -558,15 +696,15 @@ msgstr "" msgid "Cache manager processes" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "" @@ -575,7 +713,7 @@ msgstr "" msgid "Cache Processes" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "" @@ -590,24 +728,33 @@ msgid "" "performance depends on hardware, configuration, and workload" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "" @@ -631,7 +778,7 @@ msgstr "" msgid "Cannot remove initial user" msgstr "" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "" @@ -639,6 +786,11 @@ msgstr "" msgid "Cert path is not under the nginx conf dir" msgstr "" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "" @@ -653,6 +805,10 @@ msgstr "" msgid "Certificate %{name} will expire in 1 day" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "" @@ -671,6 +827,14 @@ msgstr "" msgid "Certificate Expiring Soon" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "" @@ -683,8 +847,8 @@ msgstr "" msgid "Certificate path is empty" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "" @@ -700,14 +864,14 @@ msgstr "" msgid "Certificate revoked successfully" msgstr "" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "" msgstr[1] "" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "" @@ -716,7 +880,7 @@ msgstr "" msgid "Certificates" msgstr "" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "" @@ -724,7 +888,7 @@ msgstr "" msgid "Challenge error: {0}" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "" @@ -747,26 +911,33 @@ msgstr[1] "" msgid "Changed Path" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -788,6 +959,19 @@ msgstr "" #: src/language/generate.ts:8 msgid "" +"Check if the conf.d directory is under the nginx configuration directory" +msgstr "" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" + +#: src/language/generate.ts:10 +msgid "" "Check if the nginx access log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " "point to a valid, existing file, an error will be reported. In this case, " @@ -796,15 +980,15 @@ msgid "" "nginx.html#accesslogpath" msgstr "" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -814,7 +998,7 @@ msgid "" "nginx.html#errorlogpath" msgstr "" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -823,34 +1007,47 @@ msgid "" "config-nginx.html#pidpath" msgstr "" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" msgstr "" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under the " "nginx configuration directory" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "" @@ -859,13 +1056,13 @@ msgstr "" msgid "Cleaning environment variables" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "" @@ -883,7 +1080,7 @@ msgstr "" msgid "Click or drag folders to this area to upload" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "" @@ -891,10 +1088,18 @@ msgstr "" msgid "Client Body Buffer Size" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "" @@ -923,6 +1128,14 @@ msgstr "" msgid "Code Completion Model" msgstr "" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "" @@ -931,7 +1144,7 @@ msgstr "" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -954,11 +1167,34 @@ msgstr "" msgid "Compare with Current" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "" @@ -971,22 +1207,30 @@ msgstr "" msgid "Config entry file not exist" msgstr "" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "" @@ -1007,11 +1251,20 @@ msgstr "" msgid "Configure SSL" msgstr "" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "" @@ -1019,8 +1272,8 @@ msgstr "" msgid "Connection error, trying to reconnect..." msgstr "" -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." msgstr "" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 @@ -1031,14 +1284,14 @@ msgstr "" msgid "Container status unknown" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "" @@ -1051,14 +1304,38 @@ msgstr "" msgid "Copy" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "" @@ -1098,10 +1375,10 @@ msgid "" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "" @@ -1126,11 +1403,15 @@ msgstr "" msgid "Cron Expression" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "" @@ -1150,12 +1431,12 @@ msgstr "" msgid "Current usage" msgstr "" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "" @@ -1168,14 +1449,18 @@ msgstr "" msgid "Custom Directory" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1186,6 +1471,10 @@ msgstr "" msgid "Daily" msgstr "" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "" @@ -1193,10 +1482,18 @@ msgstr "" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "" @@ -1209,34 +1506,48 @@ msgstr "" msgid "Days" msgstr "" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" +msgid "Delete %{path} on %{node_name} failed" msgstr "" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" +msgid "Delete %{path} on %{node_name} successfully" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "" @@ -1256,43 +1567,44 @@ msgstr "" msgid "Delete Remote Config Success" msgstr "" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "" @@ -1308,13 +1620,21 @@ msgstr "" msgid "Deploy" msgstr "" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 -msgid "Description" +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" msgstr "" -#: src/constants/errors/site.ts:3 src/constants/errors/stream.ts:3 -msgid "Destination file already exists" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 +msgid "Description" +msgstr "" + +#: src/constants/errors/site.ts:3 src/constants/errors/stream.ts:3 +msgid "Destination file already exists" msgstr "" #: src/constants/errors/config.ts:3 @@ -1325,18 +1645,44 @@ msgstr "" msgid "Details" msgstr "" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "" @@ -1357,98 +1703,101 @@ msgstr "" msgid "Directives" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "" @@ -1457,11 +1806,15 @@ msgstr "" msgid "DNS Provider" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "" @@ -1469,11 +1822,11 @@ msgstr "" msgid "Do you want to %{action} this site?" msgstr "" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "" @@ -1486,7 +1839,7 @@ msgstr "" msgid "Do you want to remove this server?" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "" @@ -1494,7 +1847,7 @@ msgstr "" msgid "Docker client not initialized" msgstr "" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "" @@ -1509,14 +1862,35 @@ msgid_plural "Documents" msgstr[0] "" msgstr[1] "" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "" @@ -1525,21 +1899,30 @@ msgstr "" msgid "Downloading latest release" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "" @@ -1548,21 +1931,33 @@ msgstr "" msgid "Duplicate to local successfully" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "" + #: src/language/curd.ts:8 msgid "Edit" msgstr "" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "" @@ -1579,7 +1974,7 @@ msgstr "" msgid "Edit Stream" msgstr "" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "" @@ -1588,16 +1983,28 @@ msgstr "" msgid "Email (*)" msgstr "" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "" @@ -1621,57 +2028,61 @@ msgstr "" msgid "Enable HTTPS" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "" @@ -1683,29 +2094,29 @@ msgstr "" msgid "Enable TLS" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "" @@ -1717,6 +2128,13 @@ msgstr "" msgid "Enables HTTP/3 support based on QUIC protocol for best performance" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "" @@ -1725,11 +2143,19 @@ msgstr "" msgid "End" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "" @@ -1741,39 +2167,56 @@ msgstr "" msgid "Environment variables cleaned" msgstr "" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form text " +"messages." +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "" @@ -1789,6 +2232,22 @@ msgstr "" msgid "Execute on every month on day %{day} at %{time}" msgstr "" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1802,12 +2261,32 @@ msgstr "" msgid "Export Excel" msgstr "" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "" + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME providers " +"like ZeroSSL." +msgstr "" + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "" @@ -1836,15 +2315,15 @@ msgstr "" msgid "Failed to build nginx config: {0}" msgstr "" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "" @@ -1857,38 +2336,35 @@ msgid "Failed to copy config file: {0}" msgstr "" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "" -#: src/constants/errors/self_check.ts:10 -msgid "Failed to create backup" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" msgstr "" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" +#: src/constants/errors/self_check.ts:10 +msgid "Failed to create backup" msgstr "" #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "" @@ -1896,19 +2372,19 @@ msgstr "" msgid "Failed to create hash info file: {0}" msgstr "" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "" @@ -1924,48 +2400,64 @@ msgstr "" msgid "Failed to create temporary subdirectory" msgstr "" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "" @@ -1973,20 +2465,32 @@ msgstr "" msgid "Failed to disable maintenance mode %{msg}" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "" @@ -1998,10 +2502,6 @@ msgstr "" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "" @@ -2010,7 +2510,7 @@ msgstr "" msgid "Failed to execute template: {0}" msgstr "" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "" @@ -2030,14 +2530,30 @@ msgstr "" msgid "Failed to get container id: {0}" msgstr "" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "" @@ -2054,15 +2570,19 @@ msgstr "" msgid "Failed to load history records" msgstr "" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "" @@ -2082,15 +2602,23 @@ msgstr "" msgid "Failed to pull image: {0}" msgstr "" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "" @@ -2106,56 +2634,96 @@ msgstr "" msgid "Failed to read response body: {0}" msgstr "" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "" -#: src/constants/errors/backup.ts:39 -msgid "Failed to restore Nginx configs: {0}" +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" msgstr "" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/constants/errors/backup.ts:37 +msgid "Failed to restore Nginx configs: {0}" +msgstr "" + +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" msgstr "" #: src/views/config/components/Delete.vue:116 @@ -2170,6 +2738,10 @@ msgstr "" msgid "File exists" msgstr "" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "" @@ -2178,19 +2750,35 @@ msgstr "" msgid "File or directory not found: {0}" msgstr "" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "" @@ -2202,7 +2790,11 @@ msgstr "" msgid "Folder" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2217,6 +2809,27 @@ msgstr "" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "" +"For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will be " +"included in the certificate." +msgstr "" + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "" @@ -2237,6 +2850,22 @@ msgstr "" msgid "Friday" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "" @@ -2245,16 +2874,16 @@ msgstr "" msgid "Generate" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "" @@ -2262,6 +2891,37 @@ msgstr "" msgid "Generating private key for registering account" msgstr "" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "" @@ -2274,8 +2934,7 @@ msgstr "" msgid "Get dns credential error: {0}" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "" @@ -2287,10 +2946,35 @@ msgstr "" msgid "Github Proxy" msgstr "" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "" @@ -2303,25 +2987,51 @@ msgstr "" msgid "GZIP Min Length" msgstr "" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "" @@ -2330,10 +3040,11 @@ msgid "Host" msgstr "" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "" @@ -2341,7 +3052,11 @@ msgstr "" msgid "HTTP Challenge Port" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "" @@ -2349,31 +3064,37 @@ msgstr "" msgid "HTTPS Protocol" msgstr "" -#: src/views/preference/tabs/NodeSettings.vue:34 -msgid "ICP Number" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." msgstr "" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." +#: src/views/preference/tabs/NodeSettings.vue:34 +msgid "ICP Number" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2383,12 +3104,12 @@ msgstr "" msgid "Import" msgstr "" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "" @@ -2398,7 +3119,46 @@ msgid "" "processes" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "" + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "" @@ -2406,10 +3166,14 @@ msgstr "" msgid "Indicator" msgstr "" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "" @@ -2418,7 +3182,7 @@ msgstr "" msgid "Initialing core upgrader" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "" @@ -2433,7 +3197,7 @@ msgstr "" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "" @@ -2459,27 +3223,36 @@ msgstr "" msgid "Interval" msgstr "" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "" @@ -2492,6 +3265,10 @@ msgstr "" msgid "Invalid folder name" msgstr "" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "" @@ -2500,7 +3277,7 @@ msgstr "" msgid "Invalid otp code" msgstr "" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "" @@ -2508,10 +3285,15 @@ msgstr "" msgid "Invalid passcode or recovery code" msgstr "" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "" @@ -2520,19 +3302,41 @@ msgstr "" msgid "Invalid request format" msgstr "" -#: src/constants/errors/backup.ts:42 -msgid "Invalid security token format" +#: src/constants/errors/backup.ts:39 +msgid "Invalid security token format" +msgstr "" + +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 +msgid "IP" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:14 -msgid "IP" +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" msgstr "" #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "" @@ -2552,7 +3356,7 @@ msgstr "" msgid "Jwt Secret" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2562,12 +3366,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "" @@ -2579,6 +3383,44 @@ msgstr "" msgid "Lark Custom" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "" @@ -2587,15 +3429,35 @@ msgstr "" msgid "Last Backup Time" msgstr "" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "" @@ -2611,12 +3473,18 @@ msgstr "" msgid "Leave blank if do not want to modify" msgstr "" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "" -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "" @@ -2624,16 +3492,24 @@ msgstr "" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "" @@ -2649,32 +3525,32 @@ msgstr "" msgid "Load Average:" msgstr "" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "" @@ -2682,9 +3558,15 @@ msgstr "" msgid "Loading data..." msgstr "" -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "" + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2703,34 +3585,70 @@ msgstr "" msgid "Locations" msgstr "" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to https://nginxui.com/zh_CN/guide/config-" "nginx-log.html for more information." msgstr "" -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "" + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "" @@ -2744,9 +3662,20 @@ msgid "" "minutes." msgstr "" +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "" @@ -2762,7 +3691,7 @@ msgstr "" msgid "Make certificate dir error: {0}" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2775,11 +3704,11 @@ msgstr "" msgid "Manage Configs" msgstr "" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "" @@ -2791,15 +3720,15 @@ msgstr "" msgid "Managed Certificate" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "" @@ -2825,7 +3754,7 @@ msgstr "" msgid "Master Process" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "" @@ -2833,11 +3762,15 @@ msgstr "" msgid "Max Concurrent Connections" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "" @@ -2854,7 +3787,7 @@ msgstr "" msgid "Maximum number of connections per worker process" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "" @@ -2864,6 +3797,7 @@ msgstr "" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "" @@ -2871,22 +3805,39 @@ msgstr "" msgid "Memory and Storage" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "" @@ -2895,21 +3846,36 @@ msgstr "" msgid "Minutes" msgstr "" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "" @@ -2917,7 +3883,7 @@ msgstr "" msgid "Modify Config" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "" @@ -2925,6 +3891,10 @@ msgstr "" msgid "Modules" msgstr "" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "" @@ -2937,39 +3907,66 @@ msgstr "" msgid "Monthly on day %{day} at %{time}" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "" @@ -2982,6 +3979,10 @@ msgstr "" msgid "Network Statistics" msgstr "" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "" @@ -3010,18 +4011,18 @@ msgstr "" msgid "New transport error: {0}" msgstr "" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "" @@ -3033,7 +4034,7 @@ msgstr "" msgid "Nginx Access Log Path" msgstr "" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "" @@ -3062,15 +4063,15 @@ msgstr "" msgid "Nginx conf not include stream-enabled" msgstr "" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "" @@ -3078,8 +4079,8 @@ msgstr "" msgid "Nginx configuration has been restored" msgstr "" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "" @@ -3108,7 +4109,7 @@ msgstr "" msgid "Nginx Error Log Path" msgstr "" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "" @@ -3117,7 +4118,7 @@ msgid "Nginx error: {0}" msgstr "" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3132,7 +4133,7 @@ msgstr "" msgid "Nginx is running" msgstr "" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "" @@ -3140,6 +4141,10 @@ msgstr "" msgid "Nginx Log Directory Whitelist" msgstr "" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "" + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3149,7 +4154,7 @@ msgstr "" msgid "Nginx PID Path" msgstr "" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "" @@ -3162,7 +4167,7 @@ msgstr "" msgid "Nginx reload failed: {0}" msgstr "" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "" @@ -3174,7 +4179,7 @@ msgstr "" msgid "Nginx Restart Command" msgstr "" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "" @@ -3182,7 +4187,7 @@ msgstr "" msgid "Nginx restarted successfully" msgstr "" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "" @@ -3213,41 +4218,73 @@ msgid "" "few seconds." msgstr "" -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "" + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "" @@ -3256,23 +4293,30 @@ msgstr "" msgid "No servers configured" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 -msgid "No upstreams configured" +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" msgstr "" -#: src/views/preference/Preference.vue:64 -msgid "Node" +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" msgstr "" -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 +msgid "No upstreams configured" +msgstr "" + +#: src/views/preference/Preference.vue:65 +msgid "Node" +msgstr "" + +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" msgstr "" #: src/views/preference/tabs/NodeSettings.vue:15 @@ -3283,7 +4327,12 @@ msgstr "" msgid "Node Secret" msgstr "" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "" @@ -3291,36 +4340,59 @@ msgstr "" msgid "Not After" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "" @@ -3329,15 +4401,19 @@ msgstr "" msgid "Notifier not found" msgstr "" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "" @@ -3352,7 +4428,7 @@ msgstr "" msgid "Obtain cert error: {0}" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "" @@ -3360,18 +4436,18 @@ msgstr "" msgid "Obtaining certificate" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." msgstr "" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "" @@ -3379,48 +4455,58 @@ msgstr "" msgid "Official Document" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "" @@ -3429,23 +4515,46 @@ msgstr "" msgid "Open" msgstr "" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "" @@ -3492,18 +4601,22 @@ msgstr "" msgid "Params Optimization" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "" @@ -3532,11 +4645,13 @@ msgstr "" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "" @@ -3548,12 +4663,28 @@ msgstr "" msgid "Payload resource is nil" msgstr "" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "" @@ -3595,17 +4726,29 @@ msgid "" "count, etc." msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "" @@ -3622,6 +4765,10 @@ msgstr "" msgid "Please enter the security token received during backup" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "" @@ -3630,19 +4777,19 @@ msgstr "" msgid "Please fill in required S3 configuration fields" msgstr "" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." msgstr "" -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to prevent " @@ -3674,20 +4821,20 @@ msgstr "" msgid "Please input your E-mail!" msgstr "" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "" -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "" "Please note that the unit of time configurations below are all in seconds." msgstr "" @@ -3704,25 +4851,31 @@ msgstr "" msgid "Please select a backup file" msgstr "" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "" @@ -3735,23 +4888,26 @@ msgstr "" msgid "Port" msgstr "" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "" @@ -3759,6 +4915,19 @@ msgstr "" msgid "Preparing lego configurations" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "" @@ -3775,6 +4944,10 @@ msgstr "" msgid "Processing {count}/{total}" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "" @@ -3791,13 +4964,17 @@ msgstr "" msgid "Protected Directory" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " "reverse proxy, please configure the protocol separately in the reverse proxy." msgstr "" -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "" @@ -3805,22 +4982,57 @@ msgstr "" msgid "Provider not found: {0}" msgstr "" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "" @@ -3835,60 +5047,98 @@ msgstr "" msgid "Reads" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." msgstr "" -#: src/views/preference/tabs/CertSettings.vue:40 -msgid "Recursive Nameservers" +#: src/views/preference/tabs/CertSettings.vue:40 +msgid "Recursive Nameservers" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." msgstr "" -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "" @@ -3896,28 +5146,30 @@ msgstr "" msgid "Registering user" msgstr "" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "" @@ -3941,7 +5193,7 @@ msgstr "" msgid "Reload Remote Nginx Success" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "" @@ -3953,22 +5205,28 @@ msgstr "" msgid "Reloading nginx" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -3977,11 +5235,11 @@ msgid "Rename" msgstr "" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" msgstr "" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" msgstr "" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 @@ -3992,37 +5250,37 @@ msgstr "" msgid "Rename Remote Config Success" msgstr "" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "" @@ -4030,7 +5288,7 @@ msgstr "" msgid "Rename successfully" msgstr "" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4040,8 +5298,8 @@ msgstr "" msgid "Renew cert error: {0}" msgstr "" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "" @@ -4053,11 +5311,23 @@ msgstr "" msgid "Renew Certificate Success" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "" @@ -4075,13 +5345,19 @@ msgid "Requests Per Connection" msgstr "" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4089,6 +5365,10 @@ msgid "" "processes" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4098,9 +5378,8 @@ msgstr "" msgid "Restart" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "" @@ -4120,7 +5399,7 @@ msgstr "" msgid "Restart Remote Nginx Success" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "" @@ -4159,8 +5438,8 @@ msgstr "" msgid "Restored successfully" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "" @@ -4168,29 +5447,29 @@ msgstr "" msgid "Revoke cert error: {0}" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "" @@ -4226,10 +5505,6 @@ msgstr "" msgid "S3 Bucket" msgstr "" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "" @@ -4238,7 +5513,7 @@ msgstr "" msgid "S3 bucket name" msgstr "" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "" @@ -4246,27 +5521,15 @@ msgstr "" msgid "S3 connection test failed" msgstr "" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "" @@ -4302,7 +5565,7 @@ msgstr "" msgid "S3 secret access key is required" msgstr "" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "" @@ -4310,17 +5573,19 @@ msgstr "" msgid "Saturday" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "" @@ -4328,41 +5593,41 @@ msgstr "" msgid "Save Directive" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" msgstr "" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "" @@ -4370,16 +5635,17 @@ msgstr "" msgid "Save successful" msgstr "" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "" @@ -4403,12 +5669,12 @@ msgstr "" msgid "Scan Results" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:113 @@ -4424,16 +5690,37 @@ msgid "SDK" msgstr "" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "" + #: src/language/constants.ts:61 msgid "Search module name" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "" @@ -4450,12 +5737,18 @@ msgstr "" msgid "Security Token Information" msgstr "" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" + #: src/language/curd.ts:31 msgid "Select all" msgstr "" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" msgstr "" #: src/language/curd.ts:59 @@ -4466,7 +5759,7 @@ msgstr "" msgid "Selector" msgstr "" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "" @@ -4480,11 +5773,15 @@ msgstr "" msgid "Send" msgstr "" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "" @@ -4492,6 +5789,10 @@ msgstr "" msgid "Server Info" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "" @@ -4500,7 +5801,7 @@ msgstr "" msgid "Server names hash table size" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "" @@ -4508,6 +5809,10 @@ msgstr "" msgid "ServerIdx out of range" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "" @@ -4542,6 +5847,10 @@ msgstr "" msgid "Setting HTTP01 challenge provider" msgstr "" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui." @@ -4558,7 +5867,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "" @@ -4566,10 +5875,18 @@ msgstr "" msgid "Show" msgstr "" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "" @@ -4590,11 +5907,23 @@ msgstr "" msgid "Site Logs" msgstr "" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "" @@ -4602,6 +5931,12 @@ msgstr "" msgid "Sites List" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "" @@ -4611,6 +5946,8 @@ msgid "Sites-enabled directory not exist" msgstr "" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "" @@ -4618,19 +5955,36 @@ msgstr "" msgid "Skip Installation" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "" @@ -4642,15 +5996,20 @@ msgstr "" msgid "SSL certificate file not found" msgstr "" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "" @@ -4675,13 +6034,12 @@ msgstr "" msgid "SSL key path is required when HTTPS is enabled" msgstr "" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "" @@ -4689,33 +6047,49 @@ msgstr "" msgid "Start" msgstr "" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "" + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "" @@ -4739,10 +6113,6 @@ msgstr "" msgid "Storage path is required" msgstr "" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4756,7 +6126,7 @@ msgstr "" msgid "Stream not found" msgstr "" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "" @@ -4768,6 +6138,10 @@ msgstr "" msgid "Streams-enabled directory not exist" msgstr "" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "" @@ -4776,7 +6150,7 @@ msgstr "" msgid "Stub_status is not enabled" msgstr "" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4787,14 +6161,6 @@ msgstr "" msgid "Sunday" msgstr "" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: https://" -"nginxui.com/guide/nginx-proxy-example.html" -msgstr "" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -4839,11 +6205,11 @@ msgid "Sync Certificate" msgstr "" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" msgstr "" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" msgstr "" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 @@ -4855,11 +6221,11 @@ msgid "Sync Certificate Success" msgstr "" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" +msgid "Sync config %{config_name} to %{node_name} failed" msgstr "" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" +msgid "Sync config %{config_name} to %{node_name} successfully" msgstr "" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 @@ -4870,24 +6236,29 @@ msgstr "" msgid "Sync Config Success" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "" @@ -4904,10 +6275,14 @@ msgstr "" msgid "System Check" msgstr "" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "" @@ -4928,36 +6303,74 @@ msgstr "" msgid "Telegram" msgstr "" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " "since it was last issued." msgstr "" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. Please " +"download it to enable this feature." +msgstr "" + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. This " +"is used for offline geographic analysis in log analytics." +msgstr "" + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " "dashes, colons, and dots." msgstr "" -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "" @@ -4988,11 +6401,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "" @@ -5002,14 +6415,14 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "" -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " "match the local version." msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5037,18 +6450,22 @@ msgstr "" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " "lose access to your account." msgstr "" -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "" -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "" @@ -5056,9 +6473,9 @@ msgstr "" msgid "This directory is protected and cannot be deleted for system safety." msgstr "" -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "" @@ -5085,18 +6502,44 @@ msgid "" "_./:" msgstr "" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "" + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " "After enabling it, you can view performance statistics" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS (port " +"443). IP certificates require Certificate Authority (CA) support and may not " +"be available with all ACME providers." +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an IP-" +"based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5111,6 +6554,16 @@ msgstr "" msgid "This will permanently delete the %{type}." msgstr "" +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5125,12 +6578,12 @@ msgid "" "after the restoration is complete." msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "" "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "" @@ -5138,8 +6591,21 @@ msgstr "" msgid "Thursday" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "" @@ -5154,17 +6620,21 @@ msgstr "" msgid "Title" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5199,15 +6669,41 @@ msgstr "" msgid "Token is not valid" msgstr "" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "" + #: src/language/curd.ts:5 msgid "Total" msgstr "" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5221,6 +6717,10 @@ msgstr "" msgid "Total Nginx Processes" msgstr "" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "" @@ -5238,35 +6738,55 @@ msgstr "" msgid "Total Send" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "" + #: src/language/curd.ts:20 msgid "Trash" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "" @@ -5274,15 +6794,47 @@ msgstr "" msgid "Type %{delete} to confirm" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "" @@ -5291,32 +6843,30 @@ msgstr "" msgid "Update Profile" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully " msgstr "" @@ -5324,11 +6874,22 @@ msgstr "" msgid "Upgraded successfully" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "" +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "" @@ -5337,19 +6898,29 @@ msgstr "" msgid "Upload Folders" msgstr "" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "" @@ -5361,14 +6932,19 @@ msgstr "" msgid "Use recovery code" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "" @@ -5385,7 +6961,7 @@ msgstr "" msgid "User Profile" msgstr "" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "" @@ -5398,12 +6974,20 @@ msgstr "" msgid "Username length cannot exceed 255 characters" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "" @@ -5413,45 +6997,65 @@ msgstr "" msgid "Verify Backup File Integrity" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "" @@ -5463,19 +7067,30 @@ msgid "" "to restore." msgstr "" -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload the " "Nginx. Are you sure you want to continue?" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "" @@ -5483,10 +7098,18 @@ msgstr "" msgid "WebAuthn settings are not configured" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "" @@ -5499,31 +7122,31 @@ msgstr "" msgid "Weekly on %{day} at %{time}" msgstr "" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " "Pebble as CA." msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "" @@ -5542,8 +7165,8 @@ msgstr "" msgid "Workers" msgstr "" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "" @@ -5568,16 +7191,18 @@ msgstr "" msgid "Writing certificate to disk" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a non-" "localhost domain. This may expose sensitive information." @@ -5587,11 +7212,11 @@ msgstr "" msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "" @@ -5603,32 +7228,36 @@ msgstr "" msgid "You can close this dialog now" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "" "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "" diff --git a/app/src/language/es/app.po b/app/src/language/es/app.po index c8a19b845..ec14a7d83 100644 --- a/app/src/language/es/app.po +++ b/app/src/language/es/app.po @@ -16,96 +16,142 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.6.2\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "" "[Nginx UI] Usuario ACME: %{name}, Correo electrónico: %{email}, Directorio " "CA: %{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "" "[Nginx UI] Haciendo copia de seguridad del certificado actual para su " "posterior revocación" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] Certificado renovado con éxito" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] Certificado revocado con éxito" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" "[Nginx UI] El certificado se utilizó para el servidor, recargando el " "certificado TLS del servidor" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] Creando cliente para facilitar la comunicación con el servidor CA" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] Variables de entorno limpiadas" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] Finalizado" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] Certificado emitido con éxito" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] Obteniendo certificado" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] Preparándose para la revocación del certificado" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] Preparando configuraciones de lego" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] Recargando nginx" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] Revocación completada" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] Revocando certificado" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] Revocando certificado antiguo" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] Configurando el proveedor de desafío DNS01" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] Configurando variables de entorno" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] Configurando el proveedor de desafío HTTP01" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] Escribiendo la clave privada del certificado en el disco" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] Escribiendo certificado en el disco" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} copiado al portapapeles" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* Incluye nodos del grupo %{groupName} y nodos seleccionados manualmente" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "" +"* Los archivos de índice se almacenan en el directorio \"log-index\" dentro " +"de la ruta de configuración de NGINX UI de forma predeterminada." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* Métricas de rendimiento medidas en Apple M2 Pro (12 núcleos) con 32 GB de " +"RAM. El rendimiento real puede variar según la configuración de su hardware." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{start}-%{end} de %{total} elementos" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "Mínimo 1 núcleo" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "Mínimo 1 GB de RAM" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "Se recomiendan 2+ núcleos" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "Estadísticas UV/PV de 24 horas" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "2FA" @@ -114,11 +160,15 @@ msgstr "2FA" msgid "2FA Settings" msgstr "Configuración de 2FA" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "Se recomienda 4 GB de RAM o más" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "Acerca de" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "Registro de acceso" @@ -127,30 +177,28 @@ msgid "Access log path not exist" msgstr "La ruta del registro de acceso no existe" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "Logs de acceso" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "Usuario ACME" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "Acción" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "Acciones" @@ -165,15 +213,15 @@ msgid "Actual worker to configured ratio" msgstr "Proporción real de trabajadores a configurados" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "Agregar" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "Añadir una clave de acceso" @@ -187,10 +235,14 @@ msgstr "Agregar configuración" msgid "Add Directive Below" msgstr "Añadir directiva a continuación" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "Agregar dominio" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "Agregar encabezado" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -204,15 +256,15 @@ msgstr "Agregar servidor" msgid "Add Site" msgstr "Agregar Sitio" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "Agregar Stream" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "Agregar upstream" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "Agregado exitoso" @@ -220,27 +272,53 @@ msgstr "Agregado exitoso" msgid "Additional" msgstr "Adicional" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "Modo avanzado" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "Indexación avanzada habilitada pero falló al iniciar la reconstrucción" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "Indexación avanzada habilitada con éxito" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" +"Las funciones avanzadas de indexación de registros son gratuitas y de " +"código abierto para todos los usuarios" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "Sistema avanzado de agrupación de memoria" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "Búsqueda y filtrado avanzados" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "" "Después, actualice esta página y haga clic en agregar clave de acceso " "nuevamente." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "Todos" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "Todos los componentes" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "Todos los códigos de recuperación han sido utilizados" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." @@ -248,6 +326,28 @@ msgstr "" "Todos los subdominios seleccionados deben pertenecer al mismo proveedor de " "DNS, de lo contrario, la solicitud de certificado fallará." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"Alternativamente, si no puede descargar la base de datos, puede colocar " +"manualmente GeoLite2-City.mmdb en el mismo directorio que app.ini." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "Servicio de análisis no disponible" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "Cualquiera" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "" +"Cualquier dirección IP accesible puede utilizarse con autoridades de " +"certificación privadas" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "URL Base de la API" @@ -268,36 +368,40 @@ msgstr "Token de API" msgid "API Type" msgstr "Tipo de API" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "Aplicación" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "Aplicar" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "Arquitectura" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "¿Está seguro de eliminar esta IP bloqueada inmediatamente?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "¿Está seguro de eliminar esta llave de acceso inmediatamente?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "¿Estás seguro de generar nuevos códigos de recuperación?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "¿Estás seguro de restablecer la autenticación de dos factores?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "¿Está seguro de que desea borrar todas las notificaciones?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "¿Está seguro de que desea borrar el registro del chat?" @@ -305,18 +409,18 @@ msgstr "¿Está seguro de que desea borrar el registro del chat?" msgid "Are you sure you want to delete permanently?" msgstr "¿Estás seguro de que quieres eliminar permanentemente?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "¿Está seguro de que quiere borrar?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "" "¿Estás seguro de que deseas recargar Nginx en los siguientes nodos de " "sincronización?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "¿Está seguro de que quiere borrar esta directiva?" @@ -328,7 +432,7 @@ msgstr "¿Está seguro de que desea eliminar este elemento?" msgid "Are you sure you want to remove this location?" msgstr "¿Está seguro de que quiere borrar esta ubicación?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "" "¿Estás seguro de que deseas reiniciar Nginx en los siguientes nodos de " @@ -338,23 +442,27 @@ msgstr "" msgid "Are you sure you want to restore?" msgstr "¿Estás seguro de que quieres restaurar?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "Preguntar por ayuda a ChatGPT" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "Ascendente" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "Asistente" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "Al menos 20 GB de espacio disponible en disco" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "Intentar solucionar" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "Intentos" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "Autenticación" @@ -362,12 +470,12 @@ msgstr "Autenticación" msgid "Authenticate with a passkey" msgstr "Autenticarse con una llave de acceso" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "Configuración de autenticación" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "Autenticando..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "Autor" @@ -401,28 +509,27 @@ msgstr "Copia de seguridad automática fallida" msgid "Auto Backup Storage Failed" msgstr "Fallo en el almacenamiento de copia de seguridad automática" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "Actualización automática" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "Actualización automática desactivada" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "Actualización automática habilitada" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "Renovación automática deshabilitada por %{name}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "Renovación automática habilitada por %{name}" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert se está ejecutando, por favor espere..." @@ -431,16 +538,32 @@ msgstr "AutoCert se está ejecutando, por favor espere..." msgid "AutoCert is running..." msgstr "AutoCert se está ejecutando..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "Detección automática de rotación de registros" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "Reinicio automático" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "Latencia promedio" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "UV diario promedio" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "Prom./PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "Atrás" @@ -452,6 +575,22 @@ msgstr "Volver al Inicio" msgid "Back to List" msgstr "Volver a la lista" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "Backend" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "" +"Indexación en segundo plano en progreso. Los datos se actualizarán " +"automáticamente cuando estén listos." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "Servicio de registro en segundo plano no disponible" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "Copia de seguridad" @@ -462,7 +601,7 @@ msgstr "" "La verificación de integridad del archivo de respaldo falló, puede haber " "sido alterado" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "Archivo de respaldo no encontrado: {0}" @@ -474,24 +613,20 @@ msgstr "La copia de seguridad se ha descargado correctamente" msgid "Backup Path" msgstr "Ruta de copia de seguridad" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "La ruta de copia de seguridad no existe: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "La ruta de copia de seguridad no es un directorio: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "" "La ruta de respaldo es necesaria para el respaldo de directorio " "personalizado" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "La ruta de copia de seguridad no está en las rutas de acceso concedidas: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "Programa de copia de seguridad" @@ -518,15 +653,15 @@ msgstr "" msgid "Backup Type" msgstr "Tipo de copia de seguridad" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "Umbral de Prohibición en Minutos" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "IPs prohibidas" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "Bloqueado hasta" @@ -538,18 +673,18 @@ msgstr "Bark" msgid "Base information" msgstr "Información general" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "Básico" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "Modo Básico" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "Configuración básica" @@ -561,7 +696,7 @@ msgstr "Edición por lotes" msgid "Batch Modify" msgstr "Modificar por lotes" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "Actualización por lotes" @@ -575,11 +710,28 @@ msgstr "" msgid "Block is nil" msgstr "El bloque es nulo" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "Desarrollado con" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "Navegador" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "Estadísticas del navegador" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"Al habilitar la indexación avanzada, usted reconoce que su sistema cumple " +"con los requisitos y comprende las implicaciones de rendimiento. Esto " +"comenzará a indexar los archivos de registro existentes inmediatamente." -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "Directorio CA" @@ -587,13 +739,13 @@ msgstr "Directorio CA" msgid "Cache" msgstr "Caché" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "" "Los elementos de la caché a los que no se acceda dentro de este tiempo " "serán eliminados" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "Umbral de tiempo de procesamiento del cargador de caché" @@ -602,15 +754,15 @@ msgstr "Umbral de tiempo de procesamiento del cargador de caché" msgid "Cache manager processes" msgstr "Procesos del administrador de caché" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "Umbral de tiempo de procesamiento del gestor de caché" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "Configuración del Gestor de Caché" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "Ruta de caché" @@ -619,7 +771,7 @@ msgstr "Ruta de caché" msgid "Cache Processes" msgstr "Procesos de caché" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "Estructura de niveles de subdirectorios de caché, ej. 1:2" @@ -636,24 +788,33 @@ msgstr "" "Calculado en base a worker_processes * worker_connections. El rendimiento " "real depende del hardware, la configuración y la carga de trabajo" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "Cancelar" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "No se puede acceder a la ruta de copia de seguridad {0}: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "No se puede acceder al archivo de registro" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "No se puede acceder a la ruta de almacenamiento {0}: {1}" @@ -677,7 +838,7 @@ msgstr "No se puede obtener datos de rendimiento en este estado" msgid "Cannot remove initial user" msgstr "No se puede eliminar el usuario inicial" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "Certificado" @@ -687,6 +848,11 @@ msgstr "" "La ruta del certificado no está dentro del directorio de configuración de " "nginx" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "certificado" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "El certificado %{name} ha expirado" @@ -701,6 +867,10 @@ msgstr "El certificado %{name} expirará en %{days} días" msgid "Certificate %{name} will expire in 1 day" msgstr "El certificado %{name} expirará en 1 día" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "El contenido del certificado y la clave privada no pueden estar vacíos" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "Error de decodificación del certificado" @@ -719,6 +889,14 @@ msgstr "Certificado caducado" msgid "Certificate Expiring Soon" msgstr "Certificado a punto de expirar" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "Archivos de certificado descargados correctamente" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "El nombre del certificado no puede estar vacío" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "Certificado no encontrado: %{error}" @@ -731,8 +909,8 @@ msgstr "Error al analizar el certificado" msgid "Certificate path is empty" msgstr "La ruta del certificado está vacía" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "Certificado eliminado correctamente" @@ -748,14 +926,14 @@ msgstr "Certificado renovado con éxito" msgid "Certificate revoked successfully" msgstr "Certificado revocado con éxito" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Estado del Certificado" msgstr[1] "Estado de los Certificados" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "Tipo de certificado" @@ -764,7 +942,7 @@ msgstr "Tipo de certificado" msgid "Certificates" msgstr "Certificados" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "Lista de Certificados" @@ -772,7 +950,7 @@ msgstr "Lista de Certificados" msgid "Challenge error: {0}" msgstr "Error de desafío: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "Método de desafío" @@ -795,26 +973,33 @@ msgstr[1] "Cambiar Certificados" msgid "Changed Path" msgstr "Ruta cambiada" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "Canal" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "Chat" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "Chat para %{path}" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "Verificar" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "Intentar nuevamente" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "Verificar favicon" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -847,6 +1032,25 @@ msgstr "" "y evita el uso de Passkeys y funciones del portapapeles" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "" +"Verifique si el directorio conf.d está dentro del directorio de " +"configuración de nginx" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"Verifique si la base de datos GeoLite2 está disponible cuando se habilita " +"el indizado de registros. La base de datos GeoLite2 es necesaria para el " +"análisis geográfico de IP en el indizado de registros. Puede descargarla " +"desde la página de Preferencias o colocar GeoLite2-City.mmdb manualmente en " +"el mismo directorio que app.ini" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -862,15 +1066,15 @@ msgstr "" "ruta del registro de acceso. Consulte la documentación para más detalles: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "Verificar si existe el directorio de configuración de nginx" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "Verificar si existe el archivo de entrada de configuración de nginx" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -886,7 +1090,7 @@ msgstr "" "ruta del registro de errores. Consulte la documentación para más detalles: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -900,23 +1104,23 @@ msgstr "" "ruta del PID de Nginx. Consulte la documentación para más detalles: " "https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "Verifique si existe la ruta sbin de nginx" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "Verificar si el nginx.conf incluye el directorio conf.d" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "Verificar si el nginx.conf incluye el directorio sites-enabled" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "Verificar si el nginx.conf incluye el directorio streams-enabled" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" @@ -924,7 +1128,7 @@ msgstr "" "Verificar si los directorios sites-available y sites-enabled están en el " "directorio de configuración de nginx" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" @@ -932,6 +1136,19 @@ msgstr "" "Verificar si los directorios streams-available y streams-enabled están en " "el directorio de configuración de nginx" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "Intervalo de verificación (segundos)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "Mapa de Acceso a China" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "Mapa de China" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "El texto cifrado es demasiado corto" @@ -940,13 +1157,13 @@ msgstr "El texto cifrado es demasiado corto" msgid "Cleaning environment variables" msgstr "Borrar las variables de entorno" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "Borrar" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "Limpiado exitoso" @@ -966,7 +1183,7 @@ msgstr "Haz clic o arrastra archivos a esta área para subirlos" msgid "Click or drag folders to this area to upload" msgstr "Haz clic o arrastra carpetas a esta área para subir" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "Haga clic para copiar" @@ -974,10 +1191,18 @@ msgstr "Haga clic para copiar" msgid "Client Body Buffer Size" msgstr "Tamaño del búfer del cuerpo del cliente" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "Certificado de cliente" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "Tamaño del búfer de cabecera del cliente" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "Clave del cliente" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "Tamaño máximo del cuerpo del cliente" @@ -1006,6 +1231,14 @@ msgstr "La finalización de código no está habilitada" msgid "Code Completion Model" msgstr "Modelo de finalización de código" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "Contraer" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "Configuración de columnas" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "Comando" @@ -1014,7 +1247,7 @@ msgstr "Comando" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "El comando terminó con un código de salida inesperado: {0}, error: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -1037,11 +1270,34 @@ msgstr "Comparar seleccionado" msgid "Compare with Current" msgstr "Comparar con la corriente" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "Indexación completa con capacidades de búsqueda" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "componentes" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "Soporte para archivos de registro comprimidos" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "Nivel de compresión, 1 es más bajo, 9 es más alto" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "Calculando estadísticas" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "El directorio conf.d existe" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "El directorio Conf.d no existe" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "Configuración" @@ -1054,22 +1310,32 @@ msgstr "El directorio de configuración no existe" msgid "Config entry file not exist" msgstr "El archivo de entrada de configuración no existe" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "Configuración no encontrada" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "La ruta de configuración está vacía" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "Plantilla de configuración" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "Configuración" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "El archivo de configuración se probó exitosamente" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "" +"El archivo de configuración se ha probado con éxito en un entorno de " +"sandbox aislado" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "Historial de configuración" @@ -1090,11 +1356,20 @@ msgstr "Configuraciones" msgid "Configure SSL" msgstr "Configurar SSL" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "Confirmar eliminación" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "Confirmar nueva contraseña" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "Confirmación requerida" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "Conectado" @@ -1102,9 +1377,9 @@ msgstr "Conectado" msgid "Connection error, trying to reconnect..." msgstr "Error de conexión, intentando reconectar..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "Conexión perdida, por favor actualice la página." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "Se perdió la conexión para este terminal. Actualice si es necesario." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1114,14 +1389,14 @@ msgstr "Período de tiempo de espera de conexión" msgid "Container status unknown" msgstr "Estado del contenedor desconocido" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "Contenido" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "Copiado" @@ -1134,14 +1409,38 @@ msgstr "¡Copiado!" msgid "Copy" msgstr "Copiar" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "Copiar códigos" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "Actualización del kernel" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "No se pudo encontrar el nombre del contenedor antiguo" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "No se pudo encontrar el contenedor temporal" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "Recuento" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "País / Región" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "CPU" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "Estado del CPU" @@ -1186,10 +1485,10 @@ msgstr "" "automáticamente en tu computadora." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "Creado el" @@ -1214,11 +1513,15 @@ msgstr "Credenciales" msgid "Cron Expression" msgstr "Expresión Cron" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "Correlación de cronología entre archivos" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "La cuenta actual tiene habilitada TOTP." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "La cuenta actual no tiene habilitada TOTP." @@ -1238,12 +1541,12 @@ msgstr "Contraseña actual" msgid "Current usage" msgstr "Uso actual" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "Versión actual" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "Personalizado" @@ -1256,14 +1559,18 @@ msgstr "Expresión cron personalizada" msgid "Custom Directory" msgstr "Directorio personalizado" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "Dominios personalizados" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "Certificado de Dominios Personalizados" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "Encabezados personalizados" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1276,6 +1583,10 @@ msgstr "" msgid "Daily" msgstr "Diario" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "Tendencias de Acceso Diario" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "Diariamente a las %{time}" @@ -1283,10 +1594,18 @@ msgstr "Diariamente a las %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "Panel" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "Fecha" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "Rango de fechas" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "Día del mes" @@ -1299,36 +1618,50 @@ msgstr "Día de la semana" msgid "Days" msgstr "Días" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "Archivo de base de datos no encontrado" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "Descompresión exitosa pero falló al eliminar el archivo comprimido: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "Descifrado fallido" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "Rango predeterminado" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "" "Defina el nombre y el tamaño de la zona de memoria compartida, por ejemplo " "proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "Eliminar" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "Error al eliminar %{path} en %{env_name}" +msgid "Delete %{path} on %{node_name} failed" +msgstr "Error al eliminar %{path} en %{node_name}" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "Se eliminó %{path} en %{env_name} correctamente" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "%{path} eliminado en %{node_name} correctamente" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "Eliminar certificado" @@ -1348,43 +1681,44 @@ msgstr "Error al eliminar la configuración remota" msgid "Delete Remote Config Success" msgstr "Eliminación de configuración remota exitosa" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "Error al eliminar sitio remoto" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "Borrado del sitio remoto correcto" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "Error al eliminar transmisión remota" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "Eliminación de transmisión remota exitosa" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "Eliminar el sitio %{name} de %{node} falló" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "Sitio %{name} eliminado de %{node} correctamente" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "Eliminar sitio: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "Error al eliminar el flujo %{name} de %{node}" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "Se eliminó el flujo %{name} de %{node} correctamente" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "Eliminar stream: %{site_name}" @@ -1400,8 +1734,16 @@ msgstr "Demostración" msgid "Deploy" msgstr "Desplegar" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "Modo de despliegue" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "Descendente" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "Descripción" @@ -1417,18 +1759,44 @@ msgstr "Archivo de destino: {0} ya existe" msgid "Details" msgstr "Detalles" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Dev" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "Desarrollo" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "Modo de desarrollo" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "Dispositivo" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "Estadísticas de dispositivos" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "Tipo de dispositivo" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "El contenido del archivo de resumen está vacío" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "DingTalk" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "Directo" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "Directiva" @@ -1449,98 +1817,101 @@ msgstr "DirectiveIdx fuera de rango" msgid "Directives" msgstr "Directivas" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "Niveles de directorio" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "Ruta del directorio para almacenar archivos de caché" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "Desactivar" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "Error al desactivar la renovación automática para %{name}" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "Error al deshabilitar sitio remoto" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "Error al desactivar el mantenimiento del sitio remoto" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "Desactivación del mantenimiento del sitio remoto exitosa" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "Sitio remoto deshabilitado correctamente" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "Error al desactivar transmisión remota" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "Desactivación de transmisión remota exitosa" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "Desactivar el sitio %{name} desde %{node} falló" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "Sitio %{name} deshabilitado en %{node} correctamente" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "Desactivar el mantenimiento del sitio %{name} en %{node} falló" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "Desactivación del mantenimiento del sitio %{name} en %{node} exitosa" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "Desactivar el flujo %{name} desde %{node} falló" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "Deshabilitar el flujo %{name} desde %{node} con éxito" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "Desactivado" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "Desactivado con éxito" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "Desconectado" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "I/O del disco" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "Credenciales de DNS" @@ -1549,11 +1920,15 @@ msgstr "Credenciales de DNS" msgid "DNS Provider" msgstr "Proveedor DNS" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "Resolución DNS" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "No habilite esta opción a menos que esté seguro de que la necesita." @@ -1561,11 +1936,11 @@ msgstr "No habilite esta opción a menos que esté seguro de que la necesita." msgid "Do you want to %{action} this site?" msgstr "¿Desea %{action} este sitio?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "¿Quieres %{action} este flujo?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "¿Desea deshabilitar la renovación automática de certificado?" @@ -1578,7 +1953,7 @@ msgstr "¿Quieres habilitar TLS?" msgid "Do you want to remove this server?" msgstr "¿Quieres eliminar este servidor?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "¿Quieres eliminar esta transmisión?" @@ -1586,7 +1961,7 @@ msgstr "¿Quieres eliminar esta transmisión?" msgid "Docker client not initialized" msgstr "Cliente de Docker no inicializado" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "El socket de Docker existe" @@ -1600,16 +1975,37 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "Documento" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "Recuento de documentos" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "Dominio" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "" "La lista de dominios está vacía, intente reabrir la certificación " "automática para %{config}" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "Descargar archivos de certificado" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "Descarga completa" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "Descarga fallida" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "Descargar base de datos GeoLite2" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "Error al descargar la última versión" @@ -1618,12 +2014,19 @@ msgstr "Error al descargar la última versión" msgid "Downloading latest release" msgstr "Descargando la última versión" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "Suelta el archivo de certificado aquí" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "Suelta el archivo de clave privada aquí" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "Modo de ejecución de prueba habilitado" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1632,10 +2035,12 @@ msgstr "" "utilizar claves de acceso en sitios web que no sean HTTPS, excepto cuando " "se ejecutan en el host local." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "Duplicar" @@ -1644,21 +2049,33 @@ msgstr "Duplicar" msgid "Duplicate to local successfully" msgstr "Duplicado con éxito a local" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "Dinámico" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "Gestión dinámica de particiones" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "p. ej., 0 0 * * * (diariamente a medianoche)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "Clave HMAC EAB" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "ID de clave EAB" + #: src/language/curd.ts:8 msgid "Edit" msgstr "Editar" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "Editar %{n}" @@ -1675,7 +2092,7 @@ msgstr "Editar Sitio" msgid "Edit Stream" msgstr "Editar Transmisión" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "Correo" @@ -1684,16 +2101,28 @@ msgstr "Correo" msgid "Email (*)" msgstr "Correo (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "Línea de registro vacía" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "habilitar" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "Habilitar 2FA exitoso" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "Habilitar indexación avanzada" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "Habilitar indexación avanzada de registros" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "No se pudo activar la renovación automática por %{name}" @@ -1717,57 +2146,61 @@ msgstr "Habilitar HTTP/3" msgid "Enable HTTPS" msgstr "Habilitar HTTPS" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "Habilitar indexación" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "Habilitar caché de proxy" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "Error al habilitar sitio remoto" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "Error al habilitar el mantenimiento del sitio remoto" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "Habilitar mantenimiento del sitio remoto exitoso" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "Sitio remoto habilitado con éxito" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "Error al habilitar transmisión remota" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "Habilitar transmisión remota exitosa" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "No se pudo habilitar el mantenimiento del sitio %{name} en %{node}" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "Habilitar el mantenimiento del sitio %{name} en %{node} correctamente" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "No se pudo habilitar el sitio %{name} en %{node}" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "Sitio %{name} habilitado en %{node} correctamente" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "No se pudo habilitar el flujo %{name} en %{node}" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "Habilitar el flujo %{name} en %{node} correctamente" @@ -1779,29 +2212,29 @@ msgstr "Habilitar módulo stub_status" msgid "Enable TLS" msgstr "Habilitar TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "Habilitar TOTP" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "Habilitado" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "Habilitado con éxito" @@ -1817,6 +2250,16 @@ msgstr "" "Habilita soporte para HTTP/3 basado en el protocolo QUIC para el mejor " "rendimiento" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"Habilitar el indexado avanzado de registros consumirá recursos " +"computacionales significativos, incluidos CPU y memoria. Asegúrese de que " +"su sistema cumpla con los requisitos mínimos antes de continuar." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Encriptar sitio web con Let's Encrypt" @@ -1825,11 +2268,19 @@ msgstr "Encriptar sitio web con Let's Encrypt" msgid "End" msgstr "Fin" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "Fecha de finalización" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "Ingresar nombre de dominio" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "Ingrese la dirección IP del servidor (ej. 203.0.113.1 o 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "Ingrese su dominio" @@ -1841,39 +2292,58 @@ msgstr "La configuración del entorno está vacía" msgid "Environment variables cleaned" msgstr "Variables de entorno limpiadas" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "Entornos" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "Error" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "Detalles del error" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "Error al inicializar el visor de diferencias" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "Registro de errores" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "Registro de errores detectado" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "La ruta del registro de errores no existe" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "Logs de error" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "" +"Los registros de errores no admiten análisis estructurado ya que contienen " +"mensajes de texto libre." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "Reconocimiento de patrones de error" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "Error al procesar el contenido" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "El archivo binario ejecutable está vacío" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "Ruta ejecutable" @@ -1889,6 +2359,22 @@ msgstr "Ejecutar todos los días a las %{time}" msgid "Execute on every month on day %{day} at %{time}" msgstr "Ejecutar cada mes el día %{day} a las %{time}" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "Expandir" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "Rendimiento esperado" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "Códigos de estado esperados" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "Texto esperado" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1902,12 +2388,36 @@ msgstr "Vencido el: %{date}" msgid "Export Excel" msgstr "Exportar Excel" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "" +"Clave HMAC de vinculación de cuenta externa (opcional). Debe estar en " +"formato de codificación Base64 URL." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "" +"ID de clave de vinculación de cuenta externa (opcional). Requerido por " +"algunos proveedores ACME como ZeroSSL." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "Contenedor Docker externo" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "Configuración de notificación externa no encontrada" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "Prueba de notificación externa" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "Notificación Externa" @@ -1938,15 +2448,15 @@ msgstr "Error al hacer copia de seguridad de los archivos de Nginx UI: {0}" msgid "Failed to build nginx config: {0}" msgstr "Error al construir la configuración de nginx: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "Error al calcular el hash: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Error al calcular el hash de Nginx: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Error al calcular el hash de Nginx UI: {0}" @@ -1959,38 +2469,35 @@ msgid "Failed to copy config file: {0}" msgstr "Error al copiar el archivo de configuración: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "Error al copiar el directorio de la base de datos: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "Error al copiar el archivo de la base de datos: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "Error al copiar el contenido del archivo: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Error al copiar el directorio de configuración de Nginx: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "Error al copiar al portapapeles" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "No se pudo crear la copia de seguridad" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "Error al crear el directorio de respaldo: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "Error al crear el archivo de respaldo: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "Error al crear el directorio: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "Error al crear el archivo: {0}" @@ -1998,19 +2505,19 @@ msgstr "Error al crear el archivo: {0}" msgid "Failed to create hash info file: {0}" msgstr "Error al crear el archivo de información de hash: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "Error al crear el directorio principal: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "Error al crear el directorio de restauración: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "Error al crear el directorio de almacenamiento {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "Error al crear el enlace simbólico: {0}" @@ -2026,48 +2533,64 @@ msgstr "Error al crear el directorio temporal" msgid "Failed to create temporary subdirectory" msgstr "Error al crear el subdirectorio temporal" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "Error al crear el lector xz: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "Error al crear el archivo ZIP: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "Error al crear la entrada ZIP: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "Error al crear el archivo ZIP: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "Error al crear la cabecera ZIP: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "Error al descomprimir la base de datos GeoLite2: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "Error al descifrar los datos: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "Error al descifrar el archivo: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Error al descifrar el directorio de Nginx: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Error al descifrar el directorio de Nginx UI: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "Error al eliminar todos los índices" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "No se pudo eliminar el certificado" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "Error al eliminar el certificado de la base de datos: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "Error al eliminar el índice del archivo" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "Error al deshabilitar %{msg}" @@ -2075,20 +2598,32 @@ msgstr "Error al deshabilitar %{msg}" msgid "Failed to disable maintenance mode %{msg}" msgstr "Error al desactivar el modo de mantenimiento: %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "Error al descargar los archivos del certificado" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "Error al descargar la base de datos GeoLite2: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "Error al habilitar %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "Error al habilitar la indexación avanzada" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "No se pudo activar el modo de mantenimiento: %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "Error al cifrar los datos: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "Error al cifrar el archivo: {0}" @@ -2100,10 +2635,6 @@ msgstr "Error al cifrar el directorio de Nginx: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Error al cifrar el directorio de Nginx UI: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "Error al evaluar los enlaces simbólicos: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "Error al ejecutar el comando: {0}" @@ -2112,7 +2643,7 @@ msgstr "Error al ejecutar el comando: {0}" msgid "Failed to execute template: {0}" msgstr "Error al ejecutar la plantilla: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "Error al extraer el archivo: {0}" @@ -2132,14 +2663,30 @@ msgstr "No se pudo obtener la información del certificado" msgid "Failed to get container id: {0}" msgstr "Error al obtener el ID del contenedor: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "Error al obtener el tamaño del archivo: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "Error al obtener el estado del índice" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Error al obtener la configuración de rendimiento de Nginx" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "Error al obtener la ruta de nginx.conf" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "Error al obtener los datos de rendimiento" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "Error al obtener las estadísticas de persistencia" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "Error al obtener el estado de stub: {0}" @@ -2156,15 +2703,19 @@ msgstr "Error al inspeccionar el contenedor actual: {0}" msgid "Failed to load history records" msgstr "Error al cargar los registros históricos" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "Error al abrir el archivo: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "Error al abrir el archivo fuente: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "Error al abrir la entrada ZIP: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "Error al abrir el archivo ZIP: {0}" @@ -2184,15 +2735,23 @@ msgstr "Error al analizar la plantilla: {0}" msgid "Failed to pull image: {0}" msgstr "Error al descargar la imagen: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "Error al leer los datos comprimidos: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "Error al leer el archivo cifrado: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "Error al leer el archivo" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "Error al leer el archivo: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "Error al leer el archivo de información de hash: {0}" @@ -2208,57 +2767,97 @@ msgstr "Error al leer la salida: {0}" msgid "Failed to read response body: {0}" msgstr "Error al leer el cuerpo de la respuesta: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "Error al leer el enlace simbólico: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "Error al reconstruir el índice de archivos" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "Error al reconstruir el índice" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "Error al actualizar los sitios" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Error al restaurar las configuraciones de Nginx: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "Error al restaurar los archivos de la interfaz de usuario de Nginx: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "No se pudo revocar el certificado" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "No se pudo revocar el certificado: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "Error al guardar la configuración" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "Error al guardar el archivo descargado: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "Error al guardar la configuración de verificación de estado" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Error al guardar la configuración de rendimiento de Nginx" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "Error al guardar el orden" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "Error al enviar el mensaje de prueba" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "Error al iniciar el contenedor temporal: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "Error al actualizar el estado" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "Error al subir el archivo" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "Error al verificar los hashes: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "Error al escribir el archivo de respaldo: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "Error al escribir los datos descomprimidos: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "Error al escribir el archivo desencriptado: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "Error al escribir el archivo cifrado: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "Error al escribir el archivo de clave de seguridad: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "Error al escribir en el búfer ZIP: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "Características" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2272,6 +2871,10 @@ msgstr "Archivo" msgid "File exists" msgstr "El archivo existe" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "Reconstrucción del índice de archivos iniciada correctamente para %{path}" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "Archivo no encontrado" @@ -2280,19 +2883,35 @@ msgstr "Archivo no encontrado" msgid "File or directory not found: {0}" msgstr "Archivo o directorio no encontrado: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "Se requiere la ruta del archivo" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "El tamaño del archivo no puede exceder los 5 MB" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "Archivo subido correctamente" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "El nombre del archivo está vacío" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "Filtro" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "Filtrar contenido del registro" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "Terminado" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "Primera vista" @@ -2304,7 +2923,11 @@ msgstr "carpeta" msgid "Folder" msgstr "Carpeta" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "Seguir redirecciones" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2321,6 +2944,33 @@ msgstr "Para usuarios chinos" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "Para usuario chino: https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "Para uso comercial o profesional, contacte con" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" +"Para los registros de errores, utilice el Visor de Registros sin Procesar " +"para una mejor experiencia de visualización." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" +"Para configuraciones de certificados basados en IP, solo se admite el " +"método de desafío HTTP-01. El desafío DNS-01 no es compatible con " +"certificados basados en IP." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "" +"Para certificados basados en IP, especifique la dirección IP del servidor " +"que se incluirá en el certificado." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "Error al analizar el formulario" @@ -2341,6 +2991,22 @@ msgstr "Formato: minuto hora día mes día_de_la_semana" msgid "Friday" msgstr "Viernes" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "De registros indexados" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "Frontend" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "Búsqueda de texto completo" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "Soporte de búsqueda de texto completo" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "Certificado General" @@ -2349,16 +3015,16 @@ msgstr "Certificado General" msgid "Generate" msgstr "Generar" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "Generar nuevos códigos de recuperación" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "Generar códigos de recuperación" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "Códigos de recuperación generados con éxito" @@ -2366,6 +3032,39 @@ msgstr "Códigos de recuperación generados con éxito" msgid "Generating private key for registering account" msgstr "Generando clave privada para registrar cuenta" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "Base de datos GeoLite2" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "Base de datos GeoLite2 disponible" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "Base de datos GeoLite2 instalada" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "No se encontró la base de datos GeoLite2 en {0}" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"No se encontró la base de datos GeoLite2 en {0}. La indexación de registros " +"requiere la base de datos GeoLite2 para el análisis geográfico de IP" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "Base de datos GeoLite2 requerida" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "Error al obtener el usuario de ACME: {0}" @@ -2378,8 +3077,7 @@ msgstr "Error al obtener los datos" msgid "Get dns credential error: {0}" msgstr "Error al obtener las credenciales DNS: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "Obtener error de información de versión" @@ -2391,10 +3089,40 @@ msgstr "Obteniendo el certificado, por favor espere..." msgid "Github Proxy" msgstr "Proxy Github" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "Mapa de Acceso Global" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "Mapa Mundial" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "Ir al Visor de Registros en Bruto" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" +"La verificación de salud gRPC requiere que el servidor implemente el " +"servicio de verificación de salud gRPC (grpc.health.v1.Health)." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"gRPCS utiliza cifrado TLS. El servidor debe implementar el servicio de " +"verificación de salud de gRPC. Para pruebas, la validación SSL está " +"desactivada por defecto." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "Compresión GZIP" @@ -2407,25 +3135,51 @@ msgstr "Nivel de compresión GZIP" msgid "GZIP Min Length" msgstr "Longitud mínima de GZIP" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "Falló la verificación del hash: integridad del archivo comprometida" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "Comprobación de salud" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "Configuración de verificación de estado" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "Configuración de verificación de salud guardada" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "Configuración de verificación de salud guardada exitosamente" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "Estado de salud" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "Ocultar" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "Ocultar asistente" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "Alto" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "Un valor más alto significa una mejor reutilización de la conexión" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "Historial" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "Inicio" @@ -2434,10 +3188,11 @@ msgid "Host" msgstr "Host" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "Hora" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2445,7 +3200,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "Puerto de desafío HTTP" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "Método HTTP" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2453,15 +3212,15 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "Protocolo HTTPS" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "Número ICP" -#: src/views/certificate/ACMEUser.vue:43 -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/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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." @@ -2470,17 +3229,26 @@ 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/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "Si desea revocar automáticamente el certificado antiguo, active esta opción." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" +"Si desea cambiar la ubicación de almacenamiento, puede configurar el " +"`IndexPath` de la sección `nginx_log` en la configuración de la interfaz de " +"Nginx." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "Si su navegador admite WebAuthn Passkey, aparecerá un cuadro de diálogo." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2492,12 +3260,12 @@ msgstr "" msgid "Import" msgstr "Importar" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "Importar Certificado" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "Tiempo inactivo" @@ -2509,7 +3277,46 @@ msgstr "" "Incluye proceso maestro, procesos worker, procesos de caché y otros " "procesos de Nginx" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "Escaneo de índice incremental" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "Reconstrucción de índice y estadísticas iniciada con éxito" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "Error de indexación" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "Error de indexación, por favor intente reconstruir" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "Reconstrucción de índice iniciada" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "Estado del índice" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "Indexado" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "Indexación" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "Indexando registros..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "Indexando..." @@ -2517,10 +3324,14 @@ msgstr "Indexando..." msgid "Indicator" msgstr "Indicador" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "Información" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "El usuario inicial no existe" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "Error de actualización de kernel inicial" @@ -2529,7 +3340,7 @@ msgstr "Error de actualización de kernel inicial" msgid "Initialing core upgrader" msgstr "Inicializando la actualización del kernel" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "Ingrese el código de la aplicación:" @@ -2544,7 +3355,7 @@ msgstr "Omitir verificación insegura" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "Instalar" @@ -2572,27 +3383,36 @@ msgstr "" msgid "Interval" msgstr "Intervalo" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "Inválido" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "Formato de IV de AES no válido: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "Formato de clave AES no válido: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "Formato de certificado no válido" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "Tipo de reclamación no válido" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "SHA de confirmación no válido" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "Objeto de archivo no válido" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "Ruta de archivo no válida: {0}" @@ -2605,6 +3425,10 @@ msgstr "Nombre de archivo inválido" msgid "Invalid folder name" msgstr "Nombre de carpeta inválido" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "ID de notificación no válido" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "Configuración de notificador no válida" @@ -2613,7 +3437,7 @@ msgstr "Configuración de notificador no válida" msgid "Invalid otp code" msgstr "Código OTP inválido" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "Relleno no válido en los datos descifrados" @@ -2621,10 +3445,15 @@ msgstr "Relleno no válido en los datos descifrados" msgid "Invalid passcode or recovery code" msgstr "Código de acceso o código de recuperación inválido" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "Ruta no válida: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "Formato de clave privada no válido" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "Código de recuperación no válido" @@ -2633,19 +3462,41 @@ msgstr "Código de recuperación no válido" msgid "Invalid request format" msgstr "Formato de solicitud no válido" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "Formato de token de seguridad no válido" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "ID de chat de Telegram no válida: no puede ser cero" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "Formato de marca de tiempo no válido" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "Tipo de mensaje WebSocket no válido" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "Dirección IP" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "Aviso de certificado IP" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "Emitir certificado" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "Emitir certificado" @@ -2665,7 +3516,7 @@ msgstr "elemento(s)" msgid "Jwt Secret" msgstr "Secreto Jwt" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2677,12 +3528,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "Tiempo de espera de Keepalive" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "Tipo llave" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "Idioma" @@ -2694,6 +3545,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark Personalizado" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "Últimas 12 horas" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "Últimos 14 días" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "Últimos 15 minutos" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "Últimas 24 horas" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "Últimos 30 días" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "Últimos 30 minutos" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "Últimas 4 horas" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "Últimos 7 días" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "Últimos 90 días" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "Estado del último respaldo" @@ -2702,15 +3591,35 @@ msgstr "Estado del último respaldo" msgid "Last Backup Time" msgstr "Hora del último respaldo" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "Última verificación" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "Comprobado por última vez el" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "Última hora" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "Última indexación" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "Mes pasado" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "Última actualización" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "Última actualización:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "Último uso" @@ -2726,12 +3635,18 @@ msgstr "Dejar en blanco para el valor predeterminado: https://api.openai.com/" msgid "Leave blank if do not want to modify" msgstr "Dejar en blanco si no desea modificar" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "Dejar en blanco si no es requerido por su proveedor de ACME" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "Déjelo en blanco si no lo necesita." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "Dejarlo en blanco no cambiará nada" @@ -2739,16 +3654,24 @@ msgstr "Dejarlo en blanco no cambiará nada" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "Código de recuperación heredado no permitido ya que TOTP no está habilitado" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego desactivar soporte CNAME" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "Licencia" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "Distribución de licencias" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "Tipos de licencia" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "Enlace" @@ -2764,32 +3687,32 @@ msgstr "Escuchando" msgid "Load Average:" msgstr "Promedios de carga:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "Cargar desde configuraciones" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "Cargado con éxito" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "Cargado" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "Archivos del cargador" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "Configuración del cargador" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "Pausa del cargador" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "Umbral del cargador" @@ -2797,9 +3720,15 @@ msgstr "Umbral del cargador" msgid "Loading data..." msgstr "Cargando datos..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "Cargando..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2818,11 +3747,11 @@ msgstr "Ubicación" msgid "Locations" msgstr "Ubicaciones" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "Registro" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2833,23 +3762,61 @@ msgstr "" "https://nginxui.com/zh_CN/guide/config-nginx-log.html para obtener más " "información." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "El archivo de registro no existe" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "El archivo de registro no es un archivo regular" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "Archivo de registro no disponible" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "Archivo de registro aún no indexado" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "Indexador de registros no disponible" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "¡Indexación de registros completada! Cargando datos actualizados..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "La línea de registro supera la longitud máxima" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "Lista de registros" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" +"El analizador de registros no está inicializado; llame a " +"indexer.InitLogParser() antes de usarlo" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "La ruta del registro no está en la lista blanca" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "Acceso" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "Acceso exitoso" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "Cierre de sesión exitoso" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Rotación de logs" @@ -2870,9 +3837,20 @@ msgstr "" "de Nginx UI ejecutará el comando logrotate en el intervalo que establezca " "en minutos." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "Bajo" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "Nodo principal" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "Mantenimiento" @@ -2888,7 +3866,7 @@ msgstr "Modo de mantenimiento activado correctamente" msgid "Make certificate dir error: {0}" msgstr "Error al crear el directorio del certificado: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2903,11 +3881,11 @@ msgstr "" msgid "Manage Configs" msgstr "Administrar configuraciones" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "Administrar sitios" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "Administrar Transmisiones" @@ -2919,15 +3897,15 @@ msgstr "Administrar usuarios" msgid "Managed Certificate" msgstr "Certificado Administrado" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "Archivos del gestor" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "Tiempo de espera del administrador" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "Umbral del Administrador" @@ -2953,7 +3931,7 @@ msgstr "Proceso maestro" msgid "Master Process" msgstr "Proceso maestro" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "Intentos máximos" @@ -2961,11 +3939,15 @@ msgstr "Intentos máximos" msgid "Max Concurrent Connections" msgstr "Conexiones simultáneas máximas" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "Redirecciones máximas" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "Solicitudes máximas por segundo" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "Tamaño máximo de caché" @@ -2982,7 +3964,7 @@ msgstr "Número máximo de conexiones simultáneas" msgid "Maximum number of connections per worker process" msgstr "Número máximo de conexiones por proceso de trabajo" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "Tamaño máximo total de la caché" @@ -2992,6 +3974,7 @@ msgstr "Número máximo de procesos de trabajo:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "Memoria" @@ -2999,22 +3982,39 @@ msgstr "Memoria" msgid "Memory and Storage" msgstr "Memoria y almacenamiento" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "Diseño de memoria" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "Uso de memoria (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "Método" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "Nombre del método" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "Tamaño mínimo de archivo para compresión" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "Espacio libre mínimo" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "Espacio libre mínimo en el directorio de caché" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "Mínimo:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "Minuto" @@ -3023,21 +4023,36 @@ msgstr "Minuto" msgid "Minutes" msgstr "Minutos" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "Espejo" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "Modelo" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "Servicio de análisis moderno no disponible" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "Servicio de indexación moderno no disponible" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "Servicio de búsqueda moderno no disponible" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "Modificado el" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "Modificar" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "Modificar Certificado" @@ -3045,7 +4060,7 @@ msgstr "Modificar Certificado" msgid "Modify Config" msgstr "Modificar configuración" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "Módulo" @@ -3053,6 +4068,10 @@ msgstr "Módulo" msgid "Modules" msgstr "Módulos" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "Caché de módulos actualizado" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "Lunes" @@ -3065,39 +4084,66 @@ msgstr "Mensual" msgid "Monthly on day %{day} at %{time}" msgstr "Mensualmente el día %{day} a las %{time}" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "Visualización de datos multidimensional" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "Directiva multilínea" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "Debe ser una dirección IP pública accesible desde Internet" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "N/A" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "Nombre" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "Nombre o contenido" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "Espacio de nombres" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "Espacios de nombres" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "Es necesario habilitar el módulo stub_status" @@ -3110,6 +4156,10 @@ msgstr "Red" msgid "Network Statistics" msgstr "Estadísticas de red" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "Chat nuevo" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "Error en el nuevo proveedor de desafío DNS: {0}" @@ -3138,18 +4188,18 @@ msgstr "Nueva ruta" msgid "New transport error: {0}" msgstr "Error de transporte nuevo: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "Se liberó una nueva versión" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "Siguiente" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3161,7 +4211,7 @@ msgstr "La salida de Nginx -T está vacía" msgid "Nginx Access Log Path" msgstr "Ruta de registro de acceso de Nginx" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Existe la ruta del registro de acceso de Nginx" @@ -3190,15 +4240,15 @@ msgstr "La configuración de Nginx no incluye sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "La configuración de Nginx no incluye stream-enabled" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "El directorio de configuración de Nginx no está establecido" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "El directorio de configuración de Nginx existe" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "El archivo de entrada de configuración de Nginx existe" @@ -3206,8 +4256,8 @@ msgstr "El archivo de entrada de configuración de Nginx existe" msgid "Nginx configuration has been restored" msgstr "La configuración de Nginx ha sido restaurada" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Error de análisis de configuración de Nginx" @@ -3236,7 +4286,7 @@ msgstr "Tasa de uso de CPU de Nginx" msgid "Nginx Error Log Path" msgstr "Ruta de registro de errores de Nginx" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "La ruta del registro de errores de Nginx existe" @@ -3245,7 +4295,7 @@ msgid "Nginx error: {0}" msgstr "Error de Nginx: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3260,7 +4310,7 @@ msgstr "Nginx no se está ejecutando en otro contenedor" msgid "Nginx is running" msgstr "Nginx está en ejecución" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Registro Nginx" @@ -3268,6 +4318,10 @@ msgstr "Registro Nginx" msgid "Nginx Log Directory Whitelist" msgstr "Lista blanca de directorios de registro de Nginx" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Indexación de registros de Nginx..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3277,7 +4331,7 @@ msgstr "Uso de memoria de Nginx" msgid "Nginx PID Path" msgstr "Ruta del PID de Nginx" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "La ruta del PID de Nginx existe" @@ -3290,7 +4344,7 @@ msgstr "Comando de recarga de Nginx" msgid "Nginx reload failed: {0}" msgstr "Recarga de Nginx fallida: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Las operaciones de recarga de Nginx se han enviado a los nodos remotos" @@ -3302,7 +4356,7 @@ msgstr "Nginx recargado con éxito" msgid "Nginx Restart Command" msgstr "Comando de reinicio de Nginx" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Las operaciones de reinicio de Nginx se han enviado a los nodos remotos" @@ -3310,7 +4364,7 @@ msgstr "Las operaciones de reinicio de Nginx se han enviado a los nodos remotos" msgid "Nginx restarted successfully" msgstr "Nginx reiniciado con éxito" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "El camino sbin de Nginx existe" @@ -3343,41 +4397,73 @@ msgstr "" "La configuración de Nginx UI ha sido restaurada y se reiniciará " "automáticamente en unos segundos." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf incluye el directorio conf.d" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf incluye el directorio sites-enabled" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf incluye el directorio streams-enabled" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "No" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "Sin acción" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "No hay certificado disponible" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "No hay datos geográficos de China disponibles" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "Sin datos" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "Sin datos" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "No hay entradas en la página actual" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "No hay datos geográficos disponibles" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "No se encontraron registros en el intervalo de tiempo seleccionado." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "No se han seleccionado nodos" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "No se han seleccionado registros" @@ -3386,24 +4472,34 @@ msgstr "No se han seleccionado registros" msgid "No servers configured" msgstr "No hay servidores configurados" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "No se encontraron sitios" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "" +"No se encontró ninguna dirección IP específica en la configuración de " +"server_name. Especifique la dirección IP del servidor a continuación para " +"el certificado." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "No hay datos de registro estructurados disponibles" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "No hay upstreams configurados" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "Nodo" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "Grupo de nodos" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "Grupos de nodos" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "Análisis de nodo fallido: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3413,7 +4509,12 @@ msgstr "Nombre del nodo" msgid "Node Secret" msgstr "Secreto del nodo" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "Estado del nodo" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "Nodos" @@ -3421,26 +4522,38 @@ msgstr "Nodos" msgid "Not After" msgstr "No después de" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "Texto no esperado" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "No encontrado" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "No indexado" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "No cargado" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "No compatible con certificados de IP" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "No válido antes: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "Nota" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." @@ -3449,11 +4562,25 @@ msgstr "" "configuraciones o certificados, sincronícelos con anticipación a los nodos " "remotos." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"Nota: Si el servidor no admite Reflexión gRPC, los controles de salud " +"pueden fallar. Asegúrese de que su servidor gRPC tenga la Reflexión " +"habilitada." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "Nada que copiar" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "Notificación" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "Notificaciones" @@ -3462,17 +4589,21 @@ msgstr "Notificaciones" msgid "Notifier not found" msgstr "Notificador no encontrado" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "" "Número de procesos de trabajo concurrentes, se establece automáticamente " "según el número de núcleos de la CPU" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "Número de archivos procesados por el cargador de caché a la vez" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "Número de archivos procesados por el administrador de caché a la vez" @@ -3487,7 +4618,7 @@ msgstr "Número de procesos de trabajo" msgid "Obtain cert error: {0}" msgstr "Error al obtener el certificado: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "Obtener certificado" @@ -3495,11 +4626,11 @@ msgstr "Obtener certificado" msgid "Obtaining certificate" msgstr "Obteniendo certificado" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP debe estampillarse" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." @@ -3508,7 +4639,7 @@ msgstr "" "acceso usando Firefox." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "Apagado" @@ -3516,48 +4647,58 @@ msgstr "Apagado" msgid "Official Document" msgstr "Documentación oficial" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "Desconectado" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "Análisis GeoIP sin conexión" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "OK" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "Encendido" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "Una vez que se complete la verificación, los registros se eliminarán." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "En línea" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "Recuento en línea" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "Solo se permiten archivos ZIP" @@ -3566,23 +4707,46 @@ msgstr "Solo se permiten archivos ZIP" msgid "Open" msgstr "Abierto" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "Limitación de código abierto" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "Sistema operativo" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "Estadísticas del sistema operativo" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "O" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "o arrastra el archivo al editor de abajo" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "O ingrese el secreto: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "Orden guardado correctamente" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "Nombre original" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "SO" @@ -3629,11 +4793,15 @@ msgstr "Parámetros" msgid "Params Optimization" msgstr "Optimización de parámetros" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "Rendimiento del analizador" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "Llave de acceso" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3644,7 +4812,7 @@ msgstr "" "dispositivo o un PIN. Se pueden utilizar como reemplazo de contraseña o " "como método de autenticación de dos factores." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "Contraseña" @@ -3673,11 +4841,13 @@ msgstr "Las contraseñas no coinciden" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "Ruta" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "La ruta no está en las rutas de acceso concedidas: {0}" @@ -3689,12 +4859,28 @@ msgstr "La ruta: {0} no está dentro del directorio de configuración de nginx: msgid "Payload resource is nil" msgstr "El recurso de carga útil es nulo" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "Hora pico" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "Pendiente" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "Porcentaje" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "Realizar" @@ -3738,7 +4924,11 @@ msgstr "" "Por favor, active el módulo stub_status para obtener estadísticas de " "solicitudes, recuento de conexiones, etc." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "Por favor ingrese" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." @@ -3746,11 +4936,19 @@ msgstr "" "Ingrese un nombre para la llave de acceso que desea crear y a continuación " "haga clic en el botón Aceptar." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "Por favor, introduzca una dirección IPv4 válida (0-255 por octeto)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "Por favor, introduzca una dirección IPv4 o IPv6 válida" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "Por favor, introduzca un rango de puertos válido" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "Por favor, ingrese al menos un dominio" @@ -3769,6 +4967,10 @@ msgstr "" "Por favor, introduzca el token de seguridad recibido durante la copia de " "seguridad" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "Por favor, introduzca la dirección IP del servidor" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "Por favor, complete todos los campos correctamente" @@ -3777,7 +4979,7 @@ msgstr "Por favor, complete todos los campos correctamente" msgid "Please fill in required S3 configuration fields" msgstr "Por favor, complete los campos de configuración de S3 requeridos" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." @@ -3785,7 +4987,7 @@ msgstr "" "Por favor, complete las credenciales de autenticación API proporcionadas " "por su proveedor de DNS." -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3794,7 +4996,7 @@ msgstr "" "luego seleccione una de las credenciales de aquí debajo para llamar a la " "API del proveedor de DNS." -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3832,20 +5034,20 @@ msgstr "" msgid "Please input your E-mail!" msgstr "¡Por favor ingrese su correo electrónico!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "¡Por favor ingrese su contraseña!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "¡Por favor ingrese su nombre de usuario!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "Por favor, inicie sesión." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "" "Tenga en cuenta que las siguientes configuraciones de unidades de tiempo " @@ -3865,25 +5067,31 @@ msgstr "" msgid "Please select a backup file" msgstr "Por favor, seleccione un archivo de respaldo" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "Por favor, seleccione un tipo de notificación" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "Por favor, seleccione un archivo %{type} válido (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "Por favor seleccione al menos un elemento" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Por favor, seleccione al menos un nodo para recargar Nginx" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Por favor, seleccione al menos un nodo para reiniciar Nginx" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "Seleccione al menos un nodo para actualizar" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "Por favor, escriba \"Revocar\" para confirmar" @@ -3896,23 +5104,26 @@ msgstr "Por favor, escriba el texto de confirmación exacto" msgid "Port" msgstr "Puerto" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "El puerto 80 debe estar abierto para la validación del desafío HTTP-01" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "Escáner de puertos" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "Acción posterior a la sincronización" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "Prelanzamiento" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "Configuración" @@ -3920,6 +5131,19 @@ msgstr "Configuración" msgid "Preparing lego configurations" msgstr "Preparar la configuración de LEGO" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "CA privada:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "Las IPs privadas (192.168.x.x, 10.x.x.x, 172.16-31.x.x) fallarán" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "clave privada" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "Proceso" @@ -3936,6 +5160,10 @@ msgstr "Información del proceso" msgid "Processing {count}/{total}" msgstr "Procesando {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "Canalización de producción" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "Prohibir cambiar la contraseña de root en la demostración" @@ -3952,6 +5180,10 @@ msgstr "Grupo del proyecto" msgid "Protected Directory" msgstr "Directorio protegido" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "Protocolo" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3962,7 +5194,7 @@ msgstr "" "directamente. Si utiliza un proxy inverso, configure el protocolo por " "separado en el proxy inverso." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "Proveedor" @@ -3970,22 +5202,57 @@ msgstr "Proveedor" msgid "Provider not found: {0}" msgstr "Proveedor no encontrado: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "Provincia / Región" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "Proxy" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "Pase de Proxy" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "Objetivos del proxy" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "Requisitos de CA pública:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "Número de Seguridad Pública" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "Visitas a la página" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "En cola" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "En cola para indexación..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "Selección rápida" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "Crudo" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "Volver a descargar la base de datos" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "Error al leer el directorio: {0}" @@ -4000,24 +5267,48 @@ msgstr "Solicitudes de lectura" msgid "Reads" msgstr "Lecturas" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "Panel de análisis en tiempo real" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "Reconstruir" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "Reconstruir todos los índices" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "Reconstruir índice de archivo" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "Reconstruir índice" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Recibido" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "Volver a comprobar" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "Recomendado:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "Recuperación" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "Códigos de recuperación" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -4030,15 +5321,29 @@ msgstr "" msgid "Recursive Nameservers" msgstr "Servidores de nombres recursivos" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "Referente" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "Actualizar" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "Actualizar caché de módulos" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "Regenerar respuesta" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "Registrar" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." @@ -4046,19 +5351,19 @@ msgstr "" "Registre un usuario o utilice esta cuenta para emitir un certificado a " "través de un proxy HTTP." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "Fallo en el registro" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "Registrar al inicio" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "Clave de acceso registrada con éxito" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "Registrado con éxito" @@ -4066,28 +5371,30 @@ msgstr "Registrado con éxito" msgid "Registering user" msgstr "Registrando Usuario" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "Esto de registración" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "Reinstalar" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "Solicitud de API de lanzamiento fallida: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "Nota de versión" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "Recargar" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Recargar Nginx" @@ -4111,7 +5418,7 @@ msgstr "Error al recargar Nginx remoto" msgid "Reload Remote Nginx Success" msgstr "Reinicio remoto de Nginx exitoso" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "La solicitud de recarga falló, por favor verifique su conexión de red" @@ -4123,22 +5430,28 @@ msgstr "Recargando" msgid "Reloading nginx" msgstr "Recargando Nginx" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "Remoto" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "Eliminar" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "Eliminado con éxito" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "Eliminado con éxito" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4147,12 +5460,12 @@ msgid "Rename" msgstr "Renombrar" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "Error al renombrar %{orig_path} a %{new_path} en %{env_name}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "Error al renombrar %{orig_path} a %{new_path} en %{node_name}" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "Se ha renombrado %{orig_path} a %{new_path} en %{node_name} correctamente" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4162,37 +5475,37 @@ msgstr "Error al renombrar la configuración remota" msgid "Rename Remote Config Success" msgstr "Renombrar Configuración Remota Exitosa" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "Error al renombrar sitio remoto" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "Renombrar sitio remoto exitoso" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "Error al renombrar el flujo remoto" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "Renombrar flujo remoto exitoso" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "Error al renombrar el sitio %{name} a %{new_name} en %{node}" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "El sitio %{name} se ha renombrado a %{new_name} en %{node} correctamente" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "Error al renombrar el flujo %{name} a %{new_name} en %{node}" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "Flujo %{name} renombrado a %{new_name} en %{node} correctamente" @@ -4200,7 +5513,7 @@ msgstr "Flujo %{name} renombrado a %{new_name} en %{node} correctamente" msgid "Rename successfully" msgstr "Renombrado con éxito" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4210,8 +5523,8 @@ msgstr "Renombrado con éxito" msgid "Renew cert error: {0}" msgstr "Error al renovar el certificado: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "Renovar Certificado" @@ -4223,11 +5536,23 @@ msgstr "Error al renovar el Certificado" msgid "Renew Certificate Success" msgstr "Renovado de Certificado exitoso" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "Renovado con éxito" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "Solicitud" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "Cuerpo de la solicitud" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "Ruta de solicitud" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "Estadísticas de solicitudes" @@ -4245,13 +5570,19 @@ msgid "Requests Per Connection" msgstr "Solicitudes por conexión" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "Limpiar" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "Restablecer 2FA" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "Reiniciar búsqueda" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4262,6 +5593,10 @@ msgstr "" "toda la memoria de bibliotecas compartidas, que se calculará repetidamente " "para múltiples procesos" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "Advertencia de uso de recursos" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4271,9 +5606,8 @@ msgstr "Respuestas" msgid "Restart" msgstr "Reiniciar" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Reiniciar Nginx" @@ -4293,7 +5627,7 @@ msgstr "Error al reiniciar Nginx remoto" msgid "Restart Remote Nginx Success" msgstr "Reinicio remoto de Nginx exitoso" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "La solicitud de reinicio falló, por favor verifique su conexión de red" @@ -4332,8 +5666,8 @@ msgstr "Restaurar esta versión" msgid "Restored successfully" msgstr "Restaurado con éxito" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "Revocar" @@ -4341,15 +5675,15 @@ msgstr "Revocar" msgid "Revoke cert error: {0}" msgstr "Error al revocar el certificado: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "Revocar certificado antiguo" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "Revocar este certificado" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." @@ -4357,15 +5691,15 @@ msgstr "" "La revocación de un certificado afectará a cualquier servicio que lo esté " "utilizando actualmente. Esta acción no se puede deshacer." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "Nombre RP" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "Orígenes RP" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4401,10 +5735,6 @@ msgstr "Se requiere el ID de clave de acceso de S3" msgid "S3 Bucket" msgstr "Cubo S3" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "Acceso al depósito S3 denegado: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "Se requiere el bucket S3" @@ -4413,7 +5743,7 @@ msgstr "Se requiere el bucket S3" msgid "S3 bucket name" msgstr "Nombre del bucket S3" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "La configuración de S3 está incompleta: falta {0}" @@ -4421,27 +5751,15 @@ msgstr "La configuración de S3 está incompleta: falta {0}" msgid "S3 connection test failed" msgstr "Prueba de conexión S3 fallida" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "Prueba de conexión S3 fallida: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "Prueba de conexión S3 exitosa" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "Las credenciales de S3 no son válidas: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "Punto de conexión S3" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "El punto de conexión de S3 no es válido: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "Se requiere el punto de conexión S3" @@ -4477,7 +5795,7 @@ msgstr "Clave de acceso secreta de S3" msgid "S3 secret access key is required" msgstr "Se requiere la clave de acceso secreta de S3" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "Error al subir a S3: {0}" @@ -4485,17 +5803,19 @@ msgstr "Error al subir a S3: {0}" msgid "Saturday" msgstr "Sábado" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "Guardar" @@ -4503,41 +5823,41 @@ msgstr "Guardar" msgid "Save Directive" msgstr "Guardar Directiva" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "Error al guardar %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "Guardar orden" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "Error al guardar sitio remoto" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "Guardar sitio remoto exitoso" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "Error al guardar el flujo remoto" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "Guardar transmisión remota exitoso" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "Error al guardar el sitio %{name} en %{node}" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "Sitio %{name} guardado en %{node} correctamente" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "Error al guardar el flujo %{name} en %{node}" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "Flujo %{name} guardado en %{node} correctamente" @@ -4545,16 +5865,17 @@ msgstr "Flujo %{name} guardado en %{node} correctamente" msgid "Save successful" msgstr "Guardado exitosamente" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "Guardado con éxito" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "Guardado con éxito" @@ -4578,15 +5899,15 @@ msgstr "Escanear puertos" msgid "Scan Results" msgstr "Resultados del escaneo" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 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 " "aplicación." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "Escaneando registros..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "Escaneando" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4601,16 +5922,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "Buscar" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "Filtros de búsqueda" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "Buscar en el contenido del registro..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "Nombre del módulo de búsqueda" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "Buscar módulos" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "Rango de búsqueda" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "Buscar plantillas" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "El secreto ha sido copiado" @@ -4627,13 +5969,21 @@ msgstr "Token de seguridad" msgid "Security Token Information" msgstr "Información del token de seguridad" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" +"Seleccione un directorio CA predefinido o ingrese uno personalizado. Déjelo " +"en blanco para usar el directorio CA predeterminado." + #: src/language/curd.ts:31 msgid "Select all" msgstr "Seleccionar todo" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "Seleccionar una acción después de sincronizar" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "Seleccione o ingrese una URL de directorio CA" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4643,7 +5993,7 @@ msgstr "Seleccionados {count} archivos" msgid "Selector" msgstr "Seleccionador" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "Autocomprobación" @@ -4659,11 +6009,15 @@ msgstr "" msgid "Send" msgstr "Enviado" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "Enviar mensaje de prueba" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "Servidor" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "Error del servidor" @@ -4671,6 +6025,10 @@ msgstr "Error del servidor" msgid "Server Info" msgstr "Información del servidor" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "Dirección IP del servidor" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "Tamaño del cubo hash de nombres de servidor" @@ -4679,7 +6037,7 @@ msgstr "Tamaño del cubo hash de nombres de servidor" msgid "Server names hash table size" msgstr "Tamaño de la tabla hash de nombres de servidor" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "No se encuentra server_name en las directivas" @@ -4687,6 +6045,10 @@ msgstr "No se encuentra server_name en las directivas" msgid "ServerIdx out of range" msgstr "ServerIdx fuera de rango" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "Nombre del servicio" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "Sesión no encontrada" @@ -4725,6 +6087,10 @@ msgstr "Configuración de variables de entorno" msgid "Setting HTTP01 challenge provider" msgstr "Usando el proveedor de desafíos HTTP01" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "Configuración" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4745,7 +6111,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Configura tu Nginx UI" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "Zona de Memoria Compartida" @@ -4753,10 +6119,18 @@ msgstr "Zona de Memoria Compartida" msgid "Show" msgstr "Mostrar" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "Mostrar asistente" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "Iniciar sesión con una llave de acceso" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "Procesamiento de flujo optimizado con SIMD" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "Directiva de una sola línea" @@ -4777,11 +6151,23 @@ msgstr "El sitio está en modo de mantenimiento" msgid "Site Logs" msgstr "Registros del sitio" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "Navegación del sitio" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "Sitio no encontrado" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "Actualización del sitio iniciada" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "Sitios" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "El directorio de sitios existe" @@ -4789,6 +6175,14 @@ msgstr "El directorio de sitios existe" msgid "Sites List" msgstr "Lista de sitios" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" +"Los sitios aparecerán aquí una vez que configure los bloques de servidor de " +"nginx con directivas server_name válidas." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "El directorio sites-available no existe" @@ -4798,6 +6192,8 @@ msgid "Sites-enabled directory not exist" msgstr "El directorio sites-enabled no existe" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "Tamaño" @@ -4805,19 +6201,36 @@ msgstr "Tamaño" msgid "Skip Installation" msgstr "Omitir instalación" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "Tiempo de espera entre iteraciones del cargador de caché" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "Tiempo de espera entre iteraciones del administrador de caché" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "Socket" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "Ordenado por" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "IP de origen" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "Patrocinador" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "Almacenamiento SSD para un mejor rendimiento de E/S" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "Contenido de certificado SSL" @@ -4831,15 +6244,20 @@ msgstr "" msgid "SSL certificate file not found" msgstr "Archivo de certificado SSL no encontrado" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "Contenido de la llave del certificado SSL" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "Ruta de la llave del certificado SSL" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "Ruta del certificado SSL" @@ -4866,13 +6284,12 @@ msgstr "Ruta de la clave SSL" msgid "SSL key path is required when HTTPS is enabled" msgstr "Se requiere la ruta de la clave SSL cuando HTTPS está habilitado" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "Acceso SSO" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "Estable" @@ -4880,33 +6297,49 @@ msgstr "Estable" msgid "Start" msgstr "Inicio" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "Fecha de inicio" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "Iniciar restauración" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "Iniciando descarga..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "Estático" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "Estado" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "Estado actualizado correctamente" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "Detenido" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "Almacenamiento" @@ -4932,10 +6365,6 @@ msgstr "Ruta de almacenamiento" msgid "Storage path is required" msgstr "La ruta de almacenamiento es obligatoria" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "La ruta de almacenamiento no está en las rutas de acceso concedidas: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4949,7 +6378,7 @@ msgstr "La transmisión está habilitada" msgid "Stream not found" msgstr "Transmisión no encontrada" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "El directorio de streams existe" @@ -4961,6 +6390,10 @@ msgstr "El directorio streams-available no existe" msgid "Streams-enabled directory not exist" msgstr "El directorio streams-enabled no existe" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "Estructurado" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "Puerto de estado stub" @@ -4969,7 +6402,7 @@ msgstr "Puerto de estado stub" msgid "Stub_status is not enabled" msgstr "Stub_status no está habilitado" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4980,19 +6413,6 @@ msgstr "Éxito" msgid "Sunday" msgstr "Domingo" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Soporte para la comunicación con el backend a través del protocolo " -"Server-Sent Events. Si su Nginx UI se está utilizando a través de un proxy " -"inverso de Nginx, consulte este enlace para escribir el archivo de " -"configuración correspondiente: " -"https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -5041,12 +6461,12 @@ msgid "Sync Certificate" msgstr "Sincronizar Certificado" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "Error al sincronizar el certificado %{cert_name} con %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "Error al sincronizar el certificado %{cert_name} con %{node_name}" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "Sincronización del Certificado %{cert_name} a %{env_name} exitosa" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "Certificado %{cert_name} sincronizado con %{node_name} correctamente" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -5057,12 +6477,12 @@ msgid "Sync Certificate Success" msgstr "Sincronización del Certificado exitosa" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "Error al sincronizar la configuración %{config_name} con %{env_name}" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "Error al sincronizar la configuración %{config_name} a %{node_name}" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "Configuración %{config_name} sincronizada con éxito en %{env_name}" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "Configuración %{config_name} sincronizada con %{node_name} correctamente" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -5072,24 +6492,29 @@ msgstr "Error de Configuración de Sincronización" msgid "Sync Config Success" msgstr "Configuración de sincronización exitosa" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "Nodos de sincronización" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "Vista previa de sincronización" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "Estrategia de sincronización" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "Sincronizar con" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "Sincronización" @@ -5106,10 +6531,14 @@ msgstr "Copia de seguridad del sistema" msgid "System Check" msgstr "Verificación del sistema" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "Usuario inicial del sistema" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "Requisitos del sistema" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "Restauración del sistema" @@ -5130,19 +6559,45 @@ msgstr "Tarea no encontrada" msgid "Telegram" msgstr "Telegram" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "Terminal" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "Asistente de terminal" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "Comando de inicio de terminal" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "Prueba" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "Prueba fallida: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "Prueba fallida: No se pudo realizar la comprobación de estado" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "Mensaje de prueba enviado con éxito" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "Probar conexión S3" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "¡Prueba exitosa! Tiempo de respuesta: %{response_time}ms" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " @@ -5152,6 +6607,23 @@ msgstr "" "renovado si ha pasado más de 1 semana o el período que configuró en ajustes " "desde que fue emitido por última vez." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "" +"La base de datos GeoLite2 es necesaria para el análisis geográfico de IP " +"sin conexión. Descárguela para habilitar esta función." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "" +"La base de datos GeoLite2 proporciona información geográfica para " +"direcciones IP. Se utiliza para el análisis geográfico fuera de línea en " +"análisis de registros." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " @@ -5160,11 +6632,11 @@ msgstr "" "El número ICP solo debe contener letras, unicode, números, guiones, guiones " "bajos, dos puntos y puntos." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "La entrada no es un Certificado SSL" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "La entrada no es una clave de certificado SSL" @@ -5203,11 +6675,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "El parámetro de server_name es obligatorio" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "La ruta existe, pero el archivo no es un certificado" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "La ruta existe, pero el archivo no es una clave privada" @@ -5219,7 +6691,7 @@ msgstr "" "El número de seguridad pública solo debe contener letras, unicode, números, " "guiones, rayas, dos puntos y puntos." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5229,7 +6701,7 @@ msgstr "" "local. Para evitar errores potenciales, por favor actualice la Nginx UI " "remota para que coincida con la versión local." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5259,7 +6731,7 @@ msgstr "Conexiones concurrentes máximas teóricas:" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "Máximo teórico de RPS (Solicitudes Por Segundo):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5269,11 +6741,15 @@ msgstr "" "pierda su contraseña y los segundos factores. Si no puede encontrar estos " "códigos, perderá el acceso a su cuenta." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "Componentes de terceros" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "Este elemento de Auto Cert es inválido, elimínelo por favor." -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "Este certificado es administrado por Nginx UI" @@ -5283,9 +6759,9 @@ msgstr "" "Este directorio está protegido y no se puede eliminar por seguridad del " "sistema." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "Este campo es obligatorio" @@ -5311,6 +6787,10 @@ msgid "" "-_./:" msgstr "Este campo solo debe contener letras, caracteres Unicode, números y -_./:" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "Este es un mensaje de prueba enviado a %{TimeStamp} de Nginx UI." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " @@ -5320,7 +6800,15 @@ msgstr "" "conexiones, etc. Después de activarlo, podrá ver estadísticas de " "rendimiento." -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "Este mes" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "Esta notificación está deshabilitada" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." @@ -5328,6 +6816,28 @@ msgstr "" "Esta operación solo eliminará el certificado de la base de datos. Los " "archivos del certificado en el sistema de archivos no se eliminarán." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"Este sitio está configurado como un servidor predeterminado " +"(default_server) para HTTPS (puerto 443). Los certificados IP requieren el " +"soporte de una Autoridad de Certificación (CA) y pueden no estar " +"disponibles con todos los proveedores de ACME." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"Este sitio utiliza un nombre de servidor comodín (_) que normalmente indica " +"un certificado basado en IP. Los certificados IP requieren el soporte de " +"una Autoridad de Certificación (CA) y pueden no estar disponibles con todos " +"los proveedores de ACME." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5344,6 +6854,19 @@ msgstr "Este valor ya está elegido" msgid "This will permanently delete the %{type}." msgstr "Esto eliminará permanentemente %{type}." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"Esto reconstruirá todo el índice de registros. Todos los datos de índice " +"existentes se eliminarán y se reconstruirán desde cero. Esto puede tomar " +"algún tiempo. ¿Continuar?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "Esto reconstruirá los datos del índice para este archivo específico: %{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5362,13 +6885,13 @@ msgstr "" "Esto restaurará los archivos de configuración y la base de datos. La " "interfaz de Nginx se reiniciará una vez completada la restauración." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" "Esto actualizará o reinstalará la interfaz de usuario de Nginx en " "%{nodeNames} a %{version}." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "Acelerador" @@ -5376,8 +6899,21 @@ msgstr "Acelerador" msgid "Thursday" msgstr "Jueves" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "Tiempo" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "Rango de tiempo" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "Tiempo de espera (segundos)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "Consejos" @@ -5394,13 +6930,17 @@ msgstr "" msgid "Title" msgstr "Título" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "para confirmar la eliminación" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "" "Para confirmar la revocación, escriba \"Revocar\" en el campo a " "continuación:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5408,7 +6948,7 @@ msgstr "" "Para habilitarlo, necesitas instalar la aplicación Google Authenticator o " "Microsoft Authenticator en tu teléfono móvil." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5453,15 +6993,41 @@ msgstr "El token está vacío" msgid "Token is not valid" msgstr "El token no es válido" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "Top 10 países / regiones" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "Top 10 Provincias / Regiones" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "Las 10 URL principales" + #: src/language/curd.ts:5 msgid "Total" msgstr "Total" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "Total de %{total} elementos" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "Componentes totales" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "Conexiones totales" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "Entradas totales" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5475,6 +7041,10 @@ msgstr "Total de procesos de Nginx" msgid "Total Nginx Processes" msgstr "Total de procesos de Nginx" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "PV total" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "Recepción total" @@ -5492,11 +7062,15 @@ msgstr "Solicitudes totales / Conexiones totales" msgid "Total Send" msgstr "Total enviado" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "UV total" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -5504,25 +7078,41 @@ msgstr "" "TOTP es un método de autenticación de dos factores que utiliza un algoritmo " "de contraseña de un solo uso basado en el tiempo." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "Tráfico" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "Traduciendo error..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "Basura" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "Intente ajustar sus criterios de búsqueda o navegar a diferentes páginas." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "Intente ajustar sus criterios de búsqueda o el rango de tiempo." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "Martes" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "Se requiere autenticación de dos factores" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "Tipo" @@ -5530,15 +7120,47 @@ msgstr "Tipo" msgid "Type %{delete} to confirm" msgstr "Escriba %{delete} para confirmar" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "Escriba o seleccione el navegador" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "Escriba o seleccione dispositivo" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "Escribir o seleccionar SO" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "Escriba o seleccione códigos de estado" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "Escribe tu mensaje aquí..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "Páginas únicas" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "Desconocido" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "Tipo de copia de seguridad no admitido: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "Formato de registro no compatible" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "Actualización ya en proceso" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "Actualizar contraseña" @@ -5547,32 +7169,30 @@ msgstr "Actualizar contraseña" msgid "Update Profile" msgstr "Actualizar perfil" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "Actualización exitosa" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "Actualizado a" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "Actualizar" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "Interfaz de usuario de Nginx actualizada en %{node} con éxito 🎉" @@ -5580,11 +7200,22 @@ msgstr "Interfaz de usuario de Nginx actualizada en %{node} con éxito 🎉" msgid "Upgraded successfully" msgstr "Actualización exitosa" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "El resumen del núcleo del actualizador está vacío" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "La URL de descarga del núcleo del actualizador está vacía" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Actualizando Nginx UI, por favor espere..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "Subir archivo %{type}" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "Subir archivos" @@ -5593,19 +7224,29 @@ msgstr "Subir archivos" msgid "Upload Folders" msgstr "Subir carpetas" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "Aguas arriba" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Nombre de la Transmisión" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "Conectores Upstream" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "Tipo de prueba de upstream" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "Tiempo encendido:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5617,14 +7258,19 @@ msgstr "Usar OTP" msgid "Use recovery code" msgstr "Usar código de recuperación" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "Usar ruta temporal" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "Usuario" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "Agente de usuario" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "Usuario bloqueado" @@ -5641,7 +7287,7 @@ msgstr "Usuario no ha habilitado OTP como 2FA" msgid "User Profile" msgstr "Perfil de usuario" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "Nombre de usuario" @@ -5654,12 +7300,20 @@ msgstr "Nombre de usuario (*)" msgid "Username length cannot exceed 255 characters" msgstr "La longitud del nombre de usuario no puede exceder los 255 caracteres" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "UV" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "Válido" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "Validar certificado SSL" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "Valor" @@ -5669,45 +7323,65 @@ msgstr "Valor" msgid "Verify Backup File Integrity" msgstr "Verificar integridad del archivo de respaldo" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "Verificar nombre de host" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "Verificar los requisitos del sistema" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "Versión" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "Ver" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "Ver todas las notificaciones" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "Ver en GitHub" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "Ver códigos de recuperación" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "Ver componentes de terceros" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "Visto" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "Visitas" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "Procesos de espera" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "Advertencia" @@ -5722,7 +7396,22 @@ msgstr "" "actuales. Asegúrese de tener un archivo de respaldo válido y un token de " "seguridad, y seleccione cuidadosamente qué restaurar." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"Advertencia: Parece que esta es una dirección IP privada. Las entidades de " +"certificación públicas como Let's Encrypt no pueden emitir certificados " +"para IPs privadas. Utilice una dirección IP pública o considere usar una " +"entidad de certificación privada." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "No aceptamos solicitudes de funciones" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." @@ -5730,7 +7419,7 @@ msgstr "" "Agregaremos uno o más registros TXT a los registros DNS de su dominio para " "verificar la propiedad." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" @@ -5738,7 +7427,7 @@ msgstr "" "Eliminaremos la configuración de HTTPChallenge de este archivo y " "recargaremos Nginx. ¿Estás seguro de que quieres continuar?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "Webauthn" @@ -5746,10 +7435,18 @@ msgstr "Webauthn" msgid "WebAuthn settings are not configured" msgstr "La configuración de WebAuthn no está configurada" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "Error de conexión WebSocket" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket no conectado, por favor espere la conexión" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "WeCom" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "miércoles" @@ -5762,7 +7459,7 @@ msgstr "Semanal" msgid "Weekly on %{day} at %{time}" msgstr "Semanalmente el %{day} a las %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5772,17 +7469,17 @@ msgstr "" "los usuarios al iniciarse. Por lo general, no habilite esta opción a menos " "que se encuentre en un entorno de desarrollo y utilice Pebble como CA." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" "Cuando habilites/deshabilites, elimines o guardes este sitio, los nodos " -"establecidos en el Grupo de Nodos y los nodos seleccionados a continuación " -"se sincronizarán." +"establecidos en el espacio de nombres y los nodos seleccionados a " +"continuación se sincronizarán." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." @@ -5790,11 +7487,11 @@ msgstr "" "Cuando generes nuevos códigos de recuperación, debes descargar o imprimir " "los nuevos códigos." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "Si se debe usar una ruta temporal al escribir archivos temporales" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "Certificado comodín" @@ -5813,8 +7510,8 @@ msgstr "Procesos de trabajo" msgid "Workers" msgstr "Trabajadores" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "Espacio de trabajo" @@ -5839,16 +7536,18 @@ msgstr "Escribir la clave privada del certificado a disco" msgid "Writing certificate to disk" msgstr "Escribir certificado a disco" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "Si" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5862,11 +7561,11 @@ msgstr "" "No tienes permiso para eliminar un archivo fuera de la ruta de " "configuración de nginx" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "Estás usando la última versión" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "Puede consultar la actualización de Nginx UI en esta página." @@ -5878,7 +7577,7 @@ msgstr "Puedes cerrar este diálogo en %{countdown} segundos" msgid "You can close this dialog now" msgstr "Ahora puede cerrar este cuadro de diálogo" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." @@ -5886,17 +7585,17 @@ msgstr "" "No ha configurado los ajustes de Webauthn, por lo que no puede agregar una " "llave de acceso." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" "Aún no has habilitado la autenticación en dos pasos. Por favor, habilítala " "para generar códigos de recuperación." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "Aún no has generado códigos de recuperación." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." @@ -5905,15 +7604,197 @@ msgstr "" "inseguro. Por favor, genere nuevos códigos de recuperación lo antes posible " "para garantizar la seguridad." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "Tus códigos antiguos ya no funcionarán." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "Sus llaves de acceso" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "Canalización sin asignación" + +#~ msgid "in the same directory as" +#~ msgstr "en el mismo directorio que" + +#~ msgid "Sandbox test successful" +#~ msgstr "Prueba de sandbox exitosa" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "Probado en modo sandbox aislado" + +#~ msgid "All" +#~ msgstr "Todos" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "Basado en pruebas con M2 Pro (12 núcleos)" + +#~ msgid "CPU Utilization" +#~ msgstr "Utilización de la CPU" + +#~ msgid "Indexing Throughput" +#~ msgstr "Rendimiento de indexación" + +#~ msgid "Memory Efficiency" +#~ msgstr "Eficiencia de memoria" + +#~ msgid "Performance Impact Notice" +#~ msgstr "Aviso de impacto en el rendimiento" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "Optimización de tubería sin asignación" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "Preguntar por ayuda a ChatGPT" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "Mapeo geográfico y conocimientos" + +#~ msgid "No feature requests accepted." +#~ msgstr "No se aceptan solicitudes de funciones" + +#~ msgid "Time-series trend analysis" +#~ msgstr "Análisis de tendencias de series temporales" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "Análisis de User-Agent y navegador" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ núcleos (Apple M2 Pro o equivalente de Intel)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "4 GB+ de RAM para un rendimiento óptimo" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "Tamaño de lote adaptable" + +#~ msgid "CPU Architecture" +#~ msgstr "Arquitectura de CPU" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "Análisis de GeoIP y User-Agent" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "Mínimo 1 GB de RAM" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "CPU moderno (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "Monitorización de rendimiento en tiempo real" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "Rendimiento sostenido en hardware moderno" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "La ruta de copia de seguridad no está en las rutas de acceso concedidas: {0}" + +#~ msgid "Build with" +#~ msgstr "Desarrollado con" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "Error al copiar el directorio de la base de datos: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "Error al crear el directorio de respaldo: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "Error al evaluar los enlaces simbólicos: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "Error al restaurar los archivos de la interfaz de usuario de Nginx: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "Error al escribir en el búfer ZIP: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "Falló la verificación del hash: integridad del archivo comprometida" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "Acceso al depósito S3 denegado: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "Prueba de conexión S3 fallida: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "Las credenciales de S3 no son válidas: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "El punto de conexión de S3 no es válido: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "La ruta de almacenamiento no está en las rutas de acceso concedidas: {0}" + +#~ msgid "files" +#~ msgstr "archivos" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "Indexando registros, por favor espere..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "Cargando datos del panel..." + +#~ msgid "Today" +#~ msgstr "Hoy" + +#~ msgid "Data refreshed successfully" +#~ msgstr "Datos actualizados correctamente" + +#~ msgid "Failed to refresh data" +#~ msgstr "Error al actualizar los datos" + +#~ msgid "Log File:" +#~ msgstr "Archivo de registro:" + +#~ msgid "Log path" +#~ msgstr "Ruta del registro" + +#~ msgid "Index Size" +#~ msgstr "Tamaño del índice" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "Tamaño de página" + +#~ msgid "Environments" +#~ msgstr "Entornos" + +#~ msgid "Node Group" +#~ msgstr "Grupo de nodos" + +#~ msgid "Node Groups" +#~ msgstr "Grupos de nodos" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "Verifique si existe el directorio conf.d" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Soporte para la comunicación con el backend a través del protocolo " +#~ "Server-Sent Events. Si su Nginx UI se está utilizando a través de un proxy " +#~ "inverso de Nginx, consulte este enlace para escribir el archivo de " +#~ "configuración correspondiente: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "Si se deja en blanco, se utilizará el directorio CA predeterminado." + +#~ msgid "Save error %{msg}" +#~ msgstr "Error al guardar %{msg}" + +#~ msgid "Main" +#~ msgstr "Principal" + +#~ msgid "Select an action after sync" +#~ msgstr "Seleccionar una acción después de sincronizar" + #~ msgid "Link Start" #~ msgstr "Iniciar conexión" @@ -5947,9 +7828,6 @@ msgstr "Sus llaves de acceso" #~ msgid "Last Backup Error" #~ msgstr "Último error de copia de seguridad" -#~ msgid "Apply" -#~ msgstr "Aplicar" - #~ msgid "Apply bulk action successfully" #~ msgstr "Acción masiva aplicada con éxito" @@ -5977,10 +7855,6 @@ msgstr "Sus llaves de acceso" #~ msgid "Recovered Successfully" #~ msgstr "Recuperado con éxito" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "Total %{total} elemento" - #~ msgid "View Details" #~ msgstr "Ver detalles" @@ -6028,9 +7902,6 @@ msgstr "Sus llaves de acceso" #~ msgid "Format error %{msg}" #~ msgstr "Error de formato %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "No se pudo guardar, se detectó un error(es) de sintaxis en la configuración." - #, fuzzy #~ msgid "" #~ "When you enable/disable, delete, or save this stream, the nodes set in the " @@ -6040,10 +7911,6 @@ msgstr "Sus llaves de acceso" #~ "configurados en la categoría del sitio y los nodos seleccionados a " #~ "continuación se sincronizarán." -#, fuzzy -#~ msgid "Access Token" -#~ msgstr "Logs de acceso" - #, fuzzy #~ msgid "Bot Token" #~ msgstr "Token" @@ -6065,10 +7932,6 @@ msgstr "Sus llaves de acceso" #~ msgid "Site Categories" #~ msgstr "Categorías del sitio" -#, fuzzy -#~ msgid "Restart Required" -#~ msgstr "Reiniciando" - #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "Desplegado de %{conf_name} a %{node_name} exitoso" @@ -6147,9 +8010,6 @@ msgstr "Sus llaves de acceso" #~ msgid "Incorrect username or password" #~ msgstr "Nombre de usuario o contraseña incorrectos" -#~ msgid "Recovery Code:" -#~ msgstr "Código de Recuperación:" - #~ msgid "The recovery code is only displayed once, please save it in a safe place." #~ msgstr "" #~ "El código de recuperación se muestra solo una vez, por favor guárdalo en un " @@ -6167,9 +8027,6 @@ msgstr "Sus llaves de acceso" #~ "Renombrar %{orig_path} a %{new_path} en %{env_name} fallido, por favor " #~ "actualice la interfaz de Nginx remota a la última versión" -#~ msgid "Server Name" -#~ msgstr "Nombre del servidor" - #~ msgid "Enable 2FA" #~ msgstr "Habilitar 2FA" @@ -6252,9 +8109,6 @@ msgstr "Sus llaves de acceso" #~ msgid "Theme" #~ msgstr "Tema" -#~ msgid "OperationSync" -#~ msgstr "Sincronización de operaciones" - #~ msgid "" #~ "Such as Reload and Configs, regex can configure as " #~ "`/api/nginx/reload|/api/nginx/test|/api/config/.+`, please see system api" diff --git a/app/src/language/fr_FR/app.po b/app/src/language/fr_FR/app.po index 9632dad9f..d6273a6be 100644 --- a/app/src/language/fr_FR/app.po +++ b/app/src/language/fr_FR/app.po @@ -14,96 +14,145 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.9.2\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "" "[Nginx UI] Utilisateur ACME : %{name}, Email : %{email}, Répertoire CA : " "%{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "[Nginx UI] Sauvegarde du certificat actuel pour une révocation ultérieure" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] Certificat renouvelé avec succès" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] Certificat révoqué avec succès" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" "[Nginx UI] Le certificat a été utilisé pour le serveur, rechargement du " "certificat TLS du serveur" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "" "[Nginx UI] Création d'un client pour faciliter la communication avec le " "serveur CA" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] Variables d'environnement nettoyées" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] Terminé" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] Certificat émis avec succès" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] Obtention du certificat" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] Préparation de la révocation du certificat" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] Préparation des configurations lego" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] Rechargement de nginx" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] Révocation terminée" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] Révoquer le certificat" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] Révoquer l'ancien certificat" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] Configuration du fournisseur de défi DNS01" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] Configuration des variables d'environnement" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] Configuration du fournisseur de défi HTTP01" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] Écriture de la clé privée du certificat sur le disque" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] Écriture du certificat sur le disque" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} copié dans le presse-papiers" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "" +"* Inclut les nœuds du groupe %{groupName} et les nœuds sélectionnés " +"manuellement" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "" +"* Les fichiers d'index sont stockés par défaut dans le répertoire " +"\"log-index\" du chemin de configuration de NGINX UI." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* Métriques de performance mesurées sur Apple M2 Pro (12 cœurs) avec 32 Go " +"de RAM. Les performances réelles peuvent varier selon votre configuration " +"matérielle." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{start}-%{end} sur %{total} éléments" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "Minimum 1 cœur" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "1 Go de RAM minimum" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "2+ cœurs recommandés" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "Statistiques UV/PV sur 24 heures" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "2fa" @@ -112,11 +161,15 @@ msgstr "2fa" msgid "2FA Settings" msgstr "Options 2FA" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "4 Go de RAM ou plus recommandés" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "À propos" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "Journal d'accès" @@ -125,30 +178,28 @@ msgid "Access log path not exist" msgstr "Le chemin du journal d'accès n'existe pas" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "Journaux d'accès" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "Utilisateur ACME" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "Action" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "Actions" @@ -163,15 +214,15 @@ msgid "Actual worker to configured ratio" msgstr "Ratio réel des travailleurs par rapport à la configuration" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "Ajouter" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "Ajouter une clé d'accès" @@ -185,10 +236,14 @@ msgstr "Ajouter une configuration" msgid "Add Directive Below" msgstr "Ajouter une directive" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "Ajouter un domaine" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "Ajouter un en-tête" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -202,15 +257,15 @@ msgstr "Ajouter un serveur" msgid "Add Site" msgstr "Ajouter un site" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "Ajouter un flux" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "Ajouter un upstream" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "Ajouté avec succès" @@ -218,27 +273,53 @@ msgstr "Ajouté avec succès" msgid "Additional" msgstr "Supplémentaire" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "Mode avancé" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "Indexation avancée activée mais échec du démarrage de la reconstruction" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "Indexation avancée activée avec succès" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" +"Les fonctionnalités avancées d'indexation des journaux sont gratuites et " +"open source pour tous les utilisateurs" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "Système avancé de pooling de mémoire" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "Recherche et filtrage avancés" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "Paramètres avancés" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "" "Ensuite, rafraîchissez cette page et cliquez à nouveau sur ajouter une clé " "d'accès." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "Tous" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "Tous les composants" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "Tous les codes de récupération ont été utilisés" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." @@ -246,6 +327,29 @@ msgstr "" "Tous les sous-domaines sélectionnés doivent appartenir au même fournisseur " "DNS, sinon la demande de certificat échouera." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"Alternativement, si vous ne pouvez pas télécharger la base de données, vous " +"pouvez placer manuellement GeoLite2-City.mmdb dans le même répertoire que " +"app.ini." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "Service d'analyse non disponible" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "Tous" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "" +"Toute adresse IP accessible peut être utilisée avec des autorités de " +"certification privées" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "URL de base de l'API" @@ -266,36 +370,40 @@ msgstr "Jeton API" msgid "API Type" msgstr "Type d'API" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "Application" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "Appliquer" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "Arch" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "Êtes-vous sûr de vouloir supprimer immédiatement cette IP bannie ?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "Êtes-vous sûr de vouloir supprimer immédiatement cette clé d'accès ?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "Êtes-vous sûr de vouloir générer de nouveaux codes de récupération ?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "Êtes-vous sûr de vouloir réinitialiser l'authentification à deux facteurs ?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "Êtes-vous sûr de vouloir effacer toutes les notifications ?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "Voulez-vous vraiment effacer l'historique du chat ?" @@ -303,18 +411,18 @@ msgstr "Voulez-vous vraiment effacer l'historique du chat ?" msgid "Are you sure you want to delete permanently?" msgstr "Êtes-vous sûr de vouloir supprimer définitivement ?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "Etes-vous sûr que vous voulez supprimer ?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "" "Êtes-vous sûr de vouloir recharger Nginx sur les nœuds de synchronisation " "suivants ?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "Voulez-vous vraiment supprimer cette directive ?" @@ -326,7 +434,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer cet élément ?" msgid "Are you sure you want to remove this location?" msgstr "Voulez-vous vraiment supprimer cette localisation ?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "" "Êtes-vous sûr de vouloir redémarrer Nginx sur les nœuds de synchronisation " @@ -336,23 +444,27 @@ msgstr "" msgid "Are you sure you want to restore?" msgstr "Êtes-vous sûr de vouloir restaurer ?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "Demander de l'aide à ChatGPT" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "Croissant" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "Assistant" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "Au moins 20 Go d'espace disque disponible" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "Tenter de corriger" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "Tentatives" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "Authentification" @@ -360,12 +472,12 @@ msgstr "Authentification" msgid "Authenticate with a passkey" msgstr "S'authentifier avec une clé d'accès" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "Paramètres d'authentification" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "Authentification en cours..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "Autheur" @@ -399,28 +511,27 @@ msgstr "Échec de la sauvegarde automatique" msgid "Auto Backup Storage Failed" msgstr "Échec du stockage de sauvegarde automatique" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "Actualisation automatique" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "Actualisation automatique désactivée" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "Actualisation automatique activée" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "Renouvellement automatique désactivé pour %{name}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "Renouvellement automatique activé pour %{name}" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert est en cours d'exécution, veuillez patienter..." @@ -429,16 +540,32 @@ msgstr "AutoCert est en cours d'exécution, veuillez patienter..." msgid "AutoCert is running..." msgstr "AutoCert est en cours d'exécution..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "Détection automatique de rotation des journaux" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "Redémarrage automatique" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "Latence moyenne" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "UV quotidien moyen" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "Moy./PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "Retour" @@ -450,6 +577,22 @@ msgstr "Retour au menu principal" msgid "Back to List" msgstr "Retour à la liste" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "Backend" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "" +"Indexation en arrière-plan en cours. Les données seront mises à jour " +"automatiquement lorsqu'elles seront prêtes." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "Service de journalisation en arrière-plan non disponible" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "Sauvegarde" @@ -460,7 +603,7 @@ msgstr "" "La vérification de l'intégrité du fichier de sauvegarde a échoué, il a " "peut-être été falsifié" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "Fichier de sauvegarde introuvable : {0}" @@ -472,24 +615,20 @@ msgstr "La sauvegarde a été téléchargée avec succès" msgid "Backup Path" msgstr "Chemin de sauvegarde" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "Le chemin de sauvegarde n'existe pas : {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "Le chemin de sauvegarde n'est pas un répertoire : {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "" "Le chemin de sauvegarde est requis pour la sauvegarde de répertoire " "personnalisée" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "Le chemin de sauvegarde n'est pas dans les chemins d'accès accordés : {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "Planification de sauvegarde" @@ -516,15 +655,15 @@ msgstr "" msgid "Backup Type" msgstr "Type de sauvegarde" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "Minutes seuil de bannissement" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "IPs bannies" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "Banni durant" @@ -536,18 +675,18 @@ msgstr "Bark" msgid "Base information" msgstr "Information générale" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "Basique" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "Mode simple" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "Paramètres de base" @@ -559,7 +698,7 @@ msgstr "Édition par lots" msgid "Batch Modify" msgstr "Modification par lot" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "Mise à jour par lot" @@ -571,11 +710,29 @@ msgstr "Ci-dessous sont sélectionnés les éléments que vous voulez modifier e msgid "Block is nil" msgstr "Le bloc est nul" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "Build avec" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "Navigateur" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "Statistiques du navigateur" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"En activant l'indexation avancée, vous reconnaissez que votre système " +"répond aux exigences et comprenez les implications en termes de " +"performances. Cela commencera à indexer immédiatement les fichiers journaux " +"existants." -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "Répertoire CA" @@ -583,11 +740,11 @@ msgstr "Répertoire CA" msgid "Cache" msgstr "Cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "Les éléments du cache non consultés pendant cette période seront supprimés" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "Seuil de temps de traitement du chargeur de cache" @@ -596,15 +753,15 @@ msgstr "Seuil de temps de traitement du chargeur de cache" msgid "Cache manager processes" msgstr "Processus de gestion du cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "Seuil de temps de traitement du gestionnaire de cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "Paramètres du gestionnaire de cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "Chemin du cache" @@ -613,7 +770,7 @@ msgstr "Chemin du cache" msgid "Cache Processes" msgstr "Processus de cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "Structure des niveaux de sous-répertoires du cache, par ex. 1:2" @@ -631,24 +788,33 @@ msgstr "" "performances réelles dépendent du matériel, de la configuration et de la " "charge de travail" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "Annuler" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "Impossible d'accéder au chemin de sauvegarde {0} : {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "Impossible d'accéder au fichier journal" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "Impossible d'accéder au chemin de stockage {0} : {1}" @@ -672,7 +838,7 @@ msgstr "Impossible d'obtenir des données de performance dans cet état" msgid "Cannot remove initial user" msgstr "Impossible de retirer l'utilisateur initial" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "Certificat" @@ -680,6 +846,11 @@ msgstr "Certificat" msgid "Cert path is not under the nginx conf dir" msgstr "Le chemin du certificat n'est pas dans le dossier conf de nginx" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "certificat" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "Le certificat %{name} a expiré" @@ -694,6 +865,10 @@ msgstr "Le certificat %{name} expirera dans %{days} jours" msgid "Certificate %{name} will expire in 1 day" msgstr "Le certificat %{name} expirera dans 1 jour" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "Le contenu du certificat et la clé privée ne peuvent pas être vides" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "Erreur de décodage du certificat" @@ -712,6 +887,14 @@ msgstr "Certificat expiré" msgid "Certificate Expiring Soon" msgstr "Certificat expirant bientôt" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "Fichiers de certificat téléchargés avec succès" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "Le nom du certificat ne peut pas être vide" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "Certificat introuvable : %{error}" @@ -724,8 +907,8 @@ msgstr "Erreur d'analyse du certificat" msgid "Certificate path is empty" msgstr "Le chemin du certificat est vide" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "Certificat supprimé avec succès" @@ -741,13 +924,13 @@ msgstr "Certificat renouvelé avec succès" msgid "Certificate revoked successfully" msgstr "Certificat révoqué avec succès" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "État du certificat" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "Type de certificat" @@ -756,7 +939,7 @@ msgstr "Type de certificat" msgid "Certificates" msgstr "Certificats" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "Liste des certificats" @@ -764,7 +947,7 @@ msgstr "Liste des certificats" msgid "Challenge error: {0}" msgstr "Erreur de défi : {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "Méthode de challenge" @@ -786,26 +969,33 @@ msgstr[0] "Certificat modifié" msgid "Changed Path" msgstr "Chemin modifié" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "Canal" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "Chat" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "Chat pour %{path}" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "Vérifier" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "Revérifier" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "Vérifier le favicon" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -839,6 +1029,25 @@ msgstr "" "presse-papiers" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "" +"Vérifiez si le répertoire conf.d se trouve dans le répertoire de " +"configuration de nginx" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"Vérifiez si la base de données GeoLite2 est disponible lorsque l'indexation " +"des journaux est activée. La base de données GeoLite2 est nécessaire pour " +"l'analyse géographique des adresses IP dans l'indexation des journaux. Vous " +"pouvez la télécharger depuis la page des Préférences ou placer " +"GeoLite2-City.mmdb manuellement dans le même répertoire que app.ini" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -855,15 +1064,15 @@ msgstr "" "documentation pour plus de détails : " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "Vérifier si le répertoire de configuration de nginx existe" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "Vérifier si le fichier d'entrée de configuration nginx existe" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -880,7 +1089,7 @@ msgstr "" "documentation pour plus de détails : " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -894,23 +1103,23 @@ msgstr "" "pour spécifier le chemin du PID de Nginx. Consultez la documentation pour " "plus de détails: https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "Vérifiez si le chemin d'accès à nginx sbin existe" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "Vérifier si le nginx.conf inclut le répertoire conf.d" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "Vérifier si le nginx.conf inclut le répertoire sites-enabled" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "Vérifier si le nginx.conf inclut le répertoire streams-enabled" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" @@ -918,7 +1127,7 @@ msgstr "" "Vérifier si les répertoires sites-available et sites-enabled se trouvent " "dans le répertoire de configuration de nginx" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" @@ -926,6 +1135,19 @@ msgstr "" "Vérifier si les répertoires streams-available et streams-enabled se " "trouvent dans le répertoire de configuration de nginx" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "Intervalle de vérification (secondes)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "Carte d'Accès Chine" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "Carte de la Chine" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "Texte de chiffrement trop court" @@ -934,13 +1156,13 @@ msgstr "Texte de chiffrement trop court" msgid "Cleaning environment variables" msgstr "Nettoyage des variables d'environnement" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "Effacer" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "Effacé avec succès" @@ -960,7 +1182,7 @@ msgstr "Cliquez ou faites glisser des fichiers dans cette zone pour les téléch msgid "Click or drag folders to this area to upload" msgstr "Cliquez ou faites glisser des dossiers dans cette zone pour télécharger" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "Clique pour copier" @@ -968,10 +1190,18 @@ msgstr "Clique pour copier" msgid "Client Body Buffer Size" msgstr "Taille du tampon du corps client" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "Certificat client" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "Taille du tampon d'en-tête client" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "Clé client" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "Taille maximale du corps du client" @@ -1000,6 +1230,14 @@ msgstr "La complétion de code n'est pas activée" msgid "Code Completion Model" msgstr "Modèle de complétion de code" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "Réduire" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "Paramètres des colonnes" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "Commande" @@ -1010,7 +1248,7 @@ msgstr "" "La commande s'est terminée avec un code de sortie inattendu : {0}, erreur : " "{1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -1033,11 +1271,34 @@ msgstr "Comparez sélectionné" msgid "Compare with Current" msgstr "Comparez avec le courant" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "Indexation complète avec capacités de recherche" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "composants" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "Prise en charge des fichiers journaux compressés" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "Le niveau de compression, 1 est le plus bas, 9 est le plus élevé" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "Calcul des statistiques" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "Le répertoire conf.d existe" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Le répertoire Conf.d n'existe pas" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "Configuration" @@ -1050,22 +1311,32 @@ msgstr "Le répertoire de configuration n'existe pas" msgid "Config entry file not exist" msgstr "Le fichier d'entrée de configuration n'existe pas" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "Configuration non trouvée" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "Le chemin de configuration est vide" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "Modèle de configuration" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "Configuration" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "Le fichier de configuration est testé avec succès" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "" +"Le fichier de configuration a été testé avec succès dans un environnement " +"de bac à sable isolé" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "Historique de configuration" @@ -1086,11 +1357,20 @@ msgstr "Configurations" msgid "Configure SSL" msgstr "Configurer SSL" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "Confirmer la suppression" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "Confirmer le nouveau mot de passe" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "Confirmation requise" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "Connecté" @@ -1098,9 +1378,9 @@ msgstr "Connecté" msgid "Connection error, trying to reconnect..." msgstr "Erreur de connexion, tentative de reconnexion..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "Connexion perdue, merci de recharger la page." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "Connexion perdue pour ce terminal. Veuillez actualiser si nécessaire." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1110,14 +1390,14 @@ msgstr "Période de délai de connexion" msgid "Container status unknown" msgstr "Statut du conteneur inconnu" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "Contenu" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "Copié" @@ -1130,14 +1410,38 @@ msgstr "Copié !" msgid "Copy" msgstr "Copier" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "Copier Codes" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "Mise à jour du core" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "Impossible de trouver le nom de l'ancien conteneur" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "Impossible de trouver le conteneur temporaire" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "Nombre" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "Pays / Région" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "CPU" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "État du processeur" @@ -1182,10 +1486,10 @@ msgstr "" "téléchargés sur votre ordinateur." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "Créé le" @@ -1210,11 +1514,15 @@ msgstr "Identifiants" msgid "Cron Expression" msgstr "Expression Cron" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "Corrélation chronologique inter-fichiers" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "Le compte actuel a le TOTP d'activé." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "Le compte actuel n'a pas le TOTP d'activé." @@ -1234,12 +1542,12 @@ msgstr "Mot de passe actuel" msgid "Current usage" msgstr "Utilisation actuelle" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "Version actuelle" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "Custom" @@ -1252,14 +1560,18 @@ msgstr "Expression cron personnalisée" msgid "Custom Directory" msgstr "Répertoire personnalisé" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "Domaines personnalisés" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "Certificat de domaines personnalisés" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "En-têtes personnalisés" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1272,6 +1584,10 @@ msgstr "" msgid "Daily" msgstr "Quotidien" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "Tendances d'Accès Quotidiennes" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "Quotidiennement à %{time}" @@ -1279,10 +1595,18 @@ msgstr "Quotidiennement à %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "Dashboard" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "Date" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "Plage de dates" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "Jour du mois" @@ -1295,36 +1619,52 @@ msgstr "Jour de la semaine" msgid "Days" msgstr "Jours" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "Fichier de base de données introuvable" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "" +"Décompression réussie mais échec lors de la suppression du fichier " +"compressé: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "Échec du décryptage" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "Plage par défaut" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "" "Définissez le nom et la taille de la zone de mémoire partagée, par exemple " "proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "Supprimer" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "Échec de la suppression de %{path} sur %{env_name}" +msgid "Delete %{path} on %{node_name} failed" +msgstr "Échec de la suppression de %{path} sur %{node_name}" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "%{path} supprimé avec succès sur %{env_name}" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "%{path} supprimé sur %{node_name} avec succès" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "Supprimer le certificat" @@ -1344,43 +1684,44 @@ msgstr "Erreur de suppression de la configuration distante" msgid "Delete Remote Config Success" msgstr "Suppression de la configuration distante réussie" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "Erreur de suppression du site distant" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "Suppression du site distant réussie" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "Erreur de suppression du flux distant" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "Suppression du flux distant réussie" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "Échec de la suppression du site %{name} de %{node}" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "Suppression du site %{name} de %{node} réussie" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "Supprimer le site : %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "Échec de la suppression du flux %{name} de %{node}" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "Le flux %{name} a été supprimé de %{node} avec succès" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "Supprimer le flux : %{stream_name}" @@ -1396,8 +1737,16 @@ msgstr "Démo" msgid "Deploy" msgstr "Déployer" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "Mode de déploiement" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "Décroissant" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "Description" @@ -1413,18 +1762,44 @@ msgstr "Fichier de destination : {0} existe déjà" msgid "Details" msgstr "Détails" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Dev" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "Développement" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "Mode développement" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "Appareil" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "Statistiques des appareils" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "Type d'appareil" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "Le contenu du fichier de hachage est vide" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "DingTalk" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "Direct" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "Directive" @@ -1445,98 +1820,101 @@ msgstr "DirectiveIdx hors limite" msgid "Directives" msgstr "Directives" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "Niveaux de répertoire" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "Chemin du répertoire pour stocker les fichiers de cache" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "Désactiver" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "Échec de la désactivation du renouvellement automatique pour %{name}" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "Erreur de désactivation du site distant" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "Erreur de désactivation de la maintenance du site distant" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "Désactivation de la maintenance du site distant réussie" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "Site distant désactivé avec succès" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "Erreur de désactivation du flux à distance" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "Désactivation du flux distant réussie" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "Désactivation du site %{name} depuis %{node} a échoué" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "Site %{name} désactivé sur %{node} avec succès" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "Échec de la désactivation de la maintenance du site %{name} sur %{node}" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "Désactivation de la maintenance du site %{name} sur %{node} réussie" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "Échec de la désactivation du flux %{name} depuis %{node}" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "Désactivation du flux %{name} depuis %{node} réussie" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "Désactivé" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "Désactivé avec succès" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "Déconnecté" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "E/S disque" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "Identifiants DNS" @@ -1545,11 +1923,15 @@ msgstr "Identifiants DNS" msgid "DNS Provider" msgstr "Fournisseur DNS" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "Résolveur DNS" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "N'activez pas cette option sauf si vous êtes sûr d'en avoir avez besoin." @@ -1557,11 +1939,11 @@ msgstr "N'activez pas cette option sauf si vous êtes sûr d'en avoir avez besoi msgid "Do you want to %{action} this site?" msgstr "Voulez-vous %{action} ce site ?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "Voulez-vous %{action} ce flux ?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "Voulez-vous désactiver le renouvellement automatique des certificats ?" @@ -1574,7 +1956,7 @@ msgstr "Voulez-vous activer TLS ?" msgid "Do you want to remove this server?" msgstr "Voulez-vous supprimer ce serveur ?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "Voulez-vous supprimer cet upstream ?" @@ -1582,7 +1964,7 @@ msgstr "Voulez-vous supprimer cet upstream ?" msgid "Docker client not initialized" msgstr "Client Docker non initialisé" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Le socket Docker existe" @@ -1596,14 +1978,35 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "Document" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "Nombre de documents" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "Domaine" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "La liste des domaines est vide, essayez de rouvrir Auto Cert pour %{config}" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "Télécharger les fichiers de certificat" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "Téléchargement terminé" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "Échec du téléchargement" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "Télécharger la base de données GeoLite2" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "Erreur de téléchargement de la dernière version" @@ -1612,12 +2015,19 @@ msgstr "Erreur de téléchargement de la dernière version" msgid "Downloading latest release" msgstr "Téléchargement de la dernière version" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "Déposez le fichier de certificat ici" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "Déposer le fichier de clé privée ici" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "Mode de simulation activé" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1626,10 +2036,12 @@ msgstr "" "utiliser une clé d'accès sur les sites non sécurisés (HTTPS), sauf si " "exécuté sur localhost." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "Dupliquer" @@ -1638,21 +2050,33 @@ msgstr "Dupliquer" msgid "Duplicate to local successfully" msgstr "Duplication locale réussie" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "Dynamique" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "Gestion dynamique des fragments" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "par ex., 0 0 * * * (quotidiennement à minuit)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "Clé HMAC EAB" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "ID de clé EAB" + #: src/language/curd.ts:8 msgid "Edit" msgstr "Modifier" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "Modifier %{n}" @@ -1669,7 +2093,7 @@ msgstr "Modifier le site" msgid "Edit Stream" msgstr "Modifier le flux" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "E-mail" @@ -1678,16 +2102,28 @@ msgstr "E-mail" msgid "Email (*)" msgstr "Email (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "Ligne de journal vide" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "activer" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "2FA activé avec succès" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "Activer l'indexation avancée" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "Activer l'indexation avancée des journaux" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "Échec de l'activation du renouvellement automatique pour %{name}" @@ -1711,57 +2147,61 @@ msgstr "Activer HTTP/3" msgid "Enable HTTPS" msgstr "Activer HTTPS" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "Activer l'indexation" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "Activer le cache du proxy" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "Erreur d'activation du site distant" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "Erreur d'activation de la maintenance du site distant" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "Activation de la maintenance du site distant réussie" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "Activation du site distant réussie" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "Erreur d'activation du flux distant" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "Activation du flux distant réussie" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "Échec de l'activation de la maintenance du site %{name} sur %{node}" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "Activation de la maintenance du site %{name} sur %{node} réussie" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "Échec de l'activation du site %{name} sur %{node}" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "Site %{name} activé sur %{node} avec succès" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "Échec de l'activation du flux %{name} sur %{node}" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "Activation du flux %{name} sur %{node} réussie" @@ -1773,29 +2213,29 @@ msgstr "Activer le module stub_status" msgid "Enable TLS" msgstr "Activer TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "Activer TOTP" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "Activé" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "Activé avec succès" @@ -1811,6 +2251,17 @@ msgstr "" "Active la prise en charge de HTTP/3 basée sur le protocole QUIC pour des " "performances optimales" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"L'activation de l'indexation avancée des journaux consommera des ressources " +"informatiques importantes, y compris le processeur et la mémoire. Veuillez " +"vous assurer que votre système répond aux exigences minimales avant de " +"continuer." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Crypter le site Web avec Let's Encrypt" @@ -1819,11 +2270,19 @@ msgstr "Crypter le site Web avec Let's Encrypt" msgid "End" msgstr "Fin" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "Date de fin" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "Entrez le nom de domaine" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "Entrez l'adresse IP du serveur (ex. 203.0.113.1 ou 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "Entrez votre domaine" @@ -1835,39 +2294,58 @@ msgstr "La configuration de l'environnement est vide" msgid "Environment variables cleaned" msgstr "Variables d'environnement nettoyées" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "Environnements" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "Erreur" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "Détails de l'erreur" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "Erreur lors de l'initialisation du visualiseur de différences" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "Journal des erreurs" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "Journal d'erreurs détecté" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "Le chemin du journal des erreurs n'existe pas" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "Journaux d'erreurs" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "" +"Les journaux d'erreurs ne prennent pas en charge l'analyse structurée car " +"ils contiennent des messages texte libres." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "Reconnaissance des motifs d'erreur" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "Erreur lors du traitement du contenu" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "Le fichier binaire exécutable est vide" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "Chemin exécutable" @@ -1883,6 +2361,22 @@ msgstr "Exécuter tous les jours à %{time}" msgid "Execute on every month on day %{day} at %{time}" msgstr "Exécuter chaque mois le jour %{day} à %{time}" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "Développer" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "Performances attendues" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "Codes de statut attendus" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "Texte attendu" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1896,12 +2390,36 @@ msgstr "Expiré le : %{date}" msgid "Export Excel" msgstr "Exporter Excel" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "" +"Clé HMAC de liaison de compte externe (optionnelle). Doit être au format " +"d'encodage Base64 URL." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "" +"ID de clé de liaison de compte externe (facultatif). Requis pour certains " +"fournisseurs ACME comme ZeroSSL." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "Conteneur Docker externe" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "Configuration de notification externe introuvable" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "Test de notification externe" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "Notification Externe" @@ -1930,15 +2448,15 @@ msgstr "Échec de la sauvegarde des fichiers Nginx UI : {0}" msgid "Failed to build nginx config: {0}" msgstr "Échec de la construction de la configuration nginx : {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "Échec du calcul du hachage : {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Échec du calcul du hachage Nginx : {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Échec du calcul du hachage de Nginx UI : {0}" @@ -1951,38 +2469,35 @@ msgid "Failed to copy config file: {0}" msgstr "Échec de la copie du fichier de configuration : {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "Échec de la copie du répertoire de la base de données : {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "Échec de la copie du fichier de base de données : {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "Échec de la copie du contenu du fichier : {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Échec de la copie du répertoire de configuration Nginx : {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "Échec de la copie dans le presse-papiers" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "Échec de la création de la sauvegarde" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "Échec de la création du répertoire de sauvegarde : {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "Échec de la création du fichier de sauvegarde : {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "Échec de la création du répertoire : {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "Échec de la création du fichier : {0}" @@ -1990,19 +2505,19 @@ msgstr "Échec de la création du fichier : {0}" msgid "Failed to create hash info file: {0}" msgstr "Échec de la création du fichier d'informations de hachage : {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "Échec de la création du répertoire parent : {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "Échec de la création du répertoire de restauration : {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "Échec de la création du répertoire de stockage {0} : {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "Échec de la création du lien symbolique : {0}" @@ -2018,48 +2533,64 @@ msgstr "Échec de la création du répertoire temporaire" msgid "Failed to create temporary subdirectory" msgstr "Échec de la création du sous-répertoire temporaire" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "Échec de la création du lecteur xz : {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "Échec de la création de l'archive ZIP : {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "Échec de la création de l'entrée ZIP : {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "Échec de la création du fichier ZIP : {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "Échec de la création de l'en-tête ZIP : {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "Échec du décompression de la base de données GeoLite2: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "Échec du décryptage des données : {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "Échec du décryptage du fichier : {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Échec du décryptage du répertoire Nginx : {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Échec du décryptage du répertoire Nginx UI : {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "Échec de la suppression de tous les index" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "Échec de la suppression du certificat" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "Échec de la suppression du certificat de la base de données : %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "Échec de la suppression de l'index de fichier" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "Impossible de désactiver %{msg}" @@ -2067,20 +2598,32 @@ msgstr "Impossible de désactiver %{msg}" msgid "Failed to disable maintenance mode %{msg}" msgstr "Échec de la désactivation du mode maintenance : %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "Échec du téléchargement des fichiers du certificat" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "Échec du téléchargement de la base de données GeoLite2: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "Impossible d'activer %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "Échec de l'activation de l'indexation avancée" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "Échec de l'activation du mode maintenance : %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "Échec du chiffrement des données : {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "Échec du chiffrement du fichier : {0}" @@ -2092,10 +2635,6 @@ msgstr "Échec du chiffrement du répertoire Nginx : {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Échec du chiffrement du répertoire Nginx UI : {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "Échec de l'évaluation des liens symboliques : {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "Échec de l'exécution de la commande : {0}" @@ -2104,7 +2643,7 @@ msgstr "Échec de l'exécution de la commande : {0}" msgid "Failed to execute template: {0}" msgstr "Échec de l'exécution du modèle : {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "Échec de l'extraction de l'archive : {0}" @@ -2124,14 +2663,30 @@ msgstr "Échec de l'obtention des informations sur le certificat" msgid "Failed to get container id: {0}" msgstr "Échec de la récupération de l'ID du conteneur : {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "Échec de la récupération de la taille du fichier : {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "Échec de la récupération de l'état de l'index" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Échec de la récupération des paramètres de performance de Nginx" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "Échec de l’obtention du chemin de nginx.conf" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "Échec de la récupération des données de performance" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "Échec de la récupération des statistiques de persistance" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "Échec de la récupération du statut stub : {0}" @@ -2148,15 +2703,19 @@ msgstr "Échec de l'inspection du conteneur actuel : {0}" msgid "Failed to load history records" msgstr "Échec du chargement des historiques" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "Échec de l'ouverture du fichier : {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "Échec de l'ouverture du fichier source : {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "Échec de l'ouverture de l'entrée ZIP : {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "Échec de l'ouverture du fichier ZIP : {0}" @@ -2176,15 +2735,23 @@ msgstr "Échec de l'analyse du modèle : {0}" msgid "Failed to pull image: {0}" msgstr "Échec du téléchargement de l'image : {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "Échec de la lecture des données compressées: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "Échec de la lecture du fichier chiffré : {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "Échec de la lecture du fichier" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "Échec de la lecture du fichier : {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "Échec de la lecture du fichier d'informations de hachage : {0}" @@ -2200,59 +2767,97 @@ msgstr "Échec de la lecture de la sortie : {0}" msgid "Failed to read response body: {0}" msgstr "Échec de la lecture du corps de la réponse : {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "Échec de la lecture du lien symbolique : {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "Échec de la reconstruction de l'index de fichier" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "Échec de la reconstruction de l'index" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "Échec de l'actualisation des sites" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Échec de la restauration des configurations Nginx : {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "" -"Échec de la restauration des fichiers de l'interface utilisateur de Nginx : " -"{0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "Échec de la révocation du certificat" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "Échec de la révocation du certificat : %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "Échec de l'enregistrement de la configuration" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "Échec de la sauvegarde du fichier téléchargé: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "Échec de l'enregistrement de la configuration de vérification de santé" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Échec de l'enregistrement des paramètres de performance de Nginx" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "Échec de l'enregistrement de l'ordre" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "Échec de l'envoi du message de test" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "Échec du démarrage du conteneur temporaire : {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "Échec de la mise à jour du statut" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "Échec du téléchargement du fichier" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "Échec de la vérification des hachages : {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "Échec de l'écriture du fichier de sauvegarde : {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "Échec de l'écriture des données décompressées: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "Échec de l'écriture du fichier décrypté : {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "Échec de l'écriture du fichier chiffré : {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "Échec de l'écriture du fichier de clé de sécurité : {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "Échec de l'écriture dans le tampon ZIP : {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "Fonctionnalités" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2266,6 +2871,10 @@ msgstr "Fichier" msgid "File exists" msgstr "Le fichier existe" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "La reconstruction de l'index du fichier a démarré avec succès pour %{path}" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "Fichier introuvable" @@ -2274,19 +2883,35 @@ msgstr "Fichier introuvable" msgid "File or directory not found: {0}" msgstr "Fichier ou répertoire introuvable : {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "Le chemin du fichier est requis" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "La taille du fichier ne peut pas dépasser 5 Mo" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "Fichier téléchargé avec succès" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "Nom du fichier vide" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "Filtrer" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "Filtrer le contenu du journal" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "Finie" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "Première vue" @@ -2298,7 +2923,11 @@ msgstr "dossier" msgid "Folder" msgstr "Dossier" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "Suivre les redirections" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2315,6 +2944,33 @@ msgstr "Pour utilisateur chinois" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "Pour les utilisateurs chinois : https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "Pour un usage commercial ou professionnel, contactez" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" +"Pour les journaux d'erreurs, veuillez utiliser le Visualiseur de Journaux " +"Bruts pour une meilleure expérience de visualisation." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" +"Pour les configurations de certificats basés sur IP, seule la méthode de " +"défi HTTP-01 est prise en charge. Le défi DNS-01 n'est pas compatible avec " +"les certificats basés sur IP." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "" +"Pour les certificats basés sur IP, veuillez spécifier l'adresse IP du " +"serveur qui sera incluse dans le certificat." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "Échec de l'analyse du formulaire" @@ -2335,6 +2991,22 @@ msgstr "Format : minute heure jour mois jour_de_la_semaine" msgid "Friday" msgstr "Vendredi" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "À partir des journaux indexés" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "Frontend" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "Recherche en texte intégral" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "Prise en charge de la recherche en texte intégral" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "Certificat général" @@ -2343,16 +3015,16 @@ msgstr "Certificat général" msgid "Generate" msgstr "Générer" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "Générer nouveaux codes de récupération" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "Générer codes de récupération" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "Codes de récupération générés avec succès" @@ -2360,6 +3032,40 @@ msgstr "Codes de récupération générés avec succès" msgid "Generating private key for registering account" msgstr "Génération de clé privée pour l'enregistrement du compte" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "Base de données GeoLite2" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "Base de données GeoLite2 disponible" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "Base de données GeoLite2 installée" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "Base de données GeoLite2 non trouvée à {0}" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"Base de données GeoLite2 non trouvée à {0}. L’indexation des journaux " +"nécessite une base de données GeoLite2 pour l’analyse géographique des " +"adresses IP" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "Base de données GeoLite2 requise" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "Erreur lors de la récupération de l'utilisateur ACME: {0}" @@ -2372,8 +3078,7 @@ msgstr "Échec de la récupération des données" msgid "Get dns credential error: {0}" msgstr "Erreur lors de la récupération des informations d'identification DNS : {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "Erreur d'obtention des informations sur la version" @@ -2385,10 +3090,40 @@ msgstr "Obtention du certificat, veuillez patienter..." msgid "Github Proxy" msgstr "Proxy Github" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "Carte d'Accès Mondiale" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "Carte Mondiale" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "Aller au visualiseur de logs bruts" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" +"La vérification de santé gRPC nécessite que le serveur implémente le " +"service de vérification de santé gRPC (grpc.health.v1.Health)." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"gRPCS utilise le chiffrement TLS. Le serveur doit implémenter le service de " +"vérification de santé gRPC. Pour les tests, la validation SSL est " +"désactivée par défaut." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "Compression GZIP" @@ -2401,25 +3136,51 @@ msgstr "Niveau de compression GZIP" msgid "GZIP Min Length" msgstr "Longueur minimale GZIP" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "Échec de la vérification du hachage : intégrité du fichier compromise" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "Vérification de santé" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "Configuration de la vérification de l'état" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "Configuration de vérification de santé enregistrée" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "Configuration de vérification de santé enregistrée avec succès" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "État de santé" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "Cacher" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "Masquer l'assistant" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "Élevé" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "Une valeur plus élevée signifie une meilleure réutilisation de la connexion" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "Historique" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "Menu principal" @@ -2428,10 +3189,11 @@ msgid "Host" msgstr "Hôte" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "Heure" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2439,7 +3201,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "Port de challenge HTTP" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "Méthode HTTP" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2447,15 +3213,15 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "Protocole HTTPS" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "Numéro ICP" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "Si vide, le répertoire CA sera utilisé." - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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." @@ -2464,7 +3230,7 @@ msgstr "" "le maximum de tentatives dans le délai de bannissement, l'IP sera bannie " "pendant un certain temps." -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." @@ -2472,13 +3238,22 @@ msgstr "" "Si vous souhaitez révoquer automatiquement l'ancien certificat, veuillez " "activer cette option." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" +"Si vous souhaitez modifier l'emplacement de stockage, vous pouvez définir " +"le `IndexPath` de la section `nginx_log` dans la configuration de " +"l'interface Nginx." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "" "Si votre navigateur prend en charge la clé d'accès WebAuthn, une boîte de " "dialogue apparaîtra." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2490,12 +3265,12 @@ msgstr "" msgid "Import" msgstr "Importer" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "Importer un certificat" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "Temps d'inactivité" @@ -2507,7 +3282,46 @@ msgstr "" "Inclut le processus maître, les processus worker, les processus de cache et " "autres processus Nginx" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "Analyse d'index incrémentielle" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "Reconstruction de l'index et des statistiques démarrée avec succès" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "Échec de l'indexation" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "Échec de l'indexation, veuillez essayer de reconstruire" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "Reconstruction de l'index initiée" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "État de l'index" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "Indexé" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "Indexation" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "Indexation des journaux..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "Indexation en cours..." @@ -2515,10 +3329,14 @@ msgstr "Indexation en cours..." msgid "Indicator" msgstr "Indicateur" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "Info" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "L'utilisateur initial n'existe pas" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "Erreur du programme de mise à niveau initial du core" @@ -2527,7 +3345,7 @@ 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/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "Entrez le code de l'application :" @@ -2542,7 +3360,7 @@ msgstr "Ignorer la vérification (non sécurisé)" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "Installer" @@ -2570,27 +3388,36 @@ msgstr "" msgid "Interval" msgstr "Intervalle" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "Invalide" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "Format de vecteur d'initialisation AES invalide : {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "Format de clé AES invalide : {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "Format de certificat invalide" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "Type de réclamation invalide" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "SHA de validation non valide" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "Objet de fichier non valide" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "Chemin de fichier invalide : {0}" @@ -2603,6 +3430,10 @@ msgstr "Nom de fichier invalide" msgid "Invalid folder name" msgstr "Nom du répertoire invalide" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "ID de notification invalide" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "Configuration de notificateur invalide" @@ -2611,7 +3442,7 @@ msgstr "Configuration de notificateur invalide" msgid "Invalid otp code" msgstr "Code otp invalide" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "Remplissage invalide dans les données décryptées" @@ -2619,10 +3450,15 @@ msgstr "Remplissage invalide dans les données décryptées" msgid "Invalid passcode or recovery code" msgstr "Code de vérification ou code de récupération invalide" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "Chemin invalide : {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "Format de clé privée invalide" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "Code de récupération invalide" @@ -2631,19 +3467,41 @@ msgstr "Code de récupération invalide" msgid "Invalid request format" msgstr "Format de la requête invalide" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "Format de jeton de sécurité invalide" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "ID de chat Telegram invalide : ne peut pas être zéro" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "Format d'horodatage invalide" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "Type de message WebSocket non valide" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "Adresse IP" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "Avis de certificat IP" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "Émettre un certificat" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "Émettre un certificat" @@ -2663,7 +3521,7 @@ msgstr "élément(s)" msgid "Jwt Secret" msgstr "Secret Jwt" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2675,12 +3533,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "Délai d'expiration Keepalive" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "Type de clé" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "Langue" @@ -2692,6 +3550,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark Personnalisé" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "Dernières 12 heures" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "14 derniers jours" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "15 dernières minutes" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "Dernières 24 heures" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "30 derniers jours" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "30 dernières minutes" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "Dernières 4 heures" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "7 derniers jours" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "90 derniers jours" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "Statut de la dernière sauvegarde" @@ -2700,15 +3596,35 @@ msgstr "Statut de la dernière sauvegarde" msgid "Last Backup Time" msgstr "Dernière heure de sauvegarde" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "Dernière vérification" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "Dernière vérification le" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "Dernière heure" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "Dernière indexation" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "Mois dernier" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "Dernière mise à jour" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "Dernière mise à jour:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "Dernière utilisation le" @@ -2724,12 +3640,18 @@ msgstr "Laissez vide pour la valeur par défaut : https://api.openai.com/" msgid "Leave blank if do not want to modify" msgstr "Laisser vide si vous ne souhaitez pas modifier" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "Laissez vide si votre fournisseur ACME ne le requiert pas" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "Laissez vide si vous n'en avez pas besoin." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "Laisser vide ne changera rien" @@ -2737,16 +3659,24 @@ msgstr "Laisser vide ne changera rien" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "Ancien code de récupération non autorisé car TOTP n'est pas activé" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego désactiver la prise en charge CNAME" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "Licence" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "Répartition des licences" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "Types de licence" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "Lien" @@ -2762,32 +3692,32 @@ msgstr "En écoute" msgid "Load Average:" msgstr "Charge moyenne :" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "Charger à partir des options" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "Chargement réussi" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "Chargé" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "Fichiers du chargeur" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "Paramètres du chargeur" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "Pause du chargeur" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "Seuil du chargeur" @@ -2795,9 +3725,15 @@ msgstr "Seuil du chargeur" msgid "Loading data..." msgstr "Chargement des données..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "Chargement..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2816,11 +3752,11 @@ msgstr "Emplacement" msgid "Locations" msgstr "Emplacements" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "Journal" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2831,23 +3767,61 @@ msgstr "" "https://nginxui.com/zh_CN/guide/config-nginx-log.html pour plus " "d'informations." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "Le fichier journal n'existe pas" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "Le fichier journal n'est pas un fichier régulier" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "Fichier journal non disponible" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "Fichier journal non encore indexé" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "Indexeur de journaux non disponible" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "Indexation des journaux terminée ! Chargement des données mises à jour..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "La ligne de journal dépasse la longueur maximale" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "Liste des journaux" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" +"L'analyseur de journaux n'est pas initialisé ; appelez " +"indexer.InitLogParser() avant utilisation" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "Le chemin du journal n'est pas dans la liste blanche" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "Connexion" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "Connexion réussie" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "Déconnexion réussie" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Logrotate" @@ -2868,9 +3842,20 @@ msgstr "" "planificateur de tâches crontab de Nginx UI exécutera la commande logrotate " "à l'intervalle que vous avez défini en minutes." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "Bas" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "Nœud principal" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "Maintenance" @@ -2886,7 +3871,7 @@ msgstr "Mode maintenance activé avec succès" msgid "Make certificate dir error: {0}" msgstr "Erreur lors de la création du répertoire du certificat : {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2901,11 +3886,11 @@ msgstr "" msgid "Manage Configs" msgstr "Gérer les configurations" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "Gérer les sites" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "Gérer les flux" @@ -2917,15 +3902,15 @@ msgstr "Gérer les utilisateurs" msgid "Managed Certificate" msgstr "Certificat géré" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "Fichiers du gestionnaire" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "Temps d'attente du gestionnaire" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "Seuil du Gestionnaire" @@ -2951,7 +3936,7 @@ msgstr "Processus maître" msgid "Master Process" msgstr "Processus maître" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "Tentatives maximum" @@ -2959,11 +3944,15 @@ msgstr "Tentatives maximum" msgid "Max Concurrent Connections" msgstr "Connexions simultanées maximales" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "Redirections maximales" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "Requêtes maximales par seconde" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "Taille maximale du cache" @@ -2980,7 +3969,7 @@ msgstr "Nombre maximum de connexions simultanées" msgid "Maximum number of connections per worker process" msgstr "Nombre maximum de connexions par processus worker" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "Taille maximale totale du cache" @@ -2990,6 +3979,7 @@ msgstr "Nombre maximal de processus de travail :" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "Mémoire" @@ -2997,22 +3987,39 @@ msgstr "Mémoire" msgid "Memory and Storage" msgstr "Mémoire et stockage" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "Conception de la mémoire" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "Utilisation de la mémoire (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "Méthode" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "Nom de la méthode" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "Taille minimale des fichiers pour la compression" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "Espace libre minimum" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "Espace libre minimum dans le répertoire de cache" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "Minimum :" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "Minute" @@ -3021,21 +4028,36 @@ msgstr "Minute" msgid "Minutes" msgstr "Minutes" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "Miroir" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "Modèle" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "Service d'analyse moderne non disponible" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "Service d'indexation moderne non disponible" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "Service de recherche moderne non disponible" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "Modifié le" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "Modifier" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "Modifier le certificat" @@ -3043,7 +4065,7 @@ msgstr "Modifier le certificat" msgid "Modify Config" msgstr "Modifier la configuration" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "Module" @@ -3051,6 +4073,10 @@ msgstr "Module" msgid "Modules" msgstr "Modules" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "Cache des modules actualisé" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "Lundi" @@ -3063,39 +4089,66 @@ msgstr "Mensuel" msgid "Monthly on day %{day} at %{time}" msgstr "Mensuellement le jour %{day} à %{time}" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "Visualisation de données multidimensionnelle" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "Directive multiligne" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "Doit être une adresse IP publique accessible depuis Internet" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "N/D" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "Nom" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "Nom ou contenu" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "Espace de noms" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "Espaces de noms" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "Il faut activer le module stub_status" @@ -3108,6 +4161,10 @@ msgstr "Réseau" msgid "Network Statistics" msgstr "Statistiques du réseau" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "Nouveau chat" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "Erreur du nouveau fournisseur de défi DNS : {0}" @@ -3136,18 +4193,18 @@ msgstr "Nouveau chemin" msgid "New transport error: {0}" msgstr "Erreur de nouveau transport : {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "Nouvelle version publiée" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "Suivant" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3159,7 +4216,7 @@ msgstr "La sortie de Nginx -T est vide" msgid "Nginx Access Log Path" msgstr "Chemin du journal d'accès Nginx" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Le chemin du journal d'accès Nginx existe" @@ -3188,15 +4245,15 @@ msgstr "La configuration Nginx n'inclut pas sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "La configuration Nginx n'inclut pas stream-enabled" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "Le répertoire de configuration de Nginx n'est pas défini" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Le répertoire de configuration Nginx existe" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "Le fichier d'entrée de configuration Nginx existe" @@ -3204,8 +4261,8 @@ msgstr "Le fichier d'entrée de configuration Nginx existe" msgid "Nginx configuration has been restored" msgstr "La configuration de Nginx a été restaurée" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Erreur d'analyse de configuration Nginx" @@ -3234,7 +4291,7 @@ msgstr "Taux d'utilisation du CPU par Nginx" msgid "Nginx Error Log Path" msgstr "Chemin du journal des erreurs Nginx" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "Le chemin du journal d'erreurs de Nginx existe" @@ -3243,7 +4300,7 @@ msgid "Nginx error: {0}" msgstr "Erreur Nginx : {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3258,7 +4315,7 @@ msgstr "Nginx ne fonctionne pas dans un autre conteneur" msgid "Nginx is running" msgstr "Nginx est en cours d'exécution" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Journal Nginx" @@ -3266,6 +4323,10 @@ msgstr "Journal Nginx" msgid "Nginx Log Directory Whitelist" msgstr "Liste blanche des répertoires de journaux Nginx" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Indexation des logs Nginx..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3275,7 +4336,7 @@ msgstr "Utilisation de la mémoire par Nginx" msgid "Nginx PID Path" msgstr "Chemin du PID de Nginx" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Le chemin du PID de Nginx existe" @@ -3288,7 +4349,7 @@ msgstr "Commande de rechargement de Nginx" msgid "Nginx reload failed: {0}" msgstr "Échec du rechargement de Nginx : {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Les opérations de rechargement de Nginx ont été envoyées aux nœuds distants" @@ -3300,7 +4361,7 @@ msgstr "Nginx a été rechargé avec succès" msgid "Nginx Restart Command" msgstr "Commande de redémarrage de Nginx" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Les opérations de redémarrage de Nginx ont été envoyées aux nœuds distants" @@ -3308,7 +4369,7 @@ msgstr "Les opérations de redémarrage de Nginx ont été envoyées aux nœuds msgid "Nginx restarted successfully" msgstr "Nginx a redémarré avec succès" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Le chemin sbin de Nginx existe" @@ -3341,41 +4402,73 @@ msgstr "" "La configuration de Nginx UI a été restaurée et redémarrera automatiquement " "dans quelques secondes." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf inclut le répertoire conf.d" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf inclut le répertoire sites-enabled" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf inclut le répertoire streams-enabled" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "Non" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "Aucune action" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "Aucun certificat disponible" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "Aucune donnée géographique pour la Chine disponible" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "Aucune donnée" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "Aucune donnée" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "Aucune entrée dans la page actuelle" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "Aucune donnée géographique disponible" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "Aucun journal trouvé dans la plage de temps sélectionnée." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "Aucun nœud sélectionné" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "Aucun enregistrement sélectionné" @@ -3384,24 +4477,33 @@ msgstr "Aucun enregistrement sélectionné" msgid "No servers configured" msgstr "Aucun serveur configuré" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "Aucun site trouvé" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "" +"Aucune adresse IP spécifique trouvée dans la configuration server_name. " +"Veuillez spécifier l'adresse IP du serveur ci-dessous pour le certificat." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "Aucune donnée de journal structurée disponible" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "Aucun amont configuré" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "Nœud" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "Groupe de nœuds" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "Groupes de nœuds" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "Analyse du nœud échouée : {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3411,7 +4513,12 @@ msgstr "Nom du nœud" msgid "Node Secret" msgstr "Secret du nœud" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "État du nœud" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "Nœuds" @@ -3419,26 +4526,38 @@ msgstr "Nœuds" msgid "Not After" msgstr "Pas après" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "Texte non attendu" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "Introuvable" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "Non indexé" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "Non chargé" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "Non pris en charge pour les certificats IP" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "Non valide avant : %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "Note" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." @@ -3446,11 +4565,25 @@ msgstr "" "Notez que si le fichier de configuration inclut d'autres configurations ou " "certificats, veuillez les synchroniser avec les nœuds distants à l'avance." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"Remarque : Si le serveur ne prend pas en charge la réflexion gRPC, les " +"vérifications de santé peuvent échouer. Assurez-vous que votre serveur gRPC " +"a la réflexion activée." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "Rien à copier" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "Notification" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "Notifications" @@ -3459,17 +4592,21 @@ msgstr "Notifications" msgid "Notifier not found" msgstr "Notificateur introuvable" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "" "Nombre de processus de travail concurrents, réglage automatique selon le " "nombre de cœurs du CPU" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "Nombre de fichiers traités par le chargeur de cache en une fois" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "Nombre de fichiers traités par le gestionnaire de cache à la fois" @@ -3484,7 +4621,7 @@ msgstr "Nombre de processus de travail" msgid "Obtain cert error: {0}" msgstr "Erreur lors de l'obtention du certificat : {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "Obtenir un certificat" @@ -3492,11 +4629,11 @@ msgstr "Obtenir un certificat" msgid "Obtaining certificate" msgstr "Obtention du certificat" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP Must Staple" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." @@ -3505,7 +4642,7 @@ msgstr "" "de leur premier accès avec Firefox." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "Désactivé" @@ -3513,48 +4650,58 @@ msgstr "Désactivé" msgid "Official Document" msgstr "Documentation officielle" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "Hors ligne" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "Analyse GeoIP hors ligne" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "OK" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "Activé" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "Une fois la vérification terminée, les enregistrements seront supprimés." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "En ligne" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "Nombre en ligne" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "Seuls les fichiers ZIP sont autorisés" @@ -3563,23 +4710,46 @@ msgstr "Seuls les fichiers ZIP sont autorisés" msgid "Open" msgstr "Ouvert" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "Limitation du logiciel libre" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "Système d'exploitation" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "Statistiques du système d'exploitation" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "Ou" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "ou glissez-déposez le fichier dans l'éditeur ci-dessous" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "Ou entrez le secret : %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "Ordre enregistré avec succès" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "Nom d'origine" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "OS" @@ -3626,11 +4796,15 @@ msgstr "Paramètres" msgid "Params Optimization" msgstr "Optimisation des paramètres" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "Performance de l'analyseur" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "Clé d'accès" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3641,7 +4815,7 @@ msgstr "" "ou un code PIN. Elles peuvent être utilisées comme remplacement d'un mot de " "passe ou comme méthode d'authentification à deux facteurs (2FA)." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "Mot de passe" @@ -3670,11 +4844,13 @@ msgstr "Les mots de passe ne correspondent pas" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "Chemin" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "Le chemin n'est pas dans les chemins d'accès accordés : {0}" @@ -3688,12 +4864,28 @@ msgstr "" msgid "Payload resource is nil" msgstr "La ressource de charge utile est nulle" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "Heure de pointe" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "En attente" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "Pourcentage" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "Exécuter" @@ -3737,7 +4929,11 @@ msgstr "" "Veuillez activer le module stub_status pour obtenir des statistiques de " "requêtes, le nombre de connexions, etc." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "Veuillez saisir" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." @@ -3745,11 +4941,19 @@ msgstr "" "Veuillez entrer un nom pour la clé d'accès que vous souhaitez créer et " "cliquer sur le bouton OK ci-dessous." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "Veuillez entrer une adresse IPv4 valide (0-255 par octet)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "Veuillez entrer une adresse IPv4 ou IPv6 valide" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "Veuillez entrer une plage de ports valide" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "Veuillez saisir au moins un domaine" @@ -3766,6 +4970,10 @@ msgstr "Veuillez saisir le jeton de sécurité" msgid "Please enter the security token received during backup" msgstr "Veuillez saisir le jeton de sécurité reçu lors de la sauvegarde" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "Veuillez entrer l'adresse IP du serveur" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "Veuillez remplir tous les champs correctement" @@ -3774,7 +4982,7 @@ msgstr "Veuillez remplir tous les champs correctement" msgid "Please fill in required S3 configuration fields" msgstr "Veuillez remplir les champs de configuration S3 requis" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." @@ -3782,7 +4990,7 @@ msgstr "" "Veuillez remplir les informations d'authentification API fournies par votre " "fournisseur DNS." -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3791,7 +4999,7 @@ msgstr "" "DNS, puis sélectionner l'un des identifiants ci-dessous pour demander l'API " "du fournisseur DNS." -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3829,20 +5037,20 @@ msgstr "" msgid "Please input your E-mail!" msgstr "Veuillez saisir votre e-mail !" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "Veuillez saisir votre mot de passe !" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "Veuillez saisir votre nom d'utilisateur !" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "Veuillez vous connecter." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "" "Veuillez noter que les unités de temps des configurations ci-dessous sont " @@ -3862,25 +5070,31 @@ msgstr "" msgid "Please select a backup file" msgstr "Veuillez sélectionner un fichier de sauvegarde" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "Veuillez sélectionner un type de notification" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "Veuillez sélectionner un fichier %{type} valide (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "Veuillez sélectionner au moins un élément" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Veuillez sélectionner au moins un nœud pour recharger Nginx" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Veuillez sélectionner au moins un nœud pour redémarrer Nginx" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "Veuillez sélectionner au moins un nœud à mettre à niveau" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "Veuillez taper \"Révoquer\" pour confirmer" @@ -3893,23 +5107,26 @@ msgstr "Veuillez saisir le texte de confirmation exact" msgid "Port" msgstr "Port" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "Le port 80 doit être ouvert pour la validation du défi HTTP-01" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "Scanner de ports" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "Action post-synchronisation" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "Pré-version" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "Préférence" @@ -3917,6 +5134,19 @@ msgstr "Préférence" msgid "Preparing lego configurations" msgstr "Préparation des configurations Lego" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "CA privée :" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "Les IP privées (192.168.x.x, 10.x.x.x, 172.16-31.x.x) échoueront" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "clé privée" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "Processus" @@ -3933,6 +5163,10 @@ msgstr "Informations sur le processus" msgid "Processing {count}/{total}" msgstr "Traitement en cours {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "Pipeline de production" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "Interdire la modification du mot de passe root dans la démo" @@ -3949,6 +5183,10 @@ msgstr "Groupe de projet" msgid "Protected Directory" msgstr "Répertoire protégé" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "Protocole" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3959,7 +5197,7 @@ msgstr "" "directe. Si vous utilisez un proxy inverse, veuillez configurer le " "protocole séparément dans le proxy inverse." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "Fournisseur" @@ -3967,21 +5205,56 @@ msgstr "Fournisseur" msgid "Provider not found: {0}" msgstr "Fournisseur introuvable : {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "Province / Région" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "Proxy" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "Passe de Proxy" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "Cibles du proxy" -#: src/views/preference/tabs/NodeSettings.vue:46 -msgid "Public Security Number" -msgstr "Numéro de sécurité publique" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "Exigences de l'AC publique :" + +#: src/views/preference/tabs/NodeSettings.vue:46 +msgid "Public Security Number" +msgstr "Numéro de sécurité publique" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "Pages vues" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "En file d'attente" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "En attente d'indexation..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "Sélection rapide" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "Brut" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "Ré-télécharger la base de données" #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" @@ -3997,24 +5270,48 @@ msgstr "Requêtes de lecture" msgid "Reads" msgstr "Lectures" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "Tableau de bord d'analyse en temps réel" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "Reconstruire" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "Reconstruire tous les index" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "Reconstruire l'index du fichier" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "Reconstruire l'index" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Réception" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "Vérifier à nouveau" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "Recommandé :" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "Récupération" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "Codes de récupération" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -4027,15 +5324,29 @@ msgstr "" msgid "Recursive Nameservers" msgstr "Serveurs de noms récursifs" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "Référent" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "Actualiser" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "Actualiser le cache des modules" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "Régénérer la réponse" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "S'inscrire" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." @@ -4043,19 +5354,19 @@ msgstr "" "Enregistrez un utilisateur ou utilisez ce compte pour émettre un certificat " "via un proxy HTTP." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "Échec de l'enregistrement" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "Enregistrer au démarrage" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "Clé d'accès enregistrée avec succès" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "Inscription réussie" @@ -4063,28 +5374,30 @@ msgstr "Inscription réussie" msgid "Registering user" msgstr "Enregistrement de l'utilisateur" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "Statut d'enregistrement" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "Réinstaller" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "Échec de la requête API de publication: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "Note de version" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "Recharger" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Recharger nginx" @@ -4108,7 +5421,7 @@ msgstr "Erreur de rechargement de Nginx distant" msgid "Reload Remote Nginx Success" msgstr "Rechargement distant de Nginx réussi" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "" "La demande de rechargement a échoué, veuillez vérifier votre connexion " @@ -4122,22 +5435,28 @@ msgstr "Rechargement" msgid "Reloading nginx" msgstr "Rechargement de nginx" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "Distant" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "Supprimer" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "Suppression réussie" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "Supprimé avec succès" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4146,12 +5465,12 @@ msgid "Rename" msgstr "Renommer" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "Échec du renommage de %{orig_path} en %{new_path} sur %{env_name}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "Échec du renommage de %{orig_path} en %{new_path} sur %{node_name}" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "%{orig_path} renommé en %{new_path} sur %{env_name} avec succès" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "Renommage de %{orig_path} en %{new_path} sur %{node_name} réussi" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4161,37 +5480,37 @@ msgstr "Erreur lors du renommage de la configuration distante" msgid "Rename Remote Config Success" msgstr "Renommage de la configuration distante réussi" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "Erreur de renommage du site distant" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "Renommage du site distant réussi" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "Erreur de renommage du flux distant" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "Renommage du flux distant réussi" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "Échec du renommage du site %{name} en %{new_name} sur %{node}" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "Le site %{name} a été renommé en %{new_name} sur %{node} avec succès" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "Échec du renommage du flux %{name} en %{new_name} sur %{node}" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "Flux %{name} renommé en %{new_name} sur %{node} avec succès" @@ -4199,7 +5518,7 @@ msgstr "Flux %{name} renommé en %{new_name} sur %{node} avec succès" msgid "Rename successfully" msgstr "Renommage réussi" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4209,8 +5528,8 @@ msgstr "Renommé avec succès" msgid "Renew cert error: {0}" msgstr "Erreur de renouvellement du certificat : {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "Renouveler le certificat" @@ -4222,11 +5541,23 @@ msgstr "Erreur de renouvellement du certificat" msgid "Renew Certificate Success" msgstr "Renouvellement du certificat réussi" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "Renouvellement réussi" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "Requête" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "Corps de la requête" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "Chemin de la requête" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "Statistiques des requêtes" @@ -4244,13 +5575,19 @@ msgid "Requests Per Connection" msgstr "Requêtes par connexion" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "Réinitialiser" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "Réinitialiser l'authentification à deux facteurs" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "Réinitialiser la recherche" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4261,6 +5598,10 @@ msgstr "" "incluant toute la mémoire des bibliothèques partagées, qui sera recalculée " "pour plusieurs processus" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "Avertissement d'utilisation des ressources" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4270,9 +5611,8 @@ msgstr "Réponses" msgid "Restart" msgstr "Redémarrer" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Redémarrer Nginx" @@ -4292,7 +5632,7 @@ msgstr "Erreur de redémarrage de Nginx distant" msgid "Restart Remote Nginx Success" msgstr "Redémarrage distant de Nginx réussi" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "La demande de redémarrage a échoué, veuillez vérifier votre connexion réseau" @@ -4331,8 +5671,8 @@ msgstr "Restaurer cette version" msgid "Restored successfully" msgstr "Rétabli avec succès" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "Révoquer" @@ -4340,15 +5680,15 @@ msgstr "Révoquer" msgid "Revoke cert error: {0}" msgstr "Erreur de révocation du certificat : {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "Révoquer l'ancien certificat" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "Révoquer ce certificat" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." @@ -4356,15 +5696,15 @@ msgstr "" "La révocation d'un certificat affectera tous les services qui l'utilisent " "actuellement. Cette action ne peut pas être annulée." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "Nom d'affichage RP" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "Origines RP" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4400,10 +5740,6 @@ msgstr "L'ID de clé d'accès S3 est requis" msgid "S3 Bucket" msgstr "Bucket S3" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "Accès au compartiment S3 refusé : {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "Le bucket S3 est requis" @@ -4412,7 +5748,7 @@ msgstr "Le bucket S3 est requis" msgid "S3 bucket name" msgstr "Nom du bucket S3" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "La configuration S3 est incomplète : il manque {0}" @@ -4420,27 +5756,15 @@ msgstr "La configuration S3 est incomplète : il manque {0}" msgid "S3 connection test failed" msgstr "Échec du test de connexion S3" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "Échec du test de connexion S3 : {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "Test de connexion S3 réussi" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "Les identifiants S3 sont invalides : {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "Point de terminaison S3" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "Le point de terminaison S3 est invalide : {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "Le point de terminaison S3 est requis" @@ -4476,7 +5800,7 @@ msgstr "Clé d'accès secrète S3" msgid "S3 secret access key is required" msgstr "La clé d'accès secrète S3 est requise" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "Échec du téléversement S3 : {0}" @@ -4484,17 +5808,19 @@ msgstr "Échec du téléversement S3 : {0}" msgid "Saturday" msgstr "Samedi" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "Enregistrer" @@ -4502,41 +5828,41 @@ msgstr "Enregistrer" msgid "Save Directive" msgstr "Enregistrer la directive" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "Enregistrer l'erreur %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "Enregistrer l'ordre" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "Erreur lors de l'enregistrement du site distant" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "Enregistrement du site distant réussi" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "Erreur lors de l'enregistrement du flux distant" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "Enregistrement du flux distant réussi" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "Échec de l'enregistrement du site %{name} sur %{node}" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "Site %{name} enregistré sur %{node} avec succès" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "Échec de l'enregistrement du flux %{name} sur %{node}" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "Flux %{name} enregistré sur %{node} avec succès" @@ -4544,16 +5870,17 @@ msgstr "Flux %{name} enregistré sur %{node} avec succès" msgid "Save successful" msgstr "Enregistrement réussi" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "Sauvegarde réussie" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "Enregistré avec succès" @@ -4577,15 +5904,15 @@ msgstr "Scanner les ports" msgid "Scan Results" msgstr "Résultats du scan" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" "Scannez le code QR avec votre téléphone portable pour ajouter le compte à " "l'application." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "Analyse des journaux en cours..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "Analyse" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4600,16 +5927,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "Rechercher" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "Filtres de recherche" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "Rechercher dans le contenu du journal..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "Nom du module de recherche" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "Rechercher des modules" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "Plage de recherche" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "Rechercher des modèles" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "Le secret a été copié" @@ -4626,13 +5974,21 @@ msgstr "Jeton de sécurité" msgid "Security Token Information" msgstr "Informations sur le jeton de sécurité" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" +"Sélectionnez un répertoire CA prédéfini ou saisissez un répertoire " +"personnalisé. Laissez vide pour utiliser le répertoire CA par défaut." + #: src/language/curd.ts:31 msgid "Select all" msgstr "Tout sélectionner" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "Sélectionner une action après la synchronisation" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "Sélectionnez ou entrez une URL de répertoire CA" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4642,7 +5998,7 @@ msgstr "{count} fichiers sélectionnés" msgid "Selector" msgstr "Sélecteur" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "Vérification automatique" @@ -4658,11 +6014,15 @@ msgstr "" msgid "Send" msgstr "Envoyer" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "Envoyer un message test" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "Serveur" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "Erreur du serveur" @@ -4670,6 +6030,10 @@ msgstr "Erreur du serveur" msgid "Server Info" msgstr "Informations sur le serveur" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "Adresse IP du serveur" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "Taille du seau de hachage des noms de serveur" @@ -4678,7 +6042,7 @@ msgstr "Taille du seau de hachage des noms de serveur" msgid "Server names hash table size" msgstr "Taille de la table de hachage des noms de serveur" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "server_name introuvable dans les directives" @@ -4686,6 +6050,10 @@ msgstr "server_name introuvable dans les directives" msgid "ServerIdx out of range" msgstr "ServerIdx hors limites" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "Nom du service" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "Session non trouvée" @@ -4724,6 +6092,10 @@ msgstr "Définition des variables d'environnement" msgid "Setting HTTP01 challenge provider" msgstr "Configuration du fournisseur de défi HTTP01" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "Paramètres" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4744,7 +6116,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Configurez votre Nginx UI" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "Zone de Mémoire Partagée" @@ -4752,10 +6124,18 @@ msgstr "Zone de Mémoire Partagée" msgid "Show" msgstr "Afficher" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "Afficher l'assistant" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "Se connecter avec une clé d'accès" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "Traitement de flux optimisé SIMD" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "Directive unique" @@ -4776,11 +6156,23 @@ msgstr "Le site est en mode maintenance" msgid "Site Logs" msgstr "Journaux du site" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "Navigation du site" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "Site non trouvé" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "Actualisation du site initiée" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "Sites" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "Le répertoire des sites existe" @@ -4788,6 +6180,14 @@ msgstr "Le répertoire des sites existe" msgid "Sites List" msgstr "Liste des sites" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" +"Les sites apparaîtront ici une fois que vous aurez configuré les blocs " +"serveur nginx avec des directives server_name valides." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "Le répertoire sites-available n'existe pas" @@ -4797,6 +6197,8 @@ msgid "Sites-enabled directory not exist" msgstr "Le répertoire sites-enabled n'existe pas" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "Taille" @@ -4804,19 +6206,36 @@ msgstr "Taille" msgid "Skip Installation" msgstr "Ignorer l'installation" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "Temps d'attente entre les itérations du chargeur de cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "Temps d'attente entre les itérations du gestionnaire de cache" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "Socket" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "Trié par" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "IP source" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "Sponsor" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "Stockage SSD pour de meilleures performances d'E/S" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "Contenu du certificat SSL" @@ -4830,15 +6249,20 @@ msgstr "" msgid "SSL certificate file not found" msgstr "Fichier de certificat SSL introuvable" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "Contenu de la clé du certificat SSL" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "Chemin de la clé du certificat SSL" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "Chemin du certificat SSL" @@ -4865,13 +6289,12 @@ msgstr "Chemin de la clé SSL" msgid "SSL key path is required when HTTPS is enabled" msgstr "Le chemin de la clé SSL est requis lorsque HTTPS est activé" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "Connexion SSO" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "Stable" @@ -4879,33 +6302,49 @@ msgstr "Stable" msgid "Start" msgstr "Début" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "Date de début" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "Démarrer la restauration" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "Début du téléchargement..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "Statique" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "Statut" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "Statut mis à jour avec succès" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "Arrêté" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "Stockage" @@ -4931,10 +6370,6 @@ msgstr "Chemin de stockage" msgid "Storage path is required" msgstr "Le chemin de stockage est requis" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "Le chemin de stockage n'est pas dans les chemins d'accès accordés: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4948,7 +6383,7 @@ msgstr "Le flux est activé" msgid "Stream not found" msgstr "Flux introuvable" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "Le répertoire des streams existe" @@ -4960,6 +6395,10 @@ msgstr "Le répertoire streams-available n'existe pas" msgid "Streams-enabled directory not exist" msgstr "Le répertoire streams-enabled n'existe pas" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "Structuré" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "Port d'état stub" @@ -4968,7 +6407,7 @@ msgstr "Port d'état stub" msgid "Stub_status is not enabled" msgstr "Stub_status n'est pas activé" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4979,19 +6418,6 @@ msgstr "Succès" msgid "Sunday" msgstr "Dimanche" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Prise en charge de la communication avec le backend via le protocole " -"Server-Sent Events. Si votre interface Nginx est utilisée via un proxy " -"inverse Nginx, veuillez consulter ce lien pour écrire le fichier de " -"configuration correspondant : " -"https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -5040,12 +6466,12 @@ msgid "Sync Certificate" msgstr "Certificat synchronisé" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "Échec de la synchronisation du certificat %{cert_name} vers %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "Échec de la synchronisation du certificat %{cert_name} vers %{node_name}" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "Certificat %{cert_name} synchronisé avec succès vers %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "Certificat %{cert_name} synchronisé avec %{node_name} avec succès" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -5056,14 +6482,14 @@ msgid "Sync Certificate Success" msgstr "Certificat synchronisé avec succès" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" +msgid "Sync config %{config_name} to %{node_name} failed" msgstr "" "Échec de la synchronisation de la configuration %{config_name} vers " -"%{env_name}" +"%{node_name}" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "Configuration %{config_name} synchronisée avec succès vers %{env_name}" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "Configuration %{config_name} synchronisée avec %{node_name} avec succès" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -5073,24 +6499,29 @@ msgstr "Erreur de synchronisation de la configuration" msgid "Sync Config Success" msgstr "Synchronisation de la configuration réussie" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "Nœuds de synchronisation" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "Aperçu de la synchronisation" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "Stratégie de synchronisation" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "Synchroniser vers" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "Synchronisation" @@ -5107,10 +6538,14 @@ msgstr "Sauvegarde du système" msgid "System Check" msgstr "Vérification du système" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "Utilisateur initial du système" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "Configuration requise" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "Restauration du système" @@ -5131,19 +6566,45 @@ msgstr "Tâche non trouvée" msgid "Telegram" msgstr "Telegram" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "Terminal" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "Assistant terminal" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "Commande de démarrage du terminal" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "Test" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "Échec du test : %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "Échec du test : Impossible d'effectuer la vérification d'état" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "Message de test envoyé avec succès" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "Tester la connexion S3" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "Test réussi ! Temps de réponse : %{response_time}ms" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " @@ -5153,6 +6614,24 @@ msgstr "" "renouvelé s'il a été émis il y a plus d'une semaine ou depuis la période " "que vous avez définie dans les paramètres." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "" +"La base de données GeoLite2 est nécessaire pour l'analyse géographique des " +"adresses IP hors ligne. Veuillez la télécharger pour activer cette " +"fonctionnalité." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "" +"La base de données GeoLite2 fournit des informations géographiques pour les " +"adresses IP. Elle est utilisée pour l'analyse géographique hors ligne dans " +"l'analyse des journaux." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " @@ -5161,11 +6640,11 @@ msgstr "" "Le numéro ICP ne doit contenir que des lettres, unicode, des chiffres, des " "traits d'union, des tirets, des deux-points et des points." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "L'entrée n'est pas un certificat SSL" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "L'entrée n'est pas une clé de certificat SSL" @@ -5204,11 +6683,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "Le paramètre server_name est requis" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "Le chemin existe, mais le fichier n'est pas un certificat" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "Le chemin existe, mais le fichier n'est pas une clé privée" @@ -5220,7 +6699,7 @@ msgstr "" "Le numéro de sécurité publique ne doit contenir que des lettres, unicode, " "des chiffres, des traits d'union, des tirets, des deux-points et des points." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5230,7 +6709,7 @@ msgstr "" "de Nginx UI. Pour éviter d'éventuelles erreurs, veuillez mettre à jour la " "version distante de Nginx UI pour qu'elle corresponde à la version locale." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5261,7 +6740,7 @@ msgstr "Connexions simultanées maximales théoriques :" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "RPS maximum théorique (Requêtes Par Seconde) :" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5271,11 +6750,15 @@ msgstr "" "perdez votre mot de passe et vos seconds facteurs. Si vous ne trouvez pas " "ces codes, vous perdrez l'accès à votre compte." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "Composants tiers" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "Cet élément de certificat automatique est invalide, veuillez le supprimer." -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "Ce certificat est géré par Nginx UI" @@ -5285,9 +6768,9 @@ msgstr "" "Ce répertoire est protégé et ne peut pas être supprimé pour la sécurité du " "système." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "Ce champ est obligatoire" @@ -5317,6 +6800,10 @@ msgstr "" "Ce champ ne doit contenir que des lettres, des caractères Unicode, des " "chiffres et -_./:" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "Il s'agit d'un message de test envoyé à% {horodat} de Nginx UI." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " @@ -5326,7 +6813,15 @@ msgstr "" "connexions, etc. Après l'avoir activé, vous pouvez consulter les " "statistiques de performance." -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "Ce mois-ci" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "Cette notification est désactivée" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." @@ -5334,6 +6829,28 @@ msgstr "" "Cette opération ne supprimera que le certificat de la base de données. Les " "fichiers de certificat sur le système de fichiers ne seront pas supprimés." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"Ce site est configuré comme un serveur par défaut (default_server) pour " +"HTTPS (port 443). Les certificats IP nécessitent le support d'une Autorité " +"de Certification (CA) et peuvent ne pas être disponibles auprès de tous les " +"fournisseurs ACME." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"Ce site utilise un nom de serveur générique (_) qui indique généralement un " +"certificat basé sur IP. Les certificats IP nécessitent le support d'une " +"Autorité de Certification (CA) et peuvent ne pas être disponibles auprès de " +"tous les fournisseurs ACME." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5351,6 +6868,19 @@ msgstr "Cette valeur est déjà utilisée" msgid "This will permanently delete the %{type}." msgstr "Cela supprimera définitivement %{type}." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"Cela reconstruira l'index complet des journaux. Toutes les données d'index " +"existantes seront supprimées et reconstruites à partir de zéro. Cela peut " +"prendre un certain temps. Continuer ?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "Cela reconstruira les données d'index pour ce fichier spécifique : %{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5369,13 +6899,13 @@ msgstr "" "Cela restaurera les fichiers de configuration et la base de données. " "L'interface Nginx redémarrera une fois la restauration terminée." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" "Cela mettra à jour ou réinstallera l'interface Nginx sur %{nodeNames} vers " "la version %{version}." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "Limitation" @@ -5383,8 +6913,21 @@ msgstr "Limitation" msgid "Thursday" msgstr "Jeudi" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "Temps" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "Plage de temps" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "Délai d'expiration (secondes)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "Conseils" @@ -5401,13 +6944,17 @@ msgstr "" msgid "Title" msgstr "Titre" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "pour confirmer la suppression" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "" "Pour confirmer la révocation, veuillez taper \"Révoquer\" dans le champ " "ci-dessous :" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5415,7 +6962,7 @@ msgstr "" "Pour l'activer, vous devez installer l'application Google Authenticator ou " "Microsoft Authenticator sur votre téléphone portable." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5461,15 +7008,41 @@ msgstr "Le jeton est vide" msgid "Token is not valid" msgstr "Le jeton n'est pas valide" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "Top 10 des pays / régions" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "Top 10 Provinces / Régions" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "Top 10 des URL" + #: src/language/curd.ts:5 msgid "Total" msgstr "Total" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "Total de %{total} éléments" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "Total des composants" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "Connexions totales" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "Total des entrées" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5483,6 +7056,10 @@ msgstr "Total des processus Nginx" msgid "Total Nginx Processes" msgstr "Total des processus Nginx" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "PV total" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "Réception totale" @@ -5500,11 +7077,15 @@ msgstr "Requêtes totales / Connexions totales" msgid "Total Send" msgstr "Total envoyé" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "UV total" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -5512,25 +7093,43 @@ msgstr "" "TOTP est une méthode d'authentification à deux facteurs qui utilise un " "algorithme de mot de passe à usage unique basé sur le temps." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "Trafic" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "Traduction de l'erreur..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "Corbeille" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "" +"Essayez d'ajuster vos critères de recherche ou de naviguer vers différentes " +"pages." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "Essayez d'ajuster vos critères de recherche ou la plage horaire." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "Mardi" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "Authentification à deux facteurs requise" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "Type" @@ -5538,15 +7137,47 @@ msgstr "Type" msgid "Type %{delete} to confirm" msgstr "Tapez %{delete} pour confirmer" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "Saisissez ou sélectionnez un navigateur" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "Saisir ou sélectionner un appareil" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "Saisir ou sélectionner un OS" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "Saisissez ou sélectionnez des codes d'état" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "Tapez votre message ici..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "Pages uniques" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "Inconnu" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "Type de sauvegarde non pris en charge : {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "Format de journal non pris en charge" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "Mise à jour déjà en cours" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "Mettre à jour le mot de passe" @@ -5555,32 +7186,30 @@ msgstr "Mettre à jour le mot de passe" msgid "Update Profile" msgstr "Mettre à jour le profil" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "Mise à jour réussie" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "Mis à jour le" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "Mettre à niveau" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "Nginx UI sur %{node} mis à jour avec succès 🎉" @@ -5588,11 +7217,22 @@ msgstr "Nginx UI sur %{node} mis à jour avec succès 🎉" msgid "Upgraded successfully" msgstr "Mise à niveau réussie" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "Le résumé du cœur de mise à jour est vide" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "L'URL de téléchargement du noyau de mise à jour est vide" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Mise à jour de Nginx UI, veuillez patienter..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "Téléverser le fichier %{type}" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "Téléverser des fichiers" @@ -5601,19 +7241,29 @@ msgstr "Téléverser des fichiers" msgid "Upload Folders" msgstr "Télécharger des dossiers" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "Amont" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Nom de l'amont" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "Sockets Upstream" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "Type de test en amont" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "Disponibilité :" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5625,14 +7275,19 @@ msgstr "Utiliser OTP" msgid "Use recovery code" msgstr "Utiliser un code de récupération" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "Utiliser un chemin temporaire" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "Utilisateur" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "Agent utilisateur" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "Utilisateur banni" @@ -5649,7 +7304,7 @@ msgstr "L'utilisateur n'a pas activé l'OTP comme 2FA" msgid "User Profile" msgstr "Profil utilisateur" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "Nom d'utilisateur" @@ -5662,12 +7317,20 @@ msgstr "Nom d'utilisateur (*)" msgid "Username length cannot exceed 255 characters" msgstr "La longueur du nom d'utilisateur ne peut pas dépasser 255 caractères" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "UV" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "Valide" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "Valider le certificat SSL" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "Valeur" @@ -5677,45 +7340,65 @@ msgstr "Valeur" msgid "Verify Backup File Integrity" msgstr "Vérifier l'intégrité du fichier de sauvegarde" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "Vérifier le nom d'hôte" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "Vérifiez les exigences du système" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "Version" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "Voir" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "Voir toutes les notifications" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "Voir sur GitHub" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "Afficher les codes de récupération" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "Voir les composants tiers" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "Vu" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "Visites" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "Processus d'attente" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "Avertissement" @@ -5730,7 +7413,22 @@ msgstr "" "actuelles. Assurez-vous d'avoir un fichier de sauvegarde valide et un jeton " "de sécurité, et sélectionnez soigneusement ce qu'il faut restaurer." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"Avertissement : Il s'agit apparemment d'une adresse IP privée. Les " +"autorités de certification publiques comme Let's Encrypt ne peuvent pas " +"émettre de certificats pour les IP privées. Utilisez une adresse IP " +"publique ou envisagez d'utiliser une autorité de certification privée." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "Nous n'acceptons aucune demande de fonctionnalité" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." @@ -5738,7 +7436,7 @@ msgstr "" "Nous ajouterons un ou plusieurs enregistrements TXT aux enregistrements DNS " "de votre domaine pour vérifier la propriété." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" @@ -5746,7 +7444,7 @@ msgstr "" "Nous allons supprimer la configuration HTTPChallenge de ce fichier et " "recharger le Nginx. Êtes-vous sûr de vouloir continuer?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "Webauthn" @@ -5754,10 +7452,18 @@ msgstr "Webauthn" msgid "WebAuthn settings are not configured" msgstr "Les paramètres WebAuthn ne sont pas configurés" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "Erreur de connexion WebSocket" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket non connecté, veuillez attendre la connexion" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "WeCom" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "mercredi" @@ -5770,7 +7476,7 @@ msgstr "Hebdomadaire" msgid "Weekly on %{day} at %{time}" msgstr "Hebdomadairement le %{day} à %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5781,17 +7487,17 @@ msgstr "" "êtes dans un environnement de développement et que vous utilisez Pebble " "comme CA." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" "Lorsque vous activez/désactivez, supprimez ou enregistrez ce site, les " -"nœuds définis dans le Groupe de nœuds et les nœuds sélectionnés ci-dessous " +"nœuds définis dans l'espace de noms et les nœuds sélectionnés ci-dessous " "seront synchronisés." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." @@ -5799,13 +7505,13 @@ msgstr "" "Lorsque vous générez de nouveaux codes de récupération, vous devez " "télécharger ou imprimer les nouveaux codes." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "" "S'il faut utiliser un chemin temporaire lors de l'écriture de fichiers " "temporaires" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "Certificat générique" @@ -5824,8 +7530,8 @@ msgstr "Processus de travail" msgid "Workers" msgstr "Workers" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "Espace de travail" @@ -5850,16 +7556,18 @@ msgstr "Écriture de la clé privée du certificat sur le disque" msgid "Writing certificate to disk" msgstr "Écriture du certificat sur le disque" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "Oui" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5873,11 +7581,11 @@ msgstr "" "Vous n'êtes pas autorisé à supprimer un fichier en dehors du chemin de " "configuration de nginx" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "Vous utilisez la dernière version" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "Vous pouvez vérifier la mise à niveau de Nginx UI sur cette page." @@ -5889,7 +7597,7 @@ msgstr "Vous pouvez fermer cette boîte de dialogue dans %{countdown} secondes" msgid "You can close this dialog now" msgstr "Vous pouvez maintenant fermer cette boîte de dialogue" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." @@ -5897,17 +7605,17 @@ msgstr "" "Vous n'avez pas configuré les paramètres de WebAuthn, vous ne pouvez donc " "pas ajouter de clé d'accès." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" "Vous n'avez pas encore activé la 2FA. Veuillez activer la 2FA pour générer " "des codes de récupération." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "Vous n'avez pas encore généré de codes de récupération." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." @@ -5916,15 +7624,199 @@ msgstr "" "Veuillez générer de nouveaux codes de récupération dès que possible pour " "assurer la sécurité." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "Vos anciens codes ne fonctionneront plus." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "Vos clés d'accès" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "Pipeline sans allocation" + +#~ msgid "in the same directory as" +#~ msgstr "dans le même répertoire que" + +#~ msgid "Sandbox test successful" +#~ msgstr "Test du bac à sable réussi" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "Testé en mode sandbox isolé" + +#~ msgid "All" +#~ msgstr "Tous" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "Basé sur des tests avec M2 Pro (12 cœurs)" + +#~ msgid "CPU Utilization" +#~ msgstr "Utilisation du CPU" + +#~ msgid "Indexing Throughput" +#~ msgstr "Débit d'indexation" + +#~ msgid "Memory Efficiency" +#~ msgstr "Efficacité mémoire" + +#~ msgid "Performance Impact Notice" +#~ msgstr "Avis d'impact sur les performances" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "Optimisation de pipeline sans allocation" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "Demander de l'aide à ChatGPT" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "Cartographie géographique et insights" + +#~ msgid "No feature requests accepted." +#~ msgstr "Aucune demande de fonctionnalité acceptée" + +#~ msgid "Time-series trend analysis" +#~ msgstr "Analyse des tendances chronologiques" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "Analyse de l'User-Agent et du navigateur" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ cœurs (Apple M2 Pro ou équivalent Intel)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "4 Go+ de RAM pour des performances optimales" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "Taille de lot adaptative" + +#~ msgid "CPU Architecture" +#~ msgstr "Architecture du processeur" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "Analyse GeoIP et User-Agent" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "Minimum 1 Go de RAM" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "CPU moderne (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "Surveillance des performances en temps réel" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "Performances soutenues sur du matériel moderne" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "Le chemin de sauvegarde n'est pas dans les chemins d'accès accordés : {0}" + +#~ msgid "Build with" +#~ msgstr "Build avec" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "Échec de la copie du répertoire de la base de données : {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "Échec de la création du répertoire de sauvegarde : {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "Échec de l'évaluation des liens symboliques : {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "" +#~ "Échec de la restauration des fichiers de l'interface utilisateur de Nginx : " +#~ "{0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "Échec de l'écriture dans le tampon ZIP : {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "Échec de la vérification du hachage : intégrité du fichier compromise" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "Accès au compartiment S3 refusé : {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "Échec du test de connexion S3 : {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "Les identifiants S3 sont invalides : {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "Le point de terminaison S3 est invalide : {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "Le chemin de stockage n'est pas dans les chemins d'accès accordés: {0}" + +#~ msgid "files" +#~ msgstr "fichiers" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "Indexation des journaux en cours, veuillez patienter..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "Chargement des données du tableau de bord..." + +#~ msgid "Today" +#~ msgstr "Aujourd'hui" + +#~ msgid "Data refreshed successfully" +#~ msgstr "Données actualisées avec succès" + +#~ msgid "Failed to refresh data" +#~ msgstr "Échec de l'actualisation des données" + +#~ msgid "Log File:" +#~ msgstr "Fichier journal :" + +#~ msgid "Log path" +#~ msgstr "Chemin du journal" + +#~ msgid "Index Size" +#~ msgstr "Taille de l'index" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "Taille de page" + +#~ msgid "Environments" +#~ msgstr "Environnements" + +#~ msgid "Node Group" +#~ msgstr "Groupe de nœuds" + +#~ msgid "Node Groups" +#~ msgstr "Groupes de nœuds" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "Vérifiez si le répertoire conf.d existe" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Prise en charge de la communication avec le backend via le protocole " +#~ "Server-Sent Events. Si votre interface Nginx est utilisée via un proxy " +#~ "inverse Nginx, veuillez consulter ce lien pour écrire le fichier de " +#~ "configuration correspondant : " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "Si vide, le répertoire CA sera utilisé." + +#~ msgid "Save error %{msg}" +#~ msgstr "Enregistrer l'erreur %{msg}" + +#~ msgid "Main" +#~ msgstr "Principal" + +#~ msgid "Select an action after sync" +#~ msgstr "Sélectionner une action après la synchronisation" + #~ msgid "Link Start" #~ msgstr "Démarrer la liaison" @@ -5958,9 +7850,6 @@ msgstr "Vos clés d'accès" #~ msgid "Last Backup Error" #~ msgstr "Dernière erreur de sauvegarde" -#~ msgid "Apply" -#~ msgstr "Appliquer" - #~ msgid "Apply bulk action successfully" #~ msgstr "Action groupée appliquée avec succès" @@ -5988,10 +7877,6 @@ msgstr "Vos clés d'accès" #~ msgid "Recovered Successfully" #~ msgstr "Récupéré avec succès" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "Total %{total} élément" - #~ msgid "View Details" #~ msgstr "Afficher les détails" @@ -6041,15 +7926,6 @@ msgstr "Vos clés d'accès" #~ msgid "Format error %{msg}" #~ msgstr "Erreur de format %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "" -#~ "Échec de l'enregistrement, une ou plusieurs erreurs de syntaxe ont été " -#~ "détectées dans la configuration." - -#, fuzzy -#~ msgid "Access Token" -#~ msgstr "Journaux d'accès" - #, fuzzy #~ msgid "Bot Token" #~ msgstr "Jeton d'API" @@ -6068,10 +7944,6 @@ msgstr "Vos clés d'accès" #~ msgid "Category" #~ msgstr "Catégorie" -#, fuzzy -#~ msgid "Restart Required" -#~ msgstr "Redémarrage" - #, fuzzy #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "Dupliqué avec succès" @@ -6146,10 +8018,6 @@ msgstr "Vos clés d'accès" #~ "the remote Nginx UI to the latest version" #~ msgstr "Dupliqué avec succès" -#, fuzzy -#~ msgid "Server Name" -#~ msgstr "Informations sur le serveur" - #, fuzzy #~ msgid "Enable 2FA" #~ msgstr "Activé" diff --git a/app/src/language/generate.ts b/app/src/language/generate.ts index dc57d2e8c..3d50fb84f 100644 --- a/app/src/language/generate.ts +++ b/app/src/language/generate.ts @@ -4,6 +4,8 @@ export const msg = [ $gettext('Certificate not found: %{error}'), $gettext('Certificate revoked successfully'), $gettext('Check if /var/run/docker.sock exists. If you are using Nginx UI Official Docker Image, please make sure the docker socket is mounted like this: `-v /var/run/docker.sock:/var/run/docker.sock`. Nginx UI official image uses /var/run/docker.sock to communicate with the host Docker Engine via Docker Client API. This feature is used to control Nginx in another container and perform container replacement rather than binary replacement during OTA upgrades of Nginx UI to ensure container dependencies are also upgraded. If you don\'t need this feature, please add the environment variable NGINX_UI_IGNORE_DOCKER_SOCKET=true to the container.'), + $gettext('Check if the GeoLite2 database is available when log indexing is enabled. The GeoLite2 database is required for geographic IP analysis in log indexing. You can download it from the Preference page or manually place GeoLite2-City.mmdb in the same directory as app.ini'), + $gettext('Check if the conf.d directory is under the nginx configuration directory'), $gettext('Check if the nginx PID path exists. By default, this path is obtained from \'nginx -V\'. If it cannot be obtained, an error will be reported. In this case, you need to modify the configuration file to specify the Nginx PID path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath'), $gettext('Check if the nginx access log path exists. By default, this path is obtained from \'nginx -V\'. If it cannot be obtained or the obtained path does not point to a valid, existing file, an error will be reported. In this case, you need to modify the configuration file to specify the access log path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath'), $gettext('Check if the nginx configuration directory exists'), @@ -15,9 +17,11 @@ export const msg = [ $gettext('Check if the nginx.conf includes the streams-enabled directory'), $gettext('Check if the sites-available and sites-enabled directories are under the nginx configuration directory'), $gettext('Check if the streams-available and streams-enabled directories are under the nginx configuration directory'), + $gettext('Conf.d directory exists'), $gettext('Docker socket exists'), $gettext('Failed to delete certificate from database: %{error}'), $gettext('Failed to revoke certificate: %{error}'), + $gettext('GeoLite2 database available'), $gettext('Log file %{log_path} is not a regular file. If you are using nginx-ui in docker container, please refer to https://nginxui.com/zh_CN/guide/config-nginx-log.html for more information.'), $gettext('Nginx PID path exists'), $gettext('Nginx access log path exists'), diff --git a/app/src/language/ja_JP/app.po b/app/src/language/ja_JP/app.po index 99c2d6e7a..b29876bd4 100644 --- a/app/src/language/ja_JP/app.po +++ b/app/src/language/ja_JP/app.po @@ -16,90 +16,134 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 3.6\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "[Nginx UI] ACME ユーザー: %{name}、メール: %{email}、CA ディレクトリ: %{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "[Nginx UI] 現在の証明書を後で失効させるためにバックアップ中" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] 証明書の更新が成功しました" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] 証明書の失効に成功しました" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "[Nginx UI] サーバーで証明書が使用されました、サーバーのTLS証明書を再読み込み中" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] CA サーバーとの通信を容易にするクライアントを作成中" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] 環境変数をクリーンアップしました" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] 完了しました" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] 証明書の発行に成功しました" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] 証明書を取得中" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] 証明書の失効準備中" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] Lego 設定の準備中" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] Nginx を再読み込み中" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] 失効が完了しました" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] 証明書を失効中" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] 古い証明書を失効中" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] DNS01 チャレンジプロバイダーを設定中" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] 環境変数の設定" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] HTTP01 チャレンジプロバイダーの設定" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] 証明書の秘密鍵をディスクに書き込んでいます" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] 証明書をディスクに書き込み中" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} をクリップボードにコピーしました" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* グループ %{groupName} のノードと手動で選択したノードを含む" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "* インデックスファイルはデフォルトでNGINX UI設定パス内の「log-index」ディレクトリに保存されます。" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* パフォーマンス指標は、Apple M2 Pro(12コア)と32GB " +"RAMで測定されました。実際のパフォーマンスはハードウェア構成によって異なる場合があります。" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{total} 項目中 %{start}~%{end}" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "最小1コア" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "1GB RAM 以上" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "2+ コア推奨" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "24時間UV/PV統計" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "二要素認証" @@ -108,11 +152,15 @@ msgstr "二要素認証" msgid "2FA Settings" msgstr "ニ要素認証設定" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "4GB以上のRAMを推奨" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "Nginx UI について" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "アクセスログ" @@ -121,30 +169,28 @@ msgid "Access log path not exist" msgstr "アクセスログのパスが存在しません" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "アクセスログ" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "ACMEユーザー" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "操作" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "操作" @@ -159,15 +205,15 @@ msgid "Actual worker to configured ratio" msgstr "実際のワーカー数と設定値の比率" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "追加" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "パスキーを追加" @@ -181,10 +227,14 @@ msgstr "設定を追加" msgid "Add Directive Below" msgstr "ディレクティブを追加" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "ドメインを追加" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "ヘッダーを追加" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -198,15 +248,15 @@ msgstr "サーバーを追加" msgid "Add Site" msgstr "サイトを追加" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "Streamを追加" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "アップストリームを追加" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "正常に追加されました" @@ -214,30 +264,74 @@ msgstr "正常に追加されました" msgid "Additional" msgstr "追加設定" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "アドバンスモード" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "高度なインデックス作成は有効になりましたが、再構築の開始に失敗しました" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "高度なインデックス作成が有効になりました" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "高度なログインデックス機能は、すべてのユーザーに無料でオープンソースとして提供されます" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "高度なメモリプーリングシステム" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "高度な検索とフィルタリング" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "詳細設定" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "その後、このページを更新し、再度パスキーを追加をクリックしてください。" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "すべて" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "すべてのコンポーネント" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "すべてのリカバリーコードが使用済みです" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." msgstr "選択したすべてのサブドメインは同じ DNS プロバイダーに属している必要があります。そうでない場合、証明書の申請は失敗します。" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"あるいは、データベースをダウンロードできない場合は、GeoLite2-City.mmdb を手動で app.ini " +"と同じディレクトリに配置することもできます。" + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "分析サービスが利用できません" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "任意" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "到達可能なIPアドレスは、プライベート認証局で使用できます" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "APIベースURL" @@ -258,36 +352,40 @@ msgstr "APIトークン" msgid "API Type" msgstr "APIタイプ" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "アプリ" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "適用" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "アーキテクチャ" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "このIPアドレス制限を削除してもよろしいですか?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "このパスキーをすぐに削除してもよろしいですか?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "新しいリカバリーコードを生成してもよろしいですか?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "2要素認証をリセットしてもよろしいですか?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "すべての通知をクリアしてもよろしいですか?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "チャットの記録をクリアしてもよろしいですか?" @@ -295,16 +393,16 @@ msgstr "チャットの記録をクリアしてもよろしいですか?" msgid "Are you sure you want to delete permanently?" msgstr "完全に削除してもよろしいですか?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "削除してもよろしいですか?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "以下の同期ノードでNginxを再読み込みしてもよろしいですか?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "このディレクティブを削除してもよろしいですか?" @@ -316,7 +414,7 @@ msgstr "このアイテムを削除してもよろしいですか?" msgid "Are you sure you want to remove this location?" msgstr "このLocationを削除してもよろしいですか?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "以下の同期ノードでNginxを再起動してもよろしいですか?" @@ -324,23 +422,27 @@ msgstr "以下の同期ノードでNginxを再起動してもよろしいです msgid "Are you sure you want to restore?" msgstr "復元してもよろしいですか?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "ChatGPTに助けを求める" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "昇順" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "アシスタント" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "少なくとも 20GB の利用可能なディスク容量" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "修正を試みる" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "試行回数" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "認証" @@ -348,12 +450,12 @@ msgstr "認証" msgid "Authenticate with a passkey" msgstr "「パスキーで認証する」" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "認証設定" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "認証中..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "著者" @@ -387,28 +489,27 @@ msgstr "自動バックアップが失敗しました" msgid "Auto Backup Storage Failed" msgstr "自動バックアップの保存に失敗しました" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "自動更新" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "自動更新が無効になりました" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "自動更新が有効になりました" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "%{name}の自動更新が無効になっています" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "%{name}の自動更新が有効になっています" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert が実行中です。お待ちください..." @@ -417,16 +518,32 @@ msgstr "AutoCert が実行中です。お待ちください..." msgid "AutoCert is running..." msgstr "AutoCert が実行中..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "ログローテーションの自動検出" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "自動再起動" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "平均レイテンシ" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "平均日間UV" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "平均/PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "戻る" @@ -438,6 +555,20 @@ msgstr "ホームに戻る" msgid "Back to List" msgstr "リストに戻る" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "バックエンド" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "バックグラウンドでのインデックス作成中です。準備が整い次第、データは自動的に更新されます。" + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "バックグラウンドログサービスが利用できません" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "バックアップ" @@ -446,7 +577,7 @@ msgstr "バックアップ" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "「バックアップファイルの整合性チェックに失敗しました。改ざんされている可能性があります」" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "バックアップファイルが見つかりません:{0}" @@ -458,22 +589,18 @@ msgstr "バックアップは正常にダウンロードされました" msgid "Backup Path" msgstr "バックアップパス" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "バックアップパスが存在しません: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "バックアップパスはディレクトリではありません: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "カスタムディレクトリのバックアップにはバックアップパスが必要です" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "バックアップパスが許可されたアクセスパスにありません: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "バックアップスケジュール" @@ -494,15 +621,15 @@ msgstr "バックアップタスク %{backup_name} の実行に失敗しまし msgid "Backup Type" msgstr "バックアップタイプ" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "制限閾値(分)" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "IPアドレス制限" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "ブロック期限" @@ -514,18 +641,18 @@ msgstr "Bark" msgid "Base information" msgstr "基本情報" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "基本" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "基本モード" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "基本設定" @@ -537,7 +664,7 @@ msgstr "一括編集" msgid "Batch Modify" msgstr "一括変更" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "バッチアップグレード" @@ -549,11 +676,27 @@ msgstr "以下は一括修正したい選択項目です" msgid "Block is nil" msgstr "ブロックがnilです" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "ビルド環境" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "ブラウザ" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "ブラウザ統計" -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"高度なインデックス作成を有効にすることで、システムが要件を満たしていることを確認し、パフォーマンスへの影響を理解したものとみなされます。これにより、既存" +"のログファイルのインデックス作成が直ちに開始されます。" + +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "CAディレクトリ" @@ -561,11 +704,11 @@ msgstr "CAディレクトリ" msgid "Cache" msgstr "キャッシュ" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "この時間内にアクセスされなかったキャッシュアイテムは削除されます" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "キャッシュローダーの処理時間しきい値" @@ -574,15 +717,15 @@ msgstr "キャッシュローダーの処理時間しきい値" msgid "Cache manager processes" msgstr "キャッシュ管理プロセス" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "「キャッシュマネージャーの処理時間しきい値」" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "キャッシュマネージャー設定" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "キャッシュパス" @@ -591,7 +734,7 @@ msgstr "キャッシュパス" msgid "Cache Processes" msgstr "キャッシュプロセス" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "「キャッシュサブディレクトリの階層構造(例:1:2)」" @@ -608,24 +751,33 @@ msgstr "" "worker_processes * worker_connections " "に基づいて計算されます。実際のパフォーマンスはハードウェア、設定、およびワークロードに依存します" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "キャンセル" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "バックアップパス {0} にアクセスできません: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "ログファイルにアクセスできません" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "ストレージパス {0} にアクセスできません: {1}" @@ -649,7 +801,7 @@ msgstr "この状態でパフォーマンスデータを取得できません" msgid "Cannot remove initial user" msgstr "初期ユーザーは削除できません" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "証明書" @@ -657,6 +809,11 @@ msgstr "証明書" msgid "Cert path is not under the nginx conf dir" msgstr "証明書のパスがnginxの設定ディレクトリ配下にありません" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "証明書" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "証明書 %{name} の有効期限が切れました" @@ -671,6 +828,10 @@ msgstr "証明書 %{name} は %{days} 日後に期限切れになります" msgid "Certificate %{name} will expire in 1 day" msgstr "証明書 %{name} は1日で期限切れになります" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "証明書の内容と秘密鍵の内容は空にできません" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "証明書のデコードエラー" @@ -689,6 +850,14 @@ msgstr "証明書の有効期限が切れました" msgid "Certificate Expiring Soon" msgstr "証明書の有効期限が近づいています" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "証明書ファイルが正常にダウンロードされました" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "証明書名は空にできません" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "証明書が見つかりません: %{error}" @@ -701,8 +870,8 @@ msgstr "証明書の解析エラー" msgid "Certificate path is empty" msgstr "証明書のパスが空です" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "証明書の削除に成功しました" @@ -718,13 +887,13 @@ msgstr "証明書の更新に成功しました" msgid "Certificate revoked successfully" msgstr "証明書の失効に成功しました" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "証明書のステータス" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "証明書の種類" @@ -733,7 +902,7 @@ msgstr "証明書の種類" msgid "Certificates" msgstr "証明書" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "証明書リスト" @@ -741,7 +910,7 @@ msgstr "証明書リスト" msgid "Challenge error: {0}" msgstr "チャレンジエラー: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "チャレンジタイプ" @@ -763,26 +932,33 @@ msgstr[0] "変更された証明書" msgid "Changed Path" msgstr "変更されたパス" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "チャンネル" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "チャット" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "%{path} のチャット" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "チェック" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "再確認" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "ファビコンをチェック" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -812,6 +988,21 @@ msgstr "" "やクリップボード機能の使用が妨げられます" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "conf.d ディレクトリが nginx の設定ディレクトリの下にあるか確認してください" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"ログインデックスが有効な場合、GeoLite2 データベースが利用可能かどうかを確認してください。GeoLite2 " +"データベースは、ログインデックスの地理的 IP 分析に必要です。設定ページからダウンロードするか、app.ini と同じディレクトリに " +"GeoLite2-City.mmdb を手動で配置できます" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -825,15 +1016,15 @@ msgstr "" "クセスログのパスを指定する必要があります。詳細についてはドキュメントを参照してください: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "nginxの設定ディレクトリが存在するか確認する" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "nginxの設定エントリファイルが存在するか確認する" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -847,7 +1038,7 @@ msgstr "" "ラーログのパスを指定する必要があります。詳細についてはドキュメントを参照してください: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -860,34 +1051,47 @@ msgstr "" "から取得されます。取得できない場合、エラーが報告されます。この場合、設定ファイルを変更してNginxのPIDパスを指定する必要があります。詳細はドキュメ" "ントを参照してください: https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "nginx の sbin パスが存在するか確認してください" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "nginx.conf に conf.d ディレクトリが含まれているか確認する" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "nginx.conf に sites-enabled ディレクトリが含まれているか確認する" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "nginx.conf に streams-enabled ディレクトリが含まれているか確認する" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" msgstr "nginx の設定ディレクトリに sites-available と sites-enabled ディレクトリがあるか確認する" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" msgstr "nginxの設定ディレクトリにstreams-availableとstreams-enabledディレクトリがあるか確認する" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "チェック間隔(秒)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "中国アクセスマップ" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "中国地図" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "暗号文が短すぎます" @@ -896,13 +1100,13 @@ msgstr "暗号文が短すぎます" msgid "Cleaning environment variables" msgstr "環境変数を削除する" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "削除" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "正常に削除しました" @@ -920,7 +1124,7 @@ msgstr "クリックまたはドラッグしてファイルをこのエリアに msgid "Click or drag folders to this area to upload" msgstr "フォルダをクリックまたはドラッグしてこのエリアにアップロード" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "クリックしてコピーします" @@ -928,10 +1132,18 @@ msgstr "クリックしてコピーします" msgid "Client Body Buffer Size" msgstr "クライアントボディバッファサイズ" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "クライアント証明書" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "クライアントヘッダーバッファサイズ" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "クライアントキー" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "クライアント最大ボディサイズ" @@ -960,6 +1172,14 @@ msgstr "コード補完が有効になっていません" msgid "Code Completion Model" msgstr "コード補完モデル" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "折りたたむ" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "列の設定" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "コマンド" @@ -968,7 +1188,7 @@ msgstr "コマンド" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "コマンドが予期しない終了コードで終了しました: {0}、エラー: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -991,11 +1211,34 @@ msgstr "選択したものを比較します" msgid "Compare with Current" msgstr "電流と比較してください" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "検索機能を備えた完全なインデックス作成" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "コンポーネント" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "圧縮ログファイルのサポート" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "圧縮レベル、1は最も低く、9は最高です" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "統計の計算" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "conf.d ディレクトリが存在します" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Conf.d ディレクトリが存在しません" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "設定" @@ -1008,22 +1251,30 @@ msgstr "設定ディレクトリが存在しません" msgid "Config entry file not exist" msgstr "設定エントリファイルが存在しません" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "設定が見つかりません" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "設定パスが空です" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "設定テンプレート" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "設定" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "正常に設定ファイルをテストしました" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "設定ファイルは隔離されたサンドボックスでテストに成功しました" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "設定履歴" @@ -1044,11 +1295,20 @@ msgstr "設定" msgid "Configure SSL" msgstr "SSLを設定する" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "削除の確認" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "新しいパスワードを確認" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "確認が必要です" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "接続済み" @@ -1056,9 +1316,9 @@ msgstr "接続済み" msgid "Connection error, trying to reconnect..." msgstr "接続エラー、再接続を試みています..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "接続が失われました。ページを再読み込みしてください。" +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "この端末との接続が失われました。必要に応じて更新してください。" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1068,14 +1328,14 @@ msgstr "接続タイムアウト期間" msgid "Container status unknown" msgstr "コンテナの状態が不明です" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "コンテンツ" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "コピーしました" @@ -1088,14 +1348,38 @@ msgstr "コピーしました!" msgid "Copy" msgstr "コピー" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "コードをコピー" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "コアアップグレード" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "古いコンテナ名が見つかりませんでした" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "一時コンテナが見つかりません" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "カウント" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "国 / 地域" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "CPU" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "CPUステータス" @@ -1135,10 +1419,10 @@ msgid "" msgstr "Nginx 設定と Nginx UI 設定を含むシステムバックアップを作成します。バックアップファイルは自動的にコンピュータにダウンロードされます。" #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "作成日時" @@ -1163,11 +1447,15 @@ msgstr "認証情報" msgid "Cron Expression" msgstr "Cron式" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "クロスファイルタイムライン相関" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "現在のアカウントは TOTP が有効です。" -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "現在のアカウントは TOTP が有効になっていません。" @@ -1187,12 +1475,12 @@ msgstr "現在のパスワード" msgid "Current usage" msgstr "現在の使用率" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "現在のバージョン" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "カスタム" @@ -1205,14 +1493,18 @@ msgstr "カスタム cron 式" msgid "Custom Directory" msgstr "カスタムディレクトリ" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "カスタムドメイン" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "カスタムドメイン証明書" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "カスタムヘッダー" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1223,6 +1515,10 @@ msgstr "環境インジケーターに表示するローカルノードの名前 msgid "Daily" msgstr "毎日" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "日別アクセストレンド" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "毎日 %{time}" @@ -1230,10 +1526,18 @@ msgstr "毎日 %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "ダッシュボード" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "日付" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "日付範囲" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "月の日" @@ -1246,34 +1550,48 @@ msgstr "曜日" msgid "Days" msgstr "日" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "データベース ファイルが見つかりません" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "解凍に成功しましたが、圧縮ファイルの削除に失敗しました: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "復号化に失敗しました" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "デフォルト範囲" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "共有メモリゾーンの名前とサイズを定義します(例: proxy_cache:10m)" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "削除" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "%{env_name} 上の %{path} の削除に失敗しました" +msgid "Delete %{path} on %{node_name} failed" +msgstr "%{node_name} 上の %{path} の削除に失敗しました" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "%{env_name} 上の %{path} を削除しました" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "%{node_name} 上の %{path} を削除しました" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "証明書を削除" @@ -1293,43 +1611,44 @@ msgstr "リモート設定の削除エラー" msgid "Delete Remote Config Success" msgstr "リモート設定の削除成功" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "リモートサイト削除エラー" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "リモートサイトの削除に成功しました" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "リモートストリーム削除エラー" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "リモートストリームの削除に成功しました" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "サイト %{name} を %{node} から削除できませんでした" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "サイト %{name} を %{node} から正常に削除しました" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "サイトを削除しました: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "%{node} からのストリーム %{name} の削除に失敗しました" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "ストリーム %{name} を %{node} から削除しました" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "ストリームを削除: %{stream_name}" @@ -1345,8 +1664,16 @@ msgstr "デモ" msgid "Deploy" msgstr "デプロイ" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "デプロイモード" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "降順" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "説明" @@ -1362,18 +1689,44 @@ msgstr "宛先ファイル: {0} は既に存在します" msgid "Details" msgstr "詳細" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Dev" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "開発" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "開発モード" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "デバイス" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "デバイス統計" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "デバイスタイプ" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "ダイジェスト ファイルの内容が空です" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "ディンタオク" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "ダイレクト" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "ディレクティブ" @@ -1394,98 +1747,101 @@ msgstr "DirectiveIdx が範囲外です" msgid "Directives" msgstr "ディレクティブ" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "ディレクトリレベル" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "キャッシュファイルを保存するディレクトリパス" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "無効化" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "%{name} の自動更新の無効化に失敗しました" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "リモートサイトの無効化エラー" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "リモートサイトメンテナンスの無効化エラー" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "リモートサイトのメンテナンスを無効化しました" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "リモートサイトの無効化に成功しました" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "リモートストリーム無効化エラー" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "リモートストリームの無効化に成功しました" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "サイト %{name} を %{node} から無効化できませんでした" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "サイト %{name} を %{node} から無効化しました" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "サイト %{name} のメンテナンスを %{node} で無効にするのに失敗しました" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "サイト %{name} のメンテナンスを %{node} で無効化しました" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "ノード %{node} からのストリーム %{name} の無効化に失敗しました" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "ストリーム %{name} を %{node} から無効化しました" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "無効" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "無効化に成功しました" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "切断されました" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "ディスク IO" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "DNS 認証情報" @@ -1494,11 +1850,15 @@ msgstr "DNS 認証情報" msgid "DNS Provider" msgstr "DNSプロバイダー" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "DNSリゾルバ" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "このオプションは必要な場合以外は有効にしないでください。" @@ -1506,11 +1866,11 @@ msgstr "このオプションは必要な場合以外は有効にしないでく msgid "Do you want to %{action} this site?" msgstr "このサイトを%{action}しますか?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "このストリームを%{action}しますか?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "自動証明書更新を無効にしますか?" @@ -1523,7 +1883,7 @@ msgstr "TLSを有効にしますか?" msgid "Do you want to remove this server?" msgstr "このサーバーを削除しますか?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "このアップストリームを削除しますか?" @@ -1531,7 +1891,7 @@ msgstr "このアップストリームを削除しますか?" msgid "Docker client not initialized" msgstr "Docker クライアントが初期化されていません" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Docker ソケットが存在します" @@ -1545,14 +1905,35 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "ドキュメント" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "ドキュメント数" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "ドメイン" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "ドメインリストが空です。%{config} の自動証明書を再度開いてみてください" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "証明書ファイルをダウンロード" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "ダウンロードが完了しました" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "ダウンロードに失敗しました" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "GeoLite2 データベースをダウンロード" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "最新リリースのダウンロードエラー" @@ -1561,21 +1942,30 @@ msgstr "最新リリースのダウンロードエラー" msgid "Downloading latest release" msgstr "最新リリースをダウンロード中" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "証明書ファイルをここにドロップ" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "秘密鍵ファイルをここにドロップ" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "ドライランモードが有効です" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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ウェブサイトではパスキーを使用できません。" +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "複製" @@ -1584,21 +1974,33 @@ msgstr "複製" msgid "Duplicate to local successfully" msgstr "ローカルへの複製が成功しました" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "動的" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "動的シャード管理" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "例: 0 0 * * * (毎日深夜0時)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "EAB HMACキー" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "EABキーID" + #: src/language/curd.ts:8 msgid "Edit" msgstr "編集" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "%{n} を編集" @@ -1615,7 +2017,7 @@ msgstr "サイトを編集" msgid "Edit Stream" msgstr "ストリームを編集" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "メール" @@ -1624,16 +2026,28 @@ msgstr "メール" msgid "Email (*)" msgstr "メールアドレス (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "空のログ行" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "有効にする" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "2FAが有効化されました" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "高度なインデックス作成を有効にする" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "高度なログインデックスを有効にする" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "%{name} の自動更新の有効化に失敗しました" @@ -1657,57 +2071,61 @@ msgstr "HTTP/3 を有効にする" msgid "Enable HTTPS" msgstr "HTTPS を有効にする" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "インデックス作成を有効にする" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "プロキシキャッシュを有効にする" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "リモートサイトの有効化エラー" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "リモートサイトのメンテナンス有効化エラー" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "リモートサイトのメンテナンス有効化成功" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "リモートサイトの有効化に成功しました" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "リモートストリームの有効化エラー" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "リモートストリームの有効化成功" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "サイト %{name} のメンテナンスを %{node} で有効化できませんでした" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "サイト %{name} のメンテナンスを %{node} で有効化しました" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "サイト %{name} を %{node} で有効化できませんでした" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "サイト %{name} を %{node} で有効化しました" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "ストリーム %{name} を %{node} で有効化できませんでした" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "ストリーム %{name} を %{node} で有効化しました" @@ -1719,29 +2137,29 @@ msgstr "stub_status モジュールを有効にする" msgid "Enable TLS" msgstr "TLSを有効にする" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "TOTP を有効にする" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "有効" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "有効化に成功しました" @@ -1753,6 +2171,15 @@ msgstr "多重化とサーバープッシュ機能を備えたHTTP/2サポート msgid "Enables HTTP/3 support based on QUIC protocol for best performance" msgstr "最高のパフォーマンスを得るためにQUICプロトコルに基づくHTTP/3サポートを有効にします" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"高度なログインデックスを有効にすると、CPUやメモリを含む大幅な計算リソースを消費します。続行する前に、システムが最低要件を満たしていることを確認してく" +"ださい。" + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Let's Encryptでウェブサイトを暗号化" @@ -1761,11 +2188,19 @@ msgstr "Let's Encryptでウェブサイトを暗号化" msgid "End" msgstr "終了" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "終了日" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "ドメイン名を入力" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "サーバーのIPアドレスを入力してください(例:203.0.113.1 または 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "ドメインを入力してください" @@ -1777,39 +2212,56 @@ msgstr "環境設定が空です" msgid "Environment variables cleaned" msgstr "環境変数をクリーンアップしました" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "環境" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "エラー" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "エラーの詳細" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "差分ビューアの初期化エラー" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "エラーログ" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "エラーログが検出されました" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "エラーログのパスが存在しません" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "エラーログ" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "エラーログは自由形式のテキストメッセージを含むため、構造化された分析をサポートしていません。" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "エラーパターン認識" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "コンテンツ処理エラー" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "実行可能バイナリファイルが空です" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "実行可能ファイルのパス" @@ -1825,6 +2277,22 @@ msgstr "毎日 %{time} に実行" msgid "Execute on every month on day %{day} at %{time}" msgstr "毎月 %{day} 日の %{time} に実行" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "展開" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "期待されるパフォーマンス" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "予期されるステータスコード" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "予期されるテキスト" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1838,12 +2306,32 @@ msgstr "有効期限: %{date}" msgid "Export Excel" msgstr "Excel にエクスポート" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "外部アカウントバインディング HMAC キー(オプション)。Base64 URL エンコード形式である必要があります。" + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "外部アカウントバインディングキーID(オプション)。ZeroSSLなどの一部のACMEプロバイダーで必要です。" + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "外部 Docker コンテナ" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "外部通知設定が見つかりません" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "外部通知テスト" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "外部通知" @@ -1872,15 +2360,15 @@ msgstr "Nginx UI ファイルのバックアップに失敗しました: {0}" msgid "Failed to build nginx config: {0}" msgstr "nginx 設定の構築に失敗しました: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "ハッシュの計算に失敗しました: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Nginxハッシュの計算に失敗しました: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Nginx UI のハッシュ計算に失敗しました: {0}" @@ -1893,38 +2381,35 @@ msgid "Failed to copy config file: {0}" msgstr "設定ファイルのコピーに失敗しました: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "データベースディレクトリのコピーに失敗しました: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "データベースファイルのコピーに失敗しました: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "ファイルの内容のコピーに失敗しました: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Nginx設定ディレクトリのコピーに失敗しました: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "クリップボードへのコピーに失敗しました" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "バックアップの作成に失敗しました" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "バックアップディレクトリの作成に失敗しました: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "バックアップファイルの作成に失敗しました: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "ディレクトリの作成に失敗しました: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "ファイルの作成に失敗しました: {0}" @@ -1932,19 +2417,19 @@ msgstr "ファイルの作成に失敗しました: {0}" msgid "Failed to create hash info file: {0}" msgstr "ハッシュ情報ファイルの作成に失敗しました: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "親ディレクトリの作成に失敗しました: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "復元ディレクトリの作成に失敗しました: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "ストレージディレクトリの作成に失敗しました {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "シンボリックリンクの作成に失敗しました: {0}" @@ -1960,48 +2445,64 @@ msgstr "一時ディレクトリの作成に失敗しました" msgid "Failed to create temporary subdirectory" msgstr "一時サブディレクトリの作成に失敗しました" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "xz リーダーの作成に失敗しました: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "ZIPアーカイブの作成に失敗しました: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "ZIPエントリの作成に失敗しました: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "ZIPファイルの作成に失敗しました: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "ZIPヘッダーの作成に失敗しました: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "GeoLite2 データベースの解凍に失敗しました: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "データの復号に失敗しました: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "ファイルの復号に失敗しました: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Nginxディレクトリの復号に失敗しました: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Nginx UIディレクトリの復号に失敗しました: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "すべてのインデックスの削除に失敗しました" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "証明書の削除に失敗しました" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "データベースから証明書の削除に失敗しました: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "ファイルインデックスの削除に失敗しました" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "%{msg}の無効化に失敗しました" @@ -2009,20 +2510,32 @@ msgstr "%{msg}の無効化に失敗しました" msgid "Failed to disable maintenance mode %{msg}" msgstr "メンテナンスモードの無効化に失敗しました: %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "証明書ファイルのダウンロードに失敗しました" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "GeoLite2 データベースのダウンロードに失敗しました: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "有効化に失敗しました %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "高度なインデックス作成の有効化に失敗しました" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "メンテナンスモードの有効化に失敗しました: %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "データの暗号化に失敗しました: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "ファイルの暗号化に失敗しました: {0}" @@ -2034,10 +2547,6 @@ msgstr "Nginxディレクトリの暗号化に失敗しました: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Nginx UI ディレクトリの暗号化に失敗しました: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "シンボリックリンクの評価に失敗しました: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "コマンドの実行に失敗しました: {0}" @@ -2046,7 +2555,7 @@ msgstr "コマンドの実行に失敗しました: {0}" msgid "Failed to execute template: {0}" msgstr "テンプレートの実行に失敗しました: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "アーカイブの抽出に失敗しました: {0}" @@ -2066,14 +2575,30 @@ msgstr "証明書情報の取得に失敗しました" msgid "Failed to get container id: {0}" msgstr "コンテナIDの取得に失敗しました: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "ファイルのサイズを取得できませんでした: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "インデックスステータスの取得に失敗しました" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Nginxのパフォーマンス設定の取得に失敗しました" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "nginx.conf のパスを取得できませんでした" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "パフォーマンスデータの取得に失敗しました" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "永続性統計の取得に失敗しました" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "スタブステータスの取得に失敗しました: {0}" @@ -2090,15 +2615,19 @@ msgstr "現在のコンテナの検査に失敗しました: {0}" msgid "Failed to load history records" msgstr "履歴レコードの読み込みに失敗しました" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "ファイルを開くのに失敗しました: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "ソースファイルを開けませんでした: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "ZIPエントリを開けませんでした: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "ZIPファイルを開けませんでした: {0}" @@ -2118,15 +2647,23 @@ msgstr "テンプレートの解析に失敗しました: {0}" msgid "Failed to pull image: {0}" msgstr "イメージの取得に失敗しました: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "圧縮データの読み込みに失敗しました: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "暗号化されたファイルの読み込みに失敗しました: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "ファイルの読み込みに失敗しました" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "ファイルの読み込みに失敗しました: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "ハッシュ情報ファイルの読み込みに失敗しました: {0}" @@ -2142,57 +2679,97 @@ msgstr "出力の読み取りに失敗しました: {0}" msgid "Failed to read response body: {0}" msgstr "レスポンスボディの読み取りに失敗しました: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "シンボリックリンクの読み取りに失敗しました: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "ファイルインデックスの再構築に失敗しました" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "インデックスの再構築に失敗しました" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "サイトの更新に失敗しました" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Nginx設定の復元に失敗しました: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "Nginx UIファイルの復元に失敗しました: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "証明書の失効に失敗しました" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "証明書の失効に失敗しました: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "設定の保存に失敗しました" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "ダウンロードしたファイルの保存に失敗しました: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "ヘルスチェック設定の保存に失敗しました" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Nginxのパフォーマンス設定の保存に失敗しました" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "順序の保存に失敗しました" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "テストメッセージの送信に失敗しました" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "一時コンテナの起動に失敗しました: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "ステータスの更新に失敗しました" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "ファイルのアップロードに失敗しました" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "ハッシュの検証に失敗しました: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "バックアップファイルの書き込みに失敗しました: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "圧縮解除データの書き込みに失敗しました: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "復号化ファイルの書き込みに失敗しました: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "暗号化ファイルの書き込みに失敗しました: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "セキュリティキーファイルの書き込みに失敗しました: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "ZIPバッファへの書き込みに失敗しました: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "機能" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2206,6 +2783,10 @@ msgstr "ファイル" msgid "File exists" msgstr "ファイルが存在します" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "%{path} のファイルインデックスの再構築が正常に開始されました" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "ファイルが見つかりません" @@ -2214,19 +2795,35 @@ msgstr "ファイルが見つかりません" msgid "File or directory not found: {0}" msgstr "ファイルまたはディレクトリが見つかりません: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "ファイルパスが必要です" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "ファイルサイズは5MBを超えることはできません" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "ファイルが正常にアップロードされました" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "ファイル名が空です" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "フィルター" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "ログ内容をフィルタリング" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "完了" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "初回表示" @@ -2238,7 +2835,11 @@ msgstr "フォルダ" msgid "Folder" msgstr "フォルダ" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "リダイレクトをフォロー" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2253,6 +2854,26 @@ msgstr "中国ユーザー向け" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "中国のユーザー向け: https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "商用または専門的な利用の場合は、以下までご連絡ください" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "エラーログについては、より良い閲覧体験のためにRaw Log Viewerをご利用ください。" + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "IPベースの証明書構成では、HTTP-01チャレンジ方式のみがサポートされています。DNS-01チャレンジはIPベースの証明書と互換性がありません。" + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "IPベースの証明書の場合、証明書に含まれるサーバーIPアドレスを指定してください。" + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "フォームの解析に失敗しました" @@ -2273,6 +2894,22 @@ msgstr "形式: 分 時 日 月 曜日" msgid "Friday" msgstr "金曜日" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "インデックス化されたログから" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "フロントエンド" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "全文検索" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "全文検索サポート" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "一般証明書" @@ -2281,16 +2918,16 @@ msgstr "一般証明書" msgid "Generate" msgstr "生成" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "新しいリカバリーコードを生成" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "リカバリーコードを生成" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "リカバリーコードの生成に成功しました" @@ -2298,6 +2935,39 @@ msgstr "リカバリーコードの生成に成功しました" msgid "Generating private key for registering account" msgstr "アカウント登録用の秘密鍵を生成中" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "GeoLite2 データベース" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "GeoLite2 データベースが利用可能です" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "GeoLite2 データベースがインストールされました" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "GeoLite2 データベースが {0} に見つかりません" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"GeoLite2 データベースが {0} に見つかりません。ログのインデックス作成には、地理的な IP 分析のための GeoLite2 " +"データベースが必要です" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "GeoLite2 データベースが必要です" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "ACMEユーザーの取得エラー: {0}" @@ -2310,8 +2980,7 @@ msgstr "データの取得に失敗しました" msgid "Get dns credential error: {0}" msgstr "DNS認証情報の取得エラー: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "リリース情報の取得エラー" @@ -2323,10 +2992,37 @@ msgstr "証明書を取得しています。しばらくお待ちください... msgid "Github Proxy" msgstr "Githubプロキシ" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "グローバルアクセスマップ" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "世界地図" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "生ログビューアへ移動" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "gRPCヘルスチェックでは、サーバーがgRPCヘルスチェックサービス(grpc.health.v1.Health)を実装している必要があります。" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"gRPCSはTLS暗号化を使用します。サーバーはgRPCヘルスチェックサービスを実装する必要があります。テストでは、SSL検証はデフォルトで無効になって" +"います。" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "GZIP圧縮" @@ -2339,25 +3035,51 @@ msgstr "GZIP圧縮レベル" msgid "GZIP Min Length" msgstr "GZIP最小長" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "ハッシュ検証に失敗しました: ファイルの整合性が損なわれています" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "ヘルスチェック" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "ヘルスチェック設定" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "ヘルスチェック設定が保存されました" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "ヘルスチェック設定が正常に保存されました" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "健康状態" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "非表示" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "アシスタントを非表示" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "高い" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "値が高いほど接続の再利用が効率的であることを意味します" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "履歴" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "ホーム" @@ -2366,10 +3088,11 @@ msgid "Host" msgstr "ホスト" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "時間" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2377,7 +3100,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "HTTPチャレンジポート" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "HTTPメソッド" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2385,31 +3112,37 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "HTTPSプロトコル" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "ICP番号" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "空白の場合、デフォルトの CA ディレクトリが使用されます。" - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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 "IP からのログイン失敗試行回数が禁止閾値分以内に最大試行回数に達した場合、その IP は一定期間禁止されます。" -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "古い証明書を自動的に失効させたい場合は、このオプションを有効にしてください。" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "保存場所を変更したい場合は、Nginx UI 設定の `nginx_log` セクションの `IndexPath` を設定できます。" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "お使いのブラウザがWebAuthnパスキーに対応している場合、ダイアログボックスが表示されます。" -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2419,12 +3152,12 @@ msgstr "ドメインにCNAMEレコードがあり、証明書を取得できな msgid "Import" msgstr "インポート" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "証明書をインポート" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "非アクティブ時間" @@ -2434,7 +3167,46 @@ msgid "" "processes" msgstr "マスタープロセス、ワーカープロセス、キャッシュプロセス、その他のNginxプロセスを含む" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "増分インデックススキャン" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "インデックスと統計の再構築が正常に開始されました" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "インデックス作成に失敗しました" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "インデックスの作成に失敗しました。再構築を試してください" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "インデックスの再構築を開始しました" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "インデックス状態" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "インデックス済み" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "インデックス作成" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "ログをインデックス中..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "インデックス作成中..." @@ -2442,10 +3214,14 @@ msgstr "インデックス作成中..." msgid "Indicator" msgstr "指標" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "情報" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "初期ユーザーが存在しません" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "初期コアアップグレーダーエラー" @@ -2454,7 +3230,7 @@ msgstr "初期コアアップグレーダーエラー" msgid "Initialing core upgrader" msgstr "コアアップグレーダーの初期化中" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "アプリからコードを入力してください:" @@ -2469,7 +3245,7 @@ msgstr "安全でない確認をスキップ" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "インストール" @@ -2495,27 +3271,36 @@ msgstr "システム起動から10分後はインストールが許可されま msgid "Interval" msgstr "間隔" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "無効" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "無効なAES IV形式: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "無効なAESキーフォーマット: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "無効な証明書形式" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "無効なクレームタイプ" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "無効なコミット SHA" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "無効なファイルオブジェクト" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "無効なファイルパス: {0}" @@ -2528,6 +3313,10 @@ msgstr "無効なファイル名" msgid "Invalid folder name" msgstr "無効なフォルダ名" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "無効な通知ID" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "無効な通知設定" @@ -2536,7 +3325,7 @@ msgstr "無効な通知設定" msgid "Invalid otp code" msgstr "無効なOTPコード" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "復号化データのパディングが無効です" @@ -2544,10 +3333,15 @@ msgstr "復号化データのパディングが無効です" msgid "Invalid passcode or recovery code" msgstr "無効なパスコードまたはリカバリーコード" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "無効なパス: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "無効な秘密鍵の形式" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "無効なリカバリーコード" @@ -2556,19 +3350,41 @@ msgstr "無効なリカバリーコード" msgid "Invalid request format" msgstr "無効なリクエスト形式" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "無効なセキュリティトークンフォーマット" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "無効な Telegram チャット ID: 0 にはできません" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "無効なタイムスタンプ形式" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "無効なWebSocketメッセージタイプ" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "IPアドレス" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "IP証明書の通知" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "証明書を発行" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "証明書を発行" @@ -2588,7 +3404,7 @@ msgstr "アイテム" msgid "Jwt Secret" msgstr "JWT シークレット" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2598,12 +3414,12 @@ msgstr "リカバリーコードはパスワードと同じように安全に保 msgid "Keepalive Timeout" msgstr "キープアライブタイムアウト" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "鍵の種類" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "言語" @@ -2615,6 +3431,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark カスタム" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "過去12時間" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "過去14日間" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "過去15分" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "過去24時間" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "過去30日間" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "過去30分" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "過去4時間" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "過去7日間" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "過去90日間" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "最終バックアップステータス" @@ -2623,15 +3477,35 @@ msgstr "最終バックアップステータス" msgid "Last Backup Time" msgstr "最終バックアップ時刻" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "最終確認" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "最終確認日時" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "過去1時間" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "最終インデックス日時" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "先月" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "最終更新" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "最終更新日:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "最終使用日時" @@ -2647,12 +3521,18 @@ msgstr "デフォルトのままにする場合、空欄のままにしてくだ msgid "Leave blank if do not want to modify" msgstr "変更しない場合は空白のままにしてください" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "ACMEプロバイダーが不要とする場合は空白のままにしてください" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "必要なければ空白のままにしてください。" -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "空白のままにすると何も変更されません" @@ -2660,16 +3540,24 @@ msgstr "空白のままにすると何も変更されません" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "TOTPが有効になっていないため、従来のリカバリーコードは許可されていません" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego CNAME サポートを無効にする" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "ライセンス" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "ライセンス分布" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "ライセンスタイプ" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "リンク" @@ -2685,32 +3573,32 @@ msgstr "リスニング" msgid "Load Average:" msgstr "平均負荷:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "設定から読み込む" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "読み込みに成功しました" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "ロード済み" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "ローダーファイル" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "ローダー設定" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "ローダー スリープ" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "ローダー閾値" @@ -2718,9 +3606,15 @@ msgstr "ローダー閾値" msgid "Loading data..." msgstr "データを読み込んでいます..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "読み込み中..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2739,11 +3633,11 @@ msgstr "ロケーション" msgid "Locations" msgstr "ロケーション" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "ログ" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2752,23 +3646,59 @@ msgstr "" "ログファイル %{log_path} は通常のファイルではありません。Docker コンテナで nginx-ui を使用している場合は、詳細について " "https://nginxui.com/zh_CN/guide/config-nginx-log.html を参照してください。" -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "ログファイルが存在しません" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "ログファイルは通常のファイルではありません" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "ログファイルが利用できません" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "ログファイルはまだインデックス化されていません" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "ログインデクサが利用できません" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "ログのインデックス作成が完了しました!更新されたデータを読み込み中..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "ログ行が最大長を超えています" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "ログリスト" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "ログ パーサーが初期化されていません。使用前に indexer.InitLogParser() を呼び出してください" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "ログパスはホワイトリストに含まれていません" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "ログイン" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "ログインに成功しました" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "ログアウトしました" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "ログローテート" @@ -2786,9 +3716,20 @@ msgstr "" "Nginx UI をインストールするユーザーは、このオプションを手動で有効にすることができます。Nginx UI の crontab " "タスクスケジューラは、設定した間隔(分単位)で logrotate コマンドを実行します。" +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "低い" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "メインノード" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "メンテナンス" @@ -2804,7 +3745,7 @@ msgstr "メンテナンスモードが有効になりました" msgid "Make certificate dir error: {0}" msgstr "証明書ディレクトリ作成エラー: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2819,11 +3760,11 @@ msgstr "" msgid "Manage Configs" msgstr "設定管理" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "サイト管理" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "ストリームの管理" @@ -2835,15 +3776,15 @@ msgstr "ユーザー管理" msgid "Managed Certificate" msgstr "管理対象証明書" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "マネージャーファイル" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "マネージャー待機時間" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "マネージャーの閾値" @@ -2869,7 +3810,7 @@ msgstr "マスタープロセス" msgid "Master Process" msgstr "マスタープロセス" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "最大試行回数" @@ -2877,11 +3818,15 @@ msgstr "最大試行回数" msgid "Max Concurrent Connections" msgstr "最大同時接続数" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "最大リダイレクト数" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "最大リクエスト数/秒" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "キャッシュの最大サイズ" @@ -2898,7 +3843,7 @@ msgstr "最大同時接続数" msgid "Maximum number of connections per worker process" msgstr "ワーカープロセスあたりの最大接続数" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "キャッシュの最大合計サイズ" @@ -2908,6 +3853,7 @@ msgstr "最大ワーカープロセス数:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "メモリ" @@ -2915,22 +3861,39 @@ msgstr "メモリ" msgid "Memory and Storage" msgstr "メモリとストレージ" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "メモリ設計" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "メモリ使用量 (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "メソッド" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "メソッド名" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "圧縮する最小ファイルサイズ" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "最小空き容量" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "キャッシュディレクトリの最小空き容量" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "最小:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "分" @@ -2939,21 +3902,36 @@ msgstr "分" msgid "Minutes" msgstr "分" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "ミラー" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "モデル" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "最新の分析サービスは利用できません" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "最新のインデクサーサービスは利用できません" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "最新の検索サービスは利用できません" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "更新日時" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "変更" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "証明書を変更" @@ -2961,7 +3939,7 @@ msgstr "証明書を変更" msgid "Modify Config" msgstr "設定を変更" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "モジュール" @@ -2969,6 +3947,10 @@ msgstr "モジュール" msgid "Modules" msgstr "モジュール" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "モジュールキャッシュが更新されました" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "月曜日" @@ -2981,39 +3963,66 @@ msgstr "毎月" msgid "Monthly on day %{day} at %{time}" msgstr "毎月%{day}日%{time}に" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "多次元データの可視化" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "複数行ディレクティブ" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "インターネットからアクセス可能なパブリックIPアドレスでなければなりません" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "該当なし" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "名前" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "名前または内容" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "名前空間" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "名前空間" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "stub_statusモジュールを有効にする必要があります" @@ -3026,6 +4035,10 @@ msgstr "ネットワーク" msgid "Network Statistics" msgstr "ネットワーク統計" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "新しいチャット" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "新しいDNSチャレンジプロバイダーエラー: {0}" @@ -3054,18 +4067,18 @@ msgstr "新しいパス" msgid "New transport error: {0}" msgstr "新しい転送エラー: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "新しいバージョンがリリースされました" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "次へ" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3077,7 +4090,7 @@ msgstr "Nginx -T の出力が空です" msgid "Nginx Access Log Path" msgstr "Nginx アクセスログパス" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Nginx アクセスログのパスが存在します" @@ -3106,15 +4119,15 @@ msgstr "Nginx設定にsites-enabledが含まれていません" msgid "Nginx conf not include stream-enabled" msgstr "Nginx設定にstream-enabledが含まれていません" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "Nginx設定ディレクトリが設定されていません" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Nginx設定ディレクトリが存在します" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "Nginx設定エントリファイルが存在します" @@ -3122,8 +4135,8 @@ msgstr "Nginx設定エントリファイルが存在します" msgid "Nginx configuration has been restored" msgstr "Nginxの設定が復元されました" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Nginx設定解析エラー" @@ -3152,7 +4165,7 @@ msgstr "NginxのCPU使用率" msgid "Nginx Error Log Path" msgstr "Nginx エラーログのパス" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "Nginxエラーログのパスが存在します" @@ -3161,7 +4174,7 @@ msgid "Nginx error: {0}" msgstr "Nginxエラー: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3176,7 +4189,7 @@ msgstr "Nginx は他のコンテナで実行されていません" msgid "Nginx is running" msgstr "Nginx は実行中です" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Nginx ログ" @@ -3184,6 +4197,10 @@ msgstr "Nginx ログ" msgid "Nginx Log Directory Whitelist" msgstr "Nginx ログディレクトリホワイトリスト" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Nginx ログのインデックス作成中..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3193,7 +4210,7 @@ msgstr "Nginxメモリ使用量" msgid "Nginx PID Path" msgstr "Nginx PID パス" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Nginx PID パスが存在します" @@ -3206,7 +4223,7 @@ msgstr "Nginx リロードコマンド" msgid "Nginx reload failed: {0}" msgstr "Nginx の再読み込みに失敗しました: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Nginxのリロード操作がリモートノードに送信されました" @@ -3218,7 +4235,7 @@ msgstr "Nginxのリロードが成功しました" msgid "Nginx Restart Command" msgstr "Nginx 再起動コマンド" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Nginx の再起動操作がリモートノードに送信されました" @@ -3226,7 +4243,7 @@ msgstr "Nginx の再起動操作がリモートノードに送信されました msgid "Nginx restarted successfully" msgstr "Nginxの再起動が成功しました" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Nginx の Sbin パスが存在します" @@ -3257,41 +4274,73 @@ msgid "" "a few seconds." msgstr "Nginx UI の設定が復元され、数秒後に自動的に再起動します。" -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf は conf.d ディレクトリを含んでいます" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf は sites-enabled ディレクトリを含んでいます" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf には streams-enabled ディレクトリが含まれています" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "いいえ" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "アクションなし" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "利用可能な証明書がありません" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "中国の地理データが利用できません" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "データなし" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "データなし" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "現在のページにエントリがありません" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "地理データが利用できません" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "選択した時間範囲にログが見つかりませんでした。" + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "ノードが選択されていません" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "選択されたレコードがありません" @@ -3300,24 +4349,31 @@ msgstr "選択されたレコードがありません" msgid "No servers configured" msgstr "サーバーが設定されていません" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "サイトが見つかりません" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "server_name の設定で特定のIPアドレスが見つかりませんでした。証明書のためにサーバーのIPアドレスを以下で指定してください。" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "構造化されたログデータが利用できません" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "アップストリームが設定されていません" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "ノード" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "ノードグループ" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "ノードグループ" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "ノードの分析に失敗しました: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3327,7 +4383,12 @@ msgstr "ノード名" msgid "Node Secret" msgstr "ノードシークレット" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "ノードステータス" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "ノード" @@ -3335,36 +4396,61 @@ msgstr "ノード" msgid "Not After" msgstr "有効期限" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "予期しないテキスト" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "見つかりません" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "未インデックス" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "ロードされていません" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "IP証明書には対応していません" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "有効開始日: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "注記" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." msgstr "設定ファイルに他の設定や証明書が含まれている場合は、事前にリモートノードに同期してください。" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"注: サーバーが gRPC リフレクションをサポートしていない場合、ヘルスチェックが失敗する可能性があります。gRPC " +"サーバーでリフレクションが有効になっていることを確認してください。" + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "コピーするものはありません" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "通知" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "通知" @@ -3373,15 +4459,19 @@ msgstr "通知" msgid "Notifier not found" msgstr "通知機能が見つかりません" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "同時ワーカープロセス数、CPUコア数に自動設定" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "キャッシュローダーが一度に処理するファイル数" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "キャッシュマネージャーが一度に処理するファイル数" @@ -3396,7 +4486,7 @@ msgstr "ワーカープロセスの数" msgid "Obtain cert error: {0}" msgstr "証明書の取得エラー: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "証明書を取得する" @@ -3404,18 +4494,18 @@ msgstr "証明書を取得する" msgid "Obtaining certificate" msgstr "証明書を取得中" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP Must Staple" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." msgstr "OCSP Must Staple は、Firefox を使用した初回アクセス時に一部のユーザーでエラーを引き起こす可能性があります。" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "オフ" @@ -3423,48 +4513,58 @@ msgstr "オフ" msgid "Official Document" msgstr "公式ドキュメント" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "オフライン" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "オフライン GeoIP 分析" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "OK" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "オン" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "検証が完了すると、レコードは削除されます。" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "オンライン" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "オンライン数" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "ZIPファイルのみ許可されています" @@ -3473,23 +4573,46 @@ msgstr "ZIPファイルのみ許可されています" msgid "Open" msgstr "開いている" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "オープンソースの制限" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "オペレーティングシステム" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "オペレーティングシステムの統計" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "または" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "またはファイルを下のエディタにドラッグ" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "またはシークレットを入力してください: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "順序が正常に保存されました" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "元の名前" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "OS" @@ -3536,11 +4659,15 @@ msgstr "パラメータ" msgid "Params Optimization" msgstr "パラメータ最適化" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "パーサーのパフォーマンス" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "パスキー" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3549,7 +4676,7 @@ msgstr "" "パスキーは、タッチ、顔認証、デバイスパスワード、または PIN を使用して身元を確認する WebAuthn 認証情報です。パスワードの代わりや 2FA " "方法として使用できます。" -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "パスワード" @@ -3578,11 +4705,13 @@ msgstr "パスワードが一致しません" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "パス" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "許可されたアクセスパスに含まれないパス: {0}" @@ -3594,12 +4723,28 @@ msgstr "パス: {0} は nginx の設定ディレクトリ: {1} の下にあり msgid "Payload resource is nil" msgstr "ペイロードリソースが nil です" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "ピーク時" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "保留中" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "パーセンテージ" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "実行" @@ -3641,17 +4786,29 @@ msgid "" "count, etc." msgstr "リクエスト統計や接続数などを取得するには、stub_statusモジュールを有効にしてください。" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "入力してください" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." msgstr "作成したいパスキーの名前を入力し、下のOKボタンをクリックしてください。" +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "有効なIPv4アドレスを入力してください(各オクテットは0-255)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "有効なIPv4またはIPv6アドレスを入力してください" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "有効なポート範囲を入力してください" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "少なくとも1つのドメインを入力してください" @@ -3668,6 +4825,10 @@ msgstr "セキュリティトークンを入力してください" msgid "Please enter the security token received during backup" msgstr "バックアップ時に受け取ったセキュリティトークンを入力してください" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "サーバーのIPアドレスを入力してください" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "すべての項目を正しく入力してください" @@ -3676,13 +4837,13 @@ msgstr "すべての項目を正しく入力してください" msgid "Please fill in required S3 configuration fields" msgstr "必要なS3設定項目を入力してください" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." msgstr "DNSプロバイダーから提供されたAPI認証情報を入力してください。" -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3690,7 +4851,7 @@ msgstr "" "まず、Certification > DNS Credentials " "で認証情報を追加し、その後、以下の認証情報のいずれかを選択してDNSプロバイダーのAPIをリクエストしてください。" -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3722,20 +4883,20 @@ msgstr "名前を入力してください。これは新しい設定のファイ msgid "Please input your E-mail!" msgstr "Eメールを入力してください!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "パスワードを入力してください!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "ユーザー名を入力してください!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "ログインしてください。" -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "以下の時間設定の単位はすべて秒であることに注意してください。" @@ -3751,25 +4912,31 @@ msgstr "このセキュリティトークンを保存してください。復元 msgid "Please select a backup file" msgstr "バックアップファイルを選択してください" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "通知タイプを選択してください" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "有効な%{type}ファイルを選択してください(%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "少なくとも1つの項目を選択してください" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Nginxをリロードするには、少なくとも1つのノードを選択してください" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Nginx を再起動するには、少なくとも 1 つのノードを選択してください" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "少なくとも1つのノードを選択してアップグレードしてください" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "確認のために「取り消す」と入力してください" @@ -3782,23 +4949,26 @@ msgstr "正確な確認テキストを入力してください" msgid "Port" msgstr "ポート" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "HTTP-01 チャレンジ検証のためにポート 80 を開放する必要があります" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "ポートスキャナー" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "同期後のアクション" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "プレリリース" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "設定" @@ -3806,6 +4976,19 @@ msgstr "設定" msgid "Preparing lego configurations" msgstr "Lego 設定を準備中" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "プライベートCA:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "プライベートIP(192.168.x.x、10.x.x.x、172.16-31.x.x)は失敗します" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "秘密鍵" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "プロセス" @@ -3822,6 +5005,10 @@ msgstr "プロセス情報" msgid "Processing {count}/{total}" msgstr "処理中 {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "生産パイプライン" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "デモでは root パスワードの変更を禁止します" @@ -3838,6 +5025,10 @@ msgstr "プロジェクトチーム" msgid "Protected Directory" msgstr "保護されたディレクトリ" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "プロトコル" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3845,7 +5036,7 @@ msgid "" "proxy." msgstr "プロトコル設定は直接接続時にのみ有効です。リバースプロキシを使用している場合は、リバースプロキシで個別にプロトコルを設定してください。" -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "プロバイダー" @@ -3853,22 +5044,57 @@ msgstr "プロバイダー" msgid "Provider not found: {0}" msgstr "プロバイダーが見つかりません: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "省 / 地域" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "プロキシ" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "プロキシパス" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "プロキシターゲット" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "公開CAの要件:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "公安番号" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "ページビュー" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "キューに入れられました" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "インデックス作成待ち..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "クイック選択" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "生" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "データベースを再ダウンロード" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "ディレクトリの読み込みに失敗しました: {0}" @@ -3883,24 +5109,48 @@ msgstr "読み取りリクエスト" msgid "Reads" msgstr "読み取り" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "リアルタイム分析ダッシュボード" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "再構築" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "すべてのインデックスを再構築" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "ファイルインデックスを再構築" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "インデックスを再構築" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "受信" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "再チェック" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "推奨:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "復旧" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "リカバリーコード" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -3910,33 +5160,47 @@ msgstr "リカバリーコードは、2FAデバイスへのアクセスを失っ msgid "Recursive Nameservers" msgstr "再帰的ネームサーバー" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "リファラー" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "更新" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "モジュールキャッシュを更新" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "応答を再生成" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "登録" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." msgstr "ユーザーを登録するか、このアカウントを使用してHTTPプロキシ経由で証明書を発行します。" -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "登録に失敗しました" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "起動時に登録" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "パスキーの登録に成功しました" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "登録に成功しました" @@ -3944,28 +5208,30 @@ msgstr "登録に成功しました" msgid "Registering user" msgstr "ユーザーを登録中" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "登録ステータス" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "再インストール" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "リリース API リクエストに失敗しました: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "リリースノート" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "再読み込み" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Nginx をリロード" @@ -3989,7 +5255,7 @@ msgstr "リモートNginxの再読み込みエラー" msgid "Reload Remote Nginx Success" msgstr "リモートNginxのリロード成功" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "再読み込みリクエストが失敗しました。ネットワーク接続を確認してください" @@ -4001,22 +5267,28 @@ msgstr "再読み込み中" msgid "Reloading nginx" msgstr "nginx をリロード中" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "リモート" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "削除" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "削除に成功しました" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "正常に削除されました" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4025,12 +5297,12 @@ msgid "Rename" msgstr "名前を変更" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "%{env_name} 上の %{orig_path} から %{new_path} への名前変更に失敗しました" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "%{node_name} 上の %{orig_path} から %{new_path} への名前変更に失敗しました" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "%{env_name} 上の %{orig_path} を %{new_path} に名前変更しました" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "%{node_name} 上の %{orig_path} を %{new_path} に名前変更しました" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4040,37 +5312,37 @@ msgstr "リモート設定の名前変更エラー" msgid "Rename Remote Config Success" msgstr "リモート設定の名前変更に成功しました" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "リモートサイト名変更エラー" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "リモートサイトの名前変更成功" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "リモートストリームの名前変更エラー" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "リモートストリームの名前変更成功" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "サイト %{name} を %{new_name} にリネームする際に %{node} で失敗しました" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "サイト %{name} を %{new_name} にリネームしました(%{node})" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "ストリーム %{name} を %{new_name} にリネームする際に %{node} で失敗しました" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "ストリーム %{name} を %{new_name} に名前変更しました(%{node})" @@ -4078,7 +5350,7 @@ msgstr "ストリーム %{name} を %{new_name} に名前変更しました(%{ msgid "Rename successfully" msgstr "名前の変更に成功しました" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4088,8 +5360,8 @@ msgstr "名前の変更に成功しました" msgid "Renew cert error: {0}" msgstr "証明書の更新エラー: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "証明書を更新" @@ -4101,11 +5373,23 @@ msgstr "証明書の更新エラー" msgid "Renew Certificate Success" msgstr "証明書の更新に成功しました" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "証明書の更新に成功しました" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "リクエスト" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "リクエストボディ" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "リクエストパス" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "リクエスト統計" @@ -4123,13 +5407,19 @@ msgid "Requests Per Connection" msgstr "接続あたりのリクエスト数" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "リセット" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "2FAをリセット" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "検索をリセット" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4137,6 +5427,10 @@ msgid "" "processes" msgstr "Resident Set Size: 物理メモリに実際に存在するメモリで、共有ライブラリのメモリを含み、複数のプロセスに対して繰り返し計算されます" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "リソース使用量の警告" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4146,9 +5440,8 @@ msgstr "レスポンス" msgid "Restart" msgstr "再起動" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Nginx を再起動" @@ -4168,7 +5461,7 @@ msgstr "リモートNginxの再起動エラー" msgid "Restart Remote Nginx Success" msgstr "リモートNginxの再起動成功" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "再起動リクエストが失敗しました。ネットワーク接続を確認してください" @@ -4207,8 +5500,8 @@ msgstr "このバージョンを復元" msgid "Restored successfully" msgstr "正常に復元されました" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "取り消す" @@ -4216,29 +5509,29 @@ msgstr "取り消す" msgid "Revoke cert error: {0}" msgstr "証明書の失効エラー: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "古い証明書を失効させる" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "この証明書を失効させる" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." msgstr "証明書を失効させると、現在それを使用しているすべてのサービスに影響します。この操作は元に戻せません。" -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "RP 表示名" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "RP オリジン" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4274,10 +5567,6 @@ msgstr "S3アクセスキーIDが必要です" msgid "S3 Bucket" msgstr "S3 バケット" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "S3バケットへのアクセスが拒否されました: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "S3バケットが必要です" @@ -4286,7 +5575,7 @@ msgstr "S3バケットが必要です" msgid "S3 bucket name" msgstr "S3バケット名" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "S3設定が不完全です: {0}が不足しています" @@ -4294,27 +5583,15 @@ msgstr "S3設定が不完全です: {0}が不足しています" msgid "S3 connection test failed" msgstr "S3接続テストが失敗しました" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "S3接続テストが失敗しました: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "S3接続テストが成功しました" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "S3の認証情報が無効です: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "S3 エンドポイント" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "S3エンドポイントが無効です: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "S3 エンドポイントが必要です" @@ -4350,7 +5627,7 @@ msgstr "S3 シークレットアクセスキー" msgid "S3 secret access key is required" msgstr "S3シークレットアクセスキーが必要です" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "S3アップロードに失敗しました: {0}" @@ -4358,17 +5635,19 @@ msgstr "S3アップロードに失敗しました: {0}" msgid "Saturday" msgstr "土曜日" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "保存" @@ -4376,41 +5655,41 @@ msgstr "保存" msgid "Save Directive" msgstr "ディレクティブを保存" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "保存エラー %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "順序を保存" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "リモートサイトの保存エラー" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "リモートサイトの保存に成功しました" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "リモートストリームの保存エラー" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "リモートストリームの保存に成功しました" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "サイト %{name} を %{node} に保存できませんでした" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "サイト %{name} を %{node} に正常に保存しました" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "ストリーム %{name} を %{node} に保存できませんでした" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "ストリーム %{name} を %{node} に正常に保存しました" @@ -4418,16 +5697,17 @@ msgstr "ストリーム %{name} を %{node} に正常に保存しました" msgid "Save successful" msgstr "保存に成功しました" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "保存に成功しました" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "正常に保存されました" @@ -4451,13 +5731,13 @@ msgstr "ポートをスキャン" msgid "Scan Results" msgstr "スキャン結果" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "スマートフォンでQRコードをスキャンして、アプリにアカウントを追加します。" -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "ログをスキャン中..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "スキャン中" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4472,16 +5752,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "検索" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "検索フィルター" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "ログ内容を検索..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "検索モジュール名" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "モジュールを検索" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "検索範囲" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "テンプレートを検索" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "シークレットがコピーされました" @@ -4498,13 +5799,19 @@ msgstr "セキュリティトークン" msgid "Security Token Information" msgstr "セキュリティトークン情報" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "事前定義されたCAディレクトリを選択するか、カスタムのものを入力してください。空白のままにすると、デフォルトのCAディレクトリが使用されます。" + #: src/language/curd.ts:31 msgid "Select all" msgstr "すべて選択" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "同期後のアクションを選択" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "CAディレクトリURLを選択または入力してください" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4514,7 +5821,7 @@ msgstr "選択された {count} ファイル" msgid "Selector" msgstr "セレクター" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "セルフチェック" @@ -4528,11 +5835,15 @@ msgstr "自己チェックに失敗しました、Nginx UIが正常に動作し msgid "Send" msgstr "送信" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "テストメッセージを送信" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "サーバー" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "サーバーエラー" @@ -4540,6 +5851,10 @@ msgstr "サーバーエラー" msgid "Server Info" msgstr "サーバー情報" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "サーバーIPアドレス" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "サーバー名ハッシュバケットサイズ" @@ -4548,7 +5863,7 @@ msgstr "サーバー名ハッシュバケットサイズ" msgid "Server names hash table size" msgstr "サーバー名ハッシュテーブルのサイズ" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "ディレクティブに server_name が見つかりません" @@ -4556,6 +5871,10 @@ msgstr "ディレクティブに server_name が見つかりません" msgid "ServerIdx out of range" msgstr "ServerIdx が範囲外です" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "サービス名" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "セッションが見つかりません" @@ -4590,6 +5909,10 @@ msgstr "環境変数の設定" msgid "Setting HTTP01 challenge provider" msgstr "HTTP01チャレンジプロバイダーの設定" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "設定" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4610,7 +5933,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Nginx UI をセットアップ" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "共有メモリゾーン" @@ -4618,10 +5941,18 @@ msgstr "共有メモリゾーン" msgid "Show" msgstr "表示" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "アシスタントを表示" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "パスキーでサインイン" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "SIMD最適化されたストリーム処理" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "単一ディレクティブ" @@ -4642,11 +5973,23 @@ msgstr "サイトはメンテナンスモードです" msgid "Site Logs" msgstr "サイトログ" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "サイトナビゲーション" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "サイトが見つかりません" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "サイトの更新を開始しました" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "サイト" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "サイトディレクトリが存在します" @@ -4654,6 +5997,12 @@ msgstr "サイトディレクトリが存在します" msgid "Sites List" msgstr "サイト一覧" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "有効な server_name ディレクティブで nginx サーバーブロックを設定すると、サイトがここに表示されます。" + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "sites-available ディレクトリが存在しません" @@ -4663,6 +6012,8 @@ msgid "Sites-enabled directory not exist" msgstr "sites-enabled ディレクトリが存在しません" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "サイズ" @@ -4670,19 +6021,36 @@ msgstr "サイズ" msgid "Skip Installation" msgstr "インストールをスキップ" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "キャッシュローダーの反復処理間の待機時間" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "キャッシュマネージャーの反復処理間の待機時間" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "ソケット" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "並べ替え基準" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "送信元IP" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "スポンサー" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "I/O パフォーマンス向上のための SSD ストレージ" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "SSL証明書の内容" @@ -4694,15 +6062,20 @@ msgstr "SSL証明書ファイルはNginx設定ディレクトリの下にある msgid "SSL certificate file not found" msgstr "SSL証明書ファイルが見つかりません" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "SSL証明書キーの内容" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "SSL証明書キーパス" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "SSL証明書のパス" @@ -4727,13 +6100,12 @@ msgstr "SSLキーのパス" msgid "SSL key path is required when HTTPS is enabled" msgstr "HTTPS を有効にするには SSL キーのパスが必要です" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "SSOログイン" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "安定版" @@ -4741,33 +6113,49 @@ msgstr "安定版" msgid "Start" msgstr "開始" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "開始日" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "復元を開始" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "ダウンロードを開始しています..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "静的" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "ステータス" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "ステータスが正常に更新されました" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "停止" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "ストレージ" @@ -4791,10 +6179,6 @@ msgstr "保存先パス" msgid "Storage path is required" msgstr "ストレージパスは必須です" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "ストレージパスが許可されたアクセスパスにありません: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4808,7 +6192,7 @@ msgstr "ストリームが有効です" msgid "Stream not found" msgstr "ストリームが見つかりません" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "ストリームディレクトリが存在します" @@ -4820,6 +6204,10 @@ msgstr "streams-available ディレクトリが存在しません" msgid "Streams-enabled directory not exist" msgstr "streams-enabled ディレクトリが存在しません" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "構造化" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "スタブステータスポート" @@ -4828,7 +6216,7 @@ msgstr "スタブステータスポート" msgid "Stub_status is not enabled" msgstr "Stub_status が有効になっていません" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4839,17 +6227,6 @@ msgstr "成功" msgid "Sunday" msgstr "日曜日" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Server-Sent Events プロトコルを介してバックエンドとの通信をサポートします。Nginx UI を Nginx " -"リバースプロキシ経由で使用している場合は、このリンクを参照して対応する設定ファイルを作成してください: " -"https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -4897,12 +6274,12 @@ msgid "Sync Certificate" msgstr "証明書を同期" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "証明書 %{cert_name} を %{env_name} に同期できませんでした" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "証明書 %{cert_name} を %{node_name} に同期できませんでした" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "証明書 %{cert_name} を %{env_name} に同期しました" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "証明書 %{cert_name} を %{node_name} に同期しました" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -4913,12 +6290,12 @@ msgid "Sync Certificate Success" msgstr "証明書の同期に成功しました" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "設定 %{config_name} を %{env_name} に同期できませんでした" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "設定 %{config_name} を %{node_name} に同期できませんでした" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "設定 %{config_name} を %{env_name} に正常に同期しました" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "設定 %{config_name} を %{node_name} に正常に同期しました" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -4928,24 +6305,29 @@ msgstr "設定同期エラー" msgid "Sync Config Success" msgstr "設定の同期に成功しました" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "同期ノード" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "同期プレビュー" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "同期戦略" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "同期先" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "同期" @@ -4962,10 +6344,14 @@ msgstr "システムバックアップ" msgid "System Check" msgstr "システムチェック" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "システム初期ユーザー" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "システム要件" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "システム復元" @@ -4986,36 +6372,74 @@ msgstr "タスクが見つかりません" msgid "Telegram" msgstr "テレグラム" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "ターミナル" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "ターミナルアシスタント" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "ターミナル起動コマンド" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "テスト" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "テスト失敗: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "テスト失敗: ヘルスチェックを実行できませんでした" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "テストメッセージが正常に送信されました" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "S3接続をテスト" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "テスト成功! 応答時間: %{response_time}ms" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " "since it was last issued." msgstr "ドメインの証明書は30分ごとにチェックされ、最後に発行されてから1週間以上経過しているか、設定で指定した期間が経過している場合に更新されます。" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "オフラインの地理的 IP 分析には GeoLite2 データベースが必要です。この機能を有効にするためにダウンロードしてください。" + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "GeoLite2 データベースは、IP アドレスの地理情報を提供します。これはログ分析でのオフライン地理分析に使用されます。" + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " "dashes, colons, and dots." msgstr "ICP番号には、文字、Unicode、数字、ハイフン、ダッシュ、コロン、およびドットのみを含める必要があります。" -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "入力はSSL証明書ではありません" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "入力はSSL証明書キーではありません" @@ -5046,11 +6470,11 @@ msgstr "ノード名には、文字、Unicode、数字、ハイフン、ダッ msgid "The parameter of server_name is required" msgstr "server_name のパラメーターが必要です" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "パスは存在しますが、ファイルは証明書ではありません" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "パスは存在しますが、ファイルは秘密鍵ではありません" @@ -5060,7 +6484,7 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "公安番号には、文字、Unicode、数字、ハイフン、ダッシュ、コロン、およびドットのみを含める必要があります。" -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5069,7 +6493,7 @@ msgstr "" "リモートのNginx UIバージョンはローカルのNginx UIバージョンと互換性がありません。潜在的なエラーを避けるため、リモートのNginx " "UIをローカルバージョンに合わせてアップグレードしてください。" -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5097,7 +6521,7 @@ msgstr "理論上の最大同時接続数:" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "理論上の最大RPS(リクエスト/秒):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5106,11 +6530,15 @@ msgstr "" "これらのコードは、パスワードと第二要素を失った場合にアカウントにアクセスするための最後の手段です。これらのコードが見つからない場合、アカウントにアクセス" "できなくなります。" -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "サードパーティコンポーネント" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "この自動証明書項目は無効です。削除してください。" -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "この証明書はNginx UIによって管理されています" @@ -5118,9 +6546,9 @@ msgstr "この証明書はNginx UIによって管理されています" msgid "This directory is protected and cannot be deleted for system safety." msgstr "このディレクトリは保護されており、システムの安全のために削除できません。" -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "このフィールドは必須です" @@ -5146,18 +6574,49 @@ msgid "" "-_./:" msgstr "このフィールドには、文字、Unicode文字、数字、および -_./: のみを含める必要があります" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "これは、Nginx UIから%{Timestamp}で送信されたテストメッセージです。" + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " "After enabling it, you can view performance statistics" msgstr "このモジュールは、Nginxのリクエスト統計、接続数などのデータを提供します。有効にすると、パフォーマンス統計を表示できます" -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "今月" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "この通知は無効です" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." msgstr "この操作はデータベースから証明書を削除するのみです。ファイルシステム上の証明書ファイルは削除されません。" +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"このサイトはHTTPS(ポート443)のデフォルトサーバー(default_" +"server)として設定されています。IP証明書には認証局(CA)のサポートが必要であり、すべてのACMEプロバイダーで利用可能とは限りません。" + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"このサイトはワイルドカードサーバー名(_" +")を使用しており、通常はIPベースの証明書を示しています。IP証明書には認証局(CA)のサポートが必要であり、すべてのACMEプロバイダーで利用可能では" +"ない場合があります。" + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5172,6 +6631,18 @@ msgstr "この値は既に使用されています" msgid "This will permanently delete the %{type}." msgstr "これにより %{type} が完全に削除されます。" +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"これにより、ログインデックス全体が再構築されます。既存のインデックスデータはすべて削除され、一から再構築されます。これには時間がかかる場合があります。続" +"行しますか?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "この特定のファイルのインデックスデータを再構築します: %{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5186,11 +6657,11 @@ msgid "" "after the restoration is complete." msgstr "これにより設定ファイルとデータベースが復元されます。復元が完了すると、Nginx UI が再起動します。" -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "これにより、%{nodeNames} 上の Nginx UI が %{version} にアップグレードまたは再インストールされます。" -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "スロットル" @@ -5198,8 +6669,21 @@ msgstr "スロットル" msgid "Thursday" msgstr "木曜日" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "時間" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "時間範囲" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "タイムアウト(秒)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "ヒント" @@ -5214,11 +6698,15 @@ msgstr "ヒント: worker_processes または worker_connections を増やすこ msgid "Title" msgstr "タイトル" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "削除を確認する" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "失効を確認するには、下の欄に「失効」と入力してください:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5226,7 +6714,7 @@ msgstr "" "有効にするには、スマートフォンにGoogle AuthenticatorまたはMicrosoft " "Authenticatorアプリをインストールする必要があります。" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5267,15 +6755,41 @@ msgstr "トークンが空です" msgid "Token is not valid" msgstr "トークンが無効です" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "トップ10の国・地域" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "トップ10の省・地域" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "トップ10 URL" + #: src/language/curd.ts:5 msgid "Total" msgstr "合計" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "合計 %{total} 項目" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "コンポーネントの合計" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "総接続数" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "総エントリ数" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5289,6 +6803,10 @@ msgstr "Nginx プロセスの合計" msgid "Total Nginx Processes" msgstr "Nginxプロセスの合計" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "総PV" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "総受信" @@ -5306,35 +6824,55 @@ msgstr "総リクエスト数 / 総接続数" msgid "Total Send" msgstr "総送信" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "総 UV 数" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." msgstr "TOTP は、時間ベースのワンタイムパスワードアルゴリズムを使用する二要素認証方法です。" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "トラフィック" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "エラーを翻訳中..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "ゴミ箱" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "検索条件を調整するか、別のページに移動してみてください。" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "検索条件または時間範囲を調整してみてください。" + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "火曜日" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "二要素認証が必要です" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "タイプ" @@ -5342,15 +6880,47 @@ msgstr "タイプ" msgid "Type %{delete} to confirm" msgstr "確認のために %{delete} と入力してください" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "ブラウザを入力または選択" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "デバイスを入力または選択" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "OSを入力または選択" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "ステータスコードを入力または選択" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "ここにメッセージを入力してください..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "ユニークページ" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "不明" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "サポートされていないバックアップタイプ: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "サポートされていないログ形式" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "更新が既に進行中です" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "パスワードを更新" @@ -5359,32 +6929,30 @@ msgstr "パスワードを更新" msgid "Update Profile" msgstr "プロフィールを更新" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "更新に成功しました" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "更新日時" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "アップグレード" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "%{node} 上の Nginx UI のアップグレードに成功しました 🎉" @@ -5392,11 +6960,22 @@ msgstr "%{node} 上の Nginx UI のアップグレードに成功しました msgid "Upgraded successfully" msgstr "アップグレードに成功しました" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "アップグレーダーのコアダイジェストが空です" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "アップグレーダー コアのダウンロード URL が空です" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Nginx UI をアップグレード中です。しばらくお待ちください..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "%{type}ファイルをアップロード" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "ファイルをアップロード" @@ -5405,19 +6984,29 @@ msgstr "ファイルをアップロード" msgid "Upload Folders" msgstr "フォルダをアップロード" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "アップストリーム" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "アップストリーム名" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "アップストリーム ソケット" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "アップストリームテストタイプ" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "稼働時間:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5429,14 +7018,19 @@ msgstr "OTP を使用する" msgid "Use recovery code" msgstr "リカバリーコードを使用" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "一時パスを使用" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "ユーザー" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "ユーザーエージェント" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "ユーザーが禁止されました" @@ -5453,7 +7047,7 @@ msgstr "ユーザーはOTPを2FAとして有効にしていません" msgid "User Profile" msgstr "ユーザープロフィール" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "ユーザー名" @@ -5466,12 +7060,20 @@ msgstr "ユーザー名 (*)" msgid "Username length cannot exceed 255 characters" msgstr "ユーザー名の長さは255文字を超えることはできません" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "ユニークビジター" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "有効" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "SSL証明書を検証" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "値" @@ -5481,45 +7083,65 @@ msgstr "値" msgid "Verify Backup File Integrity" msgstr "バックアップファイルの整合性を確認" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "ホスト名を確認" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "システム要件を確認する" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "バージョン" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "ビュー" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "すべての通知を表示します" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "GitHubで見る" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "リカバリーコードを表示" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "サードパーティコンポーネントを表示" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "閲覧済み" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "訪問数" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "待機プロセス" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "警告" @@ -5531,19 +7153,33 @@ msgid "" "to restore." msgstr "警告: 復元操作は現在の設定を上書きします。有効なバックアップファイルとセキュリティトークンがあることを確認し、復元する内容を慎重に選択してください。" -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"警告:これはプライベートIPアドレスのようです。Let's " +"Encryptのようなパブリック認証局はプライベートIPの証明書を発行できません。パブリックIPアドレスを使用するか、プライベート認証局の使用を検討して" +"ください。" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "機能リクエストは受け付けていません" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." msgstr "所有権確認のために、お客様のドメインのDNSレコードに1つ以上のTXTレコードを追加します。" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" msgstr "このファイルからHTTPChallengeの設定を削除し、Nginxを再読み込みします。続行してもよろしいですか?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "WebAuthn" @@ -5551,10 +7187,18 @@ msgstr "WebAuthn" msgid "WebAuthn settings are not configured" msgstr "WebAuthn 設定が構成されていません" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "WebSocket接続エラー" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocketが接続されていません、接続を待ってください" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "WeCom" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "水曜日" @@ -5567,7 +7211,7 @@ msgstr "毎週" msgid "Weekly on %{day} at %{time}" msgstr "毎週%{day}の%{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5576,24 +7220,24 @@ msgstr "" "有効にすると、Nginx UI は起動時に自動的にユーザーを再登録します。一般的に、開発環境で Pebble を CA " "として使用している場合以外は、これを有効にしないでください。" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." -msgstr "このサイトを有効/無効にしたり、削除または保存すると、ノードグループで設定されたノードと以下で選択されたノードが同期されます。" +"namespace and the nodes selected below will be synchronized." +msgstr "このサイトを有効化/無効化、削除、または保存すると、名前空間に設定されたノードと以下で選択したノードが同期されます。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." msgstr "新しいリカバリーコードを生成するときは、新しいコードをダウンロードまたは印刷する必要があります。" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "一時ファイルを書き込む際に一時パスを使用するかどうか" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "ワイルドカード証明書" @@ -5612,8 +7256,8 @@ msgstr "ワーカープロセス" msgid "Workers" msgstr "ワーカー" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "ワークスペース" @@ -5638,16 +7282,18 @@ msgstr "証明書の秘密鍵をディスクに書き込んでいます" msgid "Writing certificate to disk" msgstr "証明書をディスクに書き込み中" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "はい" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5657,11 +7303,11 @@ msgstr "あなたは非localhostドメインで安全でないHTTP接続を介 msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "nginx 設定パスの外にあるファイルを削除することは許可されていません" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "最新バージョンを使用しています" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "このページでNginx UIのアップグレードを確認できます。" @@ -5673,35 +7319,215 @@ msgstr "このダイアログは %{countdown} 秒後に閉じることができ msgid "You can close this dialog now" msgstr "このダイアログを閉じることができます" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." msgstr "WebAuthnの設定が行われていないため、パスキーを追加できません。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "2FAが有効になっていません。リカバリーコードを生成するには2FAを有効にしてください。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "まだリカバリーコードを生成していません。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." msgstr "現在のリカバリーコードは古く、安全でない可能性があります。セキュリティを確保するため、できるだけ早く新しいリカバリーコードを生成してください。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "以前のコードはもう使えません。" -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "あなたのパスキー" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "ゼロアロケーションパイプライン" + +#~ msgid "in the same directory as" +#~ msgstr "と同じディレクトリに" + +#~ msgid "Sandbox test successful" +#~ msgstr "サンドボックステスト成功" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "隔離されたサンドボックスモードでテストされました" + +#~ msgid "All" +#~ msgstr "すべて" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "M2 Pro(12コア)でのテストに基づく" + +#~ msgid "CPU Utilization" +#~ msgstr "CPU使用率" + +#~ msgid "Indexing Throughput" +#~ msgstr "インデックス処理能力" + +#~ msgid "Memory Efficiency" +#~ msgstr "メモリ効率" + +#~ msgid "Performance Impact Notice" +#~ msgstr "パフォーマンス影響通知" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "ゼロ割り当てパイプラインの最適化" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "ChatGPTに助けを求める" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "地理的マッピングとインサイト" + +#~ msgid "No feature requests accepted." +#~ msgstr "機能リクエストは受け付けていません" + +#~ msgid "Time-series trend analysis" +#~ msgstr "時系列トレンド分析" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "ユーザーエージェントとブラウザの分析" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ コア (Apple M2 Pro または Intel 相当)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "最適なパフォーマンスには 4GB 以上の RAM" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "適応バッチサイズ" + +#~ msgid "CPU Architecture" +#~ msgstr "CPU アーキテクチャ" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "GeoIPとユーザーエージェントの解析" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "最小 1GB RAM" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "最新のCPU(x86_64、ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "リアルタイムパフォーマンス監視" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "最新ハードウェアでの持続的なパフォーマンス" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "バックアップパスが許可されたアクセスパスにありません: {0}" + +#~ msgid "Build with" +#~ msgstr "ビルド環境" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "データベースディレクトリのコピーに失敗しました: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "バックアップディレクトリの作成に失敗しました: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "シンボリックリンクの評価に失敗しました: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "Nginx UIファイルの復元に失敗しました: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "ZIPバッファへの書き込みに失敗しました: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "ハッシュ検証に失敗しました: ファイルの整合性が損なわれています" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "S3バケットへのアクセスが拒否されました: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "S3接続テストが失敗しました: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "S3の認証情報が無効です: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "S3エンドポイントが無効です: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "ストレージパスが許可されたアクセスパスにありません: {0}" + +#~ msgid "files" +#~ msgstr "ファイル" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "ログをインデックス中です、お待ちください..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "ダッシュボードデータを読み込み中..." + +#~ msgid "Today" +#~ msgstr "今日" + +#~ msgid "Data refreshed successfully" +#~ msgstr "データの更新に成功しました" + +#~ msgid "Failed to refresh data" +#~ msgstr "データの更新に失敗しました" + +#~ msgid "Log File:" +#~ msgstr "ログファイル:" + +#~ msgid "Log path" +#~ msgstr "ログパス" + +#~ msgid "Index Size" +#~ msgstr "インデックスサイズ" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "ページサイズ" + +#~ msgid "Environments" +#~ msgstr "環境" + +#~ msgid "Node Group" +#~ msgstr "ノードグループ" + +#~ msgid "Node Groups" +#~ msgstr "ノードグループ" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "conf.d ディレクトリが存在するか確認してください" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Server-Sent Events プロトコルを介してバックエンドとの通信をサポートします。Nginx UI を Nginx " +#~ "リバースプロキシ経由で使用している場合は、このリンクを参照して対応する設定ファイルを作成してください: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "空白の場合、デフォルトの CA ディレクトリが使用されます。" + +#~ msgid "Save error %{msg}" +#~ msgstr "保存エラー %{msg}" + +#~ msgid "Main" +#~ msgstr "メイン" + +#~ msgid "Select an action after sync" +#~ msgstr "同期後のアクションを選択" + #~ msgid "Link Start" #~ msgstr "リンクスタート" @@ -5735,9 +7561,6 @@ msgstr "あなたのパスキー" #~ msgid "Last Backup Error" #~ msgstr "最後のバックアップエラー" -#~ msgid "Apply" -#~ msgstr "適用" - #~ msgid "Apply bulk action successfully" #~ msgstr "一括操作が正常に適用されました" @@ -5765,10 +7588,6 @@ msgstr "あなたのパスキー" #~ msgid "Recovered Successfully" #~ msgstr "正常に回復しました" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "合計 %{total} アイテム" - #~ msgid "View Details" #~ msgstr "詳細を表示します" diff --git a/app/src/language/ko_KR/app.po b/app/src/language/ko_KR/app.po index 15b9c5dec..fa48e2e8b 100644 --- a/app/src/language/ko_KR/app.po +++ b/app/src/language/ko_KR/app.po @@ -14,90 +14,134 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 5.10.4\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "[Nginx UI] ACME 사용자: %{name}, 이메일: %{email}, CA 디렉터리: %{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "[Nginx UI] 현재 인증서를 나중에 취소하기 위해 백업 중" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] 인증서 갱신 성공" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] 인증서가 성공적으로 취소되었습니다" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "[Nginx UI] 서버에 인증서가 사용되었습니다, 서버 TLS 인증서 다시 불러오는 중" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] CA 서버와의 통신을 용이하게 하는 클라이언트 생성" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] 환경 변수가 정리되었습니다" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] 완료됨" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] 인증서가 성공적으로 발급되었습니다" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] 인증서 획득 중" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] 인증서 해지 준비 중" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] 레고 구성 준비 중" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] Nginx 다시 로드 중" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] 해지 완료" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] 인증서 취소 중" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] 이전 인증서 취소 중" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] DNS01 챌린지 공급자 설정 중" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] 환경 변수 설정 중" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] HTTP01 챌린지 공급자 설정 중" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] 인증서 개인 키를 디스크에 기록 중" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] 인증서를 디스크에 작성 중" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label}이(가) 클립보드에 복사되었습니다" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* 그룹 %{groupName}의 노드와 수동으로 선택한 노드 포함" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "* 인덱스 파일은 기본적으로 NGINX UI 구성 경로 내 \"log-index\" 디렉터리에 저장됩니다." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* 성능 지표는 Apple M2 Pro(12코어)와 32GB RAM에서 측정되었습니다. 실제 성능은 하드웨어 구성에 따라 다를 수 " +"있습니다." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{total}개 항목 중 %{start}-%{end}" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "최소 1코어" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "1GB RAM 최소" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "2+ 코어 권장" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "24시간 UV/PV 통계" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "2FA" @@ -106,11 +150,15 @@ msgstr "2FA" msgid "2FA Settings" msgstr "2FA 설정" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "4GB 이상 RAM 권장" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "대하여" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "액세스 로그" @@ -119,30 +167,28 @@ msgid "Access log path not exist" msgstr "액세스 로그 경로가 존재하지 않습니다" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "접근 로그" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "ACME 사용자" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "작업" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "작업" @@ -157,15 +203,15 @@ msgid "Actual worker to configured ratio" msgstr "실제 작업자 대 구성 비율" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "추가" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "패스키 추가" @@ -179,10 +225,14 @@ msgstr "구성 추가" msgid "Add Directive Below" msgstr "아래에 지시문 추가" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "도메인 추가" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "헤더 추가" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -196,15 +246,15 @@ msgstr "서버 추가" msgid "Add Site" msgstr "사이트 추가" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "스트림 추가" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "업스트림 추가" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "성공적으로 추가됨" @@ -212,30 +262,74 @@ msgstr "성공적으로 추가됨" msgid "Additional" msgstr "추가적인" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "고급 모드" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "고급 인덱싱이 활성화되었지만 재구축 시작에 실패했습니다" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "고급 인덱싱이 성공적으로 활성화되었습니다" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "고급 로그 인덱싱 기능은 모든 사용자에게 무료이며 오픈 소스입니다" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "고급 메모리 풀링 시스템" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "고급 검색 및 필터링" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "고급 설정" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "이후에 이 페이지를 새로 고치고 패스키 추가를 다시 클릭하세요." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "모두" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "모든 구성 요소" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "모든 복구 코드가 사용되었습니다" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." msgstr "선택한 모든 서브도메인은 동일한 DNS 공급자에 속해야 합니다. 그렇지 않으면 인증서 신청이 실패합니다." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"또는 데이터베이스를 다운로드할 수 없는 경우 GeoLite2-City.mmdb 파일을 app.ini와 같은 디렉터리에 수동으로 배치할 " +"수 있습니다." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "분석 서비스를 사용할 수 없음" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "아무거나" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "도달 가능한 모든 IP 주소는 개인 인증 기관과 함께 사용할 수 있습니다" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "API 기본 URL" @@ -256,36 +350,40 @@ msgstr "API 토큰" msgid "API Type" msgstr "API 유형" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "앱" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "적용" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "아키텍처" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "차단된 IP를 즉시 삭제하시겠습니까?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "이 패스키를 즉시 삭제하시겠습니까?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "새로운 복구 코드를 생성하시겠습니까?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "2FA를 재설정하시겠습니까?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "모든 알림을 지우시겠습니까?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "채팅 기록을 지우시겠습니까?" @@ -293,16 +391,16 @@ msgstr "채팅 기록을 지우시겠습니까?" msgid "Are you sure you want to delete permanently?" msgstr "정말 영구적으로 삭제하시겠습니까?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "정말 삭제하시겠습니까?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "다음 동기화 노드에서 Nginx를 다시 로드하시겠습니까?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "이 지시문을 제거하시겠습니까?" @@ -314,7 +412,7 @@ msgstr "이 항목을 제거하시겠습니까?" msgid "Are you sure you want to remove this location?" msgstr "이 위치를 제거하시겠습니까?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "다음 동기화 노드에서 Nginx를 다시 시작하시겠습니까?" @@ -322,23 +420,27 @@ msgstr "다음 동기화 노드에서 Nginx를 다시 시작하시겠습니까?" msgid "Are you sure you want to restore?" msgstr "복원하시겠습니까?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "ChatGPT에게 도움 요청" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "오름차순" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "어시스턴트" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "최소 20GB의 사용 가능한 디스크 공간" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "수정 시도" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "시도 횟수" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "인증" @@ -346,12 +448,12 @@ msgstr "인증" msgid "Authenticate with a passkey" msgstr "패스키로 인증" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "인증 설정" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "인증 중..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "저자" @@ -385,28 +487,27 @@ msgstr "자동 백업 실패" msgid "Auto Backup Storage Failed" msgstr "자동 백업 저장 실패" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "자동 새로고침" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "자동 새로고침이 비활성화되었습니다" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "자동 새로고침이 활성화되었습니다" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "%{name}에 대한 자동 갱신 비활성화됨" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "%{name}에 대한 자동 갱신 활성화됨" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert가 실행 중입니다. 잠시 기다려 주세요..." @@ -415,16 +516,32 @@ msgstr "AutoCert가 실행 중입니다. 잠시 기다려 주세요..." msgid "AutoCert is running..." msgstr "AutoCert 실행 중..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "자동 로그 회전 감지" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "자동 재시작" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "평균 지연 시간" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "평균 일일 UV" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "평균/PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "뒤로" @@ -436,6 +553,20 @@ msgstr "홈으로" msgid "Back to List" msgstr "목록으로 돌아가기" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "백엔드" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "백그라운드 인덱싱이 진행 중입니다. 준비되면 데이터가 자동으로 업데이트됩니다." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "백그라운드 로그 서비스를 사용할 수 없음" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "백업" @@ -444,7 +575,7 @@ msgstr "백업" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "백업 파일 무결성 검사에 실패했습니다. 파일이 변조되었을 수 있습니다" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "백업 파일을 찾을 수 없음: {0}" @@ -456,22 +587,18 @@ msgstr "백업이 성공적으로 다운로드되었습니다" msgid "Backup Path" msgstr "백업 경로" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "백업 경로가 존재하지 않습니다: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "백업 경로가 디렉터리가 아닙니다: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "사용자 정의 디렉터리 백업에는 백업 경로가 필요합니다" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "백업 경로가 허용된 접근 경로에 없습니다: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "백업 일정" @@ -492,15 +619,15 @@ msgstr "백업 작업 %{backup_name} 실행 실패, 오류: %{error}" msgid "Backup Type" msgstr "백업 유형" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "차단 시간(분)" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "차단된 IP" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "차단될 시간" @@ -512,18 +639,18 @@ msgstr "Bark" msgid "Base information" msgstr "기본 정보" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "기본" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "기본 모드" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "기본 설정" @@ -535,7 +662,7 @@ msgstr "일괄 편집" msgid "Batch Modify" msgstr "일괄 수정" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "배치 업그레이드" @@ -547,11 +674,27 @@ msgstr "아래에는 일괄 수정하려는 선택된 항목이 있습니다" msgid "Block is nil" msgstr "블록이 nil입니다" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "빌드 환경" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "브라우저" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "브라우저 통계" -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"고급 인덱싱을 활성화하면 시스템이 요구 사항을 충족하고 성능 영향을 이해했음을 인정하는 것입니다. 이로 인해 기존 로그 파일의 인덱싱이 " +"즉시 시작됩니다." + +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "CA 디렉토리" @@ -559,11 +702,11 @@ msgstr "CA 디렉토리" msgid "Cache" msgstr "캐시" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "이 시간 내에 접근되지 않은 캐시 항목은 제거됩니다" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "캐시 로더 처리 시간 임계값" @@ -572,15 +715,15 @@ msgstr "캐시 로더 처리 시간 임계값" msgid "Cache manager processes" msgstr "캐시 관리자 프로세스" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "캐시 관리자 처리 시간 임계값" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "캐시 관리자 설정" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "캐시 경로" @@ -589,7 +732,7 @@ msgstr "캐시 경로" msgid "Cache Processes" msgstr "캐시 프로세스" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "캐시 서브디렉터리 계층 구조, 예: 1:2" @@ -606,24 +749,33 @@ msgstr "" "worker_processes * worker_connections를 기반으로 계산되었습니다. 실제 성능은 하드웨어, 구성 및 작업량에 " "따라 달라집니다" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "취소" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "백업 경로 {0}에 접근할 수 없습니다: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "로그 파일에 접근할 수 없습니다" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "저장 경로 {0}에 접근할 수 없습니다: {1}" @@ -647,7 +799,7 @@ msgstr "이 상태에서 성능 데이터를 얻을 수 없습니다" msgid "Cannot remove initial user" msgstr "초기 사용자는 삭제할 수 없습니다" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "인증서" @@ -655,6 +807,11 @@ msgstr "인증서" msgid "Cert path is not under the nginx conf dir" msgstr "인증서 경로가 nginx 설정 디렉터리 아래에 있지 않습니다" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "인증서" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "인증서 %{name}의 유효 기간이 만료되었습니다" @@ -669,6 +826,10 @@ msgstr "인증서 %{name}은(는) %{days}일 후에 만료됩니다" msgid "Certificate %{name} will expire in 1 day" msgstr "인증서 %{name}의 유효 기간이 1일 남았습니다" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "인증서 내용과 개인 키 내용은 비워둘 수 없습니다" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "인증서 디코드 오류" @@ -687,6 +848,14 @@ msgstr "인증서 만료됨" msgid "Certificate Expiring Soon" msgstr "인증서 만료 임박" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "인증서 파일이 성공적으로 다운로드되었습니다" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "인증서 이름은 비워둘 수 없습니다" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "인증서를 찾을 수 없음: %{error}" @@ -699,8 +868,8 @@ msgstr "인증서 파싱 오류" msgid "Certificate path is empty" msgstr "인증서 경로가 비어 있습니다" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "인증서가 성공적으로 제거되었습니다" @@ -716,14 +885,14 @@ msgstr "인증서 갱신 성공" msgid "Certificate revoked successfully" msgstr "인증서가 성공적으로 취소되었습니다" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "인증서 상태" msgstr[1] "인증서 상태" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "인증서 유형" @@ -732,7 +901,7 @@ msgstr "인증서 유형" msgid "Certificates" msgstr "인증서" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "인증서 목록" @@ -740,7 +909,7 @@ msgstr "인증서 목록" msgid "Challenge error: {0}" msgstr "챌린지 오류: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "인증 방법" @@ -762,26 +931,33 @@ msgstr[0] "변경된 인증서" msgid "Changed Path" msgstr "변경된 경로" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "채널" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "채팅" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "%{path} 채팅" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "확인" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "다시 확인" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "파비콘 확인" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -810,6 +986,21 @@ msgstr "" "기능 사용을 방해합니다" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "conf.d 디렉터리가 nginx 구성 디렉터리 아래에 있는지 확인하세요" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"로그 색인화가 활성화된 경우 GeoLite2 데이터베이스가 사용 가능한지 확인하세요. GeoLite2 데이터베이스는 로그 색인화에서 " +"지리적 IP 분석에 필요합니다. 설정 페이지에서 다운로드하거나 app.ini와 같은 디렉토리에 GeoLite2-City.mmdb를 " +"수동으로 배치할 수 있습니다" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -823,15 +1014,15 @@ msgstr "" "자세한 내용은 문서를 참조하세요: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "nginx 설정 디렉터리가 존재하는지 확인" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "nginx 구성 항목 파일이 존재하는지 확인하세요" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -845,7 +1036,7 @@ msgstr "" "내용은 문서를 참조하세요: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -857,34 +1048,47 @@ msgstr "" "보고됩니다. 이 경우 구성 파일을 수정하여 Nginx PID 경로를 지정해야 합니다. 자세한 내용은 문서를 참조하세요: " "https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "nginx sbin 경로가 존재하는지 확인하세요" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "nginx.conf에 conf.d 디렉터리가 포함되어 있는지 확인" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "nginx.conf에 sites-enabled 디렉토리가 포함되어 있는지 확인" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "nginx.conf에 streams-enabled 디렉토리가 포함되어 있는지 확인" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" msgstr "nginx 설정 디렉터리에 sites-available 및 sites-enabled 디렉터리가 있는지 확인" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" msgstr "nginx 구성 디렉터리 아래에 streams-available 및 streams-enabled 디렉터리가 있는지 확인하세요" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "확인 간격 (초)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "중국 접속 지도" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "중국 지도" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "암호문이 너무 짧습니다" @@ -893,13 +1097,13 @@ msgstr "암호문이 너무 짧습니다" msgid "Cleaning environment variables" msgstr "환경 변수 정리" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "클리어" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "성공적으로 제거됨" @@ -917,7 +1121,7 @@ msgstr "파일을 클릭하거나 이 영역으로 드래그하여 업로드하 msgid "Click or drag folders to this area to upload" msgstr "폴더를 클릭하거나 이 영역으로 드래그하여 업로드" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "복사하려면 클릭하십시오" @@ -925,10 +1129,18 @@ msgstr "복사하려면 클릭하십시오" msgid "Client Body Buffer Size" msgstr "클라이언트 신체 버퍼 크기" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "클라이언트 인증서" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "클라이언트 헤더 버퍼 크기" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "클라이언트 키" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "클라이언트 최대 본문 크기" @@ -957,6 +1169,14 @@ msgstr "코드 완성이 활성화되지 않았습니다" msgid "Code Completion Model" msgstr "코드 완성 모델" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "접기" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "열 설정" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "명령어" @@ -965,7 +1185,7 @@ msgstr "명령어" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "명령이 예상치 못한 종료 코드로 종료되었습니다: {0}, 오류: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -988,11 +1208,34 @@ msgstr "선택된 비교" msgid "Compare with Current" msgstr "현재와 ​​비교하십시오" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "검색 기능이 포함된 완전한 인덱싱" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "구성 요소" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "압축 로그 파일 지원" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "압축 수준, 1은 가장 낮고 9는 가장 높습니다" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "통계 계산 중" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "conf.d 디렉터리가 존재합니다" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Conf.d 디렉터리가 존재하지 않습니다" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "구성" @@ -1005,22 +1248,30 @@ msgstr "구성 디렉터리가 존재하지 않습니다" msgid "Config entry file not exist" msgstr "구성 항목 파일이 존재하지 않습니다" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "구성이 찾을 수 없습니다" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "설정 경로가 비어 있습니다" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "설정 템플릿" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "구성" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "구성 파일 테스트 성공" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "구성 파일이 격리된 샌드박스에서 테스트에 성공했습니다" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "구성 기록" @@ -1041,11 +1292,20 @@ msgstr "구성들" msgid "Configure SSL" msgstr "SSL 구성하기" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "삭제 확인" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "새 비밀번호 확인" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "확인 필요" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "연결됨" @@ -1053,9 +1313,9 @@ msgstr "연결됨" msgid "Connection error, trying to reconnect..." msgstr "연결 오류, 다시 연결 시도 중..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "연결이 끊어졌습니다. 페이지를 새로 고침하세요." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "이 터미널의 연결이 끊어졌습니다. 필요한 경우 새로 고침하세요." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1065,14 +1325,14 @@ msgstr "연결 시간 초과 기간" msgid "Container status unknown" msgstr "컨테이너 상태를 알 수 없음" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "내용" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "복사됨" @@ -1085,14 +1345,38 @@ msgstr "복사 완료!" msgid "Copy" msgstr "복사" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "코드 복사" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "코어 업그레이드" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "옛 컨테이너 이름을 찾을 수 없습니다" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "임시 컨테이너를 찾을 수 없습니다" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "카운트" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "국가 / 지역" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "CPU" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "CPU 상태" @@ -1132,10 +1416,10 @@ msgid "" msgstr "Nginx 구성 및 Nginx UI 설정을 포함한 시스템 백업을 생성합니다. 백업 파일은 자동으로 컴퓨터에 다운로드됩니다." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "생성 시간" @@ -1160,11 +1444,15 @@ msgstr "인증 정보들" msgid "Cron Expression" msgstr "Cron 표현식" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "크로스 파일 타임라인 상관 관계" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "현재 계정에 TOTP가 활성화되어 있습니다." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "현재 계정은 TOTP가 활성화되지 않았습니다." @@ -1184,12 +1472,12 @@ msgstr "현재 비밀번호" msgid "Current usage" msgstr "현재 사용량" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "현재 버전" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "사용자 정의" @@ -1202,14 +1490,18 @@ msgstr "사용자 정의 cron 표현식" msgid "Custom Directory" msgstr "사용자 지정 디렉토리" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "사용자 정의 도메인" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "사용자 정의 도메인 인증서" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "사용자 정의 헤더" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1220,6 +1512,10 @@ msgstr "환경 표시기에 표시될 로컬 노드의 이름을 사용자 지 msgid "Daily" msgstr "매일" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "일별 접속 트렌드" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "매일 %{time}" @@ -1227,10 +1523,18 @@ msgstr "매일 %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "대시보드" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "날짜" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "날짜 범위" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "월 중 일자" @@ -1243,34 +1547,48 @@ msgstr "요일" msgid "Days" msgstr "일" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "데이터베이스 파일을 찾을 수 없습니다" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "압축 해제는 성공했지만 압축 파일을 삭제하는 데 실패했습니다: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "복호화 실패" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "기본 범위" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "공유 메모리 영역 이름과 크기를 정의합니다(예: proxy_cache:10m)" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "삭제" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "%{env_name}에서 %{path} 삭제 실패" +msgid "Delete %{path} on %{node_name} failed" +msgstr "%{node_name}에서 %{path} 삭제 실패" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "%{env_name}에서 %{path} 삭제 완료" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "%{node_name}에서 %{path} 삭제 완료" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "인증서 삭제" @@ -1290,43 +1608,44 @@ msgstr "원격 구성 삭제 오류" msgid "Delete Remote Config Success" msgstr "원격 구성 삭제 성공" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "원격 사이트 삭제 오류" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "원격 사이트 삭제 성공" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "원격 스트림 삭제 오류" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "원격 스트림 삭제 성공" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "%{node}에서 사이트 %{name} 삭제 실패" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "%{node}에서 사이트 %{name} 삭제 성공" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "사이트 삭제: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "%{node}에서 스트림 %{name} 삭제 실패" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "스트림 %{name}을(를) %{node}에서 성공적으로 삭제했습니다" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "스트림 삭제: %{stream_name}" @@ -1342,8 +1661,16 @@ msgstr "데모" msgid "Deploy" msgstr "배포" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "배포 모드" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "내림차순" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "설명" @@ -1359,18 +1686,44 @@ msgstr "대상 파일: {0} 이미 존재합니다" msgid "Details" msgstr "세부 사항" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Dev" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "개발" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "개발 모드" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "장치" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "장치 통계" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "장치 유형" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "다이제스트 파일 내용이 비어 있습니다" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "딩톡" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "직접" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "지시문" @@ -1391,98 +1744,101 @@ msgstr "DirectiveIdx 범위를 벗어남" msgid "Directives" msgstr "지시문들" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "디렉토리 레벨" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "캐시 파일을 저장할 디렉터리 경로" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "비활성화" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "%{name}의 자동 갱신 비활성화 실패" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "원격 사이트 비활성화 오류" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "원격 사이트 유지 관리 비활성화 오류" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "원격 사이트 유지 관리 비활성화 성공" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "원격 사이트 비활성화 성공" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "원격 스트림 비활성화 오류" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "원격 스트림 비활성화 성공" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "%{node}에서 사이트 %{name} 비활성화 실패" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "%{node}에서 사이트 %{name} 비활성화 성공" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "%{node}에서 사이트 %{name} 유지 관리를 비활성화하지 못했습니다" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "%{node}에서 %{name} 사이트 유지 관리 비활성화 성공" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "%{node}에서 스트림 %{name} 비활성화 실패" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "스트림 %{name}을(를) %{node}에서 비활성화했습니다" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "비활성화됨" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "성공적으로 비활성화됨" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "연결 끊김" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "디스크 IO" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "DNS 인증 정보" @@ -1491,11 +1847,15 @@ msgstr "DNS 인증 정보" msgid "DNS Provider" msgstr "DNS 제공자" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "DNS 확인자" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "이 옵션은 필요한 경우가 아니라면 활성화하지 마세요." @@ -1503,11 +1863,11 @@ msgstr "이 옵션은 필요한 경우가 아니라면 활성화하지 마세요 msgid "Do you want to %{action} this site?" msgstr "이 사이트를 %{action}하시겠습니까?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "이 스트림을 %{action}하시겠습니까?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "자동 인증서 갱신을 비활성화하시겠습니까?" @@ -1520,7 +1880,7 @@ msgstr "TLS를 활성화하시겠습니까?" msgid "Do you want to remove this server?" msgstr "이 서버를 제거하시겠습니까?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "이 업스트림을 제거하시겠습니까?" @@ -1528,7 +1888,7 @@ msgstr "이 업스트림을 제거하시겠습니까?" msgid "Docker client not initialized" msgstr "Docker 클라이언트가 초기화되지 않았습니다" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Docker 소켓이 존재합니다" @@ -1542,14 +1902,35 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "문서" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "문서 수" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "도메인" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "도메인 목록이 비어 있습니다. %{config}에 대한 자동 인증서를 다시 열어보세요" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "인증서 파일 다운로드" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "다운로드 완료" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "다운로드 실패" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "GeoLite2 데이터베이스 다운로드" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "최신 릴리스 다운로드 오류" @@ -1558,12 +1939,19 @@ msgstr "최신 릴리스 다운로드 오류" msgid "Downloading latest release" msgstr "최신 릴리스 다운로드 중" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "인증서 파일을 여기에 놓으세요" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "개인 키 파일을 여기에 놓으세요" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "드라이런 모드 활성화됨" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1571,10 +1959,12 @@ msgstr "" "일부 브라우저의 보안 정책으로 인해 localhost에서 실행하는 경우를 제외하고 비 HTTPS 웹사이트에서는 패스키를 사용할 수 " "없습니다." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "복제" @@ -1583,21 +1973,33 @@ msgstr "복제" msgid "Duplicate to local successfully" msgstr "로컬로 성공적으로 복제됨" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "동적" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "동적 샤드 관리" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "예: 0 0 * * * (매일 자정)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "EAB HMAC 키" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "EAB 키 ID" + #: src/language/curd.ts:8 msgid "Edit" msgstr "편집" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "%{n} 편집" @@ -1614,7 +2016,7 @@ msgstr "사이트 편집" msgid "Edit Stream" msgstr "스트림 편집" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "이메일" @@ -1623,16 +2025,28 @@ msgstr "이메일" msgid "Email (*)" msgstr "이메일 (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "빈 로그 줄" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "활성화" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "2FA가 성공적으로 활성화되었습니다" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "고급 인덱싱 활성화" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "고급 로그 인덱싱 활성화" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "%{name}에 대한 자동 갱신 활성화 실패" @@ -1656,57 +2070,61 @@ msgstr "HTTP/3 활성화" msgid "Enable HTTPS" msgstr "HTTPS 활성화" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "인덱싱 활성화" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "프록시 캐시 활성화" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "원격 사이트 활성화 오류" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "원격 사이트 유지 관리 활성화 오류" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "원격 사이트 유지 관리 활성화 성공" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "원격 사이트 활성화 성공" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "원격 스트림 활성화 오류" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "원격 스트림 활성화 성공" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "%{node}에서 사이트 %{name} 유지 관리 활성화 실패" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "%{node}에서 사이트 %{name} 유지 관리 활성화 성공" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "%{node}에서 사이트 %{name} 활성화 실패" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "%{node}에서 사이트 %{name} 활성화 성공" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "%{node}에서 스트림 %{name} 활성화 실패" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "%{node}에서 스트림 %{name} 활성화 성공" @@ -1718,29 +2136,29 @@ msgstr "stub_status 모듈 활성화" msgid "Enable TLS" msgstr "TLS 활성화" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "TOTP 활성화" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "활성화됨" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "성공적으로 활성화됨" @@ -1752,6 +2170,15 @@ msgstr "멀티플렉싱 및 서버 푸시 기능을 갖춘 HTTP/2 지원을 활 msgid "Enables HTTP/3 support based on QUIC protocol for best performance" msgstr "최상의 성능을 위해 QUIC 프로토콜 기반의 HTTP/3 지원을 활성화합니다" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"고급 로그 인덱싱을 활성화하면 CPU 및 메모리를 포함한 상당한 컴퓨팅 리소스를 소모합니다. 진행하기 전에 시스템이 최소 요구 사항을 " +"충족하는지 확인하십시오." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Let's Encrypt로 웹사이트 암호화" @@ -1760,11 +2187,19 @@ msgstr "Let's Encrypt로 웹사이트 암호화" msgid "End" msgstr "끝" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "종료 날짜" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "도메인 이름 입력" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "서버 IP 주소 입력 (예: 203.0.113.1 또는 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "도메인을 입력하세요" @@ -1776,39 +2211,56 @@ msgstr "환경 구성이 비어 있습니다" msgid "Environment variables cleaned" msgstr "환경 변수가 정리되었습니다" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "환경" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "오류" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "오류 세부 정보" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "차이점 뷰어 초기화 오류" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "오류 로그" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "오류 로그 감지됨" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "오류 로그 경로가 존재하지 않습니다" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "오류 로그" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "오류 로그는 자유 형식의 텍스트 메시지를 포함하기 때문에 구조화된 분석을 지원하지 않습니다." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "오류 패턴 인식" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "콘텐츠 처리 오류" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "실행 가능한 바이너리 파일이 비어 있습니다" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "실행 가능 경로" @@ -1824,6 +2276,22 @@ msgstr "매일 %{time}에 실행" msgid "Execute on every month on day %{day} at %{time}" msgstr "매월 %{day}일 %{time}에 실행" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "확장" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "예상 성능" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "예상 상태 코드" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "예상 텍스트" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1837,12 +2305,32 @@ msgstr "만료일: %{date}" msgid "Export Excel" msgstr "Excel로 내보내기" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "외부 계정 바인딩 HMAC 키 (선택 사항). Base64 URL 인코딩 형식이어야 합니다." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "외부 계정 바인딩 키 ID (선택 사항). ZeroSSL과 같은 일부 ACME 공급자에 필요합니다." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "외부 Docker 컨테이너" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "외부 알림 구성이 없습니다" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "외부 알림 테스트" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "외부 알림" @@ -1871,15 +2359,15 @@ msgstr "Nginx UI 파일 백업 실패: {0}" msgid "Failed to build nginx config: {0}" msgstr "nginx 구성 빌드 실패: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "해시 계산 실패: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Nginx 해시 계산 실패: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Nginx UI 해시 계산 실패: {0}" @@ -1892,38 +2380,35 @@ msgid "Failed to copy config file: {0}" msgstr "설정 파일 복사 실패: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "데이터베이스 디렉토리 복사 실패: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "데이터베이스 파일 복사 실패: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "파일 내용 복사 실패: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Nginx 설정 디렉토리 복사 실패: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "클립보드에 복사하지 못했습니다" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "백업 생성 실패" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "백업 디렉터리 생성 실패: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "백업 파일 생성 실패: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "디렉터리 생성 실패: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "파일 생성 실패: {0}" @@ -1931,19 +2416,19 @@ msgstr "파일 생성 실패: {0}" msgid "Failed to create hash info file: {0}" msgstr "해시 정보 파일 생성 실패: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "상위 디렉터리 생성 실패: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "복원 디렉토리 생성 실패: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "저장 디렉터리 생성 실패 {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "심볼릭 링크 생성 실패: {0}" @@ -1959,48 +2444,64 @@ msgstr "임시 디렉토리 생성 실패" msgid "Failed to create temporary subdirectory" msgstr "임시 하위 디렉터리 생성 실패" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "xz 리더 생성에 실패했습니다: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "ZIP 아카이브 생성 실패: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "ZIP 항목 생성 실패: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "ZIP 파일 생성 실패: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "ZIP 헤더 생성 실패: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "GeoLite2 데이터베이스 압축 해제에 실패했습니다: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "데이터 복호화 실패: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "파일 복호화 실패: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Nginx 디렉터리 복호화 실패: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Nginx UI 디렉터리 복호화 실패: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "모든 인덱스 삭제 실패" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "인증서 삭제 실패" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "데이터베이스에서 인증서 삭제 실패: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "파일 인덱스 삭제 실패" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "%{msg} 비활성화 실패" @@ -2008,20 +2509,32 @@ msgstr "%{msg} 비활성화 실패" msgid "Failed to disable maintenance mode %{msg}" msgstr "점검 모드 비활성화 실패: %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "인증서 파일 다운로드 실패" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "GeoLite2 데이터베이스 다운로드에 실패했습니다: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "%{msg} 활성화 실패" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "고급 인덱싱 활성화 실패" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "유지 보수 모드 활성화 실패: %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "데이터 암호화 실패: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "파일 암호화 실패: {0}" @@ -2033,10 +2546,6 @@ msgstr "Nginx 디렉터리 암호화 실패: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Nginx UI 디렉터리 암호화 실패: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "심볼릭 링크 평가 실패: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "명령 실행 실패: {0}" @@ -2045,7 +2554,7 @@ msgstr "명령 실행 실패: {0}" msgid "Failed to execute template: {0}" msgstr "템플릿 실행 실패: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "아카이브 추출 실패: {0}" @@ -2065,14 +2574,30 @@ msgstr "인증서 정보 가져오기 실패" msgid "Failed to get container id: {0}" msgstr "컨테이너 ID를 가져오지 못했습니다: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "파일 크기를 가져오는 데 실패했습니다: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "인덱스 상태를 가져오지 못했습니다" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Nginx 성능 설정을 가져오지 못했습니다" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "nginx.conf 경로를 가져오지 못했습니다" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "성능 데이터를 가져오지 못했습니다" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "지속성 통계를 가져오지 못했습니다" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "스텁 상태를 가져오지 못했습니다: {0}" @@ -2089,15 +2614,19 @@ msgstr "현재 컨테이너 검사 실패: {0}" msgid "Failed to load history records" msgstr "기록 불러오기 실패" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "파일 열기에 실패했습니다: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "소스 파일 열기 실패: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "ZIP 항목 열기 실패: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "ZIP 파일 열기 실패: {0}" @@ -2117,15 +2646,23 @@ msgstr "템플릿 구문 분석 실패: {0}" msgid "Failed to pull image: {0}" msgstr "이미지 가져오기 실패: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "압축된 데이터를 읽는 데 실패했습니다: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "암호화된 파일 읽기 실패: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "파일 읽기 실패" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "파일 읽기 실패: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "해시 정보 파일 읽기 실패: {0}" @@ -2141,57 +2678,97 @@ msgstr "출력 읽기 실패: {0}" msgid "Failed to read response body: {0}" msgstr "응답 본문을 읽는 데 실패했습니다: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "심볼릭 링크 읽기 실패: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "파일 인덱스 재구성 실패" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "인덱스 재구성 실패" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "사이트 새로 고침 실패" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Nginx 설정 복원 실패: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "Nginx UI 파일 복원 실패: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "인증서 취소에 실패했습니다" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "인증서 취소 실패: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "구성 저장 실패" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "다운로드한 파일을 저장하는 데 실패했습니다: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "상태 확인 구성 저장 실패" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Nginx 성능 설정 저장 실패" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "순서 저장 실패" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "테스트 메시지 전송 실패" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "임시 컨테이너 시작 실패: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "상태 업데이트 실패" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "파일 업로드 실패" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "해시 확인 실패: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "백업 파일 쓰기 실패: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "압축 해제된 데이터를 쓰는 데 실패했습니다: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "복호화된 파일 쓰기 실패: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "암호화된 파일 쓰기 실패: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "보안 키 파일 쓰기 실패: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "ZIP 버퍼에 쓰기 실패: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "기능" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2205,6 +2782,10 @@ msgstr "파일" msgid "File exists" msgstr "파일이 존재함" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "%{path} 파일 인덱스 재구성이 성공적으로 시작되었습니다" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "파일을 찾을 수 없음" @@ -2213,19 +2794,35 @@ msgstr "파일을 찾을 수 없음" msgid "File or directory not found: {0}" msgstr "파일 또는 디렉터리를 찾을 수 없음: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "파일 경로가 필요합니다" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "파일 크기는 5MB를 초과할 수 없습니다" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "파일이 성공적으로 업로드되었습니다" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "파일 이름이 비어 있습니다" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "필터" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "로그 내용 필터링" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "완료됨" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "첫 번째 보기" @@ -2237,7 +2834,11 @@ msgstr "폴더" msgid "Folder" msgstr "폴더" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "리디렉션 따르기" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2252,6 +2853,26 @@ msgstr "중국 사용자를 위한" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "중국 사용자를 위해: https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "상업적 또는 전문적 사용을 원하시면 다음으로 문의하세요" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "오류 로그의 경우 더 나은 보기 환경을 위해 Raw Log Viewer를 사용해 주세요." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "IP 기반 인증서 구성에서는 HTTP-01 챌린지 방법만 지원됩니다. DNS-01 챌린지는 IP 기반 인증서와 호환되지 않습니다." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "IP 기반 인증서의 경우 인증서에 포함될 서버 IP 주소를 지정해 주세요." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "폼 분석 실패" @@ -2272,6 +2893,22 @@ msgstr "형식: 분 시 일 월 요일" msgid "Friday" msgstr "금요일" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "인덱싱된 로그에서" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "프론트엔드" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "전체 텍스트 검색" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "전문 검색 지원" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "일반 인증서" @@ -2280,16 +2917,16 @@ msgstr "일반 인증서" msgid "Generate" msgstr "생성" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "새 복구 코드 생성" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "복구 코드 생성" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "복구 코드 생성 성공" @@ -2297,6 +2934,39 @@ msgstr "복구 코드 생성 성공" msgid "Generating private key for registering account" msgstr "계정 등록을 위한 개인 키 생성 중" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "GeoLite2 데이터베이스" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "GeoLite2 데이터베이스 사용 가능" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "GeoLite2 데이터베이스가 설치되었습니다" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "GeoLite2 데이터베이스를 {0}에서 찾을 수 없습니다" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"GeoLite2 데이터베이스가 {0}에서 찾을 수 없습니다. 로그 색인화는 지리적 IP 분석을 위해 GeoLite2 데이터베이스를 " +"필요로 합니다" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "GeoLite2 데이터베이스가 필요합니다" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "ACME 사용자 가져오기 오류: {0}" @@ -2309,8 +2979,7 @@ msgstr "데이터 가져오기 실패" msgid "Get dns credential error: {0}" msgstr "DNS 자격 증명 가져오기 오류: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "릴리스 정보 가져오기 오류" @@ -2322,10 +2991,37 @@ msgstr "인증서를 가져오는 중입니다. 잠시 기다려 주세요..." msgid "Github Proxy" msgstr "Github 프록시" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "글로벌 접속 지도" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "세계 지도" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "원시 로그 뷰어로 이동" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "gRPC 상태 확인을 위해서는 서버가 gRPC 상태 확인 서비스(grpc.health.v1.Health)를 구현해야 합니다." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"gRPCS는 TLS 암호화를 사용합니다. 서버는 gRPC 상태 확인 서비스를 구현해야 합니다. 테스트를 위해 SSL 검증은 기본적으로 " +"비활성화되어 있습니다." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "GZIP 압축" @@ -2338,25 +3034,51 @@ msgstr "GZIP 압축 수준" msgid "GZIP Min Length" msgstr "GZIP 최소 길이" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "해시 검증 실패: 파일 무결성이 손상됨" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "건강 점검" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "상태 확인 구성" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "헬스 체크 설정이 저장되었습니다" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "헬스 체크 구성이 성공적으로 저장되었습니다" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "건강 상태" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "숨기기" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "어시스턴트 숨기기" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "높음" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "값이 높을수록 연결 재사용이 더 좋다는 것을 의미합니다" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "기록" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "홈" @@ -2365,10 +3087,11 @@ msgid "Host" msgstr "호스트" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "시간" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2376,7 +3099,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "HTTP 검증 포트" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "HTTP 메소드" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2384,31 +3111,37 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "HTTPS 프로토콜" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "ICP 번호" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "비워 둘 경우 기본 CA 디렉터리가 사용됩니다." - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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 "IP에서 로그인 실패 시도 횟수가 차단 임계 시간 내에 최대 시도 횟수에 도달하면 해당 IP는 일정 시간 동안 차단됩니다." -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "기존 인증서를 자동으로 취소하려면 이 옵션을 활성화하세요." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "저장 위치를 변경하려면 Nginx UI 설정에서 `nginx_log` 섹션의 `IndexPath`를 설정할 수 있습니다." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "브라우저가 WebAuthn 패스키를 지원하는 경우 대화 상자가 나타납니다." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2418,12 +3151,12 @@ msgstr "도메인에 CNAME 레코드가 있고 인증서를 얻을 수 없는 msgid "Import" msgstr "가져오기" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "인증서 가져오기" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "비활성 시간" @@ -2433,7 +3166,46 @@ msgid "" "processes" msgstr "마스터 프로세스, 워커 프로세스, 캐시 프로세스 및 기타 Nginx 프로세스 포함" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "증분 인덱스 스캐닝" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "인덱스 및 통계 재구성이 성공적으로 시작되었습니다" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "인덱싱 실패" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "인덱싱 실패, 재구축을 시도해 주세요" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "인덱스 재구축 시작됨" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "인덱스 상태" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "인덱싱됨" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "인덱싱" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "로그 인덱싱 중..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "인덱싱 중..." @@ -2441,10 +3213,14 @@ msgstr "인덱싱 중..." msgid "Indicator" msgstr "지표" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "정보" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "초기 사용자가 존재하지 않습니다" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "초기 코어 업그레이더 오류" @@ -2453,7 +3229,7 @@ msgstr "초기 코어 업그레이더 오류" msgid "Initialing core upgrader" msgstr "코어 업그레이더 초기화" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "앱에서 코드를 입력하세요:" @@ -2468,7 +3244,7 @@ msgstr "안전하지 않은 확인 건너뛰기" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "설치" @@ -2494,27 +3270,36 @@ msgstr "시스템 시작 후 10분이 지나면 설치가 허용되지 않습니 msgid "Interval" msgstr "간격" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "무효" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "잘못된 AES IV 형식: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "잘못된 AES 키 형식: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "잘못된 인증서 형식" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "유효하지 않은 클레임 유형" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "잘못된 커밋 SHA" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "잘못된 파일 객체" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "잘못된 파일 경로: {0}" @@ -2527,6 +3312,10 @@ msgstr "잘못된 파일 이름" msgid "Invalid folder name" msgstr "잘못된 폴더 이름" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "유효하지 않은 알림 ID" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "잘못된 알림 설정" @@ -2535,7 +3324,7 @@ msgstr "잘못된 알림 설정" msgid "Invalid otp code" msgstr "잘못된 OTP 코드" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "복호화된 데이터의 패딩이 유효하지 않습니다" @@ -2543,10 +3332,15 @@ msgstr "복호화된 데이터의 패딩이 유효하지 않습니다" msgid "Invalid passcode or recovery code" msgstr "잘못된 패스코드 또는 복구 코드" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "잘못된 경로: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "잘못된 개인 키 형식" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "유효하지 않은 복구 코드" @@ -2555,19 +3349,41 @@ msgstr "유효하지 않은 복구 코드" msgid "Invalid request format" msgstr "잘못된 요청 형식" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "잘못된 보안 토큰 형식" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "잘못된 Telegram 채팅 ID: 0일 수 없습니다" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "잘못된 타임스탬프 형식" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "잘못된 WebSocket 메시지 유형" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "IP 주소" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "IP 인증서 알림" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "인증서 발급" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "인증서 발급" @@ -2587,7 +3403,7 @@ msgstr "항목" msgid "Jwt Secret" msgstr "Jwt 토큰" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2597,12 +3413,12 @@ msgstr "복구 코드를 비밀번호와 같이 안전하게 보관하세요. msgid "Keepalive Timeout" msgstr "Keepalive 타임아웃" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "키 유형" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "언어" @@ -2614,6 +3430,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark 사용자 지정" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "지난 12시간" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "지난 14일" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "지난 15분" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "지난 24시간" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "지난 30일" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "지난 30분" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "지난 4시간" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "지난 7일" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "지난 90일" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "마지막 백업 상태" @@ -2622,15 +3476,35 @@ msgstr "마지막 백업 상태" msgid "Last Backup Time" msgstr "마지막 백업 시간" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "최종 확인" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "마지막 확인 시간" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "지난 1시간" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "마지막 인덱싱" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "지난달" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "마지막 업데이트" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "최종 업데이트:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "마지막 사용 시간" @@ -2646,12 +3520,18 @@ msgstr "기본값을 사용하려면 비워 두세요: https://api.openai.com/" msgid "Leave blank if do not want to modify" msgstr "수정하지 않으려면 비워 두세요" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "ACME 공급자가 필요로 하지 않는 경우 비워 둡니다" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "필요하지 않으면 비워 두세요." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "비워 두면 아무것도 변경되지 않습니다" @@ -2659,16 +3539,24 @@ msgstr "비워 두면 아무것도 변경되지 않습니다" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "TOTP가 활성화되지 않았기 때문에 레거시 복구 코드는 허용되지 않습니다" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego CNAME 지원 비활성화" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "라이선스" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "라이선스 분포" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "라이선스 유형" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "링크" @@ -2684,32 +3572,32 @@ msgstr "수신 중" msgid "Load Average:" msgstr "평균 부하:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "설정에서 불러오기" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "성공적으로 로드되었습니다" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "로드됨" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "로더 파일" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "로더 설정" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "로더 슬립" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "로더 임계값" @@ -2717,9 +3605,15 @@ msgstr "로더 임계값" msgid "Loading data..." msgstr "데이터를 불러오는 중..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "로드 중..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2738,11 +3632,11 @@ msgstr "위치" msgid "Locations" msgstr "위치들" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "로그" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2751,23 +3645,59 @@ msgstr "" "로그 파일 %{log_path}은(는) 일반 파일이 아닙니다. Docker 컨테이너에서 nginx-ui를 사용 중이라면 자세한 내용은 " "https://nginxui.com/zh_CN/guide/config-nginx-log.html을 참조하십시오." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "로그 파일이 존재하지 않습니다" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "로그 파일이 일반 파일이 아닙니다" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "로그 파일을 사용할 수 없음" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "로그 파일이 아직 인덱싱되지 않았습니다" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "로그 인덱서를 사용할 수 없음" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "로그 인덱싱 완료! 업데이트된 데이터를 불러오는 중..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "로그 줄이 최대 길이를 초과합니다" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "로그 목록" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "로그 파서가 초기화되지 않았습니다. 사용 전에 indexer.InitLogParser()를 호출하세요" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "로그 경로가 화이트리스트에 없습니다" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "로그인" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "로그인 성공" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "로그아웃 성공" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "로그관리" @@ -2784,9 +3714,20 @@ msgstr "" "페이지의 매개 변수를 수정할 필요가 없습니다. 도커 컨테이너를 사용하여 Nginx UI를 설치하는사용자는이 옵션을 수동으로 활성화할 수 " "있습니다. Nginx UI의 크론탭 작업 스케줄러는설정한 간격 (분 단위)에서 logrotate 명령을 실행합니다." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "낮음" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "메인 노드" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "유지보수" @@ -2802,7 +3743,7 @@ msgstr "유지 보수 모드가 성공적으로 활성화되었습니다" msgid "Make certificate dir error: {0}" msgstr "인증서 디렉터리 생성 오류: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2815,11 +3756,11 @@ msgstr "인증서를 받기 전에 .well-known 디렉터리에 대한 역방향 msgid "Manage Configs" msgstr "구성 관리" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "사이트 관리" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "스트림 관리" @@ -2831,15 +3772,15 @@ msgstr "사용자 관리" msgid "Managed Certificate" msgstr "관리형 인증서" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "관리자 파일" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "관리자 대기 시간" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "관리자 임계값" @@ -2865,7 +3806,7 @@ msgstr "마스터 프로세스" msgid "Master Process" msgstr "마스터 프로세스" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "최대 시도 횟수" @@ -2873,11 +3814,15 @@ msgstr "최대 시도 횟수" msgid "Max Concurrent Connections" msgstr "최대 동시 연결 수" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "최대 리디렉션 수" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "초당 최대 요청 수" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "최대 캐시 크기" @@ -2894,7 +3839,7 @@ msgstr "최대 동시 연결 수" msgid "Maximum number of connections per worker process" msgstr "워커 프로세스당 최대 연결 수" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "캐시의 최대 총 크기" @@ -2904,6 +3849,7 @@ msgstr "최대 작업자 프로세스 수:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "메모리" @@ -2911,22 +3857,39 @@ msgstr "메모리" msgid "Memory and Storage" msgstr "메모리 및 저장소" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "메모리 설계" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "메모리 사용량 (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "방법" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "메서드 이름" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "압축을 위한 최소 파일 크기" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "최소 여유 공간" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "캐시 디렉터리의 최소 여유 공간" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "최소:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "분" @@ -2935,21 +3898,36 @@ msgstr "분" msgid "Minutes" msgstr "분" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "미러" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "모델" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "현대적인 분석 서비스를 사용할 수 없음" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "최신 인덱서 서비스를 사용할 수 없음" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "현대적인 검색 서비스를 사용할 수 없음" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "수정일시" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "수정" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "인증서 수정" @@ -2957,7 +3935,7 @@ msgstr "인증서 수정" msgid "Modify Config" msgstr "설정 수정" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "모듈" @@ -2965,6 +3943,10 @@ msgstr "모듈" msgid "Modules" msgstr "모듈" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "모듈 캐시가 갱신되었습니다" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "월요일" @@ -2977,39 +3959,66 @@ msgstr "매월" msgid "Monthly on day %{day} at %{time}" msgstr "매월 %{day}일 %{time}에" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "다차원 데이터 시각화" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "여러 줄 지시문" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "인터넷에서 접근 가능한 공인 IP 주소여야 합니다" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "해당 없음" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "이름" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "이름 또는 내용" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "네임스페이스" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "네임스페이스" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "stub_status 모듈을 활성화해야 합니다" @@ -3022,6 +4031,10 @@ msgstr "네트워크" msgid "Network Statistics" msgstr "네트워크 통계" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "새 채팅" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "새 DNS 챌린지 공급자 오류: {0}" @@ -3050,18 +4063,18 @@ msgstr "새 경로" msgid "New transport error: {0}" msgstr "새로운 전송 오류: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "새 버전 출시" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "다음" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3073,7 +4086,7 @@ msgstr "Nginx -T 의 출력이 비어 있습니다" msgid "Nginx Access Log Path" msgstr "Nginx 접근 로그 경로" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Nginx 접근 로그 경로가 존재합니다" @@ -3102,15 +4115,15 @@ msgstr "Nginx 설정에 sites-enabled가 포함되어 있지 않음" msgid "Nginx conf not include stream-enabled" msgstr "Nginx 설정에 stream-enabled가 포함되어 있지 않음" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "Nginx 설정 디렉터리가 설정되지 않았습니다" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Nginx 설정 디렉터리가 존재합니다" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "Nginx 구성 진입 파일이 존재합니다" @@ -3118,8 +4131,8 @@ msgstr "Nginx 구성 진입 파일이 존재합니다" msgid "Nginx configuration has been restored" msgstr "Nginx 구성이 복원되었습니다" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Nginx 구성 분석 오류" @@ -3148,7 +4161,7 @@ msgstr "Nginx CPU 사용률" msgid "Nginx Error Log Path" msgstr "Nginx 오류 로그 경로" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "Nginx 오류 로그 경로가 존재합니다" @@ -3157,7 +4170,7 @@ msgid "Nginx error: {0}" msgstr "Nginx 오류: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3172,7 +4185,7 @@ msgstr "Nginx가 다른 컨테이너에서 실행되고 있지 않습니다" msgid "Nginx is running" msgstr "Nginx가 실행 중입니다" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Nginx 로그" @@ -3180,6 +4193,10 @@ msgstr "Nginx 로그" msgid "Nginx Log Directory Whitelist" msgstr "Nginx 로그 디렉터리 화이트리스트" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Nginx 로그 인덱싱 중..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3189,7 +4206,7 @@ msgstr "Nginx 메모리 사용량" msgid "Nginx PID Path" msgstr "Nginx PID 경로" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Nginx PID 경로가 존재합니다" @@ -3202,7 +4219,7 @@ msgstr "Nginx 재로드 명령어" msgid "Nginx reload failed: {0}" msgstr "Nginx 다시 로드 실패: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Nginx 다시 로드 작업이 원격 노드로 전송되었습니다" @@ -3214,7 +4231,7 @@ msgstr "Nginx 다시 로드 성공" msgid "Nginx Restart Command" msgstr "Nginx 재시작 명령어" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Nginx 재시작 작업이 원격 노드로 전송되었습니다" @@ -3222,7 +4239,7 @@ msgstr "Nginx 재시작 작업이 원격 노드로 전송되었습니다" msgid "Nginx restarted successfully" msgstr "Nginx 재시작이 성공적으로 완료되었습니다" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Nginx Sbin 경로가 존재합니다" @@ -3253,41 +4270,73 @@ msgid "" "a few seconds." msgstr "Nginx UI 설정이 복원되었으며 몇 초 후에 자동으로 재시작됩니다." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf는 conf.d 디렉토리를 포함합니다" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf에 sites-enabled 디렉터리가 포함되어 있습니다" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf에는 streams-enabled 디렉토리가 포함됩니다" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "아니요" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "작업 없음" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "사용 가능한 인증서가 없습니다" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "중국 지리 데이터를 사용할 수 없음" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "데이터 없음" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "데이터 없음" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "현재 페이지에 항목이 없습니다" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "지리 데이터를 사용할 수 없음" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "선택한 시간 범위에서 로그를 찾을 수 없습니다." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "선택된 노드 없음" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "선택된 기록이 없습니다" @@ -3296,24 +4345,31 @@ msgstr "선택된 기록이 없습니다" msgid "No servers configured" msgstr "서버가 구성되지 않았습니다" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "사이트를 찾을 수 없음" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "server_name 구성에서 특정 IP 주소를 찾을 수 없습니다. 인증서를 위해 아래에 서버 IP 주소를 지정해 주세요." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "구조화된 로그 데이터를 사용할 수 없음" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "업스트림이 구성되지 않았습니다" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "노드" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "노드 그룹" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "노드 그룹" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "노드 분석 실패: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3323,7 +4379,12 @@ msgstr "노드 이름" msgid "Node Secret" msgstr "노드 시크릿" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "노드 상태" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "노드" @@ -3331,36 +4392,61 @@ msgstr "노드" msgid "Not After" msgstr "만료일" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "예상하지 않은 텍스트" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "찾을 수 없음" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "인덱스되지 않음" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "로드되지 않음" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "IP 인증서는 지원되지 않습니다" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "유효 시작일: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "참고" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." msgstr "구성 파일에 다른 구성이나 인증서가 포함되어 있는 경우, 미리 원격 노드에 동기화하십시오." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"참고: 서버가 gRPC 리플렉션을 지원하지 않으면 상태 확인이 실패할 수 있습니다. gRPC 서버에서 리플렉션이 활성화되어 있는지 " +"확인하세요." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "복사할 내용이 없습니다" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "알림" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "알림" @@ -3369,15 +4455,19 @@ msgstr "알림" msgid "Notifier not found" msgstr "알림 기능을 찾을 수 없음" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "동시 작업자 프로세스 수, CPU 코어 수에 자동 설정" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "캐시 로더가 한 번에 처리하는 파일 수" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "캐시 관리자가 한 번에 처리하는 파일 수" @@ -3392,7 +4482,7 @@ msgstr "작업 프로세스 수" msgid "Obtain cert error: {0}" msgstr "인증서 획득 오류: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "인증서 획득" @@ -3400,18 +4490,18 @@ msgstr "인증서 획득" msgid "Obtaining certificate" msgstr "인증서 획득 중" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP Must Staple" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." msgstr "OCSP Must Staple은 Firefox를 사용한 첫 접속 시 일부 사용자에게 오류를 일으킬 수 있습니다." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "끔" @@ -3419,48 +4509,58 @@ msgstr "끔" msgid "Official Document" msgstr "공식 문서" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "오프라인" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "오프라인 GeoIP 분석" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "확인" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "켜짐" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "검증이 완료되면, 레코드는 제거됩니다." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "온라인" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "온라인 수" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "ZIP 파일만 허용됩니다" @@ -3469,23 +4569,46 @@ msgstr "ZIP 파일만 허용됩니다" msgid "Open" msgstr "열림" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "오픈 소스 제한" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "오픈AI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "운영 체제" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "운영 체계 통계" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "또는" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "또는 파일을 아래 편집기로 드래그하세요" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "또는 시크릿을 입력하세요: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "순서가 성공적으로 저장되었습니다" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "원본 이름" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "운영 체제" @@ -3532,11 +4655,15 @@ msgstr "파라미터" msgid "Params Optimization" msgstr "매개변수 최적화" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "파서 성능" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "패스키" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3545,7 +4672,7 @@ msgstr "" "패스키는 터치, 얼굴 인식, 기기 비밀번호 또는 PIN을 사용하여 신원을 확인하는 웹인증(WebAuthn) 자격 증명입니다. 비밀번호 " "대체 또는 2FA 방법으로 사용할 수 있습니다." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "비밀번호" @@ -3574,11 +4701,13 @@ msgstr "비밀번호가 일치하지 않습니다" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "경로" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "허용된 접근 경로에 없는 경로: {0}" @@ -3590,12 +4719,28 @@ msgstr "경로: {0}은(는) nginx 설정 디렉터리: {1} 아래에 있지 않 msgid "Payload resource is nil" msgstr "페이로드 리소스가 nil입니다" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "피크 시간" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "대기 중" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "백분율" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "실행" @@ -3637,17 +4782,29 @@ msgid "" "count, etc." msgstr "요청 통계, 연결 수 등을 얻으려면 stub_status 모듈을 활성화하세요." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "입력해 주세요" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." msgstr "생성하려는 패스키의 이름을 입력하고 아래의 확인 버튼을 클릭하세요." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "유효한 IPv4 주소를 입력하세요 (각 옥텟은 0-255)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "유효한 IPv4 또는 IPv6 주소를 입력하세요" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "유효한 포트 범위를 입력하세요" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "최소 하나의 도메인을 입력해 주세요" @@ -3664,6 +4821,10 @@ msgstr "보안 토큰을 입력해 주세요" msgid "Please enter the security token received during backup" msgstr "백업 시 받은 보안 토큰을 입력해 주세요" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "서버 IP 주소를 입력해 주세요" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "모든 필드를 올바르게 작성해 주세요" @@ -3672,19 +4833,19 @@ msgstr "모든 필드를 올바르게 작성해 주세요" msgid "Please fill in required S3 configuration fields" msgstr "필수 S3 구성 필드를 입력해 주세요" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." msgstr "DNS 제공자가 제공한 API 인증 자격 증명을 입력해주세요." -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." msgstr "먼저 인증서 > DNS 자격 증명에 자격 증명을 추가한 다음,DNS 제공자의 API를 요청하려면 아래 자격 증명 중 하나를 선택해주세요." -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3716,20 +4877,20 @@ msgstr "이름을 입력하세요. 이는 새 구성의 파일 이름으로 사 msgid "Please input your E-mail!" msgstr "이메일을 입력해주세요!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "비밀번호를 입력해주세요!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "사용자 이름을 입력해주세요!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "로그인해 주세요." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "아래의 시간 설정 단위는 모두 초 단위임을 유의해주세요." @@ -3745,25 +4906,31 @@ msgstr "이 보안 토큰을 저장해 두세요. 복원 시 필요합니다:" msgid "Please select a backup file" msgstr "백업 파일을 선택해 주세요" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "알림 유형을 선택해 주세요" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "유효한 %{type} 파일을 선택하세요 (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "최소한 하나의 항목을 선택해 주세요" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Nginx를 다시 로드하려면 최소한 하나의 노드를 선택하십시오" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Nginx를 다시 시작하려면 최소한 하나의 노드를 선택하세요" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "업그레이드할 노드를 최소한 하나 이상 선택해 주세요" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "확인하려면 \"Revoke\"를 입력하세요" @@ -3776,23 +4943,26 @@ msgstr "정확한 확인 텍스트를 입력하세요" msgid "Port" msgstr "포트" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "HTTP-01 챌린지 검증을 위해 포트 80이 열려 있어야 합니다" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "포트 스캐너" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "동기화 후 작업" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "사전 출시" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "환경설정" @@ -3800,6 +4970,19 @@ msgstr "환경설정" msgid "Preparing lego configurations" msgstr "Lego 설정 준비 중" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "개인 CA:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "사설 IP(192.168.x.x, 10.x.x.x, 172.16-31.x.x)는 실패합니다" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "개인 키" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "프로세스" @@ -3816,6 +4999,10 @@ msgstr "프로세스 정보" msgid "Processing {count}/{total}" msgstr "처리 중 {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "프로덕션 파이프라인" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "데모에서 루트 비밀번호 변경 금지" @@ -3832,6 +5019,10 @@ msgstr "프로젝트 팀" msgid "Protected Directory" msgstr "보호된 디렉터리" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "프로토콜" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3839,7 +5030,7 @@ msgid "" "proxy." msgstr "프로토콜 설정은 직접 연결할 때만 적용됩니다. 리버스 프록시를 사용하는 경우 리버스 프록시에서 별도로 프로토콜을 구성하세요." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "제공자" @@ -3847,22 +5038,57 @@ msgstr "제공자" msgid "Provider not found: {0}" msgstr "공급자를 찾을 수 없음: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "지역 / 지역" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "프록시" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "프록시 패스" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "프록시 대상" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "공개 CA 요구 사항:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "공공 보안 번호" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "페이지 뷰" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "대기 중" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "인덱싱 대기 중..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "빠른 선택" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "원시" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "데이터베이스 다시 다운로드" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "디렉터리 읽기 실패: {0}" @@ -3877,24 +5103,48 @@ msgstr "읽기 요청" msgid "Reads" msgstr "읽기" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "실시간 분석 대시보드" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "재구축" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "모든 인덱스 재구성" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "파일 인덱스 재구성" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "인덱스 재구성" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "수신" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "재확인" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "권장:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "복구" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "복구 코드" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -3904,33 +5154,47 @@ msgstr "복구 코드는 2FA 장치에 대한 접근 권한을 잃었을 때 계 msgid "Recursive Nameservers" msgstr "재귀적 네임서버" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "리퍼러" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "새로 고침" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "모듈 캐시 새로 고침" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "응답 재생성" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "등록" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." msgstr "사용자를 등록하거나 이 계정을 사용하여 HTTP 프록시를 통해 인증서를 발급합니다." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "등록 실패" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "시작 시 등록" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "패스키 등록 성공" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "등록 성공" @@ -3938,28 +5202,30 @@ msgstr "등록 성공" msgid "Registering user" msgstr "사용자 등록 중" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "등록 상태" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "재설치" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "릴리스 API 요청 실패: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "릴리스 노트" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "리로드" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Nginx 다시 로드" @@ -3983,7 +5249,7 @@ msgstr "원격 Nginx 다시 로드 오류" msgid "Reload Remote Nginx Success" msgstr "원격 Nginx 다시 로드 성공" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "다시 로드 요청이 실패했습니다. 네트워크 연결을 확인하세요" @@ -3995,22 +5261,28 @@ msgstr "리로딩 중" msgid "Reloading nginx" msgstr "Nginx 리로딩 중" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "원격" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "제거" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "성공적으로 제거되었습니다" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "성공적으로 제거됨" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4019,12 +5291,12 @@ msgid "Rename" msgstr "이름 바꾸기" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "%{env_name}에서 %{orig_path}을(를) %{new_path}(으)로 이름 변경 실패" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "%{node_name}에서 %{orig_path}을(를) %{new_path}(으)로 이름 변경 실패" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "%{env_name}에서 %{orig_path}을(를) %{new_path}(으)로 이름 변경 성공" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "%{node_name}에서 %{orig_path}을(를) %{new_path}(으)로 이름 변경 성공" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4034,37 +5306,37 @@ msgstr "원격 구성 이름 변경 오류" msgid "Rename Remote Config Success" msgstr "원격 구성 이름 변경 성공" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "원격 사이트 이름 변경 오류" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "원격 사이트 이름 변경 성공" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "원격 스트림 이름 변경 오류" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "원격 스트림 이름 변경 성공" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "%{node}에서 사이트 %{name}을(를) %{new_name}(으)로 이름 변경하는 데 실패했습니다" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "사이트 %{name}을(를) %{new_name}(으)로 이름 변경했습니다 (%{node})" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "%{node}에서 스트림 %{name}을(를) %{new_name}(으)로 이름 변경하는 데 실패했습니다" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "스트림 %{name}을(를) %{new_name}(으)로 이름 변경했습니다 (%{node})" @@ -4072,7 +5344,7 @@ msgstr "스트림 %{name}을(를) %{new_name}(으)로 이름 변경했습니다 msgid "Rename successfully" msgstr "이름 변경 성공" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4082,8 +5354,8 @@ msgstr "이름 변경 성공" msgid "Renew cert error: {0}" msgstr "인증서 갱신 오류: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "인증서 갱신" @@ -4095,11 +5367,23 @@ msgstr "인증서 갱신 오류" msgid "Renew Certificate Success" msgstr "인증서 갱신 성공" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "성공적으로 갱신됨" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "요청" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "요청 본문" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "요청 경로" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "요청 통계" @@ -4117,13 +5401,19 @@ msgid "Requests Per Connection" msgstr "연결당 요청 수" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "재설정" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "2FA 재설정" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "검색 초기화" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4133,6 +5423,10 @@ msgstr "" "Resident Set Size: 물리적 메모리에 상주하는 실제 메모리로, 모든 공유 라이브러리 메모리를 포함하며, 여러 프로세스에 " "대해 반복 계산됩니다" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "리소스 사용 경고" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4142,9 +5436,8 @@ msgstr "응답" msgid "Restart" msgstr "재시작" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Nginx 다시 시작" @@ -4164,7 +5457,7 @@ msgstr "원격 Nginx 재시작 오류" msgid "Restart Remote Nginx Success" msgstr "원격 Nginx 재시작 성공" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "재시작 요청이 실패했습니다. 네트워크 연결을 확인해 주세요" @@ -4203,8 +5496,8 @@ msgstr "이 버전 복원" msgid "Restored successfully" msgstr "성공적으로 복원되었습니다" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "취소" @@ -4212,29 +5505,29 @@ msgstr "취소" msgid "Revoke cert error: {0}" msgstr "인증서 취소 오류: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "이전 인증서 취소" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "이 인증서 취소" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." msgstr "인증서를 취소하면 현재 이를 사용 중인 모든 서비스에 영향을 미칩니다. 이 작업은 취소할 수 없습니다." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "RP 표시 이름" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "RP 오리진" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4270,10 +5563,6 @@ msgstr "S3 액세스 키 ID가 필요합니다" msgid "S3 Bucket" msgstr "S3 버킷" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "S3 버킷 액세스 거부: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "S3 버킷이 필요합니다" @@ -4282,7 +5571,7 @@ msgstr "S3 버킷이 필요합니다" msgid "S3 bucket name" msgstr "S3 버킷 이름" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "S3 구성이 불완전합니다: {0} 누락됨" @@ -4290,27 +5579,15 @@ msgstr "S3 구성이 불완전합니다: {0} 누락됨" msgid "S3 connection test failed" msgstr "S3 연결 테스트 실패" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "S3 연결 테스트 실패: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "S3 연결 테스트 성공" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "S3 자격 증명이 유효하지 않습니다: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "S3 엔드포인트" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "S3 엔드포인트가 유효하지 않습니다: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "S3 엔드포인트가 필요합니다" @@ -4346,7 +5623,7 @@ msgstr "S3 비밀 액세스 키" msgid "S3 secret access key is required" msgstr "S3 비밀 액세스 키가 필요합니다" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "S3 업로드 실패: {0}" @@ -4354,17 +5631,19 @@ msgstr "S3 업로드 실패: {0}" msgid "Saturday" msgstr "토요일" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "저장" @@ -4372,41 +5651,41 @@ msgstr "저장" msgid "Save Directive" msgstr "지시문 저장" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "저장 오류 %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "순서 저장" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "원격 사이트 저장 오류" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "원격 사이트 저장 성공" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "원격 스트림 저장 오류" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "원격 스트림 저장 성공" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "%{name} 사이트를 %{node}에 저장하지 못했습니다" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "사이트 %{name}을(를) %{node}에 성공적으로 저장했습니다" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "스트림 %{name}을(를) %{node}에 저장하지 못했습니다" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "스트림 %{name}을(를) %{node}에 성공적으로 저장했습니다" @@ -4414,16 +5693,17 @@ msgstr "스트림 %{name}을(를) %{node}에 성공적으로 저장했습니다" msgid "Save successful" msgstr "저장 성공" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "성공적으로 저장되었습니다" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "성공적으로 저장됨" @@ -4447,13 +5727,13 @@ msgstr "포트 스캔" msgid "Scan Results" msgstr "스캔 결과" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "휴대폰으로 QR 코드를 스캔하여 앱에 계정을 추가하세요." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "로그 스캔 중..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "스캔 중" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4468,16 +5748,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "검색" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "검색 필터" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "로그 내용 검색..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "모듈 이름 검색" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "모듈 검색" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "검색 범위" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "템플릿 검색" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "비밀번호가 복사되었습니다" @@ -4494,13 +5795,19 @@ msgstr "보안 토큰" msgid "Security Token Information" msgstr "보안 토큰 정보" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "미리 정의된 CA 디렉터리를 선택하거나 사용자 지정 디렉터리를 입력하세요. 기본 CA 디렉터리를 사용하려면 비워 두세요." + #: src/language/curd.ts:31 msgid "Select all" msgstr "모두 선택" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "동기화 후 작업 선택" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "CA 디렉터리 URL을 선택하거나 입력하세요" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4510,7 +5817,7 @@ msgstr "선택된 {count} 파일" msgid "Selector" msgstr "선택" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "자체 점검" @@ -4524,11 +5831,15 @@ msgstr "자체 점검 실패, Nginx UI가 제대로 작동하지 않을 수 있 msgid "Send" msgstr "보내기" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "테스트 메시지 전송" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "서버" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "서버 오류" @@ -4536,6 +5847,10 @@ msgstr "서버 오류" msgid "Server Info" msgstr "서버 정보" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "서버 IP 주소" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "서버 이름 해시 버킷 크기" @@ -4544,7 +5859,7 @@ msgstr "서버 이름 해시 버킷 크기" msgid "Server names hash table size" msgstr "서버 이름 해시 테이블 크기" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "directives에서 server_name을 찾을 수 없습니다" @@ -4552,6 +5867,10 @@ msgstr "directives에서 server_name을 찾을 수 없습니다" msgid "ServerIdx out of range" msgstr "ServerIdx 범위를 벗어남" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "서비스 이름" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "세션을 찾을 수 없음" @@ -4586,6 +5905,10 @@ msgstr "환경 변수 설정" msgid "Setting HTTP01 challenge provider" msgstr "HTTP01 공급자 설정" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "설정" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4606,7 +5929,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Nginx UI 설정" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "공유 메모리 영역" @@ -4614,10 +5937,18 @@ msgstr "공유 메모리 영역" msgid "Show" msgstr "표시" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "어시스턴트 표시" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "패스키로 로그인" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "SIMD 최적화 스트림 처리" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "단일 지시문" @@ -4638,11 +5969,23 @@ msgstr "사이트가 유지 보수 모드입니다" msgid "Site Logs" msgstr "사이트 로그" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "사이트 네비게이션" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "사이트를 찾을 수 없음" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "사이트 새로 고침 시작됨" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "사이트" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "사이트 디렉터리가 존재합니다" @@ -4650,6 +5993,12 @@ msgstr "사이트 디렉터리가 존재합니다" msgid "Sites List" msgstr "사이트 목록" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "유효한 server_name 지시문으로 nginx 서버 블록을 구성하면 사이트가 여기에 표시됩니다." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "sites-available 디렉터리가 존재하지 않습니다" @@ -4659,6 +6008,8 @@ msgid "Sites-enabled directory not exist" msgstr "sites-enabled 디렉터리가 존재하지 않습니다" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "크기" @@ -4666,19 +6017,36 @@ msgstr "크기" msgid "Skip Installation" msgstr "설치 건너뛰기" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "캐시 로더 반복 사이의 대기 시간" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "캐시 관리자 반복 간 대기 시간" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "소켓" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "정렬 기준" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "소스 IP" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "스폰서" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "더 나은 I/O 성능을 위한 SSD 저장 장치" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "SSL 인증서 내용" @@ -4690,15 +6058,20 @@ msgstr "SSL 인증서 파일은 Nginx 구성 디렉터리 아래에 있어야 msgid "SSL certificate file not found" msgstr "SSL 인증서 파일을 찾을 수 없음" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "SSL 인증서키 콘텐츠" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "SSL 인증서 키 경로" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "SSL 인증서 경로" @@ -4723,13 +6096,12 @@ msgstr "SSL 키 경로" msgid "SSL key path is required when HTTPS is enabled" msgstr "HTTPS가 활성화된 경우 SSL 키 경로가 필요합니다" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "SSO 로그인" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "안정적" @@ -4737,33 +6109,49 @@ msgstr "안정적" msgid "Start" msgstr "시작" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "시작 날짜" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "복원 시작" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "다운로드를 시작하고 있습니다..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "정적" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "상태" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "상태가 성공적으로 업데이트되었습니다" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "정지됨" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "저장소" @@ -4787,10 +6175,6 @@ msgstr "저장 경로" msgid "Storage path is required" msgstr "저장 경로는 필수입니다" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "저장 경로가 허용된 접근 경로에 없습니다: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4804,7 +6188,7 @@ msgstr "스트림이 활성화되었습니다" msgid "Stream not found" msgstr "스트림을 찾을 수 없음" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "스트림 디렉터리가 존재합니다" @@ -4816,6 +6200,10 @@ msgstr "streams-available 디렉터리가 존재하지 않습니다" msgid "Streams-enabled directory not exist" msgstr "streams-enabled 디렉터리가 존재하지 않습니다" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "구조화된" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "스텁 상태 포트" @@ -4824,7 +6212,7 @@ msgstr "스텁 상태 포트" msgid "Stub_status is not enabled" msgstr "Stub_status가 활성화되지 않았습니다" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4835,17 +6223,6 @@ msgstr "성공" msgid "Sunday" msgstr "일요일" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Server-Sent Events 프로토콜을 통해 백엔드와의 통신을 지원합니다. Nginx UI를 Nginx 리버스 프록시를 통해 사용 " -"중인 경우, 해당 구성 파일을 작성하려면 이 링크를 참조하세요: " -"https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -4893,12 +6270,12 @@ msgid "Sync Certificate" msgstr "인증서 동기화" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "인증서 %{cert_name}을(를) %{env_name}(으)로 동기화하지 못했습니다" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "인증서 %{cert_name}을(를) %{node_name}에 동기화하지 못했습니다" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "인증서 %{cert_name}을(를) %{env_name}(으)로 성공적으로 동기화했습니다" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "인증서 %{cert_name}을(를) %{node_name}에 성공적으로 동기화했습니다" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -4909,12 +6286,12 @@ msgid "Sync Certificate Success" msgstr "인증서 동기화 성공" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "구성 %{config_name}을(를) %{env_name}에 동기화하지 못했습니다" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "구성 %{config_name}을(를) %{node_name}에 동기화하지 못했습니다" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "구성 %{config_name}을(를) %{env_name}(으)로 성공적으로 동기화했습니다" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "구성 %{config_name}을(를) %{node_name}에 성공적으로 동기화했습니다" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -4924,24 +6301,29 @@ msgstr "구성 동기화 오류" msgid "Sync Config Success" msgstr "구성 동기화 성공" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "동기화 노드" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "동기화 미리보기" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "동기화 전략" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "동기화 대상" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "동기화" @@ -4958,10 +6340,14 @@ msgstr "시스템 백업" msgid "System Check" msgstr "시스템 점검" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "시스템 초기 사용자" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "시스템 요구 사항" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "시스템 복원" @@ -4982,36 +6368,74 @@ msgstr "작업을 찾을 수 없음" msgid "Telegram" msgstr "텔레그램" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "터미널" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "터미널 어시스턴트" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "터미널 시작 명령" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "테스트" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "테스트 실패: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "테스트 실패: 상태 확인을 수행할 수 없음" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "테스트 메시지가 성공적으로 전송되었습니다" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "S3 연결 테스트" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "테스트 성공! 응답 시간: %{response_time}ms" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " "since it was last issued." msgstr "도메인에 대한 인증서는 30분마다 확인되며, 마지막으로 발급된 후 1주 이상이 지났거나 설정에서 지정한 기간이 지난 경우 갱신됩니다." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "오프라인 지리적 IP 분석을 위해 GeoLite2 데이터베이스가 필요합니다. 이 기능을 사용하려면 다운로드해 주세요." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "GeoLite2 데이터베이스는 IP 주소에 대한 지리 정보를 제공합니다. 이는 로그 분석에서 오프라인 지리 분석에 사용됩니다." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " "dashes, colons, and dots." msgstr "ICP 번호는 문자, 유니코드, 숫자, 하이픈, 대시, 콜론 및 점만 포함해야 합니다." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "입력이 SSL 인증서가 아닙니다" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "입력한 내용이 SSL 인증서 키가 아닙니다" @@ -5042,11 +6466,11 @@ msgstr "노드 이름에는 문자, 유니코드, 숫자, 하이픈, 대시, 콜 msgid "The parameter of server_name is required" msgstr "server_name 매개변수가 필요합니다" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "경로는 존재하지만, 파일이 인증서가 아닙니다" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "경로는 존재하지만 파일은 개인 키가 아닙니다" @@ -5056,7 +6480,7 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "공공 보안 번호는 문자, 유니코드, 숫자, 하이픈, 대시, 콜론 및 점만 포함해야 합니다." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5065,7 +6489,7 @@ msgstr "" "원격 Nginx UI 버전이 로컬 Nginx UI 버전과 호환되지 않습니다. 잠재적인 오류를 방지하려면 원격 Nginx UI를 로컬 " "버전과 일치하도록 업그레이드하십시오." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5093,7 +6517,7 @@ msgstr "이론상 최대 동시 연결 수:" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "이론적 최대 RPS(초당 요청 수):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5102,11 +6526,15 @@ msgstr "" "이 코드들은 비밀번호와 두 번째 요소를 잃어버린 경우 계정에 접근할 수 있는 최후의 수단입니다. 이 코드들을 찾을 수 없다면 계정에 " "대한 접근 권한을 잃게 됩니다." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "서드파티 컴포넌트" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "이 자동 인증 항목이 유효하지 않습니다. 제거해주세요." -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "이 인증서는 Nginx UI에서 관리됩니다" @@ -5114,9 +6542,9 @@ msgstr "이 인증서는 Nginx UI에서 관리됩니다" msgid "This directory is protected and cannot be deleted for system safety." msgstr "이 디렉터리는 보호되어 있으며 시스템 안전을 위해 삭제할 수 없습니다." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "이 필드는 필수입니다" @@ -5142,18 +6570,48 @@ msgid "" "-_./:" msgstr "이 필드에는 문자, 유니코드 문자, 숫자 및 -_./: 만 포함되어야 합니다" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "이것은 nginx ui에서 %{timestamp}에서 전송 된 테스트 메시지입니다." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " "After enabling it, you can view performance statistics" msgstr "이 모듈은 Nginx 요청 통계, 연결 수 등 데이터를 제공합니다. 활성화한 후 성능 통계를 볼 수 있습니다." -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "이번 달" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "이 알림은 비활성화되었습니다" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." msgstr "이 작업은 데이터베이스에서만 인증서를 제거합니다. 파일 시스템의 인증서 파일은 삭제되지 않습니다." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"이 사이트는 HTTPS(포트 443)의 기본 서버(default_server)로 구성되어 있습니다. IP 인증서는 인증 기관(CA)의 " +"지원이 필요하며 모든 ACME 공급자에서 사용할 수 있는 것은 아닙니다." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"이 사이트는 와일드카드 서버 이름(_)을 사용하며, 일반적으로 IP 기반 인증서를 나타냅니다. IP 인증서는 인증 기관(CA)의 지원이 " +"필요하며 모든 ACME 공급자에서 사용할 수 없을 수 있습니다." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5168,6 +6626,18 @@ msgstr "이 값은 이미 사용 중입니다" msgid "This will permanently delete the %{type}." msgstr "이 작업으로 %{type}이(가) 영구적으로 삭제됩니다." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"이 작업은 전체 로그 인덱스를 재구성합니다. 기존의 모든 인덱스 데이터가 삭제되고 처음부터 다시 구축됩니다. 시간이 다소 소요될 수 " +"있습니다. 계속하시겠습니까?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "이 특정 파일에 대한 인덱스 데이터를 다시 생성합니다: %{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5182,11 +6652,11 @@ msgid "" "after the restoration is complete." msgstr "이 작업은 구성 파일과 데이터베이스를 복원합니다. 복원이 완료되면 Nginx UI가 재시작됩니다." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "이 작업은 %{nodeNames}의 Nginx UI를 %{version}으로 업그레이드하거나 재설치합니다." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "제한" @@ -5194,8 +6664,21 @@ msgstr "제한" msgid "Thursday" msgstr "목요일" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "시간" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "시간 범위" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "시간 초과 (초)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "팁" @@ -5210,17 +6693,21 @@ msgstr "팁: worker_processes 또는 worker_connections를 증가시켜 동시 msgid "Title" msgstr "제목" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "삭제 확인" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "취소를 확인하려면 아래 필드에 \"취소\"를 입력하세요:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." msgstr "활성화하려면 휴대폰에 Google Authenticator 또는 Microsoft Authenticator 앱을 설치해야 합니다." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5261,15 +6748,41 @@ msgstr "토큰이 비어 있습니다" msgid "Token is not valid" msgstr "토큰이 유효하지 않습니다" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "상위 10개 국가/지역" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "상위 10개 지역" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "상위 10 개 URL" + #: src/language/curd.ts:5 msgid "Total" msgstr "총계" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "총 %{total} 항목" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "총 구성 요소" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "총 연결 수" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "총 항목 수" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5283,6 +6796,10 @@ msgstr "전체 Nginx 프로세스" msgid "Total Nginx Processes" msgstr "전체 Nginx 프로세스" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "총 PV" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "총 수신" @@ -5300,35 +6817,55 @@ msgstr "총 요청 수 / 총 연결 수" msgid "Total Send" msgstr "전체 전송" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "총 UV" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." msgstr "TOTP는 시간 기반의 일회용 비밀번호 알고리즘을 사용하는 이중 인증 방법입니다." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "트래픽" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "오류 번역 중..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "휴지통" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "검색 조건을 조정하거나 다른 페이지로 이동해 보세요." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "검색 조건이나 시간 범위를 조정해 보세요." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "화요일" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "2단계 인증이 필요합니다" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "유형" @@ -5336,15 +6873,47 @@ msgstr "유형" msgid "Type %{delete} to confirm" msgstr "확인하려면 %{delete}를 입력하세요" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "브라우저 입력 또는 선택" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "기기 입력 또는 선택" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "OS 입력 또는 선택" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "상태 코드 입력 또는 선택" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "여기에 메시지를 입력하세요..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "고유 페이지" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "알 수 없음" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "지원되지 않는 백업 유형: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "지원되지 않는 로그 형식" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "업데이트가 이미 진행 중입니다" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "비밀번호 업데이트" @@ -5353,32 +6922,30 @@ msgstr "비밀번호 업데이트" msgid "Update Profile" msgstr "프로필 업데이트" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "성공적으로 업데이트되었습니다" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "업데이트됨" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "업그레이드" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "%{node}에서 Nginx UI 업그레이드 성공 🎉" @@ -5386,11 +6953,22 @@ msgstr "%{node}에서 Nginx UI 업그레이드 성공 🎉" msgid "Upgraded successfully" msgstr "성공적으로 업그레이드됨" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "업그레이더 코어 다이제스트가 비어 있습니다" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "업그레이더 코어 다운로드 URL이 비어 있습니다" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Nginx UI를 업그레이드하는 중입니다. 잠시 기다려주세요..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "%{type} 파일 업로드" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "파일 업로드" @@ -5399,19 +6977,29 @@ msgstr "파일 업로드" msgid "Upload Folders" msgstr "폴더 업로드" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "업스트림" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "업스트림 이름" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "업스트림 소켓" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "업스트림 테스트 유형" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "가동 시간:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5423,14 +7011,19 @@ msgstr "OTP 사용" msgid "Use recovery code" msgstr "복구 코드 사용" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "임시 경로 사용" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "사용자" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "사용자 에이전트" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "사용자가 차단되었습니다" @@ -5447,7 +7040,7 @@ msgstr "사용자가 OTP를 2FA로 활성화하지 않음" msgid "User Profile" msgstr "사용자 프로필" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "사용자 이름" @@ -5460,12 +7053,20 @@ msgstr "사용자 이름 (*)" msgid "Username length cannot exceed 255 characters" msgstr "사용자 이름 길이는 255자를 초과할 수 없습니다" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "고유 방문자" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "유효함" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "SSL 인증서 검증" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "값" @@ -5475,45 +7076,65 @@ msgstr "값" msgid "Verify Backup File Integrity" msgstr "백업 파일 무결성 확인" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "호스트 이름 확인" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "시스템 요구 사항을 확인하십시오" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "버전" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "보기" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "모든 알림 보기" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "GitHub에서 보기" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "복구 코드를 봅니다" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "서드파티 구성 요소 보기" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "확인됨" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "방문 수" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "대기 과정" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "경고" @@ -5525,19 +7146,32 @@ msgid "" "to restore." msgstr "경고: 복원 작업은 현재 구성을 덮어씁니다. 유효한 백업 파일과 보안 토큰이 있는지 확인하고 복원할 내용을 신중하게 선택하십시오." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"경고: 이 주소는 사설 IP 주소로 보입니다. Let's Encrypt와 같은 공인 인증 기관은 사설 IP에 대한 인증서를 발급할 수 " +"없습니다. 공인 IP 주소를 사용하거나 사설 인증 기관 사용을 고려해 보세요." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "기능 요청을 받지 않습니다" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." msgstr "도메인 소유권 검증을 위해 도메인의 DNS레코드에 하나 이상의 TXT 레코드를 추가할 것입니다." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" msgstr "이 파일에서 HTTPChallenge 구성을 제거하고 Nginx를 다시 로드할 예정입니다. 계속하시겠습니까?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "웹인증" @@ -5545,10 +7179,18 @@ msgstr "웹인증" msgid "WebAuthn settings are not configured" msgstr "WebAuthn 설정이 구성되지 않았습니다" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "WebSocket 연결 오류" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket이 연결되지 않았습니다. 연결을 기다려 주세요" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "위컴" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "수요일" @@ -5561,7 +7203,7 @@ msgstr "매주" msgid "Weekly on %{day} at %{time}" msgstr "매주 %{day} %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5570,24 +7212,24 @@ msgstr "" "활성화하면 Nginx UI가 시작 시 사용자를 자동으로 재등록합니다. 일반적으로 개발 환경에서 Pebble을 CA로 사용하는 경우가 " "아니면 이 기능을 활성화하지 마십시오." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." -msgstr "이 사이트를 활성화/비활성화하거나 삭제 또는 저장할 때, 노드 그룹에 설정된 노드와 아래에서 선택한 노드가 동기화됩니다." +"namespace and the nodes selected below will be synchronized." +msgstr "이 사이트를 활성화/비활성화, 삭제 또는 저장할 때 네임스페이스에 설정된 노드와 아래에서 선택한 노드가 동기화됩니다." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." msgstr "새로운 복구 코드를 생성할 때는 반드시 새 코드를 다운로드하거나 인쇄해야 합니다." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "임시 파일을 작성할 때 임시 경로를 사용할지 여부" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "와일드카드 인증서" @@ -5606,8 +7248,8 @@ msgstr "작업자 프로세스" msgid "Workers" msgstr "워커" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "작업 공간" @@ -5632,16 +7274,18 @@ msgstr "인증서 개인 키를 디스크에 쓰기" msgid "Writing certificate to disk" msgstr "인증서를 디스크에 쓰기" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "예" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5653,11 +7297,11 @@ msgstr "" msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "nginx 구성 경로 외부에 있는 파일은 삭제할 수 없습니다" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "최신 버전을 사용하고 있습니다" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "이 페이지에서 Nginx UI 업그레이드를 확인할 수 있습니다." @@ -5669,35 +7313,215 @@ msgstr "이 대화 상자는 %{countdown}초 후에 닫을 수 있습니다" msgid "You can close this dialog now" msgstr "이제 이 대화 상자를 닫을 수 있습니다" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." msgstr "WebAuthn 설정을 하지 않았기 때문에 패스키를 추가할 수 없습니다." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "2FA가 아직 활성화되지 않았습니다. 복구 코드를 생성하려면 2FA를 활성화하세요." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "아직 복구 코드를 생성하지 않았습니다." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." msgstr "현재 복구 코드는 오래되어 안전하지 않을 수 있습니다. 보안을 위해 가능한 한 빨리 새로운 복구 코드를 생성해 주세요." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "이전 코드는 더 이상 작동하지 않습니다." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "귀하의 패스키" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "할당 없는 파이프라인" + +#~ msgid "in the same directory as" +#~ msgstr "와 같은 디렉토리에" + +#~ msgid "Sandbox test successful" +#~ msgstr "샌드박스 테스트 성공" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "격리된 샌드박스 모드에서 테스트됨" + +#~ msgid "All" +#~ msgstr "모두" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "M2 Pro(12코어) 테스트 기반" + +#~ msgid "CPU Utilization" +#~ msgstr "CPU 사용률" + +#~ msgid "Indexing Throughput" +#~ msgstr "인덱싱 처리량" + +#~ msgid "Memory Efficiency" +#~ msgstr "메모리 효율성" + +#~ msgid "Performance Impact Notice" +#~ msgstr "성능 영향 알림" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "제로 할당 파이프라인 최적화" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "ChatGPT에게 도움 요청" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "지리적 매핑 및 인사이트" + +#~ msgid "No feature requests accepted." +#~ msgstr "기능 요청을 받지 않습니다" + +#~ msgid "Time-series trend analysis" +#~ msgstr "시계열 트렌드 분석" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "사용자 에이전트 및 브라우저 분석" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ 코어 (Apple M2 Pro 또는 Intel 동급)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "최적의 성능을 위해 4GB 이상의 RAM" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "적응형 배치 크기" + +#~ msgid "CPU Architecture" +#~ msgstr "CPU 아키텍처" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "GeoIP 및 사용자 에이전트 분석" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "최소 1GB RAM" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "최신 CPU (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "실시간 성능 모니터링" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "최신 하드웨어에서의 지속적인 성능" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "백업 경로가 허용된 접근 경로에 없습니다: {0}" + +#~ msgid "Build with" +#~ msgstr "빌드 환경" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "데이터베이스 디렉토리 복사 실패: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "백업 디렉터리 생성 실패: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "심볼릭 링크 평가 실패: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "Nginx UI 파일 복원 실패: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "ZIP 버퍼에 쓰기 실패: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "해시 검증 실패: 파일 무결성이 손상됨" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "S3 버킷 액세스 거부: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "S3 연결 테스트 실패: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "S3 자격 증명이 유효하지 않습니다: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "S3 엔드포인트가 유효하지 않습니다: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "저장 경로가 허용된 접근 경로에 없습니다: {0}" + +#~ msgid "files" +#~ msgstr "파일" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "로그 인덱싱 중입니다. 잠시 기다려 주세요..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "대시보드 데이터 로드 중..." + +#~ msgid "Today" +#~ msgstr "오늘" + +#~ msgid "Data refreshed successfully" +#~ msgstr "데이터가 성공적으로 업데이트되었습니다" + +#~ msgid "Failed to refresh data" +#~ msgstr "데이터 새로 고침 실패" + +#~ msgid "Log File:" +#~ msgstr "로그 파일:" + +#~ msgid "Log path" +#~ msgstr "로그 경로" + +#~ msgid "Index Size" +#~ msgstr "인덱스 크기" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "페이지 크기" + +#~ msgid "Environments" +#~ msgstr "환경" + +#~ msgid "Node Group" +#~ msgstr "노드 그룹" + +#~ msgid "Node Groups" +#~ msgstr "노드 그룹" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "conf.d 디렉터리가 존재하는지 확인하세요" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Server-Sent Events 프로토콜을 통해 백엔드와의 통신을 지원합니다. Nginx UI를 Nginx 리버스 프록시를 통해 사용 " +#~ "중인 경우, 해당 구성 파일을 작성하려면 이 링크를 참조하세요: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "비워 둘 경우 기본 CA 디렉터리가 사용됩니다." + +#~ msgid "Save error %{msg}" +#~ msgstr "저장 오류 %{msg}" + +#~ msgid "Main" +#~ msgstr "메인" + +#~ msgid "Select an action after sync" +#~ msgstr "동기화 후 작업 선택" + #~ msgid "Link Start" #~ msgstr "링크 시작" @@ -5731,9 +7555,6 @@ msgstr "귀하의 패스키" #~ msgid "Last Backup Error" #~ msgstr "마지막 백업 오류" -#~ msgid "Apply" -#~ msgstr "적용" - #~ msgid "Apply bulk action successfully" #~ msgstr "일괄 작업을 적용했습니다" @@ -5761,10 +7582,6 @@ msgstr "귀하의 패스키" #~ msgid "Recovered Successfully" #~ msgstr "성공적으로 복구되었습니다" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "총 %{total} 항목" - #~ msgid "View Details" #~ msgstr "상세 보기" @@ -5812,13 +7629,6 @@ msgstr "귀하의 패스키" #~ msgid "Format error %{msg}" #~ msgstr "형식 오류 %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "저장 실패, 구성에서 구문 오류가 감지되었습니다." - -#, fuzzy -#~ msgid "Access Token" -#~ msgstr "접근 로그" - #, fuzzy #~ msgid "Bot Token" #~ msgstr "API 토큰" @@ -5834,10 +7644,6 @@ msgstr "귀하의 패스키" #~ msgid "Created At" #~ msgstr "생성 시간" -#, fuzzy -#~ msgid "Restart Required" -#~ msgstr "재시작 중" - #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "%{conf_name}을(를) %{node_name}(으)로 배포 성공" @@ -5906,10 +7712,6 @@ msgstr "귀하의 패스키" #~ "the remote Nginx UI to the latest version" #~ msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함" -#, fuzzy -#~ msgid "Server Name" -#~ msgstr "Server Info" - #, fuzzy #~ msgid "Enable 2FA" #~ msgstr "활성화" diff --git a/app/src/language/messages.pot b/app/src/language/messages.pot index f78e04462..f17409409 100644 --- a/app/src/language/messages.pot +++ b/app/src/language/messages.pot @@ -2,90 +2,128 @@ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "* Index files are stored in the \"log-index\" directory within your Nginx UI config path by default." +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. Actual performance may vary based on your hardware configuration." +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "" @@ -94,11 +132,15 @@ msgstr "" msgid "2FA Settings" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "" @@ -108,31 +150,32 @@ msgstr "" #: src/components/NgxConfigEditor/LogEntry.vue:90 #: src/routes/modules/nginx_log.ts:17 +#: src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "" #: src/routes/modules/certificates.ts:20 -#: src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 +#: src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 +#: src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 -#: src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 +#: src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "" @@ -147,17 +190,17 @@ msgid "Actual worker to configured ratio" msgstr "" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 #: src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 -#: src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 +#: src/views/stream/StreamList.vue:81 msgid "Add" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "" @@ -171,10 +214,14 @@ msgstr "" msgid "Add Directive Below" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -189,15 +236,15 @@ msgstr "" msgid "Add Site" msgstr "" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "" @@ -205,28 +252,68 @@ msgstr "" msgid "Additional" msgstr "" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" +#: src/views/system/Licenses.vue:152 +msgid "All Components" msgstr "" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "All selected subdomains must belong to the same DNS Provider, otherwise the certificate application will fail." msgstr "" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "Alternatively, if you cannot download the database, you can manually place GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "" @@ -247,36 +334,40 @@ msgstr "" msgid "API Type" msgstr "" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "" @@ -285,16 +376,16 @@ msgid "Are you sure you want to delete permanently?" msgstr "" #: src/language/curd.ts:25 -#: src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "" @@ -306,7 +397,7 @@ msgstr "" msgid "Are you sure you want to remove this location?" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "" @@ -314,23 +405,27 @@ msgstr "" msgid "Are you sure you want to restore?" msgstr "" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "" @@ -338,12 +433,12 @@ msgstr "" msgid "Authenticate with a passkey" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." msgstr "" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "" @@ -377,28 +472,28 @@ msgstr "" msgid "Auto Backup Storage Failed" msgstr "" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 +#: src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "" @@ -407,17 +502,33 @@ msgstr "" msgid "AutoCert is running..." msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 #: src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "" @@ -429,6 +540,19 @@ msgstr "" msgid "Back to List" msgstr "" +#: src/views/system/Licenses.vue:113 +#: src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "Background indexing in progress. Data will be updated automatically when ready." +msgstr "" + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "" + #: src/routes/modules/backup.ts:11 #: src/routes/modules/backup.ts:19 msgid "Backup" @@ -438,7 +562,7 @@ msgstr "" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "" @@ -450,22 +574,18 @@ msgstr "" msgid "Backup Path" msgstr "" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "" @@ -486,15 +606,15 @@ msgstr "" msgid "Backup Type" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "" @@ -506,18 +626,18 @@ msgstr "" msgid "Base information" msgstr "" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "" @@ -529,7 +649,7 @@ msgstr "" msgid "Batch Modify" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "" @@ -541,11 +661,22 @@ msgstr "" msgid "Block is nil" msgstr "" -#: src/views/system/About.vue:75 -msgid "Build with" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" msgstr "" -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "By enabling advanced indexing, you acknowledge that your system meets the requirements and understand the performance implications. This will start indexing existing log files immediately." +msgstr "" + +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "" @@ -553,11 +684,11 @@ msgstr "" msgid "Cache" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "" @@ -566,15 +697,15 @@ msgstr "" msgid "Cache manager processes" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "" @@ -583,7 +714,7 @@ msgstr "" msgid "Cache Processes" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "" @@ -596,25 +727,34 @@ msgstr "" msgid "Calculated based on worker_processes * worker_connections. Actual performance depends on hardware, configuration, and workload" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 #: src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "" @@ -638,7 +778,7 @@ msgstr "" msgid "Cannot remove initial user" msgstr "" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "" @@ -646,6 +786,11 @@ msgstr "" msgid "Cert path is not under the nginx conf dir" msgstr "" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "" @@ -660,6 +805,10 @@ msgstr "" msgid "Certificate %{name} will expire in 1 day" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "" @@ -678,6 +827,14 @@ msgstr "" msgid "Certificate Expiring Soon" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "" @@ -690,8 +847,8 @@ msgstr "" msgid "Certificate path is empty" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "" @@ -707,14 +864,14 @@ msgstr "" msgid "Certificate revoked successfully" msgstr "" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "" msgstr[1] "" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "" @@ -723,7 +880,7 @@ msgstr "" msgid "Certificates" msgstr "" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "" @@ -731,7 +888,7 @@ msgstr "" msgid "Challenge error: {0}" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "" @@ -754,26 +911,34 @@ msgstr[1] "" msgid "Changed Path" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 +#: src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "" + #: src/language/generate.ts:6 msgid "Check if /var/run/docker.sock exists. If you are using Nginx UI Official Docker Image, please make sure the docker socket is mounted like this: `-v /var/run/docker.sock:/var/run/docker.sock`. Nginx UI official image uses /var/run/docker.sock to communicate with the host Docker Engine via Docker Client API. This feature is used to control Nginx in another container and perform container replacement rather than binary replacement during OTA upgrades of Nginx UI to ensure container dependencies are also upgraded. If you don't need this feature, please add the environment variable NGINX_UI_IGNORE_DOCKER_SOCKET=true to the container." msgstr "" @@ -783,49 +948,70 @@ msgid "Check if HTTPS is enabled. Using HTTP outside localhost is insecure and p msgstr "" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "" + +#: src/language/generate.ts:7 +msgid "Check if the GeoLite2 database is available when log indexing is enabled. The GeoLite2 database is required for geographic IP analysis in log indexing. You can download it from the Preference page or manually place GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" + +#: src/language/generate.ts:10 msgid "Check if the nginx access log path exists. By default, this path is obtained from 'nginx -V'. If it cannot be obtained or the obtained path does not point to a valid, existing file, an error will be reported. In this case, you need to modify the configuration file to specify the access log path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" msgstr "" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "Check if the nginx error log path exists. By default, this path is obtained from 'nginx -V'. If it cannot be obtained or the obtained path does not point to a valid, existing file, an error will be reported. In this case, you need to modify the configuration file to specify the error log path. Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" msgstr "" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "Check if the nginx PID path exists. By default, this path is obtained from 'nginx -V'. If it cannot be obtained, an error will be reported. In this case, you need to modify the configuration file to specify the Nginx PID path.Refer to the docs for more details: https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" msgstr "" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "Check if the sites-available and sites-enabled directories are under the nginx configuration directory" msgstr "" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "Check if the streams-available and streams-enabled directories are under the nginx configuration directory" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "" @@ -834,13 +1020,13 @@ msgstr "" msgid "Cleaning environment variables" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "" @@ -860,7 +1046,7 @@ msgstr "" msgid "Click or drag folders to this area to upload" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "" @@ -868,10 +1054,18 @@ msgstr "" msgid "Client Body Buffer Size" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "" @@ -901,6 +1095,14 @@ msgstr "" msgid "Code Completion Model" msgstr "" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "" @@ -909,7 +1111,7 @@ msgstr "" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -932,11 +1134,34 @@ msgstr "" msgid "Compare with Current" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "" @@ -949,22 +1174,30 @@ msgstr "" msgid "Config entry file not exist" msgstr "" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "" @@ -985,11 +1218,20 @@ msgstr "" msgid "Configure SSL" msgstr "" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "" @@ -997,8 +1239,8 @@ msgstr "" msgid "Connection error, trying to reconnect..." msgstr "" -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." msgstr "" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 @@ -1009,14 +1251,14 @@ msgstr "" msgid "Container status unknown" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "" @@ -1029,14 +1271,38 @@ msgstr "" msgid "Copy" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "" @@ -1075,10 +1341,10 @@ msgid "Create system backups including Nginx configuration and Nginx UI settings msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "" @@ -1103,11 +1369,15 @@ msgstr "" msgid "Cron Expression" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "" @@ -1127,12 +1397,12 @@ msgstr "" msgid "Current usage" msgstr "" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "" @@ -1145,14 +1415,18 @@ msgstr "" msgid "Custom Directory" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "Customize the name of local node to be displayed in the environment indicator." msgstr "" @@ -1161,6 +1435,10 @@ msgstr "" msgid "Daily" msgstr "" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "" @@ -1169,9 +1447,18 @@ msgstr "" #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 #: src/views/config/ConfigList.vue:69 +#: src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "" @@ -1184,35 +1471,49 @@ msgstr "" msgid "Days" msgstr "" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 #: src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" +msgid "Delete %{path} on %{node_name} failed" msgstr "" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" +msgid "Delete %{path} on %{node_name} successfully" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "" @@ -1232,45 +1533,45 @@ msgstr "" msgid "Delete Remote Config Success" msgstr "" -#: src/components/Notification/notifications.ts:93 +#: src/components/Notification/notifications.ts:97 #: src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:97 +#: src/components/Notification/notifications.ts:101 #: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "" @@ -1287,8 +1588,16 @@ msgstr "" msgid "Deploy" msgstr "" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "" @@ -1305,18 +1614,44 @@ msgstr "" msgid "Details" msgstr "" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "" @@ -1337,99 +1672,103 @@ msgstr "" msgid "Directives" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 +#: src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 -#: src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 +#: src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "" @@ -1438,11 +1777,15 @@ msgstr "" msgid "DNS Provider" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "" @@ -1450,11 +1793,11 @@ msgstr "" msgid "Do you want to %{action} this site?" msgstr "" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "" @@ -1467,7 +1810,7 @@ msgstr "" msgid "Do you want to remove this server?" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "" @@ -1475,7 +1818,7 @@ msgstr "" msgid "Docker client not initialized" msgstr "" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "" @@ -1490,14 +1833,35 @@ msgid_plural "Documents" msgstr[0] "" msgstr[1] "" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "" @@ -1506,19 +1870,29 @@ msgstr "" msgid "Downloading latest release" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "" + +#: src/views/node/BatchUpgrader.vue:192 +#: src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "" @@ -1527,21 +1901,33 @@ msgstr "" msgid "Duplicate to local successfully" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "" + #: src/language/curd.ts:8 msgid "Edit" msgstr "" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "" @@ -1558,7 +1944,7 @@ msgstr "" msgid "Edit Stream" msgstr "" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "" @@ -1567,16 +1953,28 @@ msgstr "" msgid "Email (*)" msgstr "" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "" @@ -1600,57 +1998,61 @@ msgstr "" msgid "Enable HTTPS" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "" @@ -1662,30 +2064,31 @@ msgstr "" msgid "Enable TLS" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 +#: src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 -#: src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 +#: src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "" @@ -1697,6 +2100,10 @@ msgstr "" msgid "Enables HTTP/3 support based on QUIC protocol for best performance" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "Enabling advanced log indexing will consume significant computational resources including CPU and memory. Please ensure your system meets the minimum requirements before proceeding." +msgstr "" + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "" @@ -1705,11 +2112,19 @@ msgstr "" msgid "End" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "" @@ -1721,40 +2136,56 @@ msgstr "" msgid "Environment variables cleaned" msgstr "" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "" - -#: src/constants/index.ts:22 -#: src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 +#: src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "" #: src/components/NgxConfigEditor/LogEntry.vue:98 #: src/routes/modules/nginx_log.ts:24 +#: src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "Error logs do not support structured analysis as they contain free-form text messages." +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "" @@ -1770,6 +2201,22 @@ msgstr "" msgid "Execute on every month on day %{day} at %{time}" msgstr "" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1783,12 +2230,28 @@ msgstr "" msgid "Export Excel" msgstr "" +#: src/views/certificate/ACMEUser.vue:105 +msgid "External Account Binding HMAC Key (optional). Should be in Base64 URL encoding format." +msgstr "" + +#: src/views/certificate/ACMEUser.vue:92 +msgid "External Account Binding Key ID (optional). Required for some ACME providers like ZeroSSL." +msgstr "" + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "" @@ -1817,15 +2280,15 @@ msgstr "" msgid "Failed to build nginx config: {0}" msgstr "" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "" @@ -1838,38 +2301,36 @@ msgid "Failed to copy config file: {0}" msgstr "" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "" -#: src/constants/errors/self_check.ts:10 -msgid "Failed to create backup" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" msgstr "" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" +#: src/constants/errors/self_check.ts:10 +msgid "Failed to create backup" msgstr "" #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 +#: src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "" @@ -1877,19 +2338,19 @@ msgstr "" msgid "Failed to create hash info file: {0}" msgstr "" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "" @@ -1905,48 +2366,64 @@ msgstr "" msgid "Failed to create temporary subdirectory" msgstr "" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "" @@ -1954,20 +2431,32 @@ msgstr "" msgid "Failed to disable maintenance mode %{msg}" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "" @@ -1979,10 +2468,6 @@ msgstr "" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "" @@ -1991,7 +2476,7 @@ msgstr "" msgid "Failed to execute template: {0}" msgstr "" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "" @@ -2011,14 +2496,30 @@ msgstr "" msgid "Failed to get container id: {0}" msgstr "" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "" @@ -2035,15 +2536,19 @@ msgstr "" msgid "Failed to load history records" msgstr "" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "" @@ -2063,15 +2568,23 @@ msgstr "" msgid "Failed to pull image: {0}" msgstr "" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "" @@ -2087,56 +2600,96 @@ msgstr "" msgid "Failed to read response body: {0}" msgstr "" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "" -#: src/constants/errors/backup.ts:39 -msgid "Failed to restore Nginx configs: {0}" +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" msgstr "" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/constants/errors/backup.ts:37 +msgid "Failed to restore Nginx configs: {0}" +msgstr "" + +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" msgstr "" #: src/views/config/components/Delete.vue:116 @@ -2151,6 +2704,10 @@ msgstr "" msgid "File exists" msgstr "" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "" @@ -2159,20 +2716,36 @@ msgstr "" msgid "File or directory not found: {0}" msgstr "" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "" + #: src/language/constants.ts:19 #: src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "" @@ -2184,7 +2757,11 @@ msgstr "" msgid "Folder" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "Follow the instructions in the dialog to complete the passkey registration process." msgstr "" @@ -2197,6 +2774,22 @@ msgstr "" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "For IP-based certificate configurations, only HTTP-01 challenge method is supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "For IP-based certificates, please specify the server IP address that will be included in the certificate." +msgstr "" + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "" @@ -2217,6 +2810,23 @@ msgstr "" msgid "Friday" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "" + +#: src/views/system/Licenses.vue:119 +#: src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "" @@ -2225,16 +2835,16 @@ msgstr "" msgid "Generate" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "" @@ -2242,6 +2852,35 @@ msgstr "" msgid "Generating private key for registering account" msgstr "" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "" + +#: src/constants/errors/self_check.ts:24 +msgid "GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database for geographic IP analysis" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "" @@ -2254,8 +2893,8 @@ msgstr "" msgid "Get dns credential error: {0}" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 +#: src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "" @@ -2267,10 +2906,31 @@ msgstr "" msgid "Github Proxy" msgstr "" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "gRPC health check requires server to implement gRPC Health Check service (grpc.health.v1.Health)." +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "gRPCS uses TLS encryption. Server must implement gRPC Health Check service. For testing, SSL validation is disabled by default." +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "" @@ -2283,25 +2943,51 @@ msgstr "" msgid "GZIP Min Length" msgstr "" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" msgstr "" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "" @@ -2310,10 +2996,11 @@ msgid "Host" msgstr "" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "" @@ -2321,7 +3008,11 @@ msgstr "" msgid "HTTP Challenge Port" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "" @@ -2329,27 +3020,31 @@ msgstr "" msgid "HTTPS Protocol" msgstr "" -#: src/views/preference/tabs/NodeSettings.vue:34 -msgid "ICP Number" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." msgstr "" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." +#: src/views/preference/tabs/NodeSettings.vue:34 +msgid "ICP Number" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "If you want to automatically revoke the old certificate, please enable this option." msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "If you want to change the storage location, you can set the `IndexPath` of `nginx_log` section in the Nginx UI config." +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "If your domain has CNAME records and you cannot obtain certificates, you need to enable this option." msgstr "" @@ -2357,12 +3052,12 @@ msgstr "" msgid "Import" msgstr "" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "" @@ -2370,7 +3065,46 @@ msgstr "" msgid "Includes master process, worker processes, cache processes, and other Nginx processes" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "" + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "" @@ -2378,11 +3112,15 @@ msgstr "" msgid "Indicator" msgstr "" -#: src/constants/index.ts:24 +#: src/constants/index.ts:25 #: src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "" @@ -2391,7 +3129,7 @@ msgstr "" msgid "Initialing core upgrader" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "" @@ -2406,7 +3144,7 @@ msgstr "" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "" @@ -2430,27 +3168,36 @@ msgstr "" msgid "Interval" msgstr "" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "" @@ -2463,6 +3210,10 @@ msgstr "" msgid "Invalid folder name" msgstr "" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "" @@ -2471,7 +3222,7 @@ msgstr "" msgid "Invalid otp code" msgstr "" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "" @@ -2479,31 +3230,58 @@ msgstr "" msgid "Invalid passcode or recovery code" msgstr "" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "" -#: src/constants/errors/user.ts:5 -msgid "Invalid recovery code" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "" + +#: src/constants/errors/user.ts:5 +msgid "Invalid recovery code" +msgstr "" + +#: src/constants/errors/middleware.ts:2 +msgid "Invalid request format" +msgstr "" + +#: src/constants/errors/backup.ts:39 +msgid "Invalid security token format" +msgstr "" + +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" msgstr "" -#: src/constants/errors/middleware.ts:2 -msgid "Invalid request format" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 +msgid "IP" msgstr "" -#: src/constants/errors/backup.ts:42 -msgid "Invalid security token format" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:14 -msgid "IP" +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" msgstr "" #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "" @@ -2523,7 +3301,7 @@ msgstr "" msgid "Jwt Secret" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "Keep your recovery codes as safe as your password. We recommend saving them with a password manager." msgstr "" @@ -2531,12 +3309,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "" @@ -2548,6 +3326,44 @@ msgstr "" msgid "Lark Custom" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "" @@ -2556,15 +3372,35 @@ msgstr "" msgid "Last Backup Time" msgstr "" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "" @@ -2580,12 +3416,19 @@ msgstr "" msgid "Leave blank if do not want to modify" msgstr "" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 +#: src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "" -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "" @@ -2593,16 +3436,25 @@ msgstr "" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 +#: src/views/system/Licenses.vue:21 msgid "License" msgstr "" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "" @@ -2618,32 +3470,32 @@ msgstr "" msgid "Load Average:" msgstr "" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "" @@ -2651,8 +3503,16 @@ msgstr "" msgid "Loading data..." msgstr "" -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "" + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 +#: src/constants/index.ts:42 +#: src/constants/index.ts:48 #: src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 @@ -2672,33 +3532,69 @@ msgstr "" msgid "Locations" msgstr "" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "Log file %{log_path} is not a regular file. If you are using nginx-ui in docker container, please refer to https://nginxui.com/zh_CN/guide/config-nginx-log.html for more information." msgstr "" +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "" + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "" + #: src/routes/modules/nginx_log.ts:39 -#: src/views/nginx_log/NginxLogList.vue:87 +#: src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "" +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "" + #: src/routes/modules/auth.ts:14 -#: src/views/other/Login.vue:277 +#: src/views/other/Login.vue:317 msgid "Login" msgstr "" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "" @@ -2706,9 +3602,20 @@ msgstr "" msgid "Logrotate, by default, is enabled in most mainstream Linux distributions for users who install Nginx UI on the host machine, so you don't need to modify the parameters on this page. For users who install Nginx UI using Docker containers, you can manually enable this option. The crontab task scheduler of Nginx UI will execute the logrotate command at the interval you set in minutes." msgstr "" +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "" @@ -2724,7 +3631,7 @@ msgstr "" msgid "Make certificate dir error: {0}" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort before obtaining the certificate." msgstr "" @@ -2736,12 +3643,12 @@ msgid "Manage Configs" msgstr "" #: src/routes/modules/sites.ts:10 -#: src/views/site/site_list/SiteList.vue:67 +#: src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "" #: src/routes/modules/streams.ts:10 -#: src/views/stream/StreamList.vue:81 +#: src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "" @@ -2754,15 +3661,15 @@ msgstr "" msgid "Managed Certificate" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "" @@ -2788,7 +3695,7 @@ msgstr "" msgid "Master Process" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "" @@ -2796,11 +3703,15 @@ msgstr "" msgid "Max Concurrent Connections" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "" @@ -2817,7 +3728,7 @@ msgstr "" msgid "Maximum number of connections per worker process" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "" @@ -2827,6 +3738,7 @@ msgstr "" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "" @@ -2834,22 +3746,39 @@ msgstr "" msgid "Memory and Storage" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "" @@ -2858,21 +3787,37 @@ msgstr "" msgid "Minutes" msgstr "" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:212 +#: src/components/LLM/ChatMessage.vue:241 #: src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "" @@ -2880,7 +3825,7 @@ msgstr "" msgid "Modify Config" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "" @@ -2888,6 +3833,10 @@ msgstr "" msgid "Modules" msgstr "" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "" @@ -2900,40 +3849,72 @@ msgstr "" msgid "Monthly on day %{day} at %{time}" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 #: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 +#: src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 +#: src/views/system/Licenses.vue:13 msgid "Name" msgstr "" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 -#: src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 +#: src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 +#: src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "" + +#: src/routes/modules/namespaces.ts:10 +#: src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "" @@ -2946,6 +3927,10 @@ msgstr "" msgid "Network Statistics" msgstr "" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "" @@ -2974,19 +3959,19 @@ msgstr "" msgid "New transport error: {0}" msgstr "" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "" #: src/routes/modules/dashboard.ts:27 -#: src/views/preference/Preference.vue:94 +#: src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "" @@ -2998,7 +3983,7 @@ msgstr "" msgid "Nginx Access Log Path" msgstr "" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "" @@ -3027,15 +4012,15 @@ msgstr "" msgid "Nginx conf not include stream-enabled" msgstr "" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "" @@ -3043,8 +4028,8 @@ msgstr "" msgid "Nginx configuration has been restored" msgstr "" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "" @@ -3073,7 +4058,7 @@ msgstr "" msgid "Nginx Error Log Path" msgstr "" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "" @@ -3082,7 +4067,7 @@ msgid "Nginx error: {0}" msgstr "" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3098,7 +4083,7 @@ msgid "Nginx is running" msgstr "" #: src/routes/modules/nginx_log.ts:9 -#: src/views/nginx_log/NginxLog.vue:144 +#: src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "" @@ -3106,6 +4091,10 @@ msgstr "" msgid "Nginx Log Directory Whitelist" msgstr "" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "" + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3115,7 +4104,7 @@ msgstr "" msgid "Nginx PID Path" msgstr "" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "" @@ -3129,7 +4118,7 @@ msgstr "" msgid "Nginx reload failed: {0}" msgstr "" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "" @@ -3141,7 +4130,7 @@ msgstr "" msgid "Nginx Restart Command" msgstr "" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "" @@ -3149,7 +4138,7 @@ msgstr "" msgid "Nginx restarted successfully" msgstr "" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "" @@ -3179,42 +4168,75 @@ msgstr "" msgid "Nginx UI configuration has been restored and will restart automatically in a few seconds." msgstr "" -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 +#: src/components/Notification/Notification.vue:109 #: src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 +#: src/views/stream/StreamList.vue:99 msgid "No" msgstr "" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "" + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "" @@ -3223,24 +4245,28 @@ msgstr "" msgid "No servers configured" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 -msgid "No upstreams configured" +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" msgstr "" -#: src/views/preference/Preference.vue:64 -msgid "Node" +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "No specific IP address found in server_name configuration. Please specify the server IP address below for the certificate." +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 +msgid "No upstreams configured" msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 -#: src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" +#: src/views/preference/Preference.vue:65 +msgid "Node" msgstr "" -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" msgstr "" #: src/views/preference/tabs/NodeSettings.vue:15 @@ -3251,7 +4277,13 @@ msgstr "" msgid "Node Secret" msgstr "" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "" + +#: src/routes/modules/nodes.ts:11 +#: src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "" @@ -3259,34 +4291,55 @@ msgstr "" msgid "Not After" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "Note, if the configuration file include other configurations or certificates, please synchronize them to the remote nodes in advance." msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "Note: If the server does not support gRPC Reflection, health checks may fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "" @@ -3295,15 +4348,19 @@ msgstr "" msgid "Notifier not found" msgstr "" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "" @@ -3318,7 +4375,7 @@ msgstr "" msgid "Obtain cert error: {0}" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "" @@ -3326,16 +4383,16 @@ msgstr "" msgid "Obtaining certificate" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "OCSP Must Staple may cause errors for some users on first access using Firefox." msgstr "" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "" @@ -3343,49 +4400,61 @@ msgstr "" msgid "Official Document" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 +#: src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 #: src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 +#: src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "" @@ -3394,24 +4463,47 @@ msgstr "" msgid "Open" msgstr "" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "" +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "" + #: src/components/TwoFA/Authorization.vue:100 -#: src/views/other/Login.vue:286 +#: src/views/other/Login.vue:326 msgid "Or" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "" @@ -3458,15 +4550,19 @@ msgstr "" msgid "Params Optimization" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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:238 +#: src/views/other/Login.vue:278 #: src/views/user/userColumns.tsx:16 msgid "Password" msgstr "" @@ -3496,11 +4592,13 @@ msgstr "" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "" @@ -3513,12 +4611,28 @@ msgstr "" msgid "Payload resource is nil" msgstr "" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "" @@ -3558,15 +4672,27 @@ msgstr "" msgid "Please enable the stub_status module to get request statistics, connection count, etc." msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "Please enter a name for the passkey you wish to create and click the OK button below." msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "" @@ -3583,6 +4709,10 @@ msgstr "" msgid "Please enter the security token received during backup" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "" @@ -3591,15 +4721,15 @@ msgstr "" msgid "Please fill in required S3 configuration fields" msgstr "" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "Please fill in the API authentication credentials provided by your DNS provider." msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "Please first add credentials in Certification > DNS Credentials, and then select one of the credentialsbelow to request the API of the DNS provider." msgstr "" -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "Please generate new recovery codes in the preferences immediately to prevent lockout." msgstr "" @@ -3626,21 +4756,21 @@ msgid "Please input your E-mail!" msgstr "" #: src/views/install/components/InstallForm.vue:41 -#: src/views/other/Login.vue:47 +#: src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "" #: src/views/install/components/InstallForm.vue:31 -#: src/views/other/Login.vue:41 +#: src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "" -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "" @@ -3656,25 +4786,33 @@ msgstr "" msgid "Please select a backup file" msgstr "" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 +#: src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 +#: src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "" @@ -3687,25 +4825,29 @@ msgstr "" msgid "Port" msgstr "" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 -#: src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 +#: src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 +#: src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "" #: src/routes/modules/preference.ts:10 -#: src/views/preference/Preference.vue:41 +#: src/views/preference/Preference.vue:42 msgid "Preference" msgstr "" @@ -3713,6 +4855,19 @@ msgstr "" msgid "Preparing lego configurations" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "" @@ -3729,6 +4884,10 @@ msgstr "" msgid "Processing {count}/{total}" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "" @@ -3745,11 +4904,15 @@ msgstr "" msgid "Protected Directory" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "Protocol configuration only takes effect when directly connecting. If using reverse proxy, please configure the protocol separately in the reverse proxy." msgstr "" -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "" @@ -3757,23 +4920,58 @@ msgstr "" msgid "Provider not found: {0}" msgstr "" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "" -#: src/views/site/site_list/columns.tsx:76 -#: src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 +#: src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "" + #: src/constants/errors/site.ts:8 #: src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" @@ -3789,24 +4987,48 @@ msgstr "" msgid "Reads" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "Recovery codes are used to access your account when you lose access to your 2FA device. Each code can only be used once." msgstr "" @@ -3814,31 +5036,45 @@ msgstr "" msgid "Recursive Nameservers" msgstr "" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "Register a user or use this account to issue a certificate through an HTTP proxy." msgstr "" -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "" @@ -3846,28 +5082,32 @@ msgstr "" msgid "Registering user" msgstr "" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 +#: src/constants/index.ts:38 +#: src/views/node/Node.vue:208 +#: src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "" @@ -3891,7 +5131,7 @@ msgstr "" msgid "Reload Remote Nginx Success" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "" @@ -3903,22 +5143,29 @@ msgstr "" msgid "Reloading nginx" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 +#: src/constants/index.ts:49 +msgid "Remote" +msgstr "" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -3927,11 +5174,11 @@ msgid "Rename" msgstr "" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" msgstr "" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" msgstr "" #: src/components/Notification/notifications.ts:77 @@ -3944,37 +5191,37 @@ msgstr "" msgid "Rename Remote Config Success" msgstr "" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "" @@ -3982,7 +5229,7 @@ msgstr "" msgid "Rename successfully" msgstr "" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -3992,8 +5239,8 @@ msgstr "" msgid "Renew cert error: {0}" msgstr "" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "" @@ -4005,11 +5252,23 @@ msgstr "" msgid "Renew Certificate Success" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "" @@ -4028,17 +5287,27 @@ msgid "Requests Per Connection" msgstr "" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "Resident Set Size: Actual memory resident in physical memory, including all shared library memory, which will be repeated calculated for multiple processes" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4048,9 +5317,9 @@ msgstr "" msgid "Restart" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 +#: src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "" @@ -4070,7 +5339,7 @@ msgstr "" msgid "Restart Remote Nginx Success" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "" @@ -4109,8 +5378,8 @@ msgstr "" msgid "Restored successfully" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "" @@ -4118,27 +5387,27 @@ msgstr "" msgid "Revoke cert error: {0}" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "Revoking a certificate will affect any services currently using it. This action cannot be undone." msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "" @@ -4174,10 +5443,6 @@ msgstr "" msgid "S3 Bucket" msgstr "" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "" @@ -4186,7 +5451,7 @@ msgstr "" msgid "S3 bucket name" msgstr "" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "" @@ -4194,27 +5459,15 @@ msgstr "" msgid "S3 connection test failed" msgstr "" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "" @@ -4250,7 +5503,7 @@ msgstr "" msgid "S3 secret access key is required" msgstr "" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "" @@ -4258,18 +5511,19 @@ msgstr "" msgid "Saturday" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 #: src/language/curd.ts:18 -#: src/views/certificate/CertificateEditor.vue:264 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "" @@ -4277,41 +5531,41 @@ msgstr "" msgid "Save Directive" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" msgstr "" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "" @@ -4320,17 +5574,18 @@ msgid "Save successful" msgstr "" #: src/language/curd.ts:35 -#: src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 #: src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "" @@ -4354,12 +5609,12 @@ msgstr "" msgid "Scan Results" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:113 @@ -4377,16 +5632,37 @@ msgstr "" #: src/language/constants.ts:62 #: src/language/curd.ts:12 #: src/views/config/configColumns.tsx:5 -#: src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 +#: src/views/stream/columns.tsx:13 msgid "Search" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "" + #: src/language/constants.ts:61 msgid "Search module name" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "" @@ -4403,12 +5679,16 @@ msgstr "" msgid "Security Token Information" msgstr "" +#: src/views/certificate/ACMEUser.vue:59 +msgid "Select a predefined CA directory or enter a custom one. Leave blank to use the default CA directory." +msgstr "" + #: src/language/curd.ts:31 msgid "Select all" msgstr "" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" msgstr "" #: src/language/curd.ts:59 @@ -4419,7 +5699,7 @@ msgstr "" msgid "Selector" msgstr "" -#: src/components/SelfCheck/SelfCheck.vue:16 +#: src/components/SelfCheck/SelfCheck.vue:33 #: src/routes/modules/system.ts:19 msgid "Self Check" msgstr "" @@ -4434,12 +5714,16 @@ msgstr "" msgid "Send" msgstr "" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "" + #: src/routes/modules/dashboard.ts:19 -#: src/views/preference/Preference.vue:46 +#: src/views/preference/Preference.vue:47 msgid "Server" msgstr "" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "" @@ -4447,6 +5731,10 @@ msgstr "" msgid "Server Info" msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "" @@ -4455,7 +5743,7 @@ msgstr "" msgid "Server names hash table size" msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "" @@ -4463,6 +5751,10 @@ msgstr "" msgid "ServerIdx out of range" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "" @@ -4495,6 +5787,10 @@ msgstr "" msgid "Setting HTTP01 challenge provider" msgstr "" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "" + #: src/constants/errors/nginx_log.ts:8 msgid "Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui.com/guide/config-nginx.html for more information" msgstr "" @@ -4507,7 +5803,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "" @@ -4515,10 +5811,18 @@ msgstr "" msgid "Show" msgstr "" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "" @@ -4539,11 +5843,23 @@ msgstr "" msgid "Site Logs" msgstr "" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "" @@ -4551,6 +5867,10 @@ msgstr "" msgid "Sites List" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "Sites will appear here once you configure nginx server blocks with valid server_name directives." +msgstr "" + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "" @@ -4560,6 +5880,8 @@ msgid "Sites-enabled directory not exist" msgstr "" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "" @@ -4567,19 +5889,36 @@ msgstr "" msgid "Skip Installation" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "" @@ -4591,15 +5930,20 @@ msgstr "" msgid "SSL certificate file not found" msgstr "" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "" @@ -4624,14 +5968,14 @@ msgstr "" msgid "SSL key path is required when HTTPS is enabled" msgstr "" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 -#: src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 +#: src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 +#: src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "" @@ -4639,34 +5983,50 @@ msgstr "" msgid "Start" msgstr "" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "" + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 -#: src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 +#: src/views/stream/columns.tsx:87 msgid "Status" msgstr "" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "" @@ -4688,10 +6048,6 @@ msgstr "" msgid "Storage path is required" msgstr "" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4705,7 +6061,7 @@ msgstr "" msgid "Stream not found" msgstr "" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "" @@ -4717,6 +6073,10 @@ msgstr "" msgid "Streams-enabled directory not exist" msgstr "" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "" @@ -4725,7 +6085,7 @@ msgstr "" msgid "Stub_status is not enabled" msgstr "" -#: src/constants/index.ts:25 +#: src/constants/index.ts:26 #: src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 @@ -4737,10 +6097,6 @@ msgstr "" msgid "Sunday" msgstr "" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "Support communication with the backend through the Server-Sent Events protocol. If your Nginx UI is being used via an Nginx reverse proxy, please refer to this link to write the corresponding configuration file: https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "Support communication with the backend through the WebSocket protocol. If your Nginx UI is being used via an Nginx reverse proxy, please refer to this link to write the corresponding configuration file: https://nginxui.com/guide/nginx-proxy-example.html" msgstr "" @@ -4783,11 +6139,11 @@ msgid "Sync Certificate" msgstr "" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" msgstr "" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" msgstr "" #: src/components/Notification/notifications.ts:61 @@ -4801,11 +6157,11 @@ msgid "Sync Certificate Success" msgstr "" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" +msgid "Sync config %{config_name} to %{node_name} failed" msgstr "" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" +msgid "Sync config %{config_name} to %{node_name} successfully" msgstr "" #: src/components/Notification/notifications.ts:69 @@ -4818,24 +6174,30 @@ msgstr "" msgid "Sync Config Success" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 +#: src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "" @@ -4852,10 +6214,14 @@ msgstr "" msgid "System Check" msgstr "" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "" @@ -4877,31 +6243,65 @@ msgid "Telegram" msgstr "" #: src/routes/modules/terminal.ts:10 -#: src/views/preference/Preference.vue:76 +#: src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "The certificate for the domain will be checked 30 minutes, and will be renewed if it has been more than 1 week or the period you set in settings since it was last issued." msgstr "" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "The GeoLite2 database is required for offline geographic IP analysis. Please download it to enable this feature." +msgstr "" + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "The GeoLite2 database provides geographic information for IP addresses. This is used for offline geographic analysis in log analytics." +msgstr "" + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "The ICP Number should only contain letters, unicode, numbers, hyphens, dashes, colons, and dots." msgstr "" -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "" @@ -4926,11 +6326,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "" @@ -4938,11 +6338,11 @@ msgstr "" msgid "The Public Security Number should only contain letters, unicode, numbers, hyphens, dashes, colons, and dots." msgstr "" -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "The remote Nginx UI version is not compatible with the local Nginx UI version. To avoid potential errors, please upgrade the remote Nginx UI to match the local version." msgstr "" -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "The server_name in the current configuration must be the domain name you need to get the certificate, supportmultiple domains." msgstr "" @@ -4968,15 +6368,19 @@ msgstr "" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "These codes are the last resort for accessing your account in case you lose your password and second factors. If you cannot find these codes, you will lose access to your account." msgstr "" -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "" -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "" @@ -4984,9 +6388,9 @@ msgstr "" msgid "This directory is protected and cannot be deleted for system safety." msgstr "" -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "" @@ -5013,14 +6417,34 @@ msgstr "" msgid "This field should only contain letters, unicode characters, numbers, and -_./:" msgstr "" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "" + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "This module provides Nginx request statistics, connection count, etc. data. After enabling it, you can view performance statistics" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "This operation will only remove the certificate from the database. The certificate files on the file system will not be deleted." msgstr "" +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "This site is configured as a default server (default_server) for HTTPS (port 443). IP certificates require Certificate Authority (CA) support and may not be available with all ACME providers." +msgstr "" + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "This site uses wildcard server name (_) which typically indicates an IP-based certificate. IP certificates require Certificate Authority (CA) support and may not be available with all ACME providers." +msgstr "" + #: src/views/backup/components/BackupCreator.vue:141 msgid "This token will only be shown once and cannot be retrieved later. Please make sure to save it in a secure location." msgstr "" @@ -5034,6 +6458,14 @@ msgstr "" msgid "This will permanently delete the %{type}." msgstr "" +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "This will rebuild the entire log index. All existing index data will be deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "This will restore all Nginx configuration files. Nginx will restart after the restoration is complete." @@ -5044,11 +6476,11 @@ msgstr "" msgid "This will restore configuration files and database. Nginx UI will restart after the restoration is complete." msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "" @@ -5056,8 +6488,21 @@ msgstr "" msgid "Thursday" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "" @@ -5070,15 +6515,20 @@ msgstr "" msgid "Title" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 +#: src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "To enable it, you need to install the Google or Microsoft Authenticator app on your mobile phone." msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 "" @@ -5103,15 +6553,41 @@ msgstr "" msgid "Token is not valid" msgstr "" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "" + #: src/language/curd.ts:5 msgid "Total" msgstr "" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5125,6 +6601,10 @@ msgstr "" msgid "Total Nginx Processes" msgstr "" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "" @@ -5142,33 +6622,53 @@ msgstr "" msgid "Total Send" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "TOTP is a two-factor authentication method that uses a time-based one-time password algorithm." msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "" + #: src/language/curd.ts:20 msgid "Trash" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "" @@ -5176,15 +6676,47 @@ msgstr "" msgid "Type %{delete} to confirm" msgstr "" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "" @@ -5193,34 +6725,34 @@ msgstr "" msgid "Update Profile" msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 -#: src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 +#: src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 +#: src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "" #: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 -#: src/views/system/Upgrade.vue:159 +#: src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 +#: src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "" @@ -5228,11 +6760,23 @@ msgstr "" msgid "Upgraded successfully" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "" + +#: src/views/node/BatchUpgrader.vue:88 +#: src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "" +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "" @@ -5241,19 +6785,31 @@ msgstr "" msgid "Upload Folders" msgstr "" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 +#: src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 +#: src/views/system/Licenses.vue:34 msgid "URL" msgstr "" @@ -5265,14 +6821,19 @@ msgstr "" msgid "Use recovery code" msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "" @@ -5289,7 +6850,7 @@ msgstr "" msgid "User Profile" msgstr "" -#: src/views/other/Login.vue:228 +#: src/views/other/Login.vue:268 #: src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 #: src/views/user/UserProfile.vue:131 @@ -5304,12 +6865,20 @@ msgstr "" msgid "Username length cannot exceed 255 characters" msgstr "" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "" @@ -5319,47 +6888,70 @@ msgstr "" msgid "Verify Backup File Integrity" msgstr "" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 +#: src/views/system/Licenses.vue:28 msgid "Version" msgstr "" #: src/language/curd.ts:7 -#: src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 +#: src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 +#: src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "" -#: src/constants/index.ts:23 +#: src/components/InspectConfig/InspectConfig.vue:68 +#: src/constants/index.ts:24 #: src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "" @@ -5368,15 +6960,23 @@ msgstr "" msgid "Warning: Restore operation will overwrite current configurations. Make sure you have a valid backup file and security token, and carefully select what to restore." msgstr "" -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "Warning: This appears to be a private IP address. Public CAs like Let's Encrypt cannot issue certificates for private IPs. Use a public IP address or consider using a private CA." +msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "" + +#: src/views/certificate/DNSCredential.vue:96 msgid "We will add one or more TXT records to the DNS records of your domain for ownership verification." msgstr "" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?" msgstr "" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "" @@ -5384,10 +6984,18 @@ msgstr "" msgid "WebAuthn settings are not configured" msgstr "" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "" @@ -5400,24 +7008,24 @@ msgstr "" msgid "Weekly on %{day} at %{time}" msgstr "" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "When Enabled, Nginx UI will automatically re-register users upon startup. Generally, do not enable this unless you are in a dev environment and using Pebble as CA." msgstr "" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 -msgid "When you enable/disable, delete, or save this site, the nodes set in the Node Group and the nodes selected below will be synchronized." +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 +msgid "When you enable/disable, delete, or save this site, the nodes set in the namespace and the nodes selected below will be synchronized." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "When you generate new recovery codes, you must download or print the new codes." msgstr "" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "" @@ -5436,9 +7044,9 @@ msgstr "" msgid "Workers" msgstr "" -#: src/layouts/HeaderLayout.vue:62 -#: src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 +#: src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "" @@ -5463,16 +7071,18 @@ msgstr "" msgid "Writing certificate to disk" msgstr "" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "You are accessing this terminal over an insecure HTTP connection on a non-localhost domain. This may expose sensitive information." msgstr "" @@ -5480,11 +7090,11 @@ msgstr "" msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "" @@ -5496,27 +7106,31 @@ msgstr "" msgid "You can close this dialog now" msgstr "" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "You have not configured the settings of Webauthn, so you cannot add a passkey." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "Your current recovery code might be outdated and insecure. Please generate new recovery codes at your earliest convenience to ensure security." msgstr "" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "" -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "" diff --git a/app/src/language/pt_PT/app.po b/app/src/language/pt_PT/app.po index de4f473d9..d6673435e 100644 --- a/app/src/language/pt_PT/app.po +++ b/app/src/language/pt_PT/app.po @@ -12,94 +12,140 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.6.2\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "[Nginx UI] Utilizador ACME: %{name}, Email: %{email}, Diretório CA: %{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "" "[Nginx UI] A fazer cópia de segurança do certificado atual para posterior " "revogação" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] Certificado renovado com sucesso" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] Certificado revogado com sucesso" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" "[Nginx UI] O certificado foi usado para o servidor, a recarregar o " "certificado TLS do servidor" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] Criando cliente para facilitar a comunicação com o servidor CA" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] Variáveis de ambiente limpas" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] Concluído" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] Certificado emitido com sucesso" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] A obter certificado" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] Preparando para a revogação do certificado" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] A preparar configurações do lego" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] A recarregar o nginx" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] Revogação concluída" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] Revogar certificado" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] Revogar certificado antigo" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] A configurar o fornecedor de desafio DNS01" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] Configurando variáveis de ambiente" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] A configurar o fornecedor de desafio HTTP01" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] A gravar a chave privada do certificado no disco" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] A escrever o certificado no disco" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} copiado para a área de transferência" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* Inclui nós do grupo %{groupName} e nós selecionados manualmente" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "" +"* Os ficheiros de índice são armazenados no diretório \"log-index\" dentro " +"do caminho de configuração do NGINX UI por padrão." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* Métricas de desempenho medidas no Apple M2 Pro (12 núcleos) com 32 GB de " +"RAM. O desempenho real pode variar com base na configuração do seu hardware." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{start}-%{end} de %{total} itens" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "Mínimo de 1 núcleo" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "Mínimo de 1 GB de RAM" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "2+ núcleos recomendados" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "Estatísticas UV/PV de 24 horas" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "2FA" @@ -108,11 +154,15 @@ msgstr "2FA" msgid "2FA Settings" msgstr "Definições 2FA" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "Recomenda-se 4 GB de RAM ou mais" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "Sobre" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "Registo de Acesso" @@ -121,30 +171,28 @@ msgid "Access log path not exist" msgstr "O caminho do registo de acesso não existe" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "Logs de Acesso" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "Utilizador ACME" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "Acção" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "Ações" @@ -159,15 +207,15 @@ msgid "Actual worker to configured ratio" msgstr "Rácio real de workers para configurado" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "Adicionar" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "Adicionar uma chave de acesso" @@ -181,10 +229,14 @@ msgstr "Adicionar Configuração" msgid "Add Directive Below" msgstr "Adicionar Directiva Abaixo" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "Adicionar domínio" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "Adicionar cabeçalho" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -198,15 +250,15 @@ msgstr "Adicionar servidor" msgid "Add Site" msgstr "Adicionar Site" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "Adicionar Stream" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "Adicionar upstream" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "Adicionado com sucesso" @@ -214,27 +266,53 @@ msgstr "Adicionado com sucesso" msgid "Additional" msgstr "Adicional" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "Modo Avançado" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "Indexação avançada ativada mas falhou ao iniciar reconstrução" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "Indexação avançada ativada com sucesso" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" +"Os recursos avançados de indexação de logs são gratuitos e de código aberto " +"para todos os utilizadores" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "Sistema avançado de pool de memória" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "Pesquisa e filtragem avançadas" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "Configurações avançadas" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "" "Depois, atualize esta página e clique em adicionar chave de acesso " "novamente." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "Todos" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "Todos os componentes" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "Todos os Códigos de Recuperação Foram Utilizados" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." @@ -242,6 +320,28 @@ msgstr "" "Todos os subdomínios selecionados devem pertencer ao mesmo Fornecedor de " "DNS, caso contrário, o pedido de certificado falhará." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"Alternativamente, se não conseguir transferir a base de dados, pode colocar " +"manualmente o GeoLite2-City.mmdb no mesmo diretório que o app.ini." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "Serviço de análise não disponível" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "Qualquer" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "" +"Qualquer endereço IP acessível pode ser usado com autoridades de " +"certificação privadas" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "Url Base da API" @@ -262,36 +362,40 @@ msgstr "Token da API" msgid "API Type" msgstr "Tipo de API" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "Aplicação" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "Aplicar" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "Arquitetura" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "Tem certeza que pretende eliminar este IP banido imediatamente?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "Tem a certeza de que deseja eliminar imediatamente esta chave de acesso?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "Tem a certeza que deseja gerar novos códigos de recuperação?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "Tem a certeza de que pretende repor a autenticação de dois fatores?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "Tem certeza que pretende limpar todas notificações?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "Tem certeza que pretende limpar o registo do chat?" @@ -299,18 +403,18 @@ msgstr "Tem certeza que pretende limpar o registo do chat?" msgid "Are you sure you want to delete permanently?" msgstr "Tem a certeza de que pretende eliminar permanentemente?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "Tem certeza que pretende eliminar?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "" "Tem a certeza que pretende recarregar o Nginx nos seguintes nós de " "sincronização?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "Tem certeza que pretende eliminar esta directiva?" @@ -322,7 +426,7 @@ msgstr "Tem certeza que pretende eliminar este item?" msgid "Are you sure you want to remove this location?" msgstr "Tem certeza que pretende eliminar este local?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "" "Tem a certeza de que pretende reiniciar o Nginx nos seguintes nós de " @@ -332,23 +436,27 @@ msgstr "" msgid "Are you sure you want to restore?" msgstr "Tem a certeza que deseja restaurar?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "Pedir ajuda ao ChatGPT" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "Ascendente" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "Assistente" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "Pelo menos 20 GB de espaço disponível em disco" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "Tentar corrigir" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "Tentativas" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "Auth" @@ -356,12 +464,12 @@ msgstr "Auth" msgid "Authenticate with a passkey" msgstr "Autenticar com uma chave de acesso" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "Definições de Autenticação" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "Autenticando..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "Autor" @@ -395,28 +503,27 @@ msgstr "Backup automático falhou" msgid "Auto Backup Storage Failed" msgstr "Falha no armazenamento de backup automático" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "Actualizar Automaticamente" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "Atualização automática desativada" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "Atualização automática ativada" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "Renovação automatica desactivada para %{name}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "Renovação automática activada para %{name}" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "O AutoCert está em execução, aguarde..." @@ -425,16 +532,32 @@ msgstr "O AutoCert está em execução, aguarde..." msgid "AutoCert is running..." msgstr "AutoCert está em execução..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "Detecção automática de rotação de logs" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "Reinício Automático" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "Latência média" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "UV diário médio" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "Méd./PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "Voltar" @@ -446,6 +569,22 @@ msgstr "Voltar ao Início" msgid "Back to List" msgstr "Voltar à lista" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "Backend" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "" +"Indexação em segundo plano em progresso. Os dados serão atualizados " +"automaticamente quando estiverem prontos." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "Serviço de registo em segundo plano não disponível" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "Cópia de segurança" @@ -456,7 +595,7 @@ msgstr "" "A verificação de integridade do ficheiro de backup falhou, pode ter sido " "adulterado." -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "Ficheiro de cópia de segurança não encontrado: {0}" @@ -468,22 +607,18 @@ msgstr "O backup foi descarregado com sucesso" msgid "Backup Path" msgstr "Caminho de backup" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "O caminho de backup não existe: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "O caminho de backup não é um diretório: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "O caminho de backup é necessário para o backup de diretório personalizado" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "Caminho de backup não está nos caminhos de acesso concedidos: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "Agendamento de backup" @@ -508,15 +643,15 @@ msgstr "A tarefa de backup %{backup_name} falhou ao executar, erro: %{error}" msgid "Backup Type" msgstr "Tipo de backup" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "Minutos Limite para Banir" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "IPs Banidos" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "Banido Até" @@ -528,18 +663,18 @@ msgstr "Bark" msgid "Base information" msgstr "Informação base" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "Básico" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "Modo Básico" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "Configurações básicas" @@ -551,7 +686,7 @@ msgstr "Edição em Lote" msgid "Batch Modify" msgstr "Modificar em Massa" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "Actualização em Massa" @@ -563,11 +698,28 @@ msgstr "Abaixo estão os itens selecionados que pretende modificar em lote" msgid "Block is nil" msgstr "O bloco é nulo" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "Build com" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "Navegador" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "Estatísticas do navegador" -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"Ao ativar a indexação avançada, reconhece que o seu sistema cumpre os " +"requisitos e compreende as implicações de desempenho. Isto iniciará " +"imediatamente a indexação dos ficheiros de registo existentes." + +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "Diretório CA" @@ -575,11 +727,11 @@ msgstr "Diretório CA" msgid "Cache" msgstr "Cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "Os itens da cache não acedidos dentro deste período serão removidos" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "Limiar de tempo de processamento do carregador de cache" @@ -588,15 +740,15 @@ msgstr "Limiar de tempo de processamento do carregador de cache" msgid "Cache manager processes" msgstr "Processos de gestão de cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "Limiar de tempo de processamento do gestor de cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "Configurações do Gestor de Cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "Caminho da cache" @@ -605,7 +757,7 @@ msgstr "Caminho da cache" msgid "Cache Processes" msgstr "Processos de Cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "Estrutura de níveis de subdiretórios da cache, por exemplo, 1:2" @@ -622,24 +774,33 @@ msgstr "" "Calculado com base em worker_processes * worker_connections. O desempenho " "real depende do hardware, configuração e carga de trabalho" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "Cancelar" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "Não é possível aceder ao caminho de backup {0}: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "Não é possível aceder ao ficheiro de registo" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "Não é possível aceder ao caminho de armazenamento {0}: {1}" @@ -663,7 +824,7 @@ msgstr "Não é possível obter dados de desempenho neste estado" msgid "Cannot remove initial user" msgstr "Não é possível remover o utilizador inicial" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "Certificado" @@ -673,6 +834,11 @@ msgstr "" "O caminho do certificado não está dentro do diretório de configuração do " "nginx" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "certificado" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "O certificado %{name} expirou" @@ -687,6 +853,10 @@ msgstr "O certificado %{name} expirará em %{days} dias" msgid "Certificate %{name} will expire in 1 day" msgstr "O certificado %{name} irá expirar em 1 dia" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "O conteúdo do certificado e a chave privada não podem estar vazios" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "Erro de descodificação do certificado" @@ -705,6 +875,14 @@ msgstr "Certificado expirado" msgid "Certificate Expiring Soon" msgstr "Certificado a expirar em breve" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "Ficheiros de certificado transferidos com sucesso" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "O nome do certificado não pode estar vazio" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "Certificado não encontrado: %{error}" @@ -717,8 +895,8 @@ msgstr "Erro de análise do certificado" msgid "Certificate path is empty" msgstr "O caminho do certificado está vazio" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "Certificado removido com sucesso" @@ -734,14 +912,14 @@ msgstr "Certificado renovado com sucesso" msgid "Certificate revoked successfully" msgstr "Certificado revogado com sucesso" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Estado do Certificado" msgstr[1] "Estado dos Certificados" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "Tipo de certificado" @@ -750,7 +928,7 @@ msgstr "Tipo de certificado" msgid "Certificates" msgstr "Certificados" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "Lista de Certificados" @@ -758,7 +936,7 @@ msgstr "Lista de Certificados" msgid "Challenge error: {0}" msgstr "Erro de desafio: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "Método do Challenge" @@ -781,26 +959,33 @@ msgstr[1] "Certificados Alterados" msgid "Changed Path" msgstr "Caminho Alterado" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "Canal" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "Chat" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "Chat para %{path}" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "Verificar" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "Verificar de novo" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "Verificar favicon" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -834,6 +1019,23 @@ msgstr "" "impede o uso de Passkeys e funcionalidades da área de transferência" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "Verifique se o diretório conf.d está no diretório de configuração do nginx" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"Verifique se a base de dados GeoLite2 está disponível quando a indexação de " +"registos está ativada. A base de dados GeoLite2 é necessária para a análise " +"geográfica de IPs na indexação de registos. Pode descarregá-la a partir da " +"página de Preferências ou colocar manualmente o GeoLite2-City.mmdb no mesmo " +"diretório que o app.ini" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -850,15 +1052,15 @@ msgstr "" "documentação para mais detalhes: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "Verificar se o diretório de configuração do nginx existe" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "Verificar se o ficheiro de entrada de configuração do nginx existe" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -875,7 +1077,7 @@ msgstr "" "documentação para mais detalhes: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -889,23 +1091,23 @@ msgstr "" "especificar o caminho do PID do Nginx. Consulte a documentação para obter " "mais detalhes: https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "Verifique se o caminho sbin do nginx existe" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "Verificar se o nginx.conf inclui o diretório conf.d" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "Verificar se o nginx.conf inclui o diretório sites-enabled" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "Verificar se o nginx.conf inclui o diretório streams-enabled" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" @@ -913,7 +1115,7 @@ msgstr "" "Verifique se os diretórios sites-available e sites-enabled estão no " "diretório de configuração do nginx" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" @@ -921,6 +1123,19 @@ msgstr "" "Verifique se os diretórios streams-available e streams-enabled estão no " "diretório de configuração do nginx" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "Intervalo de verificação (segundos)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "Mapa de Acesso à China" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "Mapa da China" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "O texto cifrado é demasiado curto" @@ -929,13 +1144,13 @@ msgstr "O texto cifrado é demasiado curto" msgid "Cleaning environment variables" msgstr "Limpando variáveis de ambiente" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "Limpar" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "Limpo com sucesso" @@ -953,7 +1168,7 @@ msgstr "Clique ou arraste ficheiros para esta área para carregar" msgid "Click or drag folders to this area to upload" msgstr "Clique ou arraste pastas para esta área para carregar" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "Clique para copiar" @@ -961,10 +1176,18 @@ msgstr "Clique para copiar" msgid "Client Body Buffer Size" msgstr "Tamanho do buffer do corpo do cliente" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "Certificado do cliente" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "Tamanho do buffer de cabeçalho do cliente" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "Chave do cliente" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "Tamanho máximo do corpo do cliente" @@ -993,6 +1216,14 @@ msgstr "A conclusão de código não está ativada" msgid "Code Completion Model" msgstr "Modelo de conclusão de código" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "Recolher" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "Configurações de coluna" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "Comando" @@ -1001,7 +1232,7 @@ msgstr "Comando" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "O comando terminou com um código de saída inesperado: {0}, erro: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -1024,11 +1255,34 @@ msgstr "Compare selecionado" msgid "Compare with Current" msgstr "Compare com a corrente" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "Indexação completa com capacidades de pesquisa" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "componentes" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "Suporte a ficheiros de registo comprimidos" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "O nível de compressão, 1 é mais baixo, 9 é mais alto" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "Calculando estatísticas" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "O diretório conf.d existe" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "O diretório Conf.d não existe" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "Configuração" @@ -1041,22 +1295,32 @@ msgstr "O diretório de configuração não existe" msgid "Config entry file not exist" msgstr "O ficheiro de entrada de configuração não existe" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "Configuração não encontrada" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "O caminho de configuração está vazio" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "Modelo de Configuração" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "Configuração" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "Ficheiro de configuração testado com sucesso" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "" +"O ficheiro de configuração foi testado com sucesso num ambiente de sandbox " +"isolado" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "Histórico de Configuração" @@ -1077,11 +1341,20 @@ msgstr "Configurações" msgid "Configure SSL" msgstr "Configurar SSL" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "Confirmar eliminação" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "Confirmar nova palavra-passe" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "Confirmação necessária" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "Conectado" @@ -1089,9 +1362,9 @@ msgstr "Conectado" msgid "Connection error, trying to reconnect..." msgstr "Erro de conexão, tentando reconectar..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "Ligação perdida, por favor actualize a página." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "Conexão perdida para este terminal. Atualize se necessário." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1101,14 +1374,14 @@ msgstr "Período de tempo limite de conexão" msgid "Container status unknown" msgstr "Estado do contentor desconhecido" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "Conteúdo" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "Copiado" @@ -1121,14 +1394,38 @@ msgstr "Copiado!" msgid "Copy" msgstr "Copiar" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "Copiar códigos" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "Actualização do Core" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "Não foi possível encontrar o nome do contentor antigo" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "Não foi possível encontrar o contentor temporário" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "Contagem" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "País / Região" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "CPU" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "Estado do CPU" @@ -1173,10 +1470,10 @@ msgstr "" "automaticamente para o seu computador." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "Criado em" @@ -1201,11 +1498,15 @@ msgstr "Credenciais" msgid "Cron Expression" msgstr "Expressão Cron" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "Correlação de cronologia entre ficheiros" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "A conta atual tem o TOTP ativado." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "A conta atual não tem o TOTP ativado." @@ -1225,12 +1526,12 @@ msgstr "Palavra-passe atual" msgid "Current usage" msgstr "Utilização atual" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "Versão Actual" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "Personalizado" @@ -1243,14 +1544,18 @@ msgstr "Expressão cron personalizada" msgid "Custom Directory" msgstr "Diretório personalizado" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "Domínios personalizados" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "Certificado de Domínios Personalizados" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "Cabeçalhos personalizados" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1261,6 +1566,10 @@ msgstr "Personalize o nome do nó local a ser exibido no indicador de ambiente." msgid "Daily" msgstr "Diário" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "Tendências de Acesso Diário" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "Diariamente às %{time}" @@ -1268,10 +1577,18 @@ msgstr "Diariamente às %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "Painel" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "Data" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "Intervalo de datas" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "Dia do mês" @@ -1284,36 +1601,50 @@ msgstr "Dia da semana" msgid "Days" msgstr "Dias" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "Ficheiro da base de dados não encontrado" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "Descompressão bem-sucedida, mas falha ao eliminar o ficheiro comprimido: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "Falha na desencriptação" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "Intervalo padrão" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "" "Defina o nome e o tamanho da zona de memória partilhada, por exemplo " "proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "Eliminar" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "Falha ao eliminar %{path} em %{env_name}" +msgid "Delete %{path} on %{node_name} failed" +msgstr "Falha ao eliminar %{path} em %{node_name}" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "%{path} em %{env_name} eliminado com sucesso" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "%{path} eliminado em %{node_name} com sucesso" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "Eliminar certificado" @@ -1333,43 +1664,44 @@ msgstr "Erro ao eliminar configuração remota" msgid "Delete Remote Config Success" msgstr "Configuração remota apagada com sucesso" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "Erro ao eliminar site remoto" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "Site remoto excluído com sucesso" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "Erro ao eliminar transmissão remota" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "Eliminação de transmissão remota bem-sucedida" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "Falha ao eliminar o site %{name} de %{node}" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "Site %{name} eliminado de %{node} com sucesso" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "Eliminar site: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "Falha ao eliminar o fluxo %{name} de %{node}" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "O fluxo %{name} foi eliminado de %{node} com sucesso" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "Eliminar stream: %{stream_name}" @@ -1385,8 +1717,16 @@ msgstr "Demonstração" msgid "Deploy" msgstr "Deploy" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "Modo de implantação" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "Decrescente" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "Descrição" @@ -1402,18 +1742,44 @@ msgstr "Ficheiro de destino: {0} já existe" msgid "Details" msgstr "Detalhes" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Dev" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "Desenvolvimento" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "Modo Desenvolvimento" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "Dispositivo" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "Estatísticas de dispositivos" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "Tipo de dispositivo" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "O conteúdo do ficheiro de resumo está vazio" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "DingTalk" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "Direto" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "Directiva" @@ -1434,98 +1800,101 @@ msgstr "DirectiveIdx fora do intervalo" msgid "Directives" msgstr "Directivas" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "Níveis de diretório" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "Caminho do diretório para armazenar ficheiros de cache" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "Desativar" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "Falha ao desativar a renovação automática para %{name}" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "Erro ao desativar site remoto" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "Erro ao desativar a manutenção do site remoto" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "Desativação da manutenção do site remoto com sucesso" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "Site remoto desativado com sucesso" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "Erro ao desativar transmissão remota" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "Desativação de transmissão remota bem-sucedida" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "Desativar o site %{name} de %{node} falhou" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "Site %{name} desativado em %{node} com sucesso" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "Falha ao desativar a manutenção do site %{name} em %{node}" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "Desativação da manutenção do site %{name} em %{node} com sucesso" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "Falha ao desativar o fluxo %{name} de %{node}" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "Desativar o fluxo %{name} de %{node} com sucesso" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "Desativado" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "Desactivado com sucesso" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "Desconectado" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "E/S de Disco" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "Credenciais DNS" @@ -1534,11 +1903,15 @@ msgstr "Credenciais DNS" msgid "DNS Provider" msgstr "Provedor DNS" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "Resolvedor DNS" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "Não ative esta opção a menos que tenha a certeza de que precisa dela." @@ -1546,11 +1919,11 @@ msgstr "Não ative esta opção a menos que tenha a certeza de que precisa dela. msgid "Do you want to %{action} this site?" msgstr "Deseja %{action} este site?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "Deseja %{action} este fluxo?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "Desactivar a renovação automática do certificado?" @@ -1563,7 +1936,7 @@ msgstr "Activar TLS?" msgid "Do you want to remove this server?" msgstr "Remover servidor?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "Remover este upstream?" @@ -1571,7 +1944,7 @@ msgstr "Remover este upstream?" msgid "Docker client not initialized" msgstr "Cliente Docker não inicializado" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "O socket do Docker existe" @@ -1585,14 +1958,35 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "Documento" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "Contagem de documentos" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "Domínio" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "A lista de domínios está vazia, tente reabrir o Auto Cert para %{config}" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "Baixar arquivos de certificado" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "Download concluído" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "Download falhou" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "Descarregar base de dados GeoLite2" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "Erro de download da versão mais recente" @@ -1601,12 +1995,19 @@ msgstr "Erro de download da versão mais recente" msgid "Downloading latest release" msgstr "Descarregar última versão" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "Solte o arquivo de certificado aqui" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "Solte o arquivo de chave privada aqui" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "Modo Dry Run activado" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1615,10 +2016,12 @@ msgstr "" "utilizar passkeys em sites não HTTPS, exceto quando em execução no " "localhost." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "Duplicado" @@ -1627,21 +2030,33 @@ msgstr "Duplicado" msgid "Duplicate to local successfully" msgstr "Duplicado para local com sucesso" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "Dinâmico" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "Gestão dinâmica de fragmentos" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "ex., 0 0 * * * (diariamente à meia-noite)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "Chave HMAC EAB" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "ID da chave EAB" + #: src/language/curd.ts:8 msgid "Edit" msgstr "Editar" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "Editar %{n}" @@ -1658,7 +2073,7 @@ msgstr "Editar Site" msgid "Edit Stream" msgstr "Editar Stream" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "E-mail" @@ -1667,16 +2082,28 @@ msgstr "E-mail" msgid "Email (*)" msgstr "E-mail (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "Linha de registo vazia" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "ativar" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "2FA Activado com Sucesso" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "Ativar indexação avançada" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "Ativar indexação avançada de registros" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "Activação de renovação automática para %{name} falhou" @@ -1700,57 +2127,61 @@ msgstr "Ativar HTTP/3" msgid "Enable HTTPS" msgstr "Ativar HTTPS" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "Ativar indexação" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "Ativar cache de proxy" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "Erro ao ativar site remoto" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "Erro ao ativar a manutenção do site remoto" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "Ativar manutenção do site remoto com sucesso" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "Site remoto ativado com sucesso" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "Erro ao ativar transmissão remota" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "Ativar transmissão remota com sucesso" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "Falha ao ativar a manutenção do site %{name} em %{node}" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "Ativar a manutenção do site %{name} em %{node} com sucesso" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "Falha ao ativar o site %{name} em %{node}" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "Site %{name} ativado em %{node} com sucesso" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "Falha ao ativar o fluxo %{name} em %{node}" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "Ativar o fluxo %{name} em %{node} com sucesso" @@ -1762,29 +2193,29 @@ msgstr "Ativar módulo stub_status" msgid "Enable TLS" msgstr "Activar TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "Ativar TOTP" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "Activado" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "Activado com sucesso" @@ -1796,6 +2227,16 @@ msgstr "Ativa o suporte a HTTP/2 com capacidades de multiplexação e push do se msgid "Enables HTTP/3 support based on QUIC protocol for best performance" msgstr "Ativa o suporte a HTTP/3 baseado no protocolo QUIC para melhor desempenho" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"Ativar a indexação avançada de registros consumirá recursos computacionais " +"significativos, incluindo CPU e memória. Certifique-se de que o seu sistema " +"atende aos requisitos mínimos antes de prosseguir." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Encriptar website com Let's Encrypt" @@ -1804,11 +2245,19 @@ msgstr "Encriptar website com Let's Encrypt" msgid "End" msgstr "Fim" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "Data de término" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "Inserir nome de domínio" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "Insira o endereço IP do servidor (ex. 203.0.113.1 ou 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "Insira o seu domínio" @@ -1820,39 +2269,58 @@ msgstr "A configuração do ambiente está vazia" msgid "Environment variables cleaned" msgstr "Variáveis de ambiente limpas" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "Ambientes" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "Erro" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "Detalhes do erro" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "Erro ao inicializar o visualizador de diferenças" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "Registo de erros" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "Registo de erros detetado" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "O caminho do registo de erros não existe" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "Logs de Erro" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "" +"Os registos de erro não suportam análise estruturada, pois contêm mensagens " +"de texto livre." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "Reconhecimento de padrões de erro" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "Erro ao processar o conteúdo" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "O ficheiro binário executável está vazio" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "Caminho Executável" @@ -1868,6 +2336,22 @@ msgstr "Executar todos os dias às %{time}" msgid "Execute on every month on day %{day} at %{time}" msgstr "Executar todos os meses no dia %{day} às %{time}" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "Expandir" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "Desempenho esperado" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "Códigos de estado esperados" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "Texto esperado" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1881,12 +2365,36 @@ msgstr "Expirou em: %{date}" msgid "Export Excel" msgstr "Exportar Excel" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "" +"Chave HMAC de vinculação de conta externa (opcional). Deve estar no formato " +"de codificação Base64 URL." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "" +"ID da chave de vinculação de conta externa (opcional). Necessário para " +"alguns fornecedores ACME como o ZeroSSL." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "Contentor Docker externo" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "Configuração de notificação externa não encontrada" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "Teste de notificação externa" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "Notificação Externa" @@ -1915,15 +2423,15 @@ msgstr "Falha ao fazer backup dos ficheiros Nginx UI: {0}" msgid "Failed to build nginx config: {0}" msgstr "Falha ao construir a configuração do nginx: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "Falha ao calcular o hash: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Falha ao calcular o hash do Nginx: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Falha ao calcular o hash do Nginx UI: {0}" @@ -1936,38 +2444,35 @@ msgid "Failed to copy config file: {0}" msgstr "Falha ao copiar o ficheiro de configuração: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "Falha ao copiar o diretório da base de dados: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "Falha ao copiar o ficheiro da base de dados: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "Falha ao copiar o conteúdo do ficheiro: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Falha ao copiar o diretório de configuração do Nginx: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "Falha ao copiar para a área de transferência" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "Falha ao criar cópia de segurança" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "Falha ao criar o diretório de backup: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "Falha ao criar o ficheiro de backup: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "Falha ao criar diretório: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "Falha ao criar o ficheiro: {0}" @@ -1975,19 +2480,19 @@ msgstr "Falha ao criar o ficheiro: {0}" msgid "Failed to create hash info file: {0}" msgstr "Falha ao criar o ficheiro de informações de hash: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "Falha ao criar o diretório principal: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "Falha ao criar o diretório de restauro: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "Falha ao criar o diretório de armazenamento {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "Falha ao criar ligação simbólica: {0}" @@ -2003,48 +2508,64 @@ msgstr "Falha ao criar diretório temporário" msgid "Failed to create temporary subdirectory" msgstr "Falha ao criar subdiretório temporário" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "Falha ao criar o leitor xz: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "Falha ao criar o arquivo ZIP: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "Falha ao criar entrada ZIP: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "Falha ao criar o ficheiro ZIP: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "Falha ao criar o cabeçalho ZIP: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "Falha ao descomprimir a base de dados GeoLite2: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "Falha ao desencriptar os dados: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "Falha ao desencriptar o ficheiro: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Falha ao desencriptar o diretório Nginx: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Falha ao desencriptar o diretório Nginx UI: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "Falha ao eliminar todos os índices" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "Falha ao eliminar o certificado" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "Falha ao eliminar o certificado da base de dados: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "Falha ao eliminar o índice do ficheiro" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "Falha ao desactivar %{msg}" @@ -2052,20 +2573,32 @@ msgstr "Falha ao desactivar %{msg}" msgid "Failed to disable maintenance mode %{msg}" msgstr "Falha ao desativar o modo de manutenção: %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "Falha ao baixar os ficheiros do certificado" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "Falha ao descarregar a base de dados GeoLite2: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "Falha ao Activar %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "Falha ao ativar a indexação avançada" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "Falha ao ativar o modo de manutenção: %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "Falha ao encriptar os dados: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "Falha ao encriptar o ficheiro: {0}" @@ -2077,10 +2610,6 @@ msgstr "Falha ao encriptar o diretório Nginx: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Falha ao encriptar o diretório Nginx UI: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "Falha ao avaliar os links simbólicos: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "Falha ao executar o comando: {0}" @@ -2089,7 +2618,7 @@ msgstr "Falha ao executar o comando: {0}" msgid "Failed to execute template: {0}" msgstr "Falha ao executar o modelo: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "Falha ao extrair o arquivo: {0}" @@ -2109,14 +2638,30 @@ msgstr "Busca de informação do certificado falhou" msgid "Failed to get container id: {0}" msgstr "Falha ao obter o ID do contentor: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "Falha ao obter o tamanho do ficheiro: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "Falha ao obter o estado do índice" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Falha ao obter as configurações de desempenho do Nginx" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "Falha ao obter o caminho de nginx.conf" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "Falha ao obter dados de desempenho" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "Falha ao obter estatísticas de persistência" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "Falha ao obter o status do stub: {0}" @@ -2133,15 +2678,19 @@ msgstr "Falha ao inspecionar o contentor atual: {0}" msgid "Failed to load history records" msgstr "Falha ao carregar registros históricos" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "Falha ao abrir o ficheiro: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "Falha ao abrir o arquivo de origem: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "Falha ao abrir entrada ZIP: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "Falha ao abrir o ficheiro ZIP: {0}" @@ -2161,15 +2710,23 @@ msgstr "Falha ao analisar o modelo: {0}" msgid "Failed to pull image: {0}" msgstr "Falha ao obter a imagem: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "Falha ao ler dados comprimidos: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "Falha ao ler o ficheiro encriptado: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "Falha ao ler o ficheiro" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "Falha ao ler o ficheiro: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "Falha ao ler o ficheiro de informações de hash: {0}" @@ -2185,57 +2742,97 @@ msgstr "Falha ao ler a saída: {0}" msgid "Failed to read response body: {0}" msgstr "Falha ao ler o corpo da resposta: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "Falha ao ler o link simbólico: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "Falha ao reconstruir o índice de arquivos" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "Falha ao reconstruir o índice" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "Falha ao atualizar os sites" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Falha ao restaurar as configurações do Nginx: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "Falha ao restaurar os ficheiros da interface de utilizador do Nginx: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "Falha ao revogar o certificado" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "Falha ao revogar o certificado: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "Falha ao salvar a configuração" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "Falha ao salvar o ficheiro descarregado: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "Falha ao salvar a configuração de verificação de saúde" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Falha ao guardar as definições de desempenho do Nginx" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "Falha ao salvar a ordem" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "Falha ao enviar mensagem de teste" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "Falha ao iniciar o contentor temporário: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "Falha ao atualizar o estado" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "Falha ao carregar o ficheiro" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "Falha ao verificar hashes: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "Falha ao escrever o arquivo de backup: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "Falha ao escrever dados descompactados: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "Falha ao escrever o ficheiro desencriptado: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "Falha ao escrever o ficheiro encriptado: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "Falha ao escrever o ficheiro da chave de segurança: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "Falha ao escrever no buffer ZIP: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "Funcionalidades" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2249,6 +2846,10 @@ msgstr "Ficheiro" msgid "File exists" msgstr "Ficheiro Existe" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "Reconstrução do índice de ficheiros iniciada com sucesso para %{path}" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "Ficheiro Não Encontrado" @@ -2257,19 +2858,35 @@ msgstr "Ficheiro Não Encontrado" msgid "File or directory not found: {0}" msgstr "Ficheiro ou diretório não encontrado: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "O caminho do arquivo é obrigatório" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "O tamanho do ficheiro não pode exceder 5 MB" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "Ficheiro carregado com sucesso" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "O nome do ficheiro está vazio" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "Filtro" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "Filtrar conteúdo do registo" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "Concluído" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "Primeira visualização" @@ -2281,7 +2898,11 @@ msgstr "pasta" msgid "Folder" msgstr "Pasta" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "Seguir redirecionamentos" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2298,6 +2919,33 @@ msgstr "Para utilizadores chineses" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "Para Utilizador Chinês: https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "Para uso comercial ou profissional, contacte" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" +"Para registos de erros, utilize o Visualizador de Registos em Bruto para " +"uma melhor experiência de visualização." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" +"Para configurações de certificados baseados em IP, apenas o método de " +"desafio HTTP-01 é suportado. O desafio DNS-01 não é compatível com " +"certificados baseados em IP." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "" +"Para certificados baseados em IP, por favor especifique o endereço IP do " +"servidor que será incluído no certificado." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "Falha na análise do formulário" @@ -2318,6 +2966,22 @@ msgstr "Formato: minuto hora dia mês dia_da_semana" msgid "Friday" msgstr "Sexta-feira" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "A partir de registos indexados" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "Frontend" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "Pesquisa de texto completo" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "Suporte a pesquisa de texto completo" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "Certificado Geral" @@ -2326,16 +2990,16 @@ msgstr "Certificado Geral" msgid "Generate" msgstr "Gerar" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "Gerar novos códigos de recuperação" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "Gerar códigos de recuperação" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "Códigos de recuperação gerados com sucesso" @@ -2343,6 +3007,39 @@ msgstr "Códigos de recuperação gerados com sucesso" msgid "Generating private key for registering account" msgstr "Gerar chave privada para registo de conta" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "Base de dados GeoLite2" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "Base de dados GeoLite2 disponível" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "Base de dados GeoLite2 instalada" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "Base de dados GeoLite2 não encontrada em {0}" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"Base de dados GeoLite2 não encontrada em {0}. A indexação de registos " +"requer a base de dados GeoLite2 para análise geográfica de IP" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "Base de dados GeoLite2 necessária" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "Erro ao obter o utilizador ACME: {0}" @@ -2355,8 +3052,7 @@ msgstr "Falha ao obter os dados" msgid "Get dns credential error: {0}" msgstr "Erro ao obter credenciais DNS: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "Erro ao obter informações de release" @@ -2368,10 +3064,40 @@ msgstr "Obtendo certificado, por favor aguarde..." msgid "Github Proxy" msgstr "Github Proxy" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "Mapa de Acesso Global" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "Mapa Global" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "Ir para o Visualizador de Logs Brutos" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" +"A verificação de saúde gRPC requer que o servidor implemente o serviço de " +"verificação de saúde gRPC (grpc.health.v1.Health)." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"O gRPCS utiliza encriptação TLS. O servidor deve implementar o serviço de " +"verificação de saúde gRPC. Para testes, a validação SSL está desativada por " +"padrão." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "Compressão GZIP" @@ -2384,25 +3110,51 @@ msgstr "Nível de compressão GZIP" msgid "GZIP Min Length" msgstr "Comprimento mínimo do GZIP" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "Falha na verificação do hash: integridade do ficheiro comprometida" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "Verificação de saúde" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "Configuração de verificação de saúde" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "Configuração de verificação de saúde guardada" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "Configuração de verificação de saúde salva com sucesso" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "Estado de saúde" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "Esconder" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "Ocultar assistente" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "Alto" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "Um valor mais alto significa uma melhor reutilização da conexão" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "Histórico" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "Início" @@ -2411,10 +3163,11 @@ msgid "Host" msgstr "Host" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "Hora" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2422,7 +3175,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "Porta para HTTP Challenge" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "Método HTTP" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2430,15 +3187,15 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "Protocolo HTTPS" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "Número ICP" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "Se for deixado em branco, será utilizado o diretório CA padrão." - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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." @@ -2447,19 +3204,27 @@ msgstr "" "máximo de tentativas em minutos de limite de banimento, o IP será banido " "por um período de tempo." -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "Se desejar revogar automaticamente o certificado antigo, ative esta opção." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" +"Se desejar alterar a localização de armazenamento, pode definir o " +"`IndexPath` da secção `nginx_log` na configuração da interface Nginx." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "" "Se o seu navegador suportar a chave de acesso WebAuthn, aparecerá uma caixa " "de diálogo." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2471,12 +3236,12 @@ msgstr "" msgid "Import" msgstr "Importar" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "Importar Certificados" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "Tempo inativo" @@ -2488,7 +3253,46 @@ msgstr "" "Inclui processo master, processos worker, processos de cache e outros " "processos Nginx" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "Digitalização de índice incremental" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "Reconstrução do índice e estatísticas iniciada com sucesso" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "Falha na indexação" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "Falha na indexação, por favor tente reconstruir" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "Reconstrução do índice iniciada" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "Estado do Índice" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "Indexado" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "Indexação" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "A indexar registos..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "A indexar..." @@ -2496,10 +3300,14 @@ msgstr "A indexar..." msgid "Indicator" msgstr "Indicador" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "Informação" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "O utilizador inicial não existe" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "Erro inicial do atualizador core" @@ -2508,7 +3316,7 @@ msgstr "Erro inicial do atualizador core" msgid "Initialing core upgrader" msgstr "Inicializando o atualizador core" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "Introduza o código da app:" @@ -2523,7 +3331,7 @@ msgstr "Ignorar verificação insegura" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "Instalar" @@ -2551,27 +3359,36 @@ msgstr "" msgid "Interval" msgstr "Intervalo" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "Inválido" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "Formato de IV AES inválido: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "Formato de chave AES inválido: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "Formato de certificado inválido" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "Tipo de reclamação inválido" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "SHA de confirmação inválido" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "Objeto de ficheiro inválido" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "Caminho de ficheiro inválido: {0}" @@ -2584,6 +3401,10 @@ msgstr "Nome de ficheiro inválido" msgid "Invalid folder name" msgstr "Nome de directório inválido" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "ID de notificação inválido" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "Configuração de notificador inválida" @@ -2592,7 +3413,7 @@ msgstr "Configuração de notificador inválida" msgid "Invalid otp code" msgstr "Código OTP inválido" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "Preenchimento inválido nos dados desencriptados" @@ -2600,10 +3421,15 @@ msgstr "Preenchimento inválido nos dados desencriptados" msgid "Invalid passcode or recovery code" msgstr "Passcode ou código de recuperação inválido" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "Caminho inválido: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "Formato de chave privada inválido" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "Código de recuperação inválido" @@ -2612,19 +3438,41 @@ msgstr "Código de recuperação inválido" msgid "Invalid request format" msgstr "Formato de pedido inválido" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "Formato de token de segurança inválido" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "ID de chat do Telegram inválido: não pode ser zero" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "Formato de timestamp inválido" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "Tipo de mensagem WebSocket inválido" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "Endereço IP" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "Aviso de Certificado IP" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "Emitir certificado" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "Emitir certificado" @@ -2644,7 +3492,7 @@ msgstr "item(ns)" msgid "Jwt Secret" msgstr "Jwt Secret" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2656,12 +3504,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "Tempo limite de Keepalive" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "Tipo de Chave" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "Idioma" @@ -2673,6 +3521,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark Personalizado" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "Últimas 12 horas" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "Últimos 14 dias" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "Últimos 15 minutos" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "Últimas 24 horas" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "Últimos 30 dias" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "Últimos 30 minutos" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "Últimas 4 horas" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "Últimos 7 dias" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "Últimos 90 dias" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "Estado do último backup" @@ -2681,15 +3567,35 @@ msgstr "Estado do último backup" msgid "Last Backup Time" msgstr "Hora do último backup" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "Última verificação" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "Última verificação em" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "Última hora" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "Última indexação" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "Mês passado" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "Última atualização" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "Última atualização:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "Última utilização em" @@ -2705,12 +3611,18 @@ msgstr "Deixe em branco para padrão: https://api.openai.com/" msgid "Leave blank if do not want to modify" msgstr "Deixar em branco se não quiser modificar" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "Deixe em branco se não for exigido pelo seu fornecedor ACME" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "Deixe em branco se não precisar disto." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "Deixar em branco não vai mudar nada" @@ -2718,16 +3630,24 @@ msgstr "Deixar em branco não vai mudar nada" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "Código de recuperação antigo não permitido porque o TOTP não está ativado" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego desativar suporte CNAME" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "Licença" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "Distribuição de Licenças" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "Tipos de licença" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "Ligação" @@ -2743,32 +3663,32 @@ msgstr "A escutar" msgid "Load Average:" msgstr "Média de Carga:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "Carregar a partir das configurações" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "Carregado com sucesso" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "Carregado" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "Ficheiros do carregador" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "Configurações do carregador" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "Pausa do Carregador" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "Limiar do carregador" @@ -2776,9 +3696,15 @@ msgstr "Limiar do carregador" msgid "Loading data..." msgstr "A carregar dados..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "A carregar..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2797,11 +3723,11 @@ msgstr "Localização" msgid "Locations" msgstr "Localizações" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "Log" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2812,23 +3738,61 @@ msgstr "" "https://nginxui.com/zh_CN/guide/config-nginx-log.html para obter mais " "informações." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "O ficheiro de registo não existe" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "O ficheiro de registo não é um ficheiro regular" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "Ficheiro de registo não disponível" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "Ficheiro de registo ainda não indexado" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "Indexador de registros não disponível" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "Indexação de registos concluída! A carregar dados atualizados..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "A linha de registo excede o comprimento máximo" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "Lista de registos" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" +"O analisador de registos não foi inicializado; chame " +"indexer.InitLogParser() antes de usar" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "O caminho do registo não está na lista branca" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "Autenticar" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "Autenticado com sucesso" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "Log-out com sucesso" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Logrotate" @@ -2848,9 +3812,20 @@ msgstr "" "activar manualmente esta opção. O agendador de tarefas crontab do Nginx UI " "executará o comando logrotate no intervalo que definir em minutos." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "Baixo" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "Nó principal" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "Manutenção" @@ -2866,7 +3841,7 @@ msgstr "Modo de manutenção ativado com sucesso" msgid "Make certificate dir error: {0}" msgstr "Erro ao criar diretório do certificado: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2881,11 +3856,11 @@ msgstr "" msgid "Manage Configs" msgstr "Gerir Configurações" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "Gerir Sites" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "Gerir Streams" @@ -2897,15 +3872,15 @@ msgstr "Gerir Utilizadores" msgid "Managed Certificate" msgstr "Certificado Gerido" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "Ficheiros do gestor" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "Tempo de espera do gestor" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "Limite do Gestor" @@ -2931,7 +3906,7 @@ msgstr "Processo principal" msgid "Master Process" msgstr "Processo mestre" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "Máximo de Tentativas" @@ -2939,11 +3914,15 @@ msgstr "Máximo de Tentativas" msgid "Max Concurrent Connections" msgstr "Conexões simultâneas máximas" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "Redirecionamentos máximos" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "Pedidos máximos por segundo" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "Tamanho máximo do cache" @@ -2960,7 +3939,7 @@ msgstr "Número máximo de conexões simultâneas" msgid "Maximum number of connections per worker process" msgstr "Número máximo de conexões por processo de trabalho" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "Tamanho máximo total da cache" @@ -2970,6 +3949,7 @@ msgstr "Número máximo de processos de trabalho:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "Memória" @@ -2977,22 +3957,39 @@ msgstr "Memória" msgid "Memory and Storage" msgstr "Memória e Armazenamento" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "Design de memória" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "Uso de memória (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "Método" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "Nome do método" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "Tamanho mínimo do ficheiro para compressão" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "Espaço livre mínimo" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "Espaço livre mínimo no diretório de cache" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "Mínimo:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "Minuto" @@ -3001,21 +3998,36 @@ msgstr "Minuto" msgid "Minutes" msgstr "Minutos" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "Espelho" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "Modelo" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "Serviço de análise moderno não disponível" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "Serviço de indexação moderno não disponível" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "Serviço de pesquisa moderno não disponível" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "Modificado em" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "Modificar" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "Modificar Certificado" @@ -3023,7 +4035,7 @@ msgstr "Modificar Certificado" msgid "Modify Config" msgstr "Modificar Configuração" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "Módulo" @@ -3031,6 +4043,10 @@ msgstr "Módulo" msgid "Modules" msgstr "Módulos" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "Cache de módulos atualizado" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "Segunda-feira" @@ -3043,39 +4059,66 @@ msgstr "Mensal" msgid "Monthly on day %{day} at %{time}" msgstr "Mensalmente no dia %{day} às %{time}" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "Visualização de dados multidimensionais" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "Diretiva Multilinha" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "Deve ser um endereço IP público acessível a partir da Internet" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "N/D" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "Nome" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "Nome ou conteúdo" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "Espaço de nomes" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "Espaços de nomes" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "É necessário ativar o módulo stub_status" @@ -3088,6 +4131,10 @@ msgstr "Rede" msgid "Network Statistics" msgstr "Estatísticas de Rede" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "Novo chat" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "Erro no novo provedor de desafio DNS: {0}" @@ -3116,18 +4163,18 @@ msgstr "Novo Caminho" msgid "New transport error: {0}" msgstr "Erro de transporte novo: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "Nova versão lançada" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "Próximo" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3139,7 +4186,7 @@ msgstr "A saída de Nginx -T está vazia" msgid "Nginx Access Log Path" msgstr "Caminho para Logs de Acesso do Nginx" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "O caminho do log de acesso do Nginx existe" @@ -3168,15 +4215,15 @@ msgstr "A configuração do Nginx não inclui sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "A configuração do Nginx não inclui stream-enabled" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "O diretório de configuração do Nginx não está definido" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "O diretório de configuração do Nginx existe" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "O ficheiro de entrada de configuração do Nginx existe" @@ -3184,8 +4231,8 @@ msgstr "O ficheiro de entrada de configuração do Nginx existe" msgid "Nginx configuration has been restored" msgstr "A configuração do Nginx foi restaurada" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Erro na análise de configuração do Nginx" @@ -3214,7 +4261,7 @@ msgstr "Taxa de utilização da CPU do Nginx" msgid "Nginx Error Log Path" msgstr "Caminho para Logs de Erro do Nginx" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "O caminho do log de erros do Nginx existe" @@ -3223,7 +4270,7 @@ msgid "Nginx error: {0}" msgstr "Erro do Nginx: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3238,7 +4285,7 @@ msgstr "O Nginx não está em execução noutro contentor" msgid "Nginx is running" msgstr "O Nginx está em execução" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Logs do Nginx" @@ -3246,6 +4293,10 @@ msgstr "Logs do Nginx" msgid "Nginx Log Directory Whitelist" msgstr "Lista branca de diretórios de registros do Nginx" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Indexação de logs do Nginx..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3255,7 +4306,7 @@ msgstr "Uso de memória do Nginx" msgid "Nginx PID Path" msgstr "Caminho do PID do Nginx" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "O caminho do PID do Nginx existe" @@ -3268,7 +4319,7 @@ msgstr "Comando de Recarregamento do Nginx" msgid "Nginx reload failed: {0}" msgstr "Recarga do Nginx falhou: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "As operações de recarregamento do Nginx foram enviadas para os nós remotos" @@ -3280,7 +4331,7 @@ msgstr "Nginx recarregado com sucesso" msgid "Nginx Restart Command" msgstr "Comando de reinício do Nginx" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "As operações de reinício do Nginx foram enviadas para os nós remotos" @@ -3288,7 +4339,7 @@ msgstr "As operações de reinício do Nginx foram enviadas para os nós remotos msgid "Nginx restarted successfully" msgstr "Nginx reiniciado com sucesso" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "O caminho sbin do Nginx existe" @@ -3321,41 +4372,73 @@ msgstr "" "A configuração do Nginx UI foi restaurada e irá reiniciar automaticamente " "em alguns segundos." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf inclui o diretório conf.d" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf inclui o diretório sites-enabled" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf inclui o diretório streams-enabled" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "Não" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "Sem ação" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "Não há certificado disponível" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "Nenhum dado geográfico da China disponível" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "Sem dados" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "Sem dados" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "Nenhuma entrada na página atual" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "Nenhum dado geográfico disponível" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "Nenhum registo encontrado no intervalo de tempo selecionado." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "Nenhum nó selecionado" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "Nenhum registo selecionado" @@ -3364,24 +4447,33 @@ msgstr "Nenhum registo selecionado" msgid "No servers configured" msgstr "Nenhum servidor configurado" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "Nenhum site encontrado" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "" +"Nenhum endereço IP específico encontrado na configuração server_name. Por " +"favor, especifique o endereço IP do servidor abaixo para o certificado." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "Nenhum dado de log estruturado disponível" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "Nenhum upstream configurado" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "Nó" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "Grupo de nós" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "Grupos de nós" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "Análise do nó falhou: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3391,7 +4483,12 @@ msgstr "Nome do nó" msgid "Node Secret" msgstr "Segredo do Nó" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "Estado do Nó" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "Nós" @@ -3399,26 +4496,38 @@ msgstr "Nós" msgid "Not After" msgstr "Não Depois" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "Texto não esperado" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "Não Encontrado" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "Não indexado" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "Não carregado" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "Não suportado para certificados de IP" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "Não Válido Antes de: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "Nota" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." @@ -3426,11 +4535,25 @@ msgstr "" "Nota, se o ficheiro de configuração incluir outras configurações ou " "certificados, por favor sincronize-os para os nós remotos antecipadamente." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"Nota: Se o servidor não suportar a Reflexão gRPC, as verificações de saúde " +"podem falhar. Certifique-se de que o seu servidor gRPC tem a Reflexão " +"ativada." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "Nada para copiar" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "Notificação" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "Notificações" @@ -3439,17 +4562,21 @@ msgstr "Notificações" msgid "Notifier not found" msgstr "Notificador não encontrado" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "" "Número de processos de trabalho concorrentes, define automaticamente para o " "número de núcleos da CPU" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "Número de ficheiros processados pelo carregador de cache de uma só vez" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "Número de ficheiros processados pelo gestor de cache de uma só vez" @@ -3464,7 +4591,7 @@ msgstr "Número de processos de trabalho" msgid "Obtain cert error: {0}" msgstr "Erro ao obter certificado: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "Obter certificado" @@ -3472,11 +4599,11 @@ msgstr "Obter certificado" msgid "Obtaining certificate" msgstr "Obtendo certificado" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP Must Staple" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." @@ -3485,7 +4612,7 @@ msgstr "" "acesso usando o Firefox." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "Desligado" @@ -3493,48 +4620,58 @@ msgstr "Desligado" msgid "Official Document" msgstr "Documentação oficial" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "Off-line" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "Análise GeoIP offline" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "OK" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "Ligado" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "Assim que a verificação estiver concluída, os registos serão removidos." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "On-line" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "Contagem Online" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "Apenas ficheiros ZIP são permitidos" @@ -3543,23 +4680,46 @@ msgstr "Apenas ficheiros ZIP são permitidos" msgid "Open" msgstr "Aberto" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "Limitação de código aberto" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "Sistema operativo" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "Estatísticas do sistema operativo" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "Ou" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "ou arraste o arquivo para o editor abaixo" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "Ou insira o segredo: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "Ordem salva com sucesso" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "Nome Original" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "OS" @@ -3606,11 +4766,15 @@ msgstr "Parâmetros" msgid "Params Optimization" msgstr "Otimização de parâmetros" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "Desempenho do analisador" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "Chave de acesso" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3621,7 +4785,7 @@ msgstr "" "ou um PIN. Podem ser usadas como substituto de palavra-passe ou como método " "de autenticação de dois fatores (2FA)." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "Palavra-passe" @@ -3650,11 +4814,13 @@ msgstr "As palavras-passe não coincidem" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "Caminho" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "Caminho não está nos caminhos de acesso concedidos: {0}" @@ -3666,12 +4832,28 @@ msgstr "O caminho: {0} não está no diretório de configuração do nginx: {1}" msgid "Payload resource is nil" msgstr "O recurso de carga útil é nulo" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "Hora de pico" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "Pendente" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "Percentagem" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "Realizar" @@ -3715,7 +4897,11 @@ msgstr "" "Por favor, ative o módulo stub_status para obter estatísticas de pedidos, " "contagem de conexões, etc." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "Por favor, insira" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." @@ -3723,11 +4909,19 @@ msgstr "" "Por favor, insira um nome para a chave de acesso que deseja criar e clique " "no botão OK abaixo." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "Por favor, insira um endereço IPv4 válido (0-255 por octeto)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "Por favor, insira um endereço IPv4 ou IPv6 válido" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "Por favor, insira um intervalo de portas válido" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "Por favor, insira pelo menos um domínio" @@ -3744,6 +4938,10 @@ msgstr "Por favor, insira o token de segurança" msgid "Please enter the security token received during backup" msgstr "Por favor, insira o token de segurança recebido durante a cópia de segurança" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "Por favor, insira o endereço IP do servidor" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "Por favor, preencha todos os campos corretamente" @@ -3752,7 +4950,7 @@ msgstr "Por favor, preencha todos os campos corretamente" msgid "Please fill in required S3 configuration fields" msgstr "Por favor, preencha os campos de configuração do S3 necessários" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." @@ -3760,7 +4958,7 @@ msgstr "" "Preencha as credenciais de autenticação da API fornecidas pelo seu " "fornecedor de DNS." -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3768,7 +4966,7 @@ msgstr "" "Primeiro adicione as credenciais em Certificação > Credenciais DNS e " "selecione uma das credenciais abaixo para solicitar a API do fornecedor DNS." -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3806,20 +5004,20 @@ msgstr "" msgid "Please input your E-mail!" msgstr "Por favor introduza o seu E-mail!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "Por favor introduza a sua palavra-passe!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "Por favor introduza o seu nome de utilizador!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "Por favor, faça login." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "Note que as definições da unidade de tempo abaixo estão todas em segundos." @@ -3837,25 +5035,31 @@ msgstr "" msgid "Please select a backup file" msgstr "Por favor, selecione um ficheiro de cópia de segurança" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "Por favor, selecione um tipo de notificação" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "Por favor, selecione um ficheiro %{type} válido (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "Por favor, selecione pelo menos um item" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Por favor, selecione pelo menos um nó para recarregar o Nginx" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Por favor, selecione pelo menos um nó para reiniciar o Nginx" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "Por favor, selecione pelo menos um nó para atualizar" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "Por favor, digite \"Revogar\" para confirmar" @@ -3868,23 +5072,26 @@ msgstr "Por favor, digite o texto de confirmação exato" msgid "Port" msgstr "Porta" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "A porta 80 deve estar aberta para validação do desafio HTTP-01" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "Scanner de portas" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "Ação pós-sincronização" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "Pre-lançamento" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "Preferencia" @@ -3892,6 +5099,19 @@ msgstr "Preferencia" msgid "Preparing lego configurations" msgstr "Preparando configurações lego" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "CA privada:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "IPs privados (192.168.x.x, 10.x.x.x, 172.16-31.x.x) falharão" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "chave privada" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "Processo" @@ -3908,6 +5128,10 @@ msgstr "Informações do processo" msgid "Processing {count}/{total}" msgstr "Processando {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "Pipeline de produção" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "Proibir a alteração da password root na demonstração" @@ -3924,6 +5148,10 @@ msgstr "Equipe de Projecto" msgid "Protected Directory" msgstr "Diretório protegido" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "Protocolo" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3934,7 +5162,7 @@ msgstr "" "estiver a usar um proxy inverso, configure o protocolo separadamente no " "proxy inverso." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "Provedor" @@ -3942,22 +5170,57 @@ msgstr "Provedor" msgid "Provider not found: {0}" msgstr "Fornecedor não encontrado: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "Província / Região" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "Proxy" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "Passe de Proxy" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "Destinos do proxy" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "Requisitos da CA pública:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "Número de Segurança Pública" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "Visualizações de página" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "Na fila" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "Na fila para indexação..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "Seleção rápida" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "Bruto" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "Rebaixar a base de dados" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "Falha ao ler o diretório: {0}" @@ -3972,24 +5235,48 @@ msgstr "Pedidos de leitura" msgid "Reads" msgstr "Leituras" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "Painel de análise em tempo real" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "Reconstruir" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "Reconstruir todos os índices" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "Reconstruir índice de arquivo" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "Reconstruir índice" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Receber" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "Verificar novamente" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "Recomendado:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "Recuperação" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "Códigos de recuperação" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -4001,15 +5288,29 @@ msgstr "" msgid "Recursive Nameservers" msgstr "Nameservers recursivos" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "Referência" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "Atualizar" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "Atualizar cache de módulos" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "Regerar a resposta" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "Registar" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." @@ -4017,19 +5318,19 @@ msgstr "" "Registe um utilizador ou utilize esta conta para emitir um certificado " "através de um proxy HTTP." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "Registo falhou" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "Registar no arranque" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "Chave de acesso registrada com sucesso" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "Registado com sucesso" @@ -4037,28 +5338,30 @@ msgstr "Registado com sucesso" msgid "Registering user" msgstr "Registado utilizador" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "Estado de Registo" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "Reinstalar" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "Pedido de API de lançamento falhou: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "Nota de Lançamento" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "Recarregar" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Recarregar Nginx" @@ -4082,7 +5385,7 @@ msgstr "Erro ao Recarregar Nginx Remoto" msgid "Reload Remote Nginx Success" msgstr "Recarregamento remoto do Nginx bem-sucedido" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "O pedido de recarregamento falhou, por favor verifique a sua ligação à rede" @@ -4094,22 +5397,28 @@ msgstr "Recarregando" msgid "Reloading nginx" msgstr "Recarregando Nginx" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "Remoto" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "Remover" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "Removido com sucesso" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "Removido com sucesso" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4118,14 +5427,12 @@ msgid "Rename" msgstr "Renomear" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "Falha ao renomear %{orig_path} para %{new_path} em %{env_name}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "Falha ao renomear %{orig_path} para %{new_path} em %{node_name}" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "" -"Mudança do nome %{orig_path} para %{new_path} no %{env_name} feito com " -"sucesso" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "Renomear %{orig_path} para %{new_path} em %{node_name} com sucesso" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4135,37 +5442,37 @@ msgstr "Erro ao renomear configuração remota" msgid "Rename Remote Config Success" msgstr "Configuração remota renomeado com sucesso" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "Erro ao renomear site remoto" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "Renomear site remoto com sucesso" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "Erro ao renomear o fluxo remoto" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "Renomear fluxo remoto com sucesso" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "Falha ao renomear o site %{name} para %{new_name} em %{node}" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "O site %{name} foi renomeado para %{new_name} em %{node} com sucesso" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "Falha ao renomear o fluxo %{name} para %{new_name} em %{node}" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "Fluxo %{name} renomeado para %{new_name} em %{node} com sucesso" @@ -4173,7 +5480,7 @@ msgstr "Fluxo %{name} renomeado para %{new_name} em %{node} com sucesso" msgid "Rename successfully" msgstr "Renomeado com sucesso" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4183,8 +5490,8 @@ msgstr "Renomeado com sucesso" msgid "Renew cert error: {0}" msgstr "Erro ao renovar certificado: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "Renovar Certificado" @@ -4196,11 +5503,23 @@ msgstr "Erro ao Renovar Certificado" msgid "Renew Certificate Success" msgstr "Certificado Renovado com Sucesso" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "Renovado com Sucesso" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "Pedido" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "Corpo da Solicitação" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "Caminho da solicitação" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "Estatísticas de pedidos" @@ -4218,13 +5537,19 @@ msgid "Requests Per Connection" msgstr "Pedidos por ligação" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "Reiniciar" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "Repor 2FA" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "Repor pesquisa" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4235,6 +5560,10 @@ msgstr "" "a memória de bibliotecas partilhadas, que será calculada repetidamente para " "vários processos" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "Aviso de uso de recursos" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4244,9 +5573,8 @@ msgstr "Respostas" msgid "Restart" msgstr "Reiniciar" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Reiniciar Nginx" @@ -4266,7 +5594,7 @@ msgstr "Erro ao reiniciar Nginx remoto" msgid "Restart Remote Nginx Success" msgstr "Reinício remoto do Nginx bem-sucedido" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "Pedido de reinício falhou, por favor verifique a sua ligação à rede" @@ -4305,8 +5633,8 @@ msgstr "Restaurar esta versão" msgid "Restored successfully" msgstr "Restaurado com sucesso" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "Revogar" @@ -4314,15 +5642,15 @@ msgstr "Revogar" msgid "Revoke cert error: {0}" msgstr "Erro ao revogar certificado: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "Revogar certificado antigo" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "Revogar este certificado" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." @@ -4330,15 +5658,15 @@ msgstr "" "A revogação de um certificado afetará quaisquer serviços que o estejam a " "utilizar atualmente. Esta ação não pode ser desfeita." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "Nome de Exibição RP" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "Origens RP" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4374,10 +5702,6 @@ msgstr "O ID da chave de acesso S3 é obrigatório" msgid "S3 Bucket" msgstr "Balde S3" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "Acesso ao bucket S3 negado: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "O bucket S3 é obrigatório" @@ -4386,7 +5710,7 @@ msgstr "O bucket S3 é obrigatório" msgid "S3 bucket name" msgstr "Nome do bucket S3" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "A configuração do S3 está incompleta: falta {0}" @@ -4394,27 +5718,15 @@ msgstr "A configuração do S3 está incompleta: falta {0}" msgid "S3 connection test failed" msgstr "Teste de conexão S3 falhou" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "Teste de conexão S3 falhou: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "Teste de conexão S3 bem-sucedido" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "As credenciais do S3 são inválidas: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "Ponto de extremidade S3" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "O endpoint S3 é inválido: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "O endpoint S3 é obrigatório" @@ -4450,7 +5762,7 @@ msgstr "Chave de Acesso Secreto do S3" msgid "S3 secret access key is required" msgstr "A chave de acesso secreta do S3 é necessária" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "Falha no upload para S3: {0}" @@ -4458,17 +5770,19 @@ msgstr "Falha no upload para S3: {0}" msgid "Saturday" msgstr "Sábado" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "Salvar" @@ -4476,41 +5790,41 @@ msgstr "Salvar" msgid "Save Directive" msgstr "Salvar Directiva" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "Erro ao Salvar %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "Salvar ordem" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "Erro ao guardar site remoto" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "Salvar site remoto com sucesso" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "Erro ao guardar o fluxo remoto" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "Salvar fluxo remoto com sucesso" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "Falha ao guardar o site %{name} em %{node}" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "Site %{name} guardado em %{node} com sucesso" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "Falha ao guardar o fluxo %{name} em %{node}" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "Fluxo %{name} guardado em %{node} com sucesso" @@ -4518,16 +5832,17 @@ msgstr "Fluxo %{name} guardado em %{node} com sucesso" msgid "Save successful" msgstr "Salvo com sucesso" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "Salvo com sucesso" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "Salvo com sucesso" @@ -4551,15 +5866,15 @@ msgstr "Escanear portas" msgid "Scan Results" msgstr "Resultados da verificação" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" "Digitalize o código QR com o seu telemóvel para adicionar a conta à " "aplicação." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "A verificar registros..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "A escanear" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4574,16 +5889,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "Pesquisar" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "Filtros de pesquisa" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "Pesquisar no conteúdo do registo..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "Nome do módulo de pesquisa" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "Pesquisar módulos" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "Intervalo de pesquisa" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "Pesquisar modelos" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "O segredo foi copiado" @@ -4600,13 +5936,21 @@ msgstr "Token de segurança" msgid "Security Token Information" msgstr "Informações do token de segurança" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" +"Selecione um diretório CA predefinido ou introduza um personalizado. Deixe " +"em branco para utilizar o diretório CA predefinido." + #: src/language/curd.ts:31 msgid "Select all" msgstr "Selecionar tudo" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "Selecionar uma ação após sincronização" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "Selecione ou insira um URL de diretório CA" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4616,7 +5960,7 @@ msgstr "{count} ficheiros selecionados" msgid "Selector" msgstr "Seletor" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "Auto-verificação" @@ -4632,11 +5976,15 @@ msgstr "" msgid "Send" msgstr "Enviar" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "Enviar mensagem de teste" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "Servidor" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "Erro do servidor" @@ -4644,6 +5992,10 @@ msgstr "Erro do servidor" msgid "Server Info" msgstr "Informação do Servidor" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "Endereço IP do servidor" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "Tamanho do balde hash de nomes de servidor" @@ -4652,7 +6004,7 @@ msgstr "Tamanho do balde hash de nomes de servidor" msgid "Server names hash table size" msgstr "Tamanho da tabela hash de nomes de servidor" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "server_name não encontrado em directivas" @@ -4660,6 +6012,10 @@ msgstr "server_name não encontrado em directivas" msgid "ServerIdx out of range" msgstr "ServerIdx fora do intervalo" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "Nome do serviço" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "Sessão não encontrada" @@ -4696,6 +6052,10 @@ msgstr "Definindo variáveis de ambiente" msgid "Setting HTTP01 challenge provider" msgstr "Definindo provedor de HTTP01 challenge" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "Configurações" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4716,7 +6076,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Configure a sua Nginx UI" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "Zona de Memória Partilhada" @@ -4724,10 +6084,18 @@ msgstr "Zona de Memória Partilhada" msgid "Show" msgstr "Mostrar" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "Mostrar assistente" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "Iniciar sessão com uma chave de acesso" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "Processamento de fluxo otimizado com SIMD" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "Directiva Única" @@ -4748,11 +6116,23 @@ msgstr "O site está em modo de manutenção" msgid "Site Logs" msgstr "Logs do Site" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "Navegação do site" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "Site não encontrado" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "Atualização do site iniciada" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "Sites" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "O diretório de sites existe" @@ -4760,6 +6140,14 @@ msgstr "O diretório de sites existe" msgid "Sites List" msgstr "Lista de Sites" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" +"Os sites aparecerão aqui assim que configurar os blocos de servidor nginx " +"com diretivas server_name válidas." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "O diretório sites-available não existe" @@ -4769,6 +6157,8 @@ msgid "Sites-enabled directory not exist" msgstr "O diretório sites-enabled não existe" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "Tamanho" @@ -4776,19 +6166,36 @@ msgstr "Tamanho" msgid "Skip Installation" msgstr "Ignorar instalação" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "Tempo de espera entre iterações do carregador de cache" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "Tempo de espera entre iterações do gestor de cache" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "Socket" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "Ordenado por" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "IP de origem" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "Patrocinador" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "Armazenamento SSD para melhor desempenho de E/S" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "Conteúdo do Certificado SSL" @@ -4802,15 +6209,20 @@ msgstr "" msgid "SSL certificate file not found" msgstr "Ficheiro de certificado SSL não encontrado" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "Conteúdo da Chave do Certificado SSL" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "Caminho para a Chave do Certificado SSL" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "Caminho para o Certificado SSL" @@ -4837,13 +6249,12 @@ msgstr "Caminho da chave SSL" msgid "SSL key path is required when HTTPS is enabled" msgstr "O caminho da chave SSL é necessário quando o HTTPS está ativado" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "Autenticação SSO" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "Estável" @@ -4851,33 +6262,49 @@ msgstr "Estável" msgid "Start" msgstr "Início" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "Data de início" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "Iniciar restauro" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "A iniciar o download..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "Estático" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "Estado" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "Estado atualizado com sucesso" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "Parado" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "Armazenamento" @@ -4903,10 +6330,6 @@ msgstr "Caminho de armazenamento" msgid "Storage path is required" msgstr "O caminho de armazenamento é obrigatório" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "Caminho de armazenamento não está nos caminhos de acesso concedidos: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4920,7 +6343,7 @@ msgstr "O fluxo está ativado" msgid "Stream not found" msgstr "Transmissão não encontrada" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "O diretório de streams existe" @@ -4932,6 +6355,10 @@ msgstr "O diretório streams-available não existe" msgid "Streams-enabled directory not exist" msgstr "O diretório streams-enabled não existe" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "Estruturado" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "Porta de estado stub" @@ -4940,7 +6367,7 @@ msgstr "Porta de estado stub" msgid "Stub_status is not enabled" msgstr "Stub_status não está ativado" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4951,18 +6378,6 @@ msgstr "Sucesso" msgid "Sunday" msgstr "Domingo" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Suporte à comunicação com o backend através do protocolo Server-Sent " -"Events. Se a sua Nginx UI estiver a ser utilizada através de um proxy " -"inverso Nginx, consulte este link para escrever o ficheiro de configuração " -"correspondente: https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -5011,12 +6426,12 @@ msgid "Sync Certificate" msgstr "Sincronizar Certificado" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "Falha ao sincronizar o certificado %{cert_name} para %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "Falha ao sincronizar o certificado %{cert_name} para %{node_name}" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "Sincronização do Certificado %{cert_name} para %{env_name} feito com sucesso" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "Certificado %{cert_name} sincronizado com %{node_name} com sucesso" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -5027,12 +6442,12 @@ msgid "Sync Certificate Success" msgstr "Certificado Sincronizado com Sucesso" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "Falha ao sincronizar a configuração %{config_name} para %{env_name}" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "Falha ao sincronizar a configuração %{config_name} para %{node_name}" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "Configuração %{config_name} sincronizada com sucesso para %{env_name}" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "Configuração %{config_name} sincronizada com %{node_name} com sucesso" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -5042,24 +6457,29 @@ msgstr "Erro de Configuração de Sincronização" msgid "Sync Config Success" msgstr "Sucesso na configuração da sincronização" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "Nós de sincronização" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "Pré-visualização de sincronização" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "Estratégia de sincronização" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "Sincronizar para" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "Sincronização" @@ -5076,10 +6496,14 @@ msgstr "Cópia de segurança do sistema" msgid "System Check" msgstr "Verificação do sistema" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "Utilizador Inicial do Sistema" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "Requisitos do sistema" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "Restauro do sistema" @@ -5100,19 +6524,45 @@ msgstr "Tarefa não encontrada" msgid "Telegram" msgstr "Telegram" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "Terminal" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "Assistente de terminal" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "Comando de Inicialização do Terminal" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "Teste" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "Teste falhou: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "Teste falhou: Não foi possível realizar a verificação de saúde" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "Mensagem de teste enviada com sucesso" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "Testar conexão S3" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "Teste bem-sucedido! Tempo de resposta: %{response_time}ms" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " @@ -5122,6 +6572,22 @@ msgstr "" "tiver passado mais de 1 semana ou o período que definiu nas definições " "desde a última emissão." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "" +"A base de dados GeoLite2 é necessária para análise geográfica de IP " +"offline. Por favor, descarregue-a para ativar esta funcionalidade." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "" +"A base de dados GeoLite2 fornece informações geográficas para endereços IP. " +"É utilizada para análise geográfica offline em análises de registos." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " @@ -5130,11 +6596,11 @@ msgstr "" "O número ICP deve conter apenas letras, unicode, números, hífens, traços, " "dois pontos e pontos." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "A valor introduzido não é um certificado SSL" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "O valor introduzido não é uma Chave de Certificado SSL" @@ -5173,11 +6639,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "O parâmetro de server_name é obrigatório" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "O caminho existe, mas o ficheiro não é um certificado" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "O caminho existe, mas o ficheiro não é uma chave privada" @@ -5189,7 +6655,7 @@ msgstr "" "O número de segurança pública deve conter apenas letras, unicode, números, " "hífens, traços, dois pontos e pontos." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5199,7 +6665,7 @@ msgstr "" "UI. Para evitar possíveis erros, atualize a versão remota do Nginx UI para " "corresponder à versão local." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5229,7 +6695,7 @@ msgstr "Conexões simultâneas máximas teóricas:" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "RPS máximo teórico (Pedidos Por Segundo):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5239,11 +6705,15 @@ msgstr "" "palavra-passe e os segundos fatores. Se não conseguir encontrar estes " "códigos, perderá o acesso à sua conta." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "Componentes de terceiros" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "Este item Auto Cert é inválido, por favor remova-o." -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "Este certificado é gerido pelo Nginx UI" @@ -5253,9 +6723,9 @@ msgstr "" "Este diretório está protegido e não pode ser eliminado por segurança do " "sistema." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "Este campo é mantatório" @@ -5281,6 +6751,12 @@ msgid "" "-_./:" msgstr "Este campo deve conter apenas letras, caracteres Unicode, números e -_./:" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "" +"Esta é uma mensagem de teste enviada em %{timestamp} da interface do " +"usuário nginx." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " @@ -5289,7 +6765,15 @@ msgstr "" "Este módulo fornece estatísticas de pedidos do Nginx, contagem de conexões, " "etc. Após ativá-lo, pode visualizar estatísticas de desempenho." -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "Este mês" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "Esta notificação está desativada" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." @@ -5297,6 +6781,28 @@ msgstr "" "Esta operação irá apenas remover o certificado da base de dados. Os " "ficheiros do certificado no sistema de ficheiros não serão eliminados." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"Este site está configurado como um servidor padrão (default_server) para " +"HTTPS (porta 443). Os certificados IP requerem suporte de uma Autoridade de " +"Certificação (CA) e podem não estar disponíveis em todos os fornecedores " +"ACME." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"Este site utiliza um nome de servidor curinga (_) que normalmente indica um " +"certificado baseado em IP. Os certificados IP requerem suporte de uma " +"Autoridade de Certificação (CA) e podem não estar disponíveis em todos os " +"fornecedores ACME." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5313,6 +6819,21 @@ msgstr "Este valor já está em uso" msgid "This will permanently delete the %{type}." msgstr "Isto irá eliminar permanentemente %{type}." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"Isso irá reconstruir todo o índice de registros. Todos os dados de índice " +"existentes serão eliminados e reconstruídos do zero. Isto pode demorar " +"algum tempo. Continuar?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "" +"Isso irá reconstruir os dados do índice para este ficheiro específico: " +"%{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5331,13 +6852,13 @@ msgstr "" "Isto irá restaurar os ficheiros de configuração e a base de dados. O Nginx " "UI irá reiniciar após a conclusão da restauração." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" "Isto vai actualizar ou reinstalar o Nginx UI em %{nodeNames} para " "%{version}." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "Limitação" @@ -5345,8 +6866,21 @@ msgstr "Limitação" msgid "Thursday" msgstr "Quinta-feira" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "Tempo" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "Intervalo de tempo" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "Tempo limite (segundos)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "Dicas" @@ -5363,11 +6897,15 @@ msgstr "" msgid "Title" msgstr "Título" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "para confirmar a eliminação" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "Para confirmar a revogação, digite \"Revogar\" no campo abaixo:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5375,7 +6913,7 @@ msgstr "" "Para habilitar, tem de instalar a app Google ou Microsoft Authenticator no " "seu telemóvel." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5420,15 +6958,41 @@ msgstr "O token está vazio" msgid "Token is not valid" msgstr "Token inválida" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "Top 10 países / regiões" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "Top 10 Províncias / Regiões" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "Top 10 URLs" + #: src/language/curd.ts:5 msgid "Total" msgstr "Total" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "Total de %{total} itens" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "Componentes totais" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "Conexões totais" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "Total de entradas" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5442,6 +7006,10 @@ msgstr "Total de processos Nginx" msgid "Total Nginx Processes" msgstr "Total de processos do Nginx" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "PV total" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "Receção total" @@ -5459,11 +7027,15 @@ msgstr "Total de Pedidos / Total de Conexões" msgid "Total Send" msgstr "Total enviado" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "UV total" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -5471,25 +7043,43 @@ msgstr "" "O TOTP é um método de autenticação de dois fatores que utiliza um algoritmo " "de palavra-passe única baseado no tempo." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "Tráfego" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "A traduzir erro..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "Lixo" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "" +"Tente ajustar os seus critérios de pesquisa ou navegar para páginas " +"diferentes." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "Tente ajustar os seus critérios de pesquisa ou o intervalo de tempo." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "Terça-feira" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "Autenticação de dois fatores necessária" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "Tipo" @@ -5497,15 +7087,47 @@ msgstr "Tipo" msgid "Type %{delete} to confirm" msgstr "Digite %{delete} para confirmar" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "Digite ou selecione o navegador" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "Digite ou selecione dispositivo" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "Digitar ou selecionar SO" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "Digite ou selecione códigos de status" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "Digite sua mensagem aqui..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "Páginas únicas" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "Desconhecido" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "Tipo de backup não suportado: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "Formato de registo não suportado" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "Atualização já em progresso" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "Atualizar senha" @@ -5514,32 +7136,30 @@ msgstr "Atualizar senha" msgid "Update Profile" msgstr "Atualizar perfil" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "Atualização bem-sucedida" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "Actualizado em" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "Actualizar" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "Nginx UI no %{node} actualizado com sucesso 🎉" @@ -5547,11 +7167,22 @@ msgstr "Nginx UI no %{node} actualizado com sucesso 🎉" msgid "Upgraded successfully" msgstr "Actualizado com sucesso" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "O resumo do núcleo do atualizador está vazio" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "O URL de download do núcleo do atualizador está vazio" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Actualizando Nginx UI, aguarde por favor..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "Carregar ficheiro %{type}" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "Carregar ficheiros" @@ -5560,19 +7191,29 @@ msgstr "Carregar ficheiros" msgid "Upload Folders" msgstr "Carregar pastas" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "A montante" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Nome do Upstream" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "Sockets Upstream" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "Tipo de teste de upstream" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "Uptime:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5584,14 +7225,19 @@ msgstr "Usar OTP" msgid "Use recovery code" msgstr "Usar o código de recuperação" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "Usar caminho temporário" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "Utilizador" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "Agente do utilizador" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "Utilizador banido" @@ -5608,7 +7254,7 @@ msgstr "Utilizador não ativou OTP como 2FA" msgid "User Profile" msgstr "Perfil do utilizador" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "Nome de Utilizador" @@ -5621,12 +7267,20 @@ msgstr "Nome de Utilizador (*)" msgid "Username length cannot exceed 255 characters" msgstr "O comprimento do nome de utilizador não pode exceder 255 caracteres" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "UV" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "Válido" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "Validar certificado SSL" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "Valor" @@ -5636,45 +7290,65 @@ msgstr "Valor" msgid "Verify Backup File Integrity" msgstr "Verificar integridade do ficheiro de backup" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "Verificar nome do host" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "Verificar requisitos do sistema" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "Versão" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "Ver" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "Ver todas notificações" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "Ver no GitHub" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "Ver códigos de recuperação" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "Ver componentes de terceiros" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "Visualizado" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "Visitas" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "Processos em espera" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "Aviso" @@ -5689,7 +7363,22 @@ msgstr "" "Certifique-se de que tem um ficheiro de cópia de segurança válido e um " "token de segurança, e selecione cuidadosamente o que restaurar." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"Aviso: Parece que este é um endereço IP privado. As autoridades de " +"certificação públicas como a Let's Encrypt não podem emitir certificados " +"para IPs privados. Utilize um endereço IP público ou considere usar uma " +"autoridade de certificação privada." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "Não aceitamos pedidos de funcionalidades" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." @@ -5697,7 +7386,7 @@ msgstr "" "Adicionaremos um ou mais registos TXT aos registos DNS do seu domínio para " "verificação de propriedade." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" @@ -5705,7 +7394,7 @@ msgstr "" "Removeremos a configuração HTTPChallenge deste ficheiro e reiniciaremos o " "Nginx. Tem a certeza de que quer continuar?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "Webauthn" @@ -5713,10 +7402,18 @@ msgstr "Webauthn" msgid "WebAuthn settings are not configured" msgstr "As configurações do WebAuthn não estão configuradas" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "Erro de conexão WebSocket" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket não conectado, aguarde pela conexão" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "WeCom" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "quarta-feira" @@ -5729,7 +7426,7 @@ msgstr "Semanal" msgid "Weekly on %{day} at %{time}" msgstr "Semanalmente no %{day} às %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5739,16 +7436,16 @@ msgstr "" "arranque. Geralmente, não ative isto a menos que esteja num ambiente de " "desenvolvimento e a utilizar o Pebble como CA." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" "Quando ativar/desativar, eliminar ou guardar este site, os nós definidos no " -"Grupo de Nós e os nós selecionados abaixo serão sincronizados." +"espaço de nomes e os nós selecionados abaixo serão sincronizados." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." @@ -5756,11 +7453,11 @@ msgstr "" "Quando gera novos códigos de recuperação, deve descarregar ou imprimir os " "novos códigos." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "Se deve usar um caminho temporário ao escrever ficheiros temporários" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "Certificado curinga" @@ -5779,8 +7476,8 @@ msgstr "Processos de trabalho" msgid "Workers" msgstr "Workers" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "Espaço de Trabalho" @@ -5805,16 +7502,18 @@ msgstr "Escrever chave privada do certificado ao disco" msgid "Writing certificate to disk" msgstr "Escrevendo certificado no disco" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "Sim" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5828,11 +7527,11 @@ msgstr "" "Não tem permissão para eliminar um ficheiro fora do caminho de configuração " "do nginx" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "Está a usar a última versão" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "Pode verificar a atualização do Nginx UI nesta página." @@ -5844,7 +7543,7 @@ msgstr "Pode fechar esta caixa de diálogo em %{countdown} segundos" msgid "You can close this dialog now" msgstr "Agora pode fechar esta caixa de diálogo" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." @@ -5852,17 +7551,17 @@ msgstr "" "Não configuraste as definições do WebAuthn, por isso não podes adicionar " "uma chave de acesso." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" "Ainda não ativou a autenticação de dois fatores. Por favor, ative-a para " "gerar códigos de recuperação." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "Ainda não gerou códigos de recuperação." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." @@ -5871,15 +7570,196 @@ msgstr "" "favor, gere novos códigos de recuperação assim que possível para garantir a " "segurança." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "Os seus códigos antigos não funcionarão mais." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "As suas chaves de acesso" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "Pipeline sem alocação" + +#~ msgid "in the same directory as" +#~ msgstr "no mesmo diretório que" + +#~ msgid "Sandbox test successful" +#~ msgstr "Teste de sandbox bem-sucedido" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "Testado em modo sandbox isolado" + +#~ msgid "All" +#~ msgstr "Todos" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "Com base em testes com M2 Pro (12 núcleos)" + +#~ msgid "CPU Utilization" +#~ msgstr "Utilização da CPU" + +#~ msgid "Indexing Throughput" +#~ msgstr "Taxa de indexação" + +#~ msgid "Memory Efficiency" +#~ msgstr "Eficiência de memória" + +#~ msgid "Performance Impact Notice" +#~ msgstr "Aviso de Impacto no Desempenho" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "Otimização de pipeline sem alocação" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "Pedir ajuda ao ChatGPT" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "Mapeamento geográfico e insights" + +#~ msgid "No feature requests accepted." +#~ msgstr "Não são aceites pedidos de funcionalidades" + +#~ msgid "Time-series trend analysis" +#~ msgstr "Análise de tendências de séries temporais" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "Análise de User-Agent e navegador" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ núcleos (Apple M2 Pro ou equivalente Intel)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "4 GB+ de RAM para desempenho ideal" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "Tamanho de lote adaptável" + +#~ msgid "CPU Architecture" +#~ msgstr "Arquitetura da CPU" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "Análise de GeoIP e User-Agent" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "Mínimo de 1 GB de RAM" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "CPU moderno (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "Monitorização de desempenho em tempo real" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "Desempenho sustentado em hardware moderno" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "Caminho de backup não está nos caminhos de acesso concedidos: {0}" + +#~ msgid "Build with" +#~ msgstr "Build com" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "Falha ao copiar o diretório da base de dados: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "Falha ao criar o diretório de backup: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "Falha ao avaliar os links simbólicos: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "Falha ao restaurar os ficheiros da interface de utilizador do Nginx: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "Falha ao escrever no buffer ZIP: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "Falha na verificação do hash: integridade do ficheiro comprometida" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "Acesso ao bucket S3 negado: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "Teste de conexão S3 falhou: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "As credenciais do S3 são inválidas: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "O endpoint S3 é inválido: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "Caminho de armazenamento não está nos caminhos de acesso concedidos: {0}" + +#~ msgid "files" +#~ msgstr "arquivos" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "A indexar registos, por favor aguarde..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "A carregar dados do painel..." + +#~ msgid "Today" +#~ msgstr "Hoje" + +#~ msgid "Data refreshed successfully" +#~ msgstr "Dados atualizados com sucesso" + +#~ msgid "Failed to refresh data" +#~ msgstr "Falha ao atualizar os dados" + +#~ msgid "Log File:" +#~ msgstr "Ficheiro de registo:" + +#~ msgid "Log path" +#~ msgstr "Caminho do registo" + +#~ msgid "Index Size" +#~ msgstr "Tamanho do índice" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "Tamanho da página" + +#~ msgid "Environments" +#~ msgstr "Ambientes" + +#~ msgid "Node Group" +#~ msgstr "Grupo de nós" + +#~ msgid "Node Groups" +#~ msgstr "Grupos de nós" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "Verifique se o diretório conf.d existe" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Suporte à comunicação com o backend através do protocolo Server-Sent " +#~ "Events. Se a sua Nginx UI estiver a ser utilizada através de um proxy " +#~ "inverso Nginx, consulte este link para escrever o ficheiro de configuração " +#~ "correspondente: https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "Se for deixado em branco, será utilizado o diretório CA padrão." + +#~ msgid "Save error %{msg}" +#~ msgstr "Erro ao Salvar %{msg}" + +#~ msgid "Main" +#~ msgstr "Principal" + +#~ msgid "Select an action after sync" +#~ msgstr "Selecionar uma ação após sincronização" + #~ msgid "Link Start" #~ msgstr "Início do link" @@ -5913,9 +7793,6 @@ msgstr "As suas chaves de acesso" #~ msgid "Last Backup Error" #~ msgstr "Último erro de backup" -#~ msgid "Apply" -#~ msgstr "Aplicar" - #~ msgid "Apply bulk action successfully" #~ msgstr "Ação em massa aplicada com sucesso" @@ -5943,10 +7820,6 @@ msgstr "As suas chaves de acesso" #~ msgid "Recovered Successfully" #~ msgstr "Recuperado com sucesso" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "Total %{total} item" - #~ msgid "View Details" #~ msgstr "Ver Detalhes" @@ -6007,9 +7880,6 @@ msgstr "As suas chaves de acesso" #~ msgid "Environment" #~ msgstr "Ambiente" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "Falha ao salvar, erro(s) de sintaxe detectados no ficheiro de configuração." - #~ msgid "Format error %{msg}" #~ msgstr "Erro de Formato %{msg}" @@ -6023,9 +7893,6 @@ msgstr "As suas chaves de acesso" #~ msgid "Incorrect username or password" #~ msgstr "Utilizador ou senha incorrectos" -#~ msgid "Recovery Code:" -#~ msgstr "Código de Recuperação:" - #~ msgid "" #~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, please upgrade " #~ "the remote Nginx UI to the latest version" @@ -6033,9 +7900,6 @@ msgstr "As suas chaves de acesso" #~ "Erro ao mudar o nome de %{orig_path} para %{new_path} no %{env_name}, por " #~ "favor actualize a versão do Nginx UI para a mais recente" -#~ msgid "Server Name" -#~ msgstr "Nome do Servidor" - #~ msgid "" #~ "Sync Certificate %{cert_name} to %{env_name} failed, please upgrade the " #~ "remote Nginx UI to the latest version" diff --git a/app/src/language/ru_RU/app.po b/app/src/language/ru_RU/app.po index b0e23f081..a78243b7f 100644 --- a/app/src/language/ru_RU/app.po +++ b/app/src/language/ru_RU/app.po @@ -16,94 +16,141 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.5\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "[Nginx UI] Пользователь ACME: %{name}, Email: %{email}, Каталог CA: %{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "" "[Nginx UI] Резервное копирование текущего сертификата для последующего " "отзыва" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] Сертификат успешно обновлен" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] Сертификат успешно отозван" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" "[Nginx UI] Сертификат использовался для сервера, перезагрузка " "TLS-сертификата сервера" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] Создание клиента для облегчения связи с сервером CA" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] Переменные окружения очищены" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] Завершено" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] Сертификат успешно выдан" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] Получение сертификата" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] Подготовка к отзыву сертификата" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] Подготовка конфигураций lego" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] Перезагрузка nginx" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] Отзыв завершен" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] Отзыв сертификата" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] Отзыв старого сертификата" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] Настройка провайдера проверки DNS01" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] Установка переменных окружения" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] Настройка провайдера HTTP01-проверки" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] Запись закрытого ключа сертификата на диск" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] Запись сертификата на диск" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} скопировано в буфер обмена" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* Включает узлы из группы %{groupName} и узлы, выбранные вручную" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "" +"* Файлы индекса по умолчанию хранятся в каталоге \"log-index\" в пути " +"конфигурации NGINX UI." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* Показатели производительности измерены на Apple M2 Pro (12 ядер) с 32 ГБ " +"оперативной памяти. Фактическая производительность может отличаться в " +"зависимости от конфигурации вашего оборудования." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{start}-%{end} из %{total} элементов" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "Минимум 1 ядро" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "Минимум 1 ГБ оперативной памяти" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "Рекомендуется 2+ ядра" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "24-часовая статистика UV/PV" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "2FA" @@ -112,11 +159,15 @@ msgstr "2FA" msgid "2FA Settings" msgstr "Настройки 2FA" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "Рекомендуется 4 ГБ ОЗУ или больше" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "О проекте" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "Журнал доступа" @@ -125,30 +176,28 @@ msgid "Access log path not exist" msgstr "Путь к журналу доступа не существует" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "Журналы доступа" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "Пользователь ACME" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "Действие" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "Действия" @@ -163,15 +212,15 @@ msgid "Actual worker to configured ratio" msgstr "Фактическое соотношение рабочих к настроенным" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "Добавить" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "Добавить ключ доступа" @@ -185,10 +234,14 @@ msgstr "Добавить конфигурацию" msgid "Add Directive Below" msgstr "Добавить директиву ниже" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "Добавить домен" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "Добавить заголовок" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -202,15 +255,15 @@ msgstr "Добавить сервер" msgid "Add Site" msgstr "Добавить Сайт" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "Добавить поток" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "Добавить upstream" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "Добавлено успешно" @@ -218,25 +271,51 @@ msgstr "Добавлено успешно" msgid "Additional" msgstr "Дополнительно" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "Расширенный режим" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "Расширенная индексация включена, но не удалось начать перестроение" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "Расширенная индексация успешно включена" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" +"Расширенные функции индексирования журналов бесплатны и имеют открытый " +"исходный код для всех пользователей" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "Продвинутая система пула памяти" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "Расширенный поиск и фильтрация" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "Дополнительные настройки" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "После этого обновите эту страницу и снова нажмите «Добавить ключ доступа»." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "Все" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "Все компоненты" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "Все коды восстановления были использованы" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." @@ -244,6 +323,26 @@ msgstr "" "Все выбранные поддомены должны принадлежать одному и тому же " "DNS-провайдеру, иначе запрос сертификата завершится неудачей." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"В качестве альтернативы, если вы не можете загрузить базу данных, вы можете " +"вручную поместить GeoLite2-City.mmdb в тот же каталог, что и app.ini." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "Сервис аналитики недоступен" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "Любой" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "Любой доступный IP-адрес можно использовать с частными центрами сертификации" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "Базовый URL API" @@ -264,36 +363,40 @@ msgstr "API-токен" msgid "API Type" msgstr "Тип API" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "Приложение" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "Применить" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "Архитектура" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "Вы уверены, что хотите немедленно удалить этот заблокированный IP?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "Вы уверены, что хотите немедленно удалить этот ключ доступа?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "Вы уверены, что хотите сгенерировать новые коды восстановления?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "Вы уверены, что хотите сбросить 2FA?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "Вы уверены, что хотите очистить все уведомления?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "Вы уверены, что хотите очистить сообщения чата?" @@ -301,18 +404,18 @@ msgstr "Вы уверены, что хотите очистить сообщен msgid "Are you sure you want to delete permanently?" msgstr "Вы уверены, что хотите удалить безвозвратно?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "Вы уверены, что хотите удалить?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "" "Вы уверены, что хотите перезагрузить Nginx на следующих синхронизированных " "узлах?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "Вы уверены, что хотите удалить эту директиву?" @@ -324,7 +427,7 @@ msgstr "Вы уверены, что хотите удалить этот эле msgid "Are you sure you want to remove this location?" msgstr "Вы уверены, что хотите удалить location?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "" "Вы уверены, что хотите перезапустить Nginx на следующих синхронизированных " @@ -334,23 +437,27 @@ msgstr "" msgid "Are you sure you want to restore?" msgstr "Вы уверены, что хотите восстановить?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "Обратитесь за помощью к ChatGPT" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "По возрастанию" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "Ассистент" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "Не менее 20 ГБ свободного места на диске" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "Попытка исправить" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "Попытки" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "Авторизация" @@ -358,12 +465,12 @@ msgstr "Авторизация" msgid "Authenticate with a passkey" msgstr "Аутентификация с помощью ключа доступа" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "Настройки аутентификации" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "Аутентификация..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "Автор" @@ -397,28 +504,27 @@ msgstr "Автоматическое резервное копирование msgid "Auto Backup Storage Failed" msgstr "Сбой хранения автоматической резервной копии" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "Автообновление" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "Автоматическое обновление отключено" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "Автоматическое обновление включено" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "Автообновление отключено для %{name}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "Автообновление включено для %{name}" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert выполняется, пожалуйста, подождите..." @@ -427,16 +533,32 @@ msgstr "AutoCert выполняется, пожалуйста, подождит msgid "AutoCert is running..." msgstr "AutoCert выполняется..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "Автоматическое обнаружение ротации логов" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "Автоматическая перезагрузка" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "Средняя задержка" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "Среднее дневное UV" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "Сред./PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "Назад" @@ -448,6 +570,22 @@ msgstr "Вернуться на главную" msgid "Back to List" msgstr "Вернуться к списку" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "Бэкенд" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "" +"Фоновое индексирование в процессе. Данные будут автоматически обновлены по " +"готовности." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "Фоновая служба журналов недоступна" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "Резервная копия" @@ -458,7 +596,7 @@ msgstr "" "Проверка целостности файла резервной копии не удалась, возможно, он был " "изменён" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "Файл резервной копии не найден: {0}" @@ -470,24 +608,20 @@ msgstr "Резервная копия успешно загружена" msgid "Backup Path" msgstr "Путь резервной копии" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "Путь для резервного копирования не существует: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "Путь резервного копирования не является каталогом: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "" "Путь резервного копирования требуется для резервного копирования " "пользовательского каталога" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "Путь резервного копирования не входит в разрешенные пути доступа: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "Расписание резервного копирования" @@ -514,15 +648,15 @@ msgstr "" msgid "Backup Type" msgstr "Тип резервной копии" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "Порог блокировки в минутах" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "Заблокированные IP-адреса" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "Заблокирован до" @@ -534,18 +668,18 @@ msgstr "Bark" msgid "Base information" msgstr "Основная информация" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "Основные" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "Простой режим" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "Основные настройки" @@ -557,7 +691,7 @@ msgstr "Пакетное редактирование" msgid "Batch Modify" msgstr "Массовое изменение" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "Пакетное обновление" @@ -569,11 +703,28 @@ msgstr "Ниже приведены выбранные элементы, кот msgid "Block is nil" msgstr "Блок равен nil" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "Собрать с" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "Браузер" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "Статистика браузера" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"Включая расширенное индексирование, вы подтверждаете, что ваша система " +"соответствует требованиям и понимаете последствия для производительности. " +"Это немедленно начнет индексировать существующие файлы журналов." -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "Каталог CA" @@ -581,13 +732,13 @@ msgstr "Каталог CA" msgid "Cache" msgstr "Кэш" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "" "Элементы кэша, к которым не обращались в течение этого времени, будут " "удалены" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "Пороговое время обработки загрузчика кэша" @@ -596,15 +747,15 @@ msgstr "Пороговое время обработки загрузчика к msgid "Cache manager processes" msgstr "Процессы менеджера кэша" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "Пороговое время обработки менеджера кэша" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "Настройки менеджера кэша" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "Путь к кешу" @@ -613,7 +764,7 @@ msgstr "Путь к кешу" msgid "Cache Processes" msgstr "Кэш-процессы" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "Структура уровней подкаталогов кэша, например, 1:2" @@ -630,24 +781,33 @@ msgstr "" "Рассчитывается на основе worker_processes * worker_connections. Фактическая " "производительность зависит от оборудования, конфигурации и рабочей нагрузки" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "Отмена" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "Невозможно получить доступ к пути резервного копирования {0}: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "Невозможно получить доступ к файлу журнала" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "Невозможно получить доступ к пути хранения {0}: {1}" @@ -671,7 +831,7 @@ msgstr "Не может получить данные о производите msgid "Cannot remove initial user" msgstr "Невозможно удалить начального пользователя" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "Сертификат" @@ -679,6 +839,11 @@ msgstr "Сертификат" msgid "Cert path is not under the nginx conf dir" msgstr "Путь к сертификату не находится в директории конфигурации nginx" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "сертификат" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "Срок действия сертификата %{name} истёк" @@ -693,6 +858,10 @@ msgstr "Сертификат %{name} истечет через %{days} дней" msgid "Certificate %{name} will expire in 1 day" msgstr "Сертификат %{name} истечет через 1 день" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "Содержимое сертификата и закрытый ключ не могут быть пустыми" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "Ошибка декодирования сертификата" @@ -711,6 +880,14 @@ msgstr "Сертификат истёк" msgid "Certificate Expiring Soon" msgstr "Сертификат скоро истекает" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "Файлы сертификата успешно загружены" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "Имя сертификата не может быть пустым" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "Сертификат не найден: %{error}" @@ -723,8 +900,8 @@ msgstr "Ошибка разбора сертификата" msgid "Certificate path is empty" msgstr "Путь к сертификату пуст" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "Сертификат успешно удален" @@ -740,14 +917,14 @@ msgstr "Сертификат успешно продлен" msgid "Certificate revoked successfully" msgstr "Сертификат успешно отозван" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Статус сертификата" msgstr[1] "Статус сертификатов" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "Тип сертификата" @@ -756,7 +933,7 @@ msgstr "Тип сертификата" msgid "Certificates" msgstr "Сертификаты" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "Список сертификатов" @@ -764,7 +941,7 @@ msgstr "Список сертификатов" msgid "Challenge error: {0}" msgstr "Ошибка проверки: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "Метод Challenge" @@ -787,26 +964,33 @@ msgstr[1] "Сертификаты изменены" msgid "Changed Path" msgstr "Путь изменён" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "Канал" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "Чат" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "Чат для %{path}" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "Проверить" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "Проверить повторно" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "Проверить фавикон" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -839,6 +1023,22 @@ msgstr "" "препятствует использованию Passkeys и функций буфера обмена" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "Проверьте, находится ли каталог conf.d в каталоге конфигурации nginx" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"Проверьте, доступна ли база данных GeoLite2 при включенной индексации " +"журналов. База данных GeoLite2 необходима для географического анализа " +"IP-адресов в журналах. Вы можете скачать ее со страницы настроек или " +"разместить GeoLite2-City.mmdb вручную в том же каталоге, что и app.ini" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -854,15 +1054,15 @@ msgstr "" "указать путь к журналу доступа. Подробнее см. в документации: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "Проверить, существует ли каталог конфигурации nginx" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "Проверить, существует ли файл конфигурации nginx" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -878,7 +1078,7 @@ msgstr "" "путь к журналу ошибок. Подробнее см. в документации: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -892,23 +1092,23 @@ msgstr "" "чтобы указать путь к PID Nginx. Подробнее см. в документации: " "https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "Проверьте, существует ли путь к sbin nginx" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "Проверить, включает ли файл nginx.conf директорию conf.d" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "Проверить, включает ли nginx.conf каталог sites-enabled" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "Проверить, включает ли nginx.conf каталог streams-enabled" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" @@ -916,7 +1116,7 @@ msgstr "" "Проверьте, находятся ли каталоги sites-available и sites-enabled в каталоге " "конфигурации nginx" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" @@ -924,6 +1124,19 @@ msgstr "" "Проверьте, находятся ли каталоги streams-available и streams-enabled в " "каталоге конфигурации nginx" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "Интервал проверки (секунды)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "Карта доступа Китая" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "Карта Китая" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "Зашифрованный текст слишком короткий" @@ -932,13 +1145,13 @@ msgstr "Зашифрованный текст слишком короткий" msgid "Cleaning environment variables" msgstr "Очистка переменных среды" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "Очистить" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "Очищено успешно" @@ -958,7 +1171,7 @@ msgstr "Нажмите или перетащите файлы в эту обла msgid "Click or drag folders to this area to upload" msgstr "Нажмите или перетащите папки в эту область для загрузки" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "Нажмите, чтобы скопировать" @@ -966,10 +1179,18 @@ msgstr "Нажмите, чтобы скопировать" msgid "Client Body Buffer Size" msgstr "Размер буфера корпуса клиента" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "Клиентский сертификат" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "Размер буфера заголовков клиента" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "Ключ клиента" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "Максимальный размер тела клиента" @@ -998,6 +1219,14 @@ msgstr "Автодополнение кода не включено" msgid "Code Completion Model" msgstr "Модель автодополнения кода" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "Свернуть" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "Настройки столбцов" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "Команда" @@ -1006,7 +1235,7 @@ msgstr "Команда" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "Команда завершилась с неожиданным кодом выхода: {0}, ошибка: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -1029,11 +1258,34 @@ msgstr "Сравните выбранный" msgid "Compare with Current" msgstr "Сравнить с текущим" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "Полная индексация с возможностями поиска" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "компоненты" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "Поддержка сжатых файлов журналов" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "Уровень сжатия, 1 самый низкий, 9 - самый высокий" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "Вычисление статистики" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "Каталог conf.d существует" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Каталог Conf.d не существует" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "Конфигурация" @@ -1046,22 +1298,30 @@ msgstr "Каталог конфигурации не существует" msgid "Config entry file not exist" msgstr "Файл входа конфигурации не существует" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "Конфигурация не найдена" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "Путь конфигурации пуст" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "Шаблон конфигурации" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "Конфигурация" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "Проверка конфигурации успешна" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "Файл конфигурации успешно протестирован в изолированной песочнице" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "История конфигурации" @@ -1082,11 +1342,20 @@ msgstr "Конфигурации" msgid "Configure SSL" msgstr "Настроить SSL" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "Подтвердить удаление" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "Подтвердите новый пароль" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "Требуется подтверждение" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "Подключено" @@ -1094,9 +1363,9 @@ msgstr "Подключено" msgid "Connection error, trying to reconnect..." msgstr "Ошибка соединения, попытка переподключения..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "Соединение потеряно, пожалуйста, обновите страницу." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "Соединение с этим терминалом потеряно. При необходимости обновите." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1106,14 +1375,14 @@ msgstr "Период таймаута соединения" msgid "Container status unknown" msgstr "Статус контейнера неизвестен" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "Содержание" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "Скопировано" @@ -1126,14 +1395,38 @@ msgstr "Скопировано!" msgid "Copy" msgstr "Копировать" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "Копировать коды" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "Обновление ядра" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "Не удалось найти имя старого контейнера" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "Не удалось найти временный контейнер" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "Количество" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "Страна / Регион" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "ЦП" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "Нагрузка CPU" @@ -1178,10 +1471,10 @@ msgstr "" "компьютер." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "Создан в" @@ -1206,11 +1499,15 @@ msgstr "Учетные данные" msgid "Cron Expression" msgstr "Выражение Cron" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "Кросс-файловая корреляция временных шкал" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "Текущая учетная запись имеет включенную TOTP." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "Для текущей учетной записи TOTP не включен." @@ -1230,12 +1527,12 @@ msgstr "Текущий пароль" msgid "Current usage" msgstr "Текущее использование" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "Текущяя версия" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "Пользовательский" @@ -1248,14 +1545,18 @@ msgstr "Пользовательское cron-выражение" msgid "Custom Directory" msgstr "Пользовательская директория" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "Пользовательские домены" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "Сертификат для пользовательских доменов" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "Пользовательские заголовки" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1266,6 +1567,10 @@ msgstr "Настройте имя локального узла для отоб msgid "Daily" msgstr "Ежедневно" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "Ежедневные тенденции доступа" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "Ежедневно в %{time}" @@ -1273,10 +1578,18 @@ msgstr "Ежедневно в %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "Доска" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "Дата" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "Диапазон дат" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "День месяца" @@ -1289,34 +1602,48 @@ msgstr "День недели" msgid "Days" msgstr "Дни" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "Файл базы данных не найден" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "Разархивирование успешно завершено, но не удалось удалить сжатый файл: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "Ошибка расшифровки" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "Диапазон по умолчанию" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "Определите имя и размер зоны общей памяти, например proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "Удалить" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "Не удалось удалить %{path} на %{env_name}" +msgid "Delete %{path} on %{node_name} failed" +msgstr "Не удалось удалить %{path} на %{node_name}" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "%{path} на %{env_name} успешно удалён" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "%{path} успешно удалён на %{node_name}" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "Удалить сертификат" @@ -1336,43 +1663,44 @@ msgstr "Ошибка удаления удаленной конфигураци msgid "Delete Remote Config Success" msgstr "Удаление удаленной конфигурации успешно" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "Ошибка удаления удаленного сайта" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "Удаление удаленного сайта успешно завершено" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "Ошибка удаления удаленного потока" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "Удаление удаленного потока успешно" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "Не удалось удалить сайт %{name} с %{node}" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "Сайт %{name} успешно удалён с %{node}" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "Удалить сайт: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "Не удалось удалить поток %{name} с %{node}" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "Поток %{name} успешно удален с %{node}" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "Удалить поток: %{stream_name}" @@ -1388,8 +1716,16 @@ msgstr "Демо" msgid "Deploy" msgstr "Развернуть" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "Режим развертывания" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "По убыванию" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "Описание" @@ -1405,18 +1741,44 @@ msgstr "Файл назначения: {0} уже существует" msgid "Details" msgstr "Детали" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Dev" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "Разработка" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "Режим разработки" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "Устройство" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "Статистика устройств" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "Тип устройства" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "Содержимое файла хеш-суммы пусто" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "ДинТок" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "Прямой" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "Директива" @@ -1437,98 +1799,101 @@ msgstr "DirectiveIdx вне диапазона" msgid "Directives" msgstr "Директивы" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "Уровни каталога" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "Путь к каталогу для хранения кэшированных файлов" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "Отключить" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "Не удалось отключить автоматическое продление для %{name}" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "Ошибка отключения удаленного сайта" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "Ошибка отключения обслуживания удаленного сайта" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "Успешное отключение обслуживания удаленного сайта" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "Удалённый сайт успешно отключён" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "Ошибка отключения удаленного потока" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "Удаленный поток успешно отключен" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "Не удалось отключить сайт %{name} с %{node}" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "Сайт %{name} успешно отключен на %{node}" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "Не удалось отключить обслуживание сайта %{name} на %{node}" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "Обслуживание сайта %{name} на %{node} успешно отключено" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "Не удалось отключить поток %{name} с узла %{node}" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "Поток %{name} отключен от %{node} успешно" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "Отключено" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "Отключено успешно" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "Отключено" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "Нагрузка на Диск IO" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "DNS учетные данные" @@ -1537,11 +1902,15 @@ msgstr "DNS учетные данные" msgid "DNS Provider" msgstr "Провайдер DNS" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "DNS-резолвер" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "Не включайте эту опцию, если не уверены, что она вам нужна." @@ -1549,11 +1918,11 @@ msgstr "Не включайте эту опцию, если не уверены, msgid "Do you want to %{action} this site?" msgstr "Вы хотите %{action} этот сайт?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "Вы хотите %{action} этот поток?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "Вы хотите отключить автоматическое обновление сертификата?" @@ -1566,7 +1935,7 @@ msgstr "Вы хотите включить TLS?" msgid "Do you want to remove this server?" msgstr "Хотите удалить этот сервер?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "Хотите удалить этот сервер?" @@ -1574,7 +1943,7 @@ msgstr "Хотите удалить этот сервер?" msgid "Docker client not initialized" msgstr "Клиент Docker не инициализирован" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Сокет Docker существует" @@ -1588,14 +1957,35 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "Документ" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "Количество документов" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "Домен" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "Список доменов пуст, попробуйте заново создать авто-сертификат для %{config}" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "Скачать файлы сертификата" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "Скачивание завершено" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "Скачивание не удалось" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "Скачать базу данных GeoLite2" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "Ошибка загрузки последней версии" @@ -1604,12 +1994,19 @@ msgstr "Ошибка загрузки последней версии" msgid "Downloading latest release" msgstr "Загрузка последней версии" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "Перетащите файл сертификата сюда" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "Перетащите файл закрытого ключа сюда" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "Включен пробный режим" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1618,10 +2015,12 @@ msgstr "" "ключи доступа на сайтах без HTTPS, за исключением случаев, когда они " "запускаются на localhost." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "Дублировать" @@ -1630,21 +2029,33 @@ msgstr "Дублировать" msgid "Duplicate to local successfully" msgstr "Успешно дублировано на локальный" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "Динамический" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "Динамическое управление шардами" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "напр., 0 0 * * * (ежедневно в полночь)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "Ключ HMAC EAB" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "ID ключа EAB" + #: src/language/curd.ts:8 msgid "Edit" msgstr "Редактировать" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "Редактировать %{n}" @@ -1661,7 +2072,7 @@ msgstr "Редактировать Сайт" msgid "Edit Stream" msgstr "Редактировать поток" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "Электронная почта" @@ -1670,16 +2081,28 @@ msgstr "Электронная почта" msgid "Email (*)" msgstr "Email (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "Пустая строка журнала" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "включить" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "Двухфакторная аутентификация успешно включена" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "Включить расширенное индексирование" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "Включить расширенное индексирование журналов" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "Не удалось включить автоматическое продление для %{name}" @@ -1703,57 +2126,61 @@ msgstr "Включить HTTP/3" msgid "Enable HTTPS" msgstr "Включить HTTPS" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "Включить индексацию" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "Включить кэш прокси" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "Ошибка включения удаленного сайта" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "Ошибка включения обслуживания удаленного сайта" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "Успешное включение обслуживания удаленного сайта" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "Удалённый сайт успешно включён" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "Ошибка включения удаленного потока" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "Успешное включение удаленного потока" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "Не удалось включить обслуживание сайта %{name} на %{node}" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "Техническое обслуживание сайта %{name} на %{node} успешно включено" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "Не удалось включить сайт %{name} на %{node}" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "Сайт %{name} успешно включён на %{node}" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "Не удалось включить поток %{name} на %{node}" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "Поток %{name} успешно включён на %{node}" @@ -1765,29 +2192,29 @@ msgstr "Включить модуль stub_status" msgid "Enable TLS" msgstr "Включить TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "Включить TOTP" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "Включено" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "Активировано успешно" @@ -1803,6 +2230,16 @@ msgstr "" "Включает поддержку HTTP/3 на основе протокола QUIC для наилучшей " "производительности" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"Включение расширенной индексации журналов потребует значительных " +"вычислительных ресурсов, включая процессор и память. Перед продолжением " +"убедитесь, что ваша система соответствует минимальным требованиям." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Использовать для сайта Let's Encrypt" @@ -1811,11 +2248,19 @@ msgstr "Использовать для сайта Let's Encrypt" msgid "End" msgstr "Конец" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "Дата окончания" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "Введите имя домена" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "Введите IP-адрес сервера (например, 203.0.113.1 или 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "Введите ваш домен" @@ -1827,39 +2272,58 @@ msgstr "Конфигурация среды пуста" msgid "Environment variables cleaned" msgstr "Переменные окружения очищены" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "Окружения" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "Ошибка" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "Детали ошибки" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "Ошибка инициализации просмотрщика различий" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "Журнал ошибок" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "Обнаружен журнал ошибок" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "Путь к журналу ошибок не существует" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "Ошибка логирования" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "" +"Журналы ошибок не поддерживают структурированный анализ, так как содержат " +"свободные текстовые сообщения." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "Распознавание шаблонов ошибок" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "Ошибка обработки содержимого" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "Исполняемый двоичный файл пуст" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "Исполняемый путь" @@ -1875,6 +2339,22 @@ msgstr "Выполнять каждый день в %{time}" msgid "Execute on every month on day %{day} at %{time}" msgstr "Выполнять каждый месяц в день %{day} в %{time}" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "Развернуть" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "Ожидаемая производительность" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "Ожидаемые коды состояния" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "Ожидаемый текст" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1888,12 +2368,36 @@ msgstr "Истекает: %{date}" msgid "Export Excel" msgstr "Экспорт в Excel" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "" +"Ключ HMAC для привязки внешнего аккаунта (опционально). Должен быть в " +"формате кодирования Base64 URL." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "" +"Идентификатор ключа внешней привязки аккаунта (опционально). Требуется " +"некоторыми провайдерами ACME, такими как ZeroSSL." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "Внешний контейнер Docker" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "Внешняя конфигурация уведомлений не найдена" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "Тест внешнего уведомления" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "Внешнее уведомление" @@ -1922,15 +2426,15 @@ msgstr "Не удалось создать резервную копию фай msgid "Failed to build nginx config: {0}" msgstr "Не удалось собрать конфигурацию nginx: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "Не удалось вычислить хеш: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Не удалось вычислить хеш Nginx: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Не удалось вычислить хеш Nginx UI: {0}" @@ -1943,38 +2447,35 @@ msgid "Failed to copy config file: {0}" msgstr "Не удалось скопировать файл конфигурации: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "Не удалось скопировать каталог базы данных: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "Не удалось скопировать файл базы данных: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "Не удалось скопировать содержимое файла: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Не удалось скопировать каталог конфигурации Nginx: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "Не удалось скопировать в буфер обмена" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "Не удалось создать резервную копию" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "Не удалось создать каталог резервной копии: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "Не удалось создать файл резервной копии: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "Не удалось создать директорию: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "Не удалось создать файл: {0}" @@ -1982,19 +2483,19 @@ msgstr "Не удалось создать файл: {0}" msgid "Failed to create hash info file: {0}" msgstr "Не удалось создать файл с информацией о хеше: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "Не удалось создать родительский каталог: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "Не удалось создать каталог восстановления: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "Не удалось создать каталог хранилища {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "Не удалось создать символическую ссылку: {0}" @@ -2010,48 +2511,64 @@ msgstr "Не удалось создать временную директори msgid "Failed to create temporary subdirectory" msgstr "Не удалось создать временную поддиректорию" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "Не удалось создать читатель xz: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "Не удалось создать ZIP-архив: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "Не удалось создать запись в ZIP: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "Не удалось создать ZIP-файл: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "Не удалось создать заголовок ZIP: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "Не удалось распаковать базу данных GeoLite2: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "Не удалось расшифровать данные: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "Не удалось расшифровать файл: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Не удалось расшифровать каталог Nginx: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Не удалось расшифровать каталог Nginx UI: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "Не удалось удалить все индексы" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "Не удалось удалить сертификат" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "Не удалось удалить сертификат из базы данных: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "Не удалось удалить индекс файла" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "Не удалось отключить %{msg}" @@ -2059,20 +2576,32 @@ msgstr "Не удалось отключить %{msg}" msgid "Failed to disable maintenance mode %{msg}" msgstr "Не удалось отключить режим обслуживания: %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "Не удалось скачать файлы сертификата" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "Не удалось скачать базу данных GeoLite2: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "Не удалось включить %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "Не удалось включить расширенное индексирование" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "Не удалось включить режим обслуживания: %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "Ошибка шифрования данных: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "Не удалось зашифровать файл: {0}" @@ -2084,10 +2613,6 @@ msgstr "Не удалось зашифровать каталог Nginx: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Не удалось зашифровать каталог Nginx UI: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "Не удалось оценить символические ссылки: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "Не удалось выполнить команду: {0}" @@ -2096,7 +2621,7 @@ msgstr "Не удалось выполнить команду: {0}" msgid "Failed to execute template: {0}" msgstr "Не удалось выполнить шаблон: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "Не удалось извлечь архив: {0}" @@ -2116,14 +2641,30 @@ msgstr "Не удалось получить информацию о серти msgid "Failed to get container id: {0}" msgstr "Не удалось получить идентификатор контейнера: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "Не удалось получить размер файла: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "Не удалось получить статус индекса" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Не удалось получить настройки производительности Nginx" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "Не удалось получить путь к nginx.conf" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "Не удалось получить данные о производительности" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "Не удалось получить статистику устойчивости" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "Не удалось получить статус заглушки: {0}" @@ -2140,15 +2681,19 @@ msgstr "Не удалось проверить текущий контейнер msgid "Failed to load history records" msgstr "Не удалось загрузить записи истории" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "Не удалось открыть файл: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "Не удалось открыть исходный файл: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "Не удалось открыть запись в ZIP: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "Не удалось открыть ZIP-файл: {0}" @@ -2168,15 +2713,23 @@ msgstr "Не удалось разобрать шаблон: {0}" msgid "Failed to pull image: {0}" msgstr "Не удалось загрузить образ: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "Не удалось прочитать сжатые данные: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "Ошибка чтения зашифрованного файла: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "Не удалось прочитать файл" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "Не удалось прочитать файл: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "Не удалось прочитать файл с информацией о хеше: {0}" @@ -2192,57 +2745,97 @@ msgstr "Не удалось прочитать вывод: {0}" msgid "Failed to read response body: {0}" msgstr "Не удалось прочитать тело ответа: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "Ошибка чтения символической ссылки: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "Не удалось перестроить индекс файла" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "Не удалось перестроить индекс" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "Не удалось обновить сайты" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Не удалось восстановить конфигурации Nginx: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "Не удалось восстановить файлы пользовательского интерфейса Nginx: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "Не удалось отозвать сертификат" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "Не удалось отозвать сертификат: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "Не удалось сохранить конфигурацию" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "Не удалось сохранить загруженный файл: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "Не удалось сохранить конфигурацию проверки работоспособности" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Не удалось сохранить настройки производительности Nginx" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "Не удалось сохранить порядок" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "Не удалось отправить тестовое сообщение" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "Не удалось запустить временный контейнер: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "Не удалось обновить статус" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "Не удалось загрузить файл" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "Не удалось проверить хеши: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "Не удалось записать файл резервной копии: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "Не удалось записать разжатые данные: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "Ошибка записи расшифрованного файла: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "Ошибка записи зашифрованного файла: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "Не удалось записать файл ключа безопасности: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "Ошибка записи в ZIP-буфер: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "Функции" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2256,6 +2849,10 @@ msgstr "Файл" msgid "File exists" msgstr "Файл существует" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "Перестроение индекса файла для %{path} успешно запущено" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "Файл не найден" @@ -2264,19 +2861,35 @@ msgstr "Файл не найден" msgid "File or directory not found: {0}" msgstr "Файл или каталог не найден: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "Требуется путь к файлу" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "Размер файла не должен превышать 5 МБ" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "Файл успешно загружен" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "Имя файла пустое" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "Фильтр" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "Фильтровать содержимое журнала" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "Готово" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "Первое отображение" @@ -2288,7 +2901,11 @@ msgstr "папка" msgid "Folder" msgstr "Папка" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "Следовать перенаправлениям" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2305,6 +2922,33 @@ msgstr "Для китайскоязычных пользователей" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "Для китайских пользователей: https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "Для коммерческого или профессионального использования обратитесь" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" +"Для просмотра журналов ошибок используйте Raw Log Viewer для лучшего опыта " +"просмотра." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" +"Для конфигураций сертификатов на основе IP поддерживается только метод " +"проверки HTTP-01. Метод проверки DNS-01 несовместим с сертификатами на " +"основе IP." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "" +"Для сертификатов на основе IP укажите IP-адрес сервера, который будет " +"включен в сертификат." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "Ошибка разбора формы" @@ -2325,6 +2969,22 @@ msgstr "Формат: минута час день месяц день_неде msgid "Friday" msgstr "Пятница" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "Из индексированных журналов" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "Фронтенд" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "Полнотекстовый поиск" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "Поддержка полнотекстового поиска" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "Общий сертификат" @@ -2333,16 +2993,16 @@ msgstr "Общий сертификат" msgid "Generate" msgstr "Сгенерировать" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "Создать новые резервные коды" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "Сгенерировать коды восстановления" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "Коды восстановления успешно сгенерированы" @@ -2350,6 +3010,39 @@ msgstr "Коды восстановления успешно сгенериро msgid "Generating private key for registering account" msgstr "Генерация приватного ключа для регистрации учетной записи" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "База данных GeoLite2" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "База данных GeoLite2 доступна" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "База данных GeoLite2 установлена" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "База данных GeoLite2 не найдена по адресу {0}" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"База данных GeoLite2 не найдена по адресу {0}. Для индексации журналов " +"требуется база данных GeoLite2 для географического анализа IP-адресов" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "Требуется база данных GeoLite2" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "Ошибка получения пользователя ACME: {0}" @@ -2362,8 +3055,7 @@ msgstr "Не удалось получить данные" msgid "Get dns credential error: {0}" msgstr "Ошибка получения учетных данных DNS: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "Ошибка получения информации о выпуске" @@ -2375,10 +3067,40 @@ msgstr "Получение сертификата, пожалуйста, под msgid "Github Proxy" msgstr "Прокси Github" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "Карта глобального доступа" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "Мировая карта" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "Перейти к просмотру сырых логов" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" +"Проверка работоспособности gRPC требует, чтобы сервер реализовал службу " +"проверки работоспособности gRPC (grpc.health.v1.Health)." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"gRPCS использует шифрование TLS. Сервер должен реализовать службу проверки " +"работоспособности gRPC. Для тестирования проверка SSL по умолчанию " +"отключена." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "Сжатие GZIP" @@ -2391,25 +3113,51 @@ msgstr "Уровень сжатия GZIP" msgid "GZIP Min Length" msgstr "Минимальная длина GZIP" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "Проверка хеша не удалась: целостность файла нарушена" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "Проверка состояния" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "Конфигурация проверки работоспособности" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "Конфигурация проверки работоспособности сохранена" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "Конфигурация проверки работоспособности успешно сохранена" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "Состояние здоровья" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "Скрыть" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "Скрыть помощника" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "Высокий" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "Более высокое значение означает лучшее повторное использование соединения" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "История" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "Главная" @@ -2418,10 +3166,11 @@ msgid "Host" msgstr "Хост" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "Час" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2429,7 +3178,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "Порт HTTP Challenge" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "HTTP-метод" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2437,15 +3190,15 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "Протокол HTTPS" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "ICP номер" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "Если оставить пустым, будет использоваться каталог CA по умолчанию." - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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." @@ -2454,17 +3207,25 @@ msgstr "" "количества попыток в течение пороговых минут блокировки, IP будет " "заблокирован на определенный период времени." -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "Если вы хотите автоматически отозвать старый сертификат, включите эту опцию." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" +"Если вы хотите изменить место хранения, вы можете установить `IndexPath` " +"раздела `nginx_log` в конфигурации интерфейса Nginx." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "Если ваш браузер поддерживает WebAuthn Passkey, появится диалоговое окно." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2476,12 +3237,12 @@ msgstr "" msgid "Import" msgstr "Импорт" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "Импортировать сертификат" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "Время неактивности" @@ -2493,7 +3254,46 @@ msgstr "" "Включает мастер-процесс, рабочие процессы, процессы кеширования и другие " "процессы Nginx" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "Постепенное сканирование индекса" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "Перестроение индекса и статистики успешно запущено" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "Ошибка индексации" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "Ошибка индексации, попробуйте перестроить" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "Перестроение индекса начато" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "Статус индекса" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "Проиндексировано" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "Индексация" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "Индексация журналов..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "Индексация..." @@ -2501,10 +3301,14 @@ msgstr "Индексация..." msgid "Indicator" msgstr "Индикатор" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "Информация" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "Инициальный пользователь не существует" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "Ошибка первоначального обновления ядра" @@ -2513,7 +3317,7 @@ msgstr "Ошибка первоначального обновления ядр msgid "Initialing core upgrader" msgstr "Инициализация программы обновления ядра" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "Введите код из приложения:" @@ -2528,7 +3332,7 @@ msgstr "Пропуск проверки (небезопасно)" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "Установить" @@ -2556,27 +3360,36 @@ msgstr "" msgid "Interval" msgstr "Интервал" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "Недействительно" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "Неверный формат AES IV: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "Неверный формат AES-ключа: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "Неверный формат сертификата" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "Неверный тип требований" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "Недопустимый SHA коммита" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "Неверный объект файла" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "Недопустимый путь к файлу: {0}" @@ -2589,6 +3402,10 @@ msgstr "Неверное имя файла" msgid "Invalid folder name" msgstr "Недопустимое имя папки" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "Неверный идентификатор уведомления" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "Неверная конфигурация уведомления" @@ -2597,7 +3414,7 @@ msgstr "Неверная конфигурация уведомления" msgid "Invalid otp code" msgstr "Неверный код OTP" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "Некорректное заполнение в расшифрованных данных" @@ -2605,10 +3422,15 @@ msgstr "Некорректное заполнение в расшифрован msgid "Invalid passcode or recovery code" msgstr "Неверный пароль или код восстановления" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "Неверный путь: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "Неверный формат закрытого ключа" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "Неверный код восстановления" @@ -2617,19 +3439,41 @@ msgstr "Неверный код восстановления" msgid "Invalid request format" msgstr "Неверный формат запроса" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "Неверный формат токена безопасности" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "Недопустимый идентификатор чата Telegram: не может быть нулем" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "Неверный формат временной метки" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "Неверный тип сообщения WebSocket" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "IP-адрес" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "Уведомление о сертификате IP" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "Выдать сертификат" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "Выпустить сертификат" @@ -2649,7 +3493,7 @@ msgstr "элемент(ы)" msgid "Jwt Secret" msgstr "Jwt секрет" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2661,12 +3505,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "Таймаут Keepalive" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "Тип ключа" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "Язык" @@ -2678,6 +3522,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark Пользовательский" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "Последние 12 часов" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "Последние 14 дней" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "Последние 15 минут" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "Последние 24 часа" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "Последние 30 дней" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "Последние 30 минут" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "Последние 4 часа" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "Последние 7 дней" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "Последние 90 дней" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "Статус последнего резервного копирования" @@ -2686,15 +3568,35 @@ msgstr "Статус последнего резервного копирова msgid "Last Backup Time" msgstr "Время последнего резервного копирования" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "Последняя проверка" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "Последняя проверка в" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "Последний час" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "Последняя индексация" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "Прошлый месяц" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "Последнее обновление" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "Последнее обновление:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "Последнее использование" @@ -2710,12 +3612,18 @@ msgstr "Оставьте пустым для значения по умолча msgid "Leave blank if do not want to modify" msgstr "Оставьте пустым, если не хотите изменять" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "Оставьте пустым, если ваш провайдер ACME не требует этого" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "Оставьте пустым без изменений." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "Если оставить пустым, ничего не изменится" @@ -2723,16 +3631,24 @@ msgstr "Если оставить пустым, ничего не изменит msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "Устаревшие коды восстановления не разрешены, так как TOTP не включен" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego отключить поддержку CNAME" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "Лицензия" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "Распределение лицензий" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "Типы лицензий" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "Связь" @@ -2748,32 +3664,32 @@ msgstr "Ожидает" msgid "Load Average:" msgstr "Средняя нагрузка:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "Загрузить из настроек" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "Загружено успешно" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "Загружено" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "Файлы загрузчика" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "Настройки загрузчика" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "Пауза загрузчика" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "Порог загрузчика" @@ -2781,9 +3697,15 @@ msgstr "Порог загрузчика" msgid "Loading data..." msgstr "Загрузка данных..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "Загрузка..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2802,11 +3724,11 @@ msgstr "Локация" msgid "Locations" msgstr "Локации" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "Журнал" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2817,23 +3739,61 @@ msgstr "" "https://nginxui.com/zh_CN/guide/config-nginx-log.html для получения " "дополнительной информации." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "Файл журнала не существует" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "Файл журнала не является обычным файлом" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "Файл журнала недоступен" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "Файл журнала еще не проиндексирован" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "Индексатор логов недоступен" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "Индексация логов завершена! Загрузка обновленных данных..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "Строка журнала превышает максимальную длину" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "Список журналов" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" +"Анализатор журнала не инициализирован; вызовите indexer.InitLogParser() " +"перед использованием" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "Путь к журналу не находится в белом списке" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "Логин" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "Авторизация успешна" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "Выход выполнен успешно" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Прокрутка" @@ -2853,9 +3813,20 @@ msgstr "" "можете вручную включить эту опцию. Планировщик задач crontab Nginx UI будет " "выполнять команду logrotate с интервалом, который вы установите в минутах." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "Низкий" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "Главный узел" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "Техническое обслуживание" @@ -2871,7 +3842,7 @@ msgstr "Режим обслуживания успешно включен" msgid "Make certificate dir error: {0}" msgstr "Ошибка создания каталога сертификата: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2886,11 +3857,11 @@ msgstr "" msgid "Manage Configs" msgstr "Конфигурации" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "Сайты" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "Управление потоками" @@ -2902,15 +3873,15 @@ msgstr "Пользователи" msgid "Managed Certificate" msgstr "Управление сертификатом" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "Файлы менеджера" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "Время ожидания менеджера" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "Порог Менеджера" @@ -2936,7 +3907,7 @@ msgstr "Главный процесс" msgid "Master Process" msgstr "Главный процесс" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "Максимальное количество попыток" @@ -2944,11 +3915,15 @@ msgstr "Максимальное количество попыток" msgid "Max Concurrent Connections" msgstr "Максимальное количество одновременных подключений" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "Максимальное количество перенаправлений" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "Максимальное количество запросов в секунду" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "Максимальный размер кэша" @@ -2965,7 +3940,7 @@ msgstr "Максимальное количество одновременных msgid "Maximum number of connections per worker process" msgstr "Максимальное количество соединений на рабочий процесс" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "Максимальный общий размер кэша" @@ -2975,6 +3950,7 @@ msgstr "Максимальное количество рабочих проце #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "Память" @@ -2982,22 +3958,39 @@ msgstr "Память" msgid "Memory and Storage" msgstr "Память и хранилище" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "Архитектура памяти" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "Использование памяти (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "Метод" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "Имя метода" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "Минимальный размер файла для сжатия" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "Минимальное свободное пространство" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "Минимальное свободное место в кэш-директории" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "Минимум:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "Минута" @@ -3006,21 +3999,36 @@ msgstr "Минута" msgid "Minutes" msgstr "Минуты" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "Зеркало" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "Модель" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "Современный сервис аналитики недоступен" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "Современная служба индексации недоступна" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "Современный поисковый сервис недоступен" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "Изменено" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "Изменить" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "Изменить сертификат" @@ -3028,7 +4036,7 @@ msgstr "Изменить сертификат" msgid "Modify Config" msgstr "Изменить конфигурацию" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "Модуль" @@ -3036,6 +4044,10 @@ msgstr "Модуль" msgid "Modules" msgstr "Модули" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "Кэш модулей обновлен" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "Понедельник" @@ -3048,39 +4060,66 @@ msgstr "Ежемесячно" msgid "Monthly on day %{day} at %{time}" msgstr "Ежемесячно в день %{day} в %{time}" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "Многомерная визуализация данных" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "Многострочная директива" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "Должен быть общедоступным IP-адресом, доступным из интернета" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "Н/Д" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "Имя" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "Имя или содержание" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "Пространство имен" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "Пространства имен" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "Необходимо включить модуль stub_status" @@ -3093,6 +4132,10 @@ msgstr "Сеть" msgid "Network Statistics" msgstr "Статистика сети" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "Новый чат" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "Ошибка нового поставщика DNS-проверки: {0}" @@ -3121,18 +4164,18 @@ msgstr "Новый путь" msgid "New transport error: {0}" msgstr "Ошибка нового транспорта: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "Вышла новая версия" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "Дальше" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3144,7 +4187,7 @@ msgstr "Вывод Nginx -T пуст" msgid "Nginx Access Log Path" msgstr "Путь для Nginx Access Log" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Путь к журналу доступа Nginx существует" @@ -3173,15 +4216,15 @@ msgstr "Конфигурация Nginx не включает sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "Конфигурация Nginx не включает stream-enabled" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "Каталог конфигурации Nginx не задан" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Каталог конфигурации Nginx существует" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "Файл конфигурации Nginx существует" @@ -3189,8 +4232,8 @@ msgstr "Файл конфигурации Nginx существует" msgid "Nginx configuration has been restored" msgstr "Конфигурация Nginx была восстановлена" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Ошибка разбора конфигурации Nginx" @@ -3219,7 +4262,7 @@ msgstr "Уровень использования CPU Nginx" msgid "Nginx Error Log Path" msgstr "Путь для Nginx Error Log" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "Путь к журналу ошибок Nginx существует" @@ -3228,7 +4271,7 @@ msgid "Nginx error: {0}" msgstr "Ошибка Nginx: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3243,7 +4286,7 @@ msgstr "Nginx не работает в другом контейнере" msgid "Nginx is running" msgstr "Nginx работает" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Журнал" @@ -3251,6 +4294,10 @@ msgstr "Журнал" msgid "Nginx Log Directory Whitelist" msgstr "Белый список директорий для логов Nginx" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Индексация логов Nginx..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3260,7 +4307,7 @@ msgstr "Использование памяти Nginx" msgid "Nginx PID Path" msgstr "Путь к PID Nginx" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Путь PID Nginx существует" @@ -3273,7 +4320,7 @@ msgstr "Команда перезагрузки Nginx" msgid "Nginx reload failed: {0}" msgstr "Перезагрузка Nginx не удалась: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Операции перезагрузки Nginx были отправлены на удаленные узлы" @@ -3285,7 +4332,7 @@ msgstr "Nginx успешно перезагружен" msgid "Nginx Restart Command" msgstr "Команда перезапуска Nginx" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Операции перезапуска Nginx были отправлены на удаленные узлы" @@ -3293,7 +4340,7 @@ msgstr "Операции перезапуска Nginx были отправле msgid "Nginx restarted successfully" msgstr "Nginx успешно перезапущен" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Путь sbin для Nginx существует" @@ -3326,41 +4373,73 @@ msgstr "" "Конфигурация Nginx UI была восстановлена и автоматически перезапустится " "через несколько секунд." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf включает каталог conf.d" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf включает каталог sites-enabled" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf включает каталог streams-enabled" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "Нет" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "Нет действия" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "Сертификат недоступен" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "Географические данные по Китаю недоступны" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "Нет данных" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "Нет данных" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "Нет записей на текущей странице" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "Географические данные недоступны" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "В выбранном временном диапазоне журналы не найдены." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "Нет выбранных узлов" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "Нет выбранных записей" @@ -3369,24 +4448,33 @@ msgstr "Нет выбранных записей" msgid "No servers configured" msgstr "Серверы не настроены" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "Сайты не найдены" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "" +"В конфигурации server_name не найден конкретный IP-адрес. Укажите IP-адрес " +"сервера ниже для сертификата." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "Нет доступных структурированных данных журнала" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "Нет настроенных апстримов" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "Узел" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "Группа узлов" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "Группы узлов" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "Анализ узла не удался: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3396,7 +4484,12 @@ msgstr "Имя узла" msgid "Node Secret" msgstr "Секрет узла" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "Статус узла" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "Узлы" @@ -3404,26 +4497,38 @@ msgstr "Узлы" msgid "Not After" msgstr "Не позднее" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "Неожиданный текст" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "Не найден" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "Не проиндексировано" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "Не загружено" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "Не поддерживается для IP-сертификатов" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" -msgstr "Недействительно до: %{date}" +msgstr "Действителен до: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "Заметка" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." @@ -3431,11 +4536,25 @@ msgstr "" "Примечание: если файл конфигурации включает другие настройки или " "сертификаты, пожалуйста, заранее синхронизируйте их с удалёнными узлами." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"Примечание: Если сервер не поддерживает gRPC Reflection, проверки " +"работоспособности могут завершиться неудачей. Убедитесь, что на вашем " +"сервере gRPC включена Reflection." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "Нечего копировать" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "Уведомление" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "Уведомления" @@ -3444,17 +4563,21 @@ msgstr "Уведомления" msgid "Notifier not found" msgstr "Уведомитель не найден" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "" "Количество параллельных рабочих процессов, автоматически устанавливается по " "количеству ядер процессора" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "Количество файлов, обрабатываемых загрузчиком кэша за один раз" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "Количество файлов, обрабатываемых менеджером кэша за один раз" @@ -3469,7 +4592,7 @@ msgstr "Количество рабочих процессов" msgid "Obtain cert error: {0}" msgstr "Ошибка получения сертификата: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "Получить сертификат" @@ -3477,11 +4600,11 @@ msgstr "Получить сертификат" msgid "Obtaining certificate" msgstr "Получение сертификата" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP Must Staple" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." @@ -3490,7 +4613,7 @@ msgstr "" "доступе через Firefox." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "Выкл" @@ -3498,48 +4621,58 @@ msgstr "Выкл" msgid "Official Document" msgstr "Официальная документация" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "Оффлайн" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "Офлайн-анализ GeoIP" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "ОК" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "Вкл" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "После завершения проверки записи будут удалены." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "Онлайн" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "Количество онлайн" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "Разрешены только ZIP-файлы" @@ -3548,23 +4681,46 @@ msgstr "Разрешены только ZIP-файлы" msgid "Open" msgstr "Открыт" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "Ограничение открытого исходного кода" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "Операционная система" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "Статистика операционной системы" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "Или" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "или перетащите файл в редактор ниже" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "Или введите секрет: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "Порядок успешно сохранён" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "Оригинальное имя" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "ОС" @@ -3611,11 +4767,15 @@ msgstr "Параметры" msgid "Params Optimization" msgstr "Оптимизация параметров" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "Производительность парсера" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "Ключ доступа" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3626,7 +4786,7 @@ msgstr "" "могут использоваться вместо пароля или в качестве метода двухфакторной " "аутентификации (2FA)." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "Пароль" @@ -3655,11 +4815,13 @@ msgstr "Пароли не совпадают" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "Путь" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "Путь не входит в разрешенные пути доступа: {0}" @@ -3671,12 +4833,28 @@ msgstr "Путь: {0} не находится в каталоге конфигу msgid "Payload resource is nil" msgstr "Ресурс полезной нагрузки равен nil" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "Пиковый час" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "В ожидании" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "Процент" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "Выполнить" @@ -3720,7 +4898,11 @@ msgstr "" "Пожалуйста, включите модуль stub_status, чтобы получать статистику " "запросов, количество соединений и т. д." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "Пожалуйста, введите" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." @@ -3728,11 +4910,19 @@ msgstr "" "Пожалуйста, введите имя для ключа доступа, который вы хотите создать, и " "нажмите кнопку OK ниже." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "Пожалуйста, введите действительный IPv4-адрес (0-255 для каждого октета)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "Пожалуйста, введите действительный адрес IPv4 или IPv6" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "Пожалуйста, введите допустимый диапазон портов" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "Пожалуйста, введите хотя бы один домен" @@ -3751,6 +4941,10 @@ msgstr "" "Пожалуйста, введите токен безопасности, полученный во время резервного " "копирования" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "Пожалуйста, введите IP-адрес сервера" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "Пожалуйста, заполните все поля правильно" @@ -3759,7 +4953,7 @@ msgstr "Пожалуйста, заполните все поля правиль msgid "Please fill in required S3 configuration fields" msgstr "Пожалуйста, заполните обязательные поля конфигурации S3" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." @@ -3767,7 +4961,7 @@ msgstr "" "Пожалуйста, заполните учетные данные API, предоставленные вашим " "DNS-провайдером." -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3776,7 +4970,7 @@ msgstr "" "Credentials, а затем выберите одну из учетных данных ниже, чтобы запросить " "API провайдера DNS." -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3814,20 +5008,20 @@ msgstr "" msgid "Please input your E-mail!" msgstr "Введите ваш E-mail!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "Введите ваш пароль!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "Введите ваше имя пользователя!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "Пожалуйста, войдите в систему." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "" "Обратите внимание, что единица измерения времени в конфигурациях ниже " @@ -3847,25 +5041,31 @@ msgstr "" msgid "Please select a backup file" msgstr "Пожалуйста, выберите файл резервной копии" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "Пожалуйста, выберите тип уведомления" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "Пожалуйста, выберите действительный файл %{type} (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "Пожалуйста, выберите хотя бы один элемент" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Пожалуйста, выберите хотя бы один узел для перезагрузки Nginx" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Пожалуйста, выберите хотя бы один узел для перезапуска Nginx" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "Пожалуйста, выберите хотя бы один узел" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "Пожалуйста, введите \"Отозвать\" для подтверждения" @@ -3878,23 +5078,26 @@ msgstr "Пожалуйста, введите точный текст подтв msgid "Port" msgstr "Порт" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "Порт 80 должен быть открыт для проверки HTTP-01 challenge" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "Сканер портов" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "Действие после синхронизации" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "Предварительный выпуск" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "Настройки" @@ -3902,6 +5105,19 @@ msgstr "Настройки" msgid "Preparing lego configurations" msgstr "Подготовка конфигураций Lego" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "Частный CA:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "Частные IP-адреса (192.168.x.x, 10.x.x.x, 172.16-31.x.x) не пройдут проверку" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "закрытый ключ" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "Процесс" @@ -3918,6 +5134,10 @@ msgstr "Информация о процессе" msgid "Processing {count}/{total}" msgstr "Обработка {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "Производственный конвейер" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "Запретить изменение пароля root в демо" @@ -3934,6 +5154,10 @@ msgstr "Команда проекта" msgid "Protected Directory" msgstr "Защищённая директория" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "Протокол" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3944,7 +5168,7 @@ msgstr "" "использовании обратного прокси настройте протокол отдельно в обратном " "прокси." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "Провайдер" @@ -3952,22 +5176,57 @@ msgstr "Провайдер" msgid "Provider not found: {0}" msgstr "Поставщик не найден: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "Провинция / Регион" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "Прокси" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "Прокси-передача" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "Цели прокси" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "Требования публичного CA:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "Номер в органах общественной безопасности" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "Просмотры страниц" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "В очереди" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "В очереди на индексацию..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "Быстрый выбор" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "Сырой" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "Перезагрузить базу данных" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "Ошибка чтения директории: {0}" @@ -3982,24 +5241,48 @@ msgstr "Запросы на чтение" msgid "Reads" msgstr "Чтение" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "Панель аналитики в реальном времени" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "Перестроить" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "Перестроить все индексы" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "Перестроить индекс файла" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "Перестроить индекс" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Принято" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "Проверить снова" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "Рекомендуется:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "Восстановление" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "Коды восстановления" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -4011,15 +5294,29 @@ msgstr "" msgid "Recursive Nameservers" msgstr "Рекурсивные DNS" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "Реферер" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "Обновить" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "Обновить кэш модулей" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "Восстановить ответ" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "Регистрация" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." @@ -4027,19 +5324,19 @@ msgstr "" "Зарегистрируйте пользователя или используйте эту учетную запись для выдачи " "сертификата через HTTP-прокси." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "Регистрация не удалась" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "Регистрация при запуске" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "Ключ доступа успешно зарегистрирован" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "Зарегистрировано успешно" @@ -4047,28 +5344,30 @@ msgstr "Зарегистрировано успешно" msgid "Registering user" msgstr "Регистрация пользователя" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "Статус регистрации" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "Переустановить" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "Запрос API релиза не удался: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "Что нового" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "Перегрузить" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Перезагрузить Nginx" @@ -4092,7 +5391,7 @@ msgstr "Ошибка перезагрузки удаленного Nginx" msgid "Reload Remote Nginx Success" msgstr "Удаленная перезагрузка Nginx успешно выполнена" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "Не удалось выполнить запрос на перезагрузку, проверьте подключение к сети" @@ -4104,22 +5403,28 @@ msgstr "Перезагружается" msgid "Reloading nginx" msgstr "Перезагружается nginx" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "Удаленный" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "Удалить" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "Удалено успешно" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "Успешно удалено" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4128,12 +5433,12 @@ msgid "Rename" msgstr "Переименовать" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "Не удалось переименовать %{orig_path} в %{new_path} на %{env_name}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "Не удалось переименовать %{orig_path} в %{new_path} на %{node_name}" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "%{orig_path} успешно переименован в %{new_path} на %{env_name}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "Успешно переименовано %{orig_path} в %{new_path} на %{node_name}" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4143,37 +5448,37 @@ msgstr "Ошибка переименования удаленной конфи msgid "Rename Remote Config Success" msgstr "Переименование удаленной конфигурации прошло успешно" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "Ошибка переименования удаленного сайта" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "Успешное переименование удаленного сайта" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "Ошибка переименования удаленного потока" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "Удаленный поток успешно переименован" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "Не удалось переименовать сайт %{name} в %{new_name} на %{node}" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "Сайт %{name} успешно переименован в %{new_name} на %{node}" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "Не удалось переименовать поток %{name} в %{new_name} на %{node}" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "Поток %{name} успешно переименован в %{new_name} на %{node}" @@ -4181,7 +5486,7 @@ msgstr "Поток %{name} успешно переименован в %{new_name msgid "Rename successfully" msgstr "Переименовано успешно" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4191,8 +5496,8 @@ msgstr "Успешно переименовано" msgid "Renew cert error: {0}" msgstr "Ошибка обновления сертификата: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "Обновить сертификат" @@ -4204,11 +5509,23 @@ msgstr "Ошибка обновления сертификата" msgid "Renew Certificate Success" msgstr "Успешное обновление сертификата" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "Успешно обновлено" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "Запрос" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "Тело запроса" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "Путь запроса" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "Статистика запросов" @@ -4226,13 +5543,19 @@ msgid "Requests Per Connection" msgstr "Запросов на соединение" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "Сброс" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "Сброс 2FA" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "Сбросить поиск" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4243,6 +5566,10 @@ msgstr "" "включая всю память общих библиотек, которая будет повторно рассчитываться " "для нескольких процессов" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "Предупреждение об использовании ресурсов" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4252,9 +5579,8 @@ msgstr "Ответы" msgid "Restart" msgstr "Перезапуск" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Перезапустить Nginx" @@ -4274,7 +5600,7 @@ msgstr "Ошибка перезапуска удаленного Nginx" msgid "Restart Remote Nginx Success" msgstr "Удалённая перезагрузка Nginx успешно выполнена" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "Запрос на перезапуск не выполнен, проверьте подключение к сети" @@ -4313,8 +5639,8 @@ msgstr "Восстановить эту версию" msgid "Restored successfully" msgstr "Успешно восстановлено" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "Аннулировать" @@ -4322,15 +5648,15 @@ msgstr "Аннулировать" msgid "Revoke cert error: {0}" msgstr "Ошибка отзыва сертификата: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "Отозвать старый сертификат" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "Отозвать этот сертификат" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." @@ -4338,15 +5664,15 @@ msgstr "" "Отзыв сертификата затронет все службы, которые его используют в данный " "момент. Это действие нельзя отменить." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "Отображаемое имя RP" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "Истоки RP" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4382,10 +5708,6 @@ msgstr "Требуется идентификатор ключа доступа msgid "S3 Bucket" msgstr "S3-бакет" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "Доступ к корзине S3 запрещен: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "Требуется S3-бакет" @@ -4394,7 +5716,7 @@ msgstr "Требуется S3-бакет" msgid "S3 bucket name" msgstr "Имя S3-бакета" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "Конфигурация S3 неполная: отсутствует {0}" @@ -4402,27 +5724,15 @@ msgstr "Конфигурация S3 неполная: отсутствует {0} msgid "S3 connection test failed" msgstr "Тест подключения S3 не удался" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "Тест подключения S3 не удался: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "Тест подключения S3 успешно выполнен" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "Учетные данные S3 недействительны: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "Конечная точка S3" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "Недопустимая конечная точка S3: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "Требуется конечная точка S3" @@ -4458,7 +5768,7 @@ msgstr "Секретный ключ доступа S3" msgid "S3 secret access key is required" msgstr "Требуется секретный ключ доступа S3" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "Ошибка загрузки в S3: {0}" @@ -4466,17 +5776,19 @@ msgstr "Ошибка загрузки в S3: {0}" msgid "Saturday" msgstr "Суббота" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "Сохранить" @@ -4484,41 +5796,41 @@ msgstr "Сохранить" msgid "Save Directive" msgstr "Сохранить директиву" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "Ошибка сохранения %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "Сохранить порядок" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "Ошибка сохранения удаленного сайта" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "Удалённый сайт успешно сохранён" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "Ошибка сохранения удаленного потока" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "Удаленный поток успешно сохранен" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "Не удалось сохранить сайт %{name} на %{node}" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "Сайт %{name} успешно сохранён на %{node}" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "Не удалось сохранить поток %{name} на %{node}" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "Поток %{name} успешно сохранён на %{node}" @@ -4526,16 +5838,17 @@ msgstr "Поток %{name} успешно сохранён на %{node}" msgid "Save successful" msgstr "Сохранено успешно" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "Сохранено успешно" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "Успешно сохранено" @@ -4559,15 +5872,15 @@ msgstr "Сканировать порты" msgid "Scan Results" msgstr "Результаты сканирования" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" "Отсканируйте QR-код с помощью мобильного телефона, чтобы добавить учетную " "запись в приложение." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "Сканирование журналов..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "Сканирование" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4582,16 +5895,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "Поиск" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "Фильтры поиска" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "Поиск в содержимом журнала..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "Название модуля поиска" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "Поиск модулей" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "Диапазон поиска" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "Поиск шаблонов" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "Секрет скопирован" @@ -4608,13 +5942,21 @@ msgstr "Токен безопасности" msgid "Security Token Information" msgstr "Информация о токене безопасности" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" +"Выберите предопределенный каталог CA или введите пользовательский. Оставьте " +"пустым, чтобы использовать каталог CA по умолчанию." + #: src/language/curd.ts:31 msgid "Select all" msgstr "Выбрать все" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "Выберите действие после синхронизации" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "Выберите или введите URL-адрес каталога CA" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4624,7 +5966,7 @@ msgstr "Выбрано {count} файлов" msgid "Selector" msgstr "Выбор" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "Самопроверка" @@ -4638,11 +5980,15 @@ msgstr "Самопроверка не удалась, Nginx UI может раб msgid "Send" msgstr "Отправлено" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "Отправить тестовое сообщение" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "Сервер" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "Ошибка сервера" @@ -4650,6 +5996,10 @@ msgstr "Ошибка сервера" msgid "Server Info" msgstr "Информация о сервере" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "IP-адрес сервера" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "Размер хеш-корзины имён серверов" @@ -4658,7 +6008,7 @@ msgstr "Размер хеш-корзины имён серверов" msgid "Server names hash table size" msgstr "Размер хеш-таблицы имен серверов" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "server_name не нашел в директивах" @@ -4666,6 +6016,10 @@ msgstr "server_name не нашел в директивах" msgid "ServerIdx out of range" msgstr "ServerIdx вне диапазона" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "Название сервиса" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "Сессия не найдена" @@ -4702,6 +6056,10 @@ msgstr "Настройка переменных сред" msgid "Setting HTTP01 challenge provider" msgstr "Настройка провайдера проверки HTTP01" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "Настройки" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4722,7 +6080,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Настройте ваш Nginx UI" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "Зона общей памяти" @@ -4730,10 +6088,18 @@ msgstr "Зона общей памяти" msgid "Show" msgstr "Показать" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "Показать ассистента" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "Войти с помощью ключа доступа" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "Оптимизированная SIMD обработка потока" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "Одиночная Директива" @@ -4754,11 +6120,23 @@ msgstr "Сайт находится в режиме обслуживания" msgid "Site Logs" msgstr "Журналы сайта" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "Навигация по сайту" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "Сайт не найден" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "Обновление сайта запущено" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "Сайты" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "Каталог сайтов существует" @@ -4766,6 +6144,14 @@ msgstr "Каталог сайтов существует" msgid "Sites List" msgstr "Список сайтов" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" +"Сайты появятся здесь после настройки блоков сервера nginx с действительными " +"директивами server_name." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "Каталог sites-available не существует" @@ -4775,6 +6161,8 @@ msgid "Sites-enabled directory not exist" msgstr "Каталог sites-enabled не существует" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "Размер" @@ -4782,19 +6170,36 @@ msgstr "Размер" msgid "Skip Installation" msgstr "Пропустить установку" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "Время ожидания между итерациями загрузчика кеша" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "Время ожидания между итерациями менеджера кеша" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "Сокет" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "Сортировка по" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "Исходный IP" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "Спонсор" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "SSD-накопитель для лучшей производительности ввода-вывода" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "Содержимое SSL-сертификата" @@ -4806,15 +6211,20 @@ msgstr "Файл SSL-сертификата должен находиться в msgid "SSL certificate file not found" msgstr "Файл SSL-сертификата не найден" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "Содержимое ключа SSL-сертификата" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "Путь к ключу SSL-сертификата" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "Путь к SSL сертификату" @@ -4839,13 +6249,12 @@ msgstr "Путь к SSL-ключу" msgid "SSL key path is required when HTTPS is enabled" msgstr "Путь к SSL-ключу обязателен при включении HTTPS" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "SSO Вход" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "Стабильный" @@ -4853,33 +6262,49 @@ msgstr "Стабильный" msgid "Start" msgstr "Начало" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "Дата начала" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "Начать восстановление" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "Начало загрузки..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "Статический" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "Статус" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "Статус успешно обновлен" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "Остановлен" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "Хранилище" @@ -4905,10 +6330,6 @@ msgstr "Путь к хранилищу" msgid "Storage path is required" msgstr "Требуется путь к хранилищу" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "Путь хранения не входит в предоставленные пути доступа: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4922,7 +6343,7 @@ msgstr "Поток включен" msgid "Stream not found" msgstr "Поток не найден" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "Каталог потоков существует" @@ -4934,6 +6355,10 @@ msgstr "Каталог streams-available не существует" msgid "Streams-enabled directory not exist" msgstr "Каталог streams-enabled не существует" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "Структурированный" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "Порт состояния заглушки" @@ -4942,7 +6367,7 @@ msgstr "Порт состояния заглушки" msgid "Stub_status is not enabled" msgstr "Stub_status не включен" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4953,18 +6378,6 @@ msgstr "Успех" msgid "Sunday" msgstr "Воскресенье" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Поддержка связи с бэкендом через протокол Server-Sent Events. Если ваш " -"Nginx UI используется через обратный прокси Nginx, обратитесь к этой " -"ссылке, чтобы написать соответствующий конфигурационный файл: " -"https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -5013,12 +6426,12 @@ msgid "Sync Certificate" msgstr "Синхронизировать сертификат" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "Не удалось синхронизировать сертификат %{cert_name} с %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "Не удалось синхронизировать сертификат %{cert_name} с %{node_name}" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "Сертификат %{cert_name} успешно синхронизирован с %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "Сертификат %{cert_name} успешно синхронизирован с %{node_name}" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -5029,12 +6442,12 @@ msgid "Sync Certificate Success" msgstr "Сертификат успешно синхронизирован" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "Не удалось синхронизировать конфигурацию %{config_name} с %{env_name}" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "Не удалось синхронизировать конфигурацию %{config_name} с %{node_name}" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "Конфигурация %{config_name} успешно синхронизирована с %{env_name}" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "Конфигурация %{config_name} успешно синхронизирована с %{node_name}" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -5044,24 +6457,29 @@ msgstr "Ошибка синхронизации конфигурации" msgid "Sync Config Success" msgstr "Синхронизация конфигурации успешна" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "Синхронизированные узлы" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "Предпросмотр синхронизации" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "Стратегия синхронизации" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "Синхронизировать с" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "Синхронизация" @@ -5078,10 +6496,14 @@ msgstr "Резервное копирование системы" msgid "System Check" msgstr "Проверка системы" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "Первоначальный пользователь системы" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "Системные требования" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "Восстановление системы" @@ -5102,19 +6524,45 @@ msgstr "Задача не найдена" msgid "Telegram" msgstr "Телеграм" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "Терминал" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "Терминальный помощник" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "Терминальная команда запуска" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "Тест" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "Тест не пройден: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "Тест не удался: Невозможно выполнить проверку состояния" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "Тестовое сообщение успешно отправлено" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "Проверить подключение S3" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "Тест успешен! Время отклика: %{response_time}мс" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " @@ -5124,6 +6572,23 @@ msgstr "" "более 1 недели или периода, установленного в настройках, с момента его " "последней выдачи." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "" +"Для офлайн-географического анализа IP-адресов требуется база данных " +"GeoLite2. Пожалуйста, загрузите её для активации этой функции." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "" +"База данных GeoLite2 предоставляет географическую информацию для " +"IP-адресов. Она используется для офлайн-географического анализа в анализе " +"журналов." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " @@ -5132,11 +6597,11 @@ msgstr "" "Номер ICP должен содержать только буквы, юникод, цифры, дефисы, тире, " "двоеточия и точки." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "Входные данные не являются SSL-сертификатом" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "Введенные данные не являются ключом SSL сертификата" @@ -5175,11 +6640,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "Параметр server_name обязателен" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "Путь существует, но файл не является сертификатом" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "Путь существует, но файл не является приватным ключом" @@ -5191,7 +6656,7 @@ msgstr "" "Номер общественной безопасности должен содержать только буквы, юникод, " "цифры, дефисы, тире, двоеточия и точки." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5201,7 +6666,7 @@ msgstr "" "избежать потенциальных ошибок, пожалуйста, обновите удаленную версию Nginx " "UI до соответствия с локальной версией." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5231,7 +6696,7 @@ msgstr "Теоретическое максимальное количество msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "Теоретический максимум RPS (запросов в секунду):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5241,11 +6706,15 @@ msgstr "" "вы потеряете пароль и вторые факторы. Если вы не сможете найти эти коды, вы " "потеряете доступ к своему аккаунту." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "Сторонние компоненты" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "Этот элемент автосертификата недействителен, удалите его.." -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "Этот сертификат под управлением Nginx UI" @@ -5253,9 +6722,9 @@ msgstr "Этот сертификат под управлением Nginx UI" msgid "This directory is protected and cannot be deleted for system safety." msgstr "Этот каталог защищен и не может быть удален для безопасности системы." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "Это поле обязательно для заполнения" @@ -5281,6 +6750,10 @@ msgid "" "-_./:" msgstr "Это поле должно содержать только буквы, символы Unicode, цифры и -_./:" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "Это тестовое сообщение, отправленное по адресу %{timestamp} из nginx ui." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " @@ -5290,7 +6763,15 @@ msgstr "" "и другие данные. После включения вы сможете просматривать статистику " "производительности." -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "Этот месяц" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "Это уведомление отключено" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." @@ -5298,6 +6779,26 @@ msgstr "" "Эта операция только удалит сертификат из базы данных. Файлы сертификата в " "файловой системе не будут удалены." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"Этот сайт настроен как сервер по умолчанию (default_server) для HTTPS (порт " +"443). IP-сертификаты требуют поддержки Центра сертификации (CA) и могут " +"быть недоступны у всех провайдеров ACME." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"Этот сайт использует подстановочное имя сервера (_), которое обычно " +"указывает на IP-сертификат. IP-сертификаты требуют поддержки Центра " +"сертификации (CA) и могут быть недоступны у всех провайдеров ACME." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5314,6 +6815,19 @@ msgstr "Это значение уже занято" msgid "This will permanently delete the %{type}." msgstr "Это приведет к безвозвратному удалению %{type}." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"Это приведет к полной перестройке индекса журналов. Все существующие данные " +"индекса будут удалены и перестроены с нуля. Это может занять некоторое " +"время. Продолжить?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "Это перестроит данные индекса для этого конкретного файла: %{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5332,13 +6846,13 @@ msgstr "" "Это восстановит файлы конфигурации и базу данных. Nginx UI перезапустится " "после завершения восстановления." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" "Это обновит или переустановит интерфейс Nginx на %{nodeNames} до версии " "%{version}." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "Ограничение" @@ -5346,8 +6860,21 @@ msgstr "Ограничение" msgid "Thursday" msgstr "Четверг" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "Время" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "Временной диапазон" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "Таймаут (секунды)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "Советы" @@ -5364,11 +6891,15 @@ msgstr "" msgid "Title" msgstr "Заголовок" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "подтвердить удаление" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "Для подтверждения отзыва введите \"Отозвать\" в поле ниже:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5376,7 +6907,7 @@ msgstr "" "Чтобы включить это, вам нужно установить приложение Google или Microsoft " "Authenticator на свой мобильный телефон." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5421,15 +6952,41 @@ msgstr "Токен пуст" msgid "Token is not valid" msgstr "Токен недействителен" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "Топ-10 стран / регионов" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "Топ-10 провинций / регионов" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "Топ 10 URL-адресов" + #: src/language/curd.ts:5 msgid "Total" msgstr "Всего" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "Всего %{total} элементов" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "Всего компонентов" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "Всего соединений" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "Всего записей" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5443,6 +7000,10 @@ msgstr "Всего процессов Nginx" msgid "Total Nginx Processes" msgstr "Общее количество процессов Nginx" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "Всего PV" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "Всего получено" @@ -5460,11 +7021,15 @@ msgstr "Всего запросов / Всего соединений" msgid "Total Send" msgstr "Всего отправлено" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "Всего UV" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -5472,25 +7037,41 @@ msgstr "" "TOTP — это метод двухфакторной аутентификации, который использует алгоритм " "одноразового пароля на основе времени." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "Трафик" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "Перевод ошибки..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "Корзина" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "Попробуйте изменить критерии поиска или перейти на другие страницы." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "Попробуйте изменить критерии поиска или временной диапазон." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "Вторник" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "Требуется двухфакторная аутентификация" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "Тип" @@ -5498,15 +7079,47 @@ msgstr "Тип" msgid "Type %{delete} to confirm" msgstr "Введите %{delete} для подтверждения" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "Введите или выберите браузер" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "Введите или выберите устройство" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "Введите или выберите ОС" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "Введите или выберите коды состояния" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "Введите ваше сообщение здесь..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "Уникальные страницы" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "Неизвестно" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "Неподдерживаемый тип резервного копирования: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "Неподдерживаемый формат лога" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "Обновление уже в процессе" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "Обновить пароль" @@ -5515,32 +7128,30 @@ msgstr "Обновить пароль" msgid "Update Profile" msgstr "Обновить профиль" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "Успешно обновлено" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "Обновлено в" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "Обновление" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "Интерфейс Nginx на %{node} успешно обновлен 🎉" @@ -5548,11 +7159,22 @@ msgstr "Интерфейс Nginx на %{node} успешно обновлен msgid "Upgraded successfully" msgstr "Обновлено успешно" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "Хэш-сумма ядра обновителя пуста" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "URL загрузки ядра обновления пуст" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Обновление Nginx UI, подождите..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "Загрузить файл %{type}" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "Загрузить файлы" @@ -5561,19 +7183,29 @@ msgstr "Загрузить файлы" msgid "Upload Folders" msgstr "Загрузить папки" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "Восходящий поток" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Имя Upstream" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "Сокеты Upstream" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "Тип теста апстрима" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "Аптайм:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5585,14 +7217,19 @@ msgstr "Использовать OTP" msgid "Use recovery code" msgstr "Использовать код восстановления" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "Использовать временный путь" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "Пользователь" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "Пользовательский агент" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "Пользователь заблокирован" @@ -5609,7 +7246,7 @@ msgstr "Пользователь не включил OTP в качестве 2FA msgid "User Profile" msgstr "Профиль пользователя" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "Имя пользователя" @@ -5622,12 +7259,20 @@ msgstr "Имя пользователя (*)" msgid "Username length cannot exceed 255 characters" msgstr "Длина имени пользователя не может превышать 255 символов" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "Уникальные посетители" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "Действительный" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "Проверить SSL-сертификат" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "Значение" @@ -5637,45 +7282,65 @@ msgstr "Значение" msgid "Verify Backup File Integrity" msgstr "Проверить целостность файла резервной копии" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "Проверить имя хоста" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "Проверьте системные требования" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "Версия" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "Просмотр" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "Просмотреть все уведомления" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "Посмотреть на GitHub" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "Просмотреть коды восстановления" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "Просмотр сторонних компонентов" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "Просмотрено" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "Посещения" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "Процессы ожидания" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "Внимание" @@ -5690,7 +7355,22 @@ msgstr "" "Убедитесь, что у вас есть действительный файл резервной копии и токен " "безопасности, и тщательно выберите, что восстанавливать." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"Предупреждение: Похоже, это частный IP-адрес. Публичные центры " +"сертификации, такие как Let's Encrypt, не могут выдавать сертификаты для " +"частных IP. Используйте публичный IP-адрес или рассмотрите возможность " +"использования частного центра сертификации." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "Мы не принимаем запросы на новые функции" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." @@ -5698,7 +7378,7 @@ msgstr "" "Мы добавим одну или несколько записей TXT в DNS записи вашего домена для " "подтверждения права собственности." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" @@ -5706,7 +7386,7 @@ msgstr "" "Мы удалим конфигурацию HTTPChallenge из этого файла и перезагрузим Nginx. " "Вы уверены, что хотите продолжить?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "WebAuthn" @@ -5714,10 +7394,18 @@ msgstr "WebAuthn" msgid "WebAuthn settings are not configured" msgstr "Настройки WebAuthn не настроены" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "Ошибка подключения WebSocket" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket не подключен, пожалуйста, дождитесь подключения" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "WeCom" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "среда" @@ -5730,7 +7418,7 @@ msgstr "Еженедельно" msgid "Weekly on %{day} at %{time}" msgstr "Еженедельно по %{day} в %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5740,16 +7428,17 @@ msgstr "" "при запуске. Обычно не включайте эту функцию, если только вы не находитесь " "в среде разработки и используете Pebble в качестве CA." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" -"При включении/отключении, удалении или сохранении этого сайта узлы, " -"заданные в Группе узлов, и узлы, выбранные ниже, будут синхронизированы." +"При включении/отключении, удалении или сохранении этого сайта будут " +"синхронизированы узлы, установленные в пространстве имен, и узлы, выбранные " +"ниже." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." @@ -5757,11 +7446,11 @@ msgstr "" "При создании новых кодов восстановления вы должны скачать или распечатать " "новые коды." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "Использовать ли временный путь при записи временных файлов" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "Сертификат с подстановочным знаком" @@ -5780,8 +7469,8 @@ msgstr "Рабочие процессы" msgid "Workers" msgstr "Рабочие процессы" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "Рабочее пространство" @@ -5806,16 +7495,18 @@ msgstr "Запись закрытого ключа сертификата на msgid "Writing certificate to disk" msgstr "Запись сертификата на диск" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "Да" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5828,11 +7519,11 @@ msgstr "" msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "Вам не разрешено удалять файл за пределами пути конфигурации nginx" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "Вы используете последнюю версию" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "Вы можете проверить обновление Nginx UI на этой странице." @@ -5844,23 +7535,23 @@ msgstr "Вы можете закрыть это окно через %{countdown} msgid "You can close this dialog now" msgstr "Теперь вы можете закрыть это диалоговое окно" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." msgstr "Вы не настроили параметры WebAuthn, поэтому не можете добавить ключ доступа." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" "Вы еще не включили двухфакторную аутентификацию. Пожалуйста, включите её, " "чтобы сгенерировать коды восстановления." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "Вы еще не сгенерировали коды восстановления." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." @@ -5869,15 +7560,196 @@ msgstr "" "Пожалуйста, сгенерируйте новые коды восстановления при первой возможности, " "чтобы обеспечить безопасность." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "Ваши старые коды больше не будут работать." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "Ваши ключи доступа" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "Конвейер без выделения памяти" + +#~ msgid "in the same directory as" +#~ msgstr "в том же каталоге, что и" + +#~ msgid "Sandbox test successful" +#~ msgstr "Тест песочницы успешен" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "Протестировано в изолированном песочнице" + +#~ msgid "All" +#~ msgstr "Все" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "На основе тестирования M2 Pro (12 ядер)" + +#~ msgid "CPU Utilization" +#~ msgstr "Использование ЦП" + +#~ msgid "Indexing Throughput" +#~ msgstr "Производительность индексации" + +#~ msgid "Memory Efficiency" +#~ msgstr "Эффективность памяти" + +#~ msgid "Performance Impact Notice" +#~ msgstr "Уведомление о влиянии на производительность" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "Оптимизация конвейера без выделения памяти" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "Обратитесь за помощью к ChatGPT" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "Географическое картирование и аналитика" + +#~ msgid "No feature requests accepted." +#~ msgstr "Запросы функций не принимаются" + +#~ msgid "Time-series trend analysis" +#~ msgstr "Анализ временных рядов" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "Аналитика User-Agent и браузера" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ ядер (Apple M2 Pro или эквивалент Intel)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "4 ГБ+ оперативной памяти для оптимальной производительности" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "Адаптивный размер пакета" + +#~ msgid "CPU Architecture" +#~ msgstr "Архитектура процессора" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "Анализ GeoIP и User-Agent" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "Минимум 1 ГБ оперативной памяти" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "Современный процессор (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "Мониторинг производительности в реальном времени" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "Стабильная производительность на современном оборудовании" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "Путь резервного копирования не входит в разрешенные пути доступа: {0}" + +#~ msgid "Build with" +#~ msgstr "Собрать с" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "Не удалось скопировать каталог базы данных: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "Не удалось создать каталог резервной копии: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "Не удалось оценить символические ссылки: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "Не удалось восстановить файлы пользовательского интерфейса Nginx: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "Ошибка записи в ZIP-буфер: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "Проверка хеша не удалась: целостность файла нарушена" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "Доступ к корзине S3 запрещен: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "Тест подключения S3 не удался: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "Учетные данные S3 недействительны: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "Недопустимая конечная точка S3: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "Путь хранения не входит в предоставленные пути доступа: {0}" + +#~ msgid "files" +#~ msgstr "файлы" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "Индексация журналов, пожалуйста, подождите..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "Загрузка данных панели управления..." + +#~ msgid "Today" +#~ msgstr "Сегодня" + +#~ msgid "Data refreshed successfully" +#~ msgstr "Данные успешно обновлены" + +#~ msgid "Failed to refresh data" +#~ msgstr "Не удалось обновить данные" + +#~ msgid "Log File:" +#~ msgstr "Файл журнала:" + +#~ msgid "Log path" +#~ msgstr "Путь к журналу" + +#~ msgid "Index Size" +#~ msgstr "Размер индекса" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "Размер страницы" + +#~ msgid "Environments" +#~ msgstr "Окружения" + +#~ msgid "Node Group" +#~ msgstr "Группа узлов" + +#~ msgid "Node Groups" +#~ msgstr "Группы узлов" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "Проверьте, существует ли каталог conf.d" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Поддержка связи с бэкендом через протокол Server-Sent Events. Если ваш " +#~ "Nginx UI используется через обратный прокси Nginx, обратитесь к этой " +#~ "ссылке, чтобы написать соответствующий конфигурационный файл: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "Если оставить пустым, будет использоваться каталог CA по умолчанию." + +#~ msgid "Save error %{msg}" +#~ msgstr "Ошибка сохранения %{msg}" + +#~ msgid "Main" +#~ msgstr "Основной" + +#~ msgid "Select an action after sync" +#~ msgstr "Выберите действие после синхронизации" + #~ msgid "Link Start" #~ msgstr "Начало ссылки" @@ -5911,9 +7783,6 @@ msgstr "Ваши ключи доступа" #~ msgid "Last Backup Error" #~ msgstr "Ошибка последнего резервного копирования" -#~ msgid "Apply" -#~ msgstr "Применить" - #~ msgid "Apply bulk action successfully" #~ msgstr "Массовое действие успешно применено" @@ -5941,10 +7810,6 @@ msgstr "Ваши ключи доступа" #~ msgid "Recovered Successfully" #~ msgstr "Восстановлено успешно" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "Всего %{total} элемент" - #~ msgid "View Details" #~ msgstr "Подробно" @@ -5992,13 +7857,6 @@ msgstr "Ваши ключи доступа" #~ msgid "Format error %{msg}" #~ msgstr "Ошибка формата %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации." - -#, fuzzy -#~ msgid "Access Token" -#~ msgstr "Журналы доступа" - #, fuzzy #~ msgid "Bot Token" #~ msgstr "API токен" @@ -6017,10 +7875,6 @@ msgstr "Ваши ключи доступа" #~ msgid "Category" #~ msgstr "Категория" -#, fuzzy -#~ msgid "Restart Required" -#~ msgstr "Перезапускается" - #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "Успешно развернуто %{conf_name} на %{node_name}" @@ -6098,9 +7952,6 @@ msgstr "Ваши ключи доступа" #~ msgid "Incorrect username or password" #~ msgstr "Неверное имя пользователя или пароль" -#~ msgid "Recovery Code:" -#~ msgstr "Код восстановления:" - #~ msgid "The recovery code is only displayed once, please save it in a safe place." #~ msgstr "" #~ "Код восстановления отображается только один раз, пожалуйста, сохраните его " @@ -6116,9 +7967,6 @@ msgstr "Ваши ключи доступа" #~ "Переименование %{orig_path} в %{new_path} на %{env_name} не удалось, " #~ "пожалуйста, обновите удаленный интерфейс Nginx до последней версии" -#~ msgid "Server Name" -#~ msgstr "Имя сервера" - #~ msgid "Enable 2FA" #~ msgstr "Включить 2ФА" diff --git a/app/src/language/tr_TR/app.po b/app/src/language/tr_TR/app.po index b06c3b35d..13f57dacc 100644 --- a/app/src/language/tr_TR/app.po +++ b/app/src/language/tr_TR/app.po @@ -14,92 +14,139 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.10.4\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "[Nginx UI] ACME Kullanıcısı: %{name}, E-posta: %{email}, CA Dizini: %{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "[Nginx UI] Geçerli sertifika daha sonra iptal edilmek üzere yedekleniyor" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] Sertifika başarıyla yenilendi" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] Sertifika başarıyla iptal edildi" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" "[Nginx UI] Sertifika sunucu için kullanıldı, sunucu TLS sertifikası yeniden " "yükleniyor" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] CA sunucusu ile iletişimi kolaylaştırmak için istemci oluşturma" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] Ortam değişkenleri temizlendi" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] Tamamlandı" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] Sertifika başarıyla verildi" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] Sertifika alınıyor" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] Sertifika iptali için hazırlanıyor" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] Lego yapılandırmaları hazırlanıyor" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] Nginx yeniden yükleniyor" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] İptal tamamlandı" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] Sertifika iptal ediliyor" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] Eski sertifika iptal ediliyor" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] DNS01 meydan okuma sağlayıcısı ayarlanıyor" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] Ortam değişkenleri ayarlanıyor" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] HTTP01 meydan okuma sağlayıcısı ayarlanıyor" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] Sertifika özel anahtarı diske yazılıyor" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] Sertifika diske yazılıyor" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} panoya kopyalandı" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* %{groupName} grubundan düğümler ve manuel olarak seçilen düğümler içerir" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "" +"* Dizin dosyaları varsayılan olarak NGINX UI yapılandırma yolunuzdaki " +"\"log-index\" dizininde saklanır." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* Performans ölçümleri Apple M2 Pro (12 çekirdek) ve 32 GB RAM ile " +"yapılmıştır. Gerçek performans donanım yapılandırmanıza göre değişiklik " +"gösterebilir." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{total} öğenin %{start}-%{end} arası" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "Minimum 1 çekirdek" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "En az 1 GB RAM" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "2+ çekirdek önerilir" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "24 Saatlik UV/PV İstatistikleri" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "İki aşamalı kimlik doğrulaması(2FA)" @@ -108,11 +155,15 @@ msgstr "İki aşamalı kimlik doğrulaması(2FA)" msgid "2FA Settings" msgstr "2FA Ayarları" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "4 GB RAM veya daha fazlası önerilir" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "Hakkında" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "Erişim Kayıtları" @@ -121,30 +172,28 @@ msgid "Access log path not exist" msgstr "Erişim günlüğü yolu mevcut değil" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "Erişim Günlükleri" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "ACME Kullanıcısı" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "Eylem" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "İşlemler" @@ -159,15 +208,15 @@ msgid "Actual worker to configured ratio" msgstr "Gerçek çalışanın yapılandırılmışa oranı" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "Ekle" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "Bir geçiş anahtarı ekle" @@ -181,10 +230,14 @@ msgstr "Yapılandırma Ekle" msgid "Add Directive Below" msgstr "Direktifi Aşağıya Ekleyin" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "Alan Adı Ekle" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "Başlık Ekle" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -198,15 +251,15 @@ msgstr "Sunucu Ekle" msgid "Add Site" msgstr "Site Ekle" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "Akış Ekle" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "Upstream ekle" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "Başarıyla eklendi" @@ -214,25 +267,51 @@ msgstr "Başarıyla eklendi" msgid "Additional" msgstr "İlave bilgi" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "Gelişmiş Mod" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "Gelişmiş indeksleme etkinleştirildi ancak yeniden oluşturma başlatılamadı" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "Gelişmiş indeksleme başarıyla etkinleştirildi" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" +"Gelişmiş log indeksleme özellikleri tüm kullanıcılar için ücretsiz ve açık " +"kaynaklıdır" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "Gelişmiş bellek havuzu sistemi" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "Gelişmiş arama ve filtreleme" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "Gelişmiş Ayarlar" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "Daha sonra bu sayfayı yenileyin ve tekrar parola anahtarı ekle'ye tıklayın." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "Tümü" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "Tüm Bileşenler" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "Tüm Kurtarma Kodları Kullanıldı" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." @@ -240,6 +319,28 @@ msgstr "" "Seçilen tüm alt alan adları aynı DNS Sağlayıcısına ait olmalıdır, aksi " "takdirde sertifika başvurusu başarısız olur." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"Alternatif olarak, veritabanını indiremiyorsanız, GeoLite2-City.mmdb " +"dosyasını app.ini ile aynı dizine el ile yerleştirebilirsiniz." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "Analiz hizmeti mevcut değil" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "Herhangi" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "" +"Herhangi bir erişilebilir IP adresi, özel Sertifika Yetkilileri ile " +"kullanılabilir" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "API Temel Bağlantı Adresi" @@ -260,36 +361,40 @@ msgstr "API Anahtarı" msgid "API Type" msgstr "API Türü" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "Uygulama" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "Uygula" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "Mimari" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "Bu yasaklı IP'yi hemen sileceğinizden emin misiniz?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "Bu geçiş anahtarını hemen silmek istediğinizden emin misiniz?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "Yeni kurtarma kodları oluşturulacaktır. Emin misiniz?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "İki aşamalı doğrulama sıfırlanacaktır. Emin misiniz?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "Tüm bildirimleri temizlemek istediğinizden emin misiniz?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "Sohbet kaydını silmek istediğinizden emin misiniz?" @@ -297,18 +402,18 @@ msgstr "Sohbet kaydını silmek istediğinizden emin misiniz?" msgid "Are you sure you want to delete permanently?" msgstr "Kalıcı olarak silmek istediğinizden emin misiniz?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "Silmek istediğine emin misin?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "" "Aşağıdaki senkronizasyon düğümlerinde Nginx'i yeniden yüklemek " "istediğinizden emin misiniz?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "Bu yönergeyi kaldırmak istediğinizden emin misiniz?" @@ -320,7 +425,7 @@ msgstr "Bu öğeyi kaldırmak istediğinizden emin misiniz?" msgid "Are you sure you want to remove this location?" msgstr "Bu konumu kaldırmak istediğinizden emin misiniz?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "" "Aşağıdaki senkronizasyon düğümlerinde Nginx'i yeniden başlatmak " @@ -330,23 +435,27 @@ msgstr "" msgid "Are you sure you want to restore?" msgstr "Geri yüklemek istediğinizden emin misiniz?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "ChatGPT'den Yardım İsteyin" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "Artan" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "Asistan" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "En az 20 GB kullanılabilir disk alanı" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "Düzeltmeyi dene" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "Girişimler" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "Kimlik Doğrulama" @@ -354,12 +463,12 @@ msgstr "Kimlik Doğrulama" msgid "Authenticate with a passkey" msgstr "Geçiş anahtarıyla kimlik doğrulama" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "Kimlik Doğrulama Ayarları" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "Kimlik doğrulama..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "Yazar" @@ -393,28 +502,27 @@ msgstr "Otomatik Yedekleme Başarısız" msgid "Auto Backup Storage Failed" msgstr "Otomatik Yedekleme Depolama Başarısız" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "Otomatik Yenileme" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "Otomatik yenileme devre dışı bırakıldı" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "Otomatik yenileme etkinleştirildi" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "Otomatik yenileme %{name} için devre dışı" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "Otomatik yenileme %{name} için etkinleştirildi" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert çalışıyor, lütfen bekleyin..." @@ -423,16 +531,32 @@ msgstr "AutoCert çalışıyor, lütfen bekleyin..." msgid "AutoCert is running..." msgstr "AutoCert çalışıyor..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "Otomatik log döngüsü tespiti" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "Otomatik Yeniden Başlatma" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "Ortalama Gecikme" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "Ortalama Günlük UV" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "Ort./PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "Geri" @@ -444,6 +568,22 @@ msgstr "Ana Sayfaya Dön" msgid "Back to List" msgstr "Listeye Dön" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "Arka Uç" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "" +"Arka planda indeksleme devam ediyor. Veriler hazır olduğunda otomatik " +"olarak güncellenecektir." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "Arka plan günlük hizmeti mevcut değil" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "Yedekleme" @@ -452,7 +592,7 @@ msgstr "Yedekleme" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "Yedek dosya bütünlük kontrolü başarısız oldu, dosya değiştirilmiş olabilir" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "Yedek dosya bulunamadı: {0}" @@ -464,22 +604,18 @@ msgstr "Yedek başarıyla indirildi" msgid "Backup Path" msgstr "Yedekleme Yolu" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "Yedekleme yolu mevcut değil: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "Yedekleme yolu bir dizin değil: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "Özel dizin yedeklemesi için yedekleme yolu gereklidir" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "Yedekleme yolu, verilen erişim yollarında değil: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "Yedekleme Zamanlaması" @@ -502,15 +638,15 @@ msgstr "Yedekleme görevi %{backup_name} çalıştırılamadı, hata: %{error}" msgid "Backup Type" msgstr "Yedekleme Türü" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "Yasaklama Eşiği Süresi (Dakika)" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "Yasaklı IP'ler" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "Şu Zamana Kadar Yasaklı" @@ -522,18 +658,18 @@ msgstr "Bark" msgid "Base information" msgstr "Temel bilgiler" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "Temel" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "Temel Mod" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "Temel Ayarlar" @@ -545,7 +681,7 @@ msgstr "Toplu Düzenleme" msgid "Batch Modify" msgstr "Toplu Değiştirme" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "Toplu Yükseltme" @@ -557,11 +693,28 @@ msgstr "Aşağıda toplu olarak değiştirmek istediğiniz seçili öğeler bulu msgid "Block is nil" msgstr "Blok nil değerinde" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "İle Oluşturuldu" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "Tarayıcı" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "Tarayıcı İstatistikleri" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"Gelişmiş indekslemeyi etkinleştirerek, sisteminizin gereksinimleri " +"karşıladığını ve performans etkilerini anladığınızı kabul etmiş olursunuz. " +"Bu, mevcut günlük dosyalarının hemen indekslenmesini başlatacaktır." -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "CA Dizini" @@ -569,11 +722,11 @@ msgstr "CA Dizini" msgid "Cache" msgstr "Önbellek" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "Bu süre içinde erişilmeyen önbellek öğeleri kaldırılacaktır" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "Önbellek yükleyici işlem süresi eşiği" @@ -582,15 +735,15 @@ msgstr "Önbellek yükleyici işlem süresi eşiği" msgid "Cache manager processes" msgstr "Önbellek yönetici süreçleri" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "Önbellek yöneticisi işlem süresi eşiği" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "Önbellek Yöneticisi Ayarları" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "Önbellek Yolu" @@ -599,7 +752,7 @@ msgstr "Önbellek Yolu" msgid "Cache Processes" msgstr "Önbellek İşlemleri" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "Önbellek alt dizin seviyeleri yapısı, örn. 1:2" @@ -616,24 +769,33 @@ msgstr "" "worker_processes * worker_connections temel alınarak hesaplanmıştır. Gerçek " "performans donanım, yapılandırma ve iş yüküne bağlıdır" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "İptal" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "Yedekleme yolu {0} erişilemiyor: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "Günlük dosyasına erişilemiyor" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "Depolama yolu {0} erişilemiyor: {1}" @@ -657,7 +819,7 @@ msgstr "Bu durumda performans verileri alamıyorum" msgid "Cannot remove initial user" msgstr "Başlangıç kullanıcısı kaldırılamaz" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "Sertifika" @@ -665,6 +827,11 @@ msgstr "Sertifika" msgid "Cert path is not under the nginx conf dir" msgstr "Sertifika yolu nginx conf dizini altında değil" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "sertifika" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "%{name} sertifikasının süresi doldu" @@ -679,6 +846,10 @@ msgstr "Sertifika %{name}, %{days} gün sonra sona erecek" msgid "Certificate %{name} will expire in 1 day" msgstr "%{name} sertifikasının süresi 1 gün sonra dolacak" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "Sertifika içeriği ve özel anahtar içeriği boş olamaz" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "Sertifika çözme hatası" @@ -697,6 +868,14 @@ msgstr "Sertifikanın süresi doldu" msgid "Certificate Expiring Soon" msgstr "Sertifika Yakında Sona Eriyor" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "Sertifika dosyaları başarıyla indirildi" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "Sertifika adı boş olamaz" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "Sertifika bulunamadı: %{error}" @@ -709,8 +888,8 @@ msgstr "Sertifika ayrıştırma hatası" msgid "Certificate path is empty" msgstr "Sertifika yolu boş" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "Sertifika başarıyla kaldırıldı" @@ -726,14 +905,14 @@ msgstr "Sertifika başarıyla yenilendi" msgid "Certificate revoked successfully" msgstr "Sertifika başarıyla iptal edildi" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Sertifika Durumu" msgstr[1] "Sertifikaların Durumu" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "Sertifika Türü" @@ -742,7 +921,7 @@ msgstr "Sertifika Türü" msgid "Certificates" msgstr "Sertifikalar" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "Sertifika Listesi" @@ -750,7 +929,7 @@ msgstr "Sertifika Listesi" msgid "Challenge error: {0}" msgstr "Sorgulama hatası: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "Doğrulama Yöntemi" @@ -773,26 +952,33 @@ msgstr[1] "Değişen Sertifikalar" msgid "Changed Path" msgstr "Değişen Dosya Yolu" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "Kanal" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "Sohbet" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "%{path} için Sohbet" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "Kontrol et" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "Tekrar kontrol et" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "Favicon'ı kontrol et" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -826,6 +1012,25 @@ msgstr "" "engeller" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "" +"conf.d dizininin nginx yapılandırma dizini altında olup olmadığını kontrol " +"edin" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"Log endekslemesi etkin olduğunda GeoLite2 veritabanının mevcut olup " +"olmadığını kontrol edin. GeoLite2 veritabanı, log endekslemesinde coğrafi " +"IP analizi için gereklidir. Veritabanını Tercihler sayfasından indirebilir " +"veya app.ini dosyasının bulunduğu dizine GeoLite2-City.mmdb dosyasını " +"manuel olarak yerleştirebilirsiniz" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -841,15 +1046,15 @@ msgstr "" "değiştirmeniz gerekmektedir. Daha fazla bilgi için belgelere bakın: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "Nginx yapılandırma dizininin var olup olmadığını kontrol edin" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "Nginx yapılandırma giriş dosyasının var olup olmadığını kontrol edin" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -865,7 +1070,7 @@ msgstr "" "belirtmeniz gerekir. Daha fazla ayrıntı için belgelere bakın: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -879,27 +1084,27 @@ msgstr "" "gerekir. Daha fazla ayrıntı için belgelere bakın: " "https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "nginx sbin yolu var mı diye kontrol edin" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "nginx.conf dosyasının conf.d dizinini içerip içermediğini kontrol edin" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "" "nginx.conf dosyasının sites-enabled dizinini içerip içermediğini kontrol " "edin" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "" "nginx.conf dosyasının streams-enabled dizinini içerip içermediğini kontrol " "edin" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" @@ -907,7 +1112,7 @@ msgstr "" "sites-available ve sites-enabled dizinlerinin nginx yapılandırma dizini " "altında olup olmadığını kontrol edin" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" @@ -915,6 +1120,19 @@ msgstr "" "streams-available ve streams-enabled dizinlerinin nginx yapılandırma dizini " "altında olup olmadığını kontrol edin" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "Kontrol Aralığı (saniye)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "Çin Erişim Haritası" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "Çin Haritası" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "Şifreli metin çok kısa" @@ -923,13 +1141,13 @@ msgstr "Şifreli metin çok kısa" msgid "Cleaning environment variables" msgstr "Ortam değişkenlerini temizleme" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "Temizle" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "Başarıyla temizlendi" @@ -947,7 +1165,7 @@ msgstr "Yüklemek için dosyaları bu alana tıklayın veya sürükleyin" msgid "Click or drag folders to this area to upload" msgstr "Yüklemek için klasörleri bu alana tıklayın veya sürükleyin" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "Kopyala için tıklayın" @@ -955,10 +1173,18 @@ msgstr "Kopyala için tıklayın" msgid "Client Body Buffer Size" msgstr "İstemci gövdesi arabellek boyutu" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "İstemci Sertifikası" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "İstemci Başlık Arabellek Boyutu" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "İstemci Anahtarı" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "İstemci Maksimum Gövde Boyutu" @@ -987,6 +1213,14 @@ msgstr "Kod tamamlama etkin değil" msgid "Code Completion Model" msgstr "Kod Tamamlama Modeli" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "Daralt" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "Sütun Ayarları" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "Komut" @@ -995,7 +1229,7 @@ msgstr "Komut" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "Komut beklenmeyen çıkış kodu ile sonlandı: {0}, hata: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -1018,11 +1252,34 @@ msgstr "Seçili karşılaştırın" msgid "Compare with Current" msgstr "Mevcut ile karşılaştırın" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "Arama yetenekleriyle tam indeksleme" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "bileşenler" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "Sıkıştırılmış günlük dosyası desteği" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "Sıkıştırma seviyesi, 1 en düşük, 9 en yüksek" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "İstatistikleri Hesaplama" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "Conf.d dizini mevcut" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Conf.d dizini mevcut değil" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "Yapılandırma" @@ -1035,22 +1292,30 @@ msgstr "Yapılandırma dizini mevcut değil" msgid "Config entry file not exist" msgstr "Yapılandırma giriş dosyası mevcut değil" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "Yapılandırma bulunamadı" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "Yapılandırma yolu boş" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "Yapılandırma Şablonu" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "Yapılandırma" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "Yapılandırma dosyası başarıyla test edildi" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "Yapılandırma dosyası izole bir kum oyun alanında başarıyla test edildi" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "Yapılandırma Geçmişi" @@ -1071,11 +1336,20 @@ msgstr "Yapılandırmalar" msgid "Configure SSL" msgstr "SSL'yi Yapılandırma" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "Silme Onayı" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "Yeni Şifreyi Onayla" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "Onay Gerekli" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "Bağlandı" @@ -1083,9 +1357,9 @@ msgstr "Bağlandı" msgid "Connection error, trying to reconnect..." msgstr "Bağlantı hatası, yeniden bağlanılmaya çalışılıyor..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "Bağlantı kesildi, lütfen sayfayı yenileyin." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "Bu terminal için bağlantı kesildi. Gerekirse yenileyin." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1095,14 +1369,14 @@ msgstr "Bağlantı zaman aşımı süresi" msgid "Container status unknown" msgstr "Kapsayıcı durumu bilinmiyor" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "İçerik" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "Kopyalandı" @@ -1115,14 +1389,38 @@ msgstr "Kopyalandı!" msgid "Copy" msgstr "Kopya" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "Kodları Kopyala" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "Çekirdek Yükseltme" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "Eski kapsayıcı adı bulunamadı" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "Geçici kapsayıcı bulunamadı" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "Sayı" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "Ülke / Bölge" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "İşlemci" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "CPU Durumu" @@ -1166,10 +1464,10 @@ msgstr "" "oluşturun. Yedek dosyaları otomatik olarak bilgisayarınıza indirilecektir." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "Oluşturulma Tarihi" @@ -1194,11 +1492,15 @@ msgstr "Kimlik bilgileri" msgid "Cron Expression" msgstr "Cron İfadesi" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "Çapraz dosya zaman çizelgesi korelasyonu" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "Mevcut hesap için TOTP etkinleştirildi." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "Mevcut hesap için TOTP etkin değil." @@ -1218,12 +1520,12 @@ msgstr "Mevcut Şifre" msgid "Current usage" msgstr "Mevcut kullanım" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "Mevcut sürüm" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "Özelleştirilmiş" @@ -1236,14 +1538,18 @@ msgstr "Özel cron ifadesi" msgid "Custom Directory" msgstr "Özel Dizin" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "Özel Alan Adları" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "Özel Alan Adı Sertifikası" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "Özel Başlıklar" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1254,6 +1560,10 @@ msgstr "Ortam göstergesinde görüntülenecek yerel düğüm adını özelleşt msgid "Daily" msgstr "Günlük" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "Günlük Erişim Eğilimleri" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "Günlük olarak saat %{time}" @@ -1261,10 +1571,18 @@ msgstr "Günlük olarak saat %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "Kontrol Paneli" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "Tarih" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "Tarih Aralığı" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "Ayın Günü" @@ -1277,36 +1595,50 @@ msgstr "Haftanın Günü" msgid "Days" msgstr "Günler" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "Veritabanı dosyası bulunamadı" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "Çözümleme başarılı oldu ancak sıkıştırılmış dosya silinemedi: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "Şifre çözme başarısız" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "Varsayılan aralık" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "" "Paylaşılan bellek bölgesinin adını ve boyutunu tanımlayın, örneğin " "proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "Sil" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "%{env_name} üzerinde %{path} silme işlemi başarısız oldu" +msgid "Delete %{path} on %{node_name} failed" +msgstr "%{node_name} üzerindeki %{path} silinemedi" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "%{env_name} üzerindeki %{path} başarıyla silindi" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "%{node_name} üzerindeki %{path} başarıyla silindi" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "Sertifikayı Sil" @@ -1326,43 +1658,44 @@ msgstr "Uzak Yapılandırma Silme Hatası" msgid "Delete Remote Config Success" msgstr "Uzak Yapılandırma Başarıyla Silindi" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "Uzak Site Silme Hatası" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "Uzak Site Başarıyla Silindi" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "Uzak Akış Silme Hatası" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "Uzak Akış Başarıyla Silindi" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "%{node} üzerindeki %{name} sitesi silinemedi" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "%{node} üzerindeki %{name} sitesi başarıyla silindi" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "Siteyi sil: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "%{node} üzerindeki %{name} akışı silinemedi" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "%{name} akışı %{node} üzerinden başarıyla silindi" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "Akışı sil: %{stream_name}" @@ -1378,8 +1711,16 @@ msgstr "Demo" msgid "Deploy" msgstr "Yayınla" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "Dağıtım Modu" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "Azalan" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "Açıklama" @@ -1395,18 +1736,44 @@ msgstr "Hedef dosya: {0} zaten mevcut" msgid "Details" msgstr "Detaylar" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Dev" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "Geliştirme" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "Geliştirme modu" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "Cihaz" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "Cihaz İstatistikleri" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "Cihaz Türü" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "Özet dosyası içeriği boş" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "DingTalk" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "Doğrudan" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "Talimat" @@ -1427,98 +1794,101 @@ msgstr "DirectiveIdx aralık dışında" msgid "Directives" msgstr "Yönergeler" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "Dizin Seviyeleri" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "Önbellek dosyalarını depolamak için dizin yolu" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "Devre dışı bırak" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "%{name} için otomatik yenileme devre dışı bırakılamadı" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "Uzak Site Devre Dışı Bırakma Hatası" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "Uzak Site Bakımını Devre Dışı Bırakma Hatası" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "Uzak Site Bakımı Başarıyla Devre Dışı Bırakıldı" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "Uzak Site Başarıyla Devre Dışı Bırakıldı" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "Uzak Akış Devre Dışı Bırakma Hatası" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "Uzak Akış Devre Dışı Bırakma Başarılı" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "%{node} üzerindeki %{name} sitesi devre dışı bırakılamadı" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "%{node} üzerindeki %{name} sitesi başarıyla devre dışı bırakıldı" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "%{node} üzerindeki %{name} sitesi bakımını devre dışı bırakma başarısız oldu" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "%{name} sitesinin bakımı %{node} üzerinde başarıyla devre dışı bırakıldı" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "%{node} üzerindeki %{name} akışı devre dışı bırakılamadı" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "Akış %{name}, %{node} üzerinden başarıyla devre dışı bırakıldı" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "Devre dışı" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "Başarıyla devre dışı bırakıldı" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "Bağlantı kesildi" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "Disk IO" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "DNS Kimlik Bilgileri" @@ -1527,11 +1897,15 @@ msgstr "DNS Kimlik Bilgileri" msgid "DNS Provider" msgstr "DNS Sağlayıcısı" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "DNS Çözümleyici" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "Bu seçeneği, ihtiyacınız olduğundan emin olmadıkça etkinleştirmeyin." @@ -1539,11 +1913,11 @@ msgstr "Bu seçeneği, ihtiyacınız olduğundan emin olmadıkça etkinleştirme msgid "Do you want to %{action} this site?" msgstr "Bu siteyi %{action} etmek istiyor musunuz?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "Bu akışı %{action} etmek istiyor musunuz?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "Otomatik sertifika yenilemeyi devre dışı bırakmak istiyor musunuz?" @@ -1556,7 +1930,7 @@ msgstr "TLS'yi etkinleştirmek istiyor musunuz?" msgid "Do you want to remove this server?" msgstr "Bu sunucuyu kaldırmak istiyor musunuz?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "Bu upstream'i kaldırmak istiyor musunuz?" @@ -1564,7 +1938,7 @@ msgstr "Bu upstream'i kaldırmak istiyor musunuz?" msgid "Docker client not initialized" msgstr "Docker istemcisi başlatılmadı" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Docker soketi mevcut" @@ -1578,16 +1952,37 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "Belge" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "Belge Sayısı" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "Alan Adı" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "" "Alan adları listesi boş, %{config} için Otomatik Sertifikayı yeniden açmayı " "deneyin" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "Sertifika Dosyalarını İndir" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "İndirme tamamlandı" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "İndirme başarısız" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "GeoLite2 Veritabanını İndir" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "En son sürümü indirme hatası" @@ -1596,12 +1991,19 @@ msgstr "En son sürümü indirme hatası" msgid "Downloading latest release" msgstr "En son sürüm indiriliyor" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "Sertifika dosyasını buraya bırakın" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "Özel anahtar dosyasını buraya bırakın" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "Deneme modu etkinleştirildi(Dry-run)" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1610,10 +2012,12 @@ msgstr "" "çalışmadığınız sürece HTTPS olmayan web sitelerinde anahtarları " "kullanamazsınız." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "Kopyala" @@ -1622,21 +2026,33 @@ msgstr "Kopyala" msgid "Duplicate to local successfully" msgstr "Başarıyla yerel kopya oluşturuldu" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "Dinamik" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "Dinamik parça yönetimi" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "örn., 0 0 * * * (her gece yarısı)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "EAB HMAC Anahtarı" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "EAB Anahtar Kimliği" + #: src/language/curd.ts:8 msgid "Edit" msgstr "Düzenle" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "Düzenle %{n}" @@ -1653,7 +2069,7 @@ msgstr "Siteyi Düzenle" msgid "Edit Stream" msgstr "Akışı Düzenle" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "E-posta" @@ -1662,16 +2078,28 @@ msgstr "E-posta" msgid "Email (*)" msgstr "E-posta(*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "Boş günlük satırı" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "etkinleştir" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "2FA'yı başarıyla etkinleştirildi" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "Gelişmiş Dizinlemeyi Etkinleştir" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "Gelişmiş Log Dizinlemeyi Etkinleştir" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "%{name} için otomatik yenilemeyi etkinleştirme başarısız oldu" @@ -1695,57 +2123,61 @@ msgstr "HTTP/3'ü Etkinleştir" msgid "Enable HTTPS" msgstr "HTTPS'yi Etkinleştir" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "Dizinlemeyi Etkinleştir" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "Proxy Önbelleğini Etkinleştir" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "Uzak Site Etkinleştirme Hatası" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "Uzak Site Bakımını Etkinleştirme Hatası" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "Uzak Site Bakımını Etkinleştirme Başarılı" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "Uzak Site Başarıyla Etkinleştirildi" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "Uzaktan Akış Etkinleştirme Hatası" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "Uzaktan Akış Başarıyla Etkinleştirildi" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "%{node} üzerinde %{name} sitesi bakımını etkinleştirme başarısız oldu" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "%{node} üzerinde %{name} sitesi bakımı başarıyla etkinleştirildi" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "%{node} üzerinde %{name} sitesi etkinleştirilemedi" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "%{node} üzerinde %{name} sitesi başarıyla etkinleştirildi" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "%{node} üzerinde %{name} akışı etkinleştirilemedi" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "%{node} üzerinde %{name} akışı başarıyla etkinleştirildi" @@ -1757,29 +2189,29 @@ msgstr "stub_status modülünü etkinleştir" msgid "Enable TLS" msgstr "TLS'yi Etkinleştir" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "TOTP'yi Etkinleştir" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "Etkin" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "Başarıyla etkinleştirildi" @@ -1793,6 +2225,16 @@ msgstr "" "En iyi performans için QUIC protokolüne dayalı HTTP/3 desteğini " "etkinleştirir" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"Gelişmiş günlük indekslemeyi etkinleştirmek, CPU ve bellek dahil olmak " +"üzere önemli hesaplama kaynakları tüketecektir. Devam etmeden önce " +"sisteminizin minimum gereksinimleri karşıladığından emin olun." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Let's Encrypt ile web sitesini şifreleyin" @@ -1801,11 +2243,19 @@ msgstr "Let's Encrypt ile web sitesini şifreleyin" msgid "End" msgstr "Son" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "Bitiş Tarihi" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "Alan adını girin" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "Sunucu IP adresini girin (ör. 203.0.113.1 veya 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "Alan adınızı girin" @@ -1817,39 +2267,58 @@ msgstr "Ortam yapılandırması boş" msgid "Environment variables cleaned" msgstr "Ortam değişkenleri temizlendi" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "Ortamlar" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "Hata" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "Hata detayları" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "Fark görüntüleyici başlatılırken hata" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "Hata Günlüğü" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "Hata Günlüğü Tespit Edildi" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "Hata günlüğü yolu mevcut değil" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "Hata Günlükleri" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "" +"Hata günlükleri serbest metin mesajları içerdiğinden yapılandırılmış " +"analizi desteklemez." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "Hata deseni tanıma" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "İçerik işlenirken hata" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "Çalıştırılabilir ikili dosya boş" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "Yürütülebilir Dosya Yolu" @@ -1865,6 +2334,22 @@ msgstr "Her gün %{time} saatinde çalıştır" msgid "Execute on every month on day %{day} at %{time}" msgstr "Her ayın %{day} günü %{time} saatinde çalıştır" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "Genişlet" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "Beklenen Performans" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "Beklenen Durum Kodları" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "Beklenen Metin" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1878,12 +2363,36 @@ msgstr "Son kullanma tarihi: %{date}" msgid "Export Excel" msgstr "Excel'e Aktar" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "" +"Harici Hesap Bağlama HMAC Anahtarı (isteğe bağlı). Base64 URL kodlama " +"formatında olmalıdır." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "" +"Harici Hesap Bağlama Anahtar Kimliği (isteğe bağlı). ZeroSSL gibi bazı ACME " +"sağlayıcıları için gereklidir." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "Harici Docker Konteyneri" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "Harici bildirim yapılandırması bulunamadı" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "Harici Bildirim Testi" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "Harici Bildirim" @@ -1912,15 +2421,15 @@ msgstr "Nginx UI dosyalarının yedeklenmesi başarısız oldu: {0}" msgid "Failed to build nginx config: {0}" msgstr "nginx yapılandırması oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "Hash hesaplanamadı: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Nginx hash hesaplama başarısız: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Nginx UI hash hesaplama başarısız: {0}" @@ -1933,38 +2442,35 @@ msgid "Failed to copy config file: {0}" msgstr "Yapılandırma dosyası kopyalanamadı: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "Veritabanı dizini kopyalanamadı: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "Veritabanı dosyası kopyalanamadı: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "Dosya içeriği kopyalanamadı: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Nginx yapılandırma dizini kopyalanamadı: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "Panoya kopyalama başarısız oldu" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "Yedek oluşturma başarısız oldu" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "Yedek dizini oluşturulamadı: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "Yedek dosyası oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "Dizin oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "Dosya oluşturulamadı: {0}" @@ -1972,19 +2478,19 @@ msgstr "Dosya oluşturulamadı: {0}" msgid "Failed to create hash info file: {0}" msgstr "Hash bilgi dosyası oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "Üst dizin oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "Geri yükleme dizini oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "Depolama dizini oluşturulamadı {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "Sembolik bağlantı oluşturulamadı: {0}" @@ -2000,48 +2506,64 @@ msgstr "Geçici dizin oluşturulamadı" msgid "Failed to create temporary subdirectory" msgstr "Geçici alt dizin oluşturulamadı" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "xz okuyucu oluşturulamadı: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "ZIP arşivi oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "ZIP girişi oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "ZIP dosyası oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "ZIP başlığı oluşturulamadı: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "GeoLite2 veritabanını açma hatası: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "Veri şifresi çözülemedi: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "Dosya çözülemedi: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Nginx dizini şifre çözme başarısız: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Nginx UI dizininin şifresi çözülemedi: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "Tüm indeksler silinemedi" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "Sertifika silinemedi" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "Sertifika veritabanından silinemedi: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "Dosya indeksi silinemedi" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "Devre dışı bırakılamadı %{msg}" @@ -2049,20 +2571,32 @@ msgstr "Devre dışı bırakılamadı %{msg}" msgid "Failed to disable maintenance mode %{msg}" msgstr "Bakım modu devre dışı bırakılamadı: %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "Sertifika dosyaları indirilemedi" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "GeoLite2 veritabanını indirme başarısız oldu: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "Etkinleştirilemedi %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "Gelişmiş indeksleme etkinleştirilemedi" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "Bakım modu etkinleştirilemedi: %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "Veri şifreleme başarısız: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "Dosya şifreleme başarısız: {0}" @@ -2074,10 +2608,6 @@ msgstr "Nginx dizini şifreleme başarısız: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Nginx UI dizini şifreleme başarısız: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "Sembolik bağlantılar değerlendirilemedi: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "Komut çalıştırılamadı: {0}" @@ -2086,7 +2616,7 @@ msgstr "Komut çalıştırılamadı: {0}" msgid "Failed to execute template: {0}" msgstr "Şablon çalıştırılamadı: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "Arşiv çıkarılamadı: {0}" @@ -2106,14 +2636,30 @@ msgstr "Sertifika bilgileri alınamadı" msgid "Failed to get container id: {0}" msgstr "Konteyner kimliği alınamadı: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "Dosya boyutu alınamadı: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "Dizin durumu alınamadı" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Nginx performans ayarları alınamadı" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "nginx.conf yolunu alamadı" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "Performans verileri alınamadı" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "Kalıcılık istatistikleri alınamadı" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "Saplama durumu alınamadı: {0}" @@ -2130,15 +2676,19 @@ msgstr "Mevcut konteyner incelenirken hata oluştu: {0}" msgid "Failed to load history records" msgstr "Geçmiş kayıtları yüklenemedi" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "Dosya açılamadı: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "Kaynak dosya açılamadı: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "ZIP girişi açılamadı: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "ZIP dosyası açılamadı: {0}" @@ -2158,15 +2708,23 @@ msgstr "Şablon ayrıştırma başarısız: {0}" msgid "Failed to pull image: {0}" msgstr "Görüntü çekme başarısız: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "Sıkıştırılmış veriler okunamadı: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "Şifrelenmiş dosya okunamadı: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "Dosya okunamadı" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "Dosya okunamadı: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "Hash bilgi dosyası okunamadı: {0}" @@ -2182,57 +2740,97 @@ msgstr "Çıktı okunamadı: {0}" msgid "Failed to read response body: {0}" msgstr "Yanıt gövdesi okunamadı: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "Sembolik bağlantı okunamadı: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "Dosya indeksi yeniden oluşturulamadı" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "Dizin yeniden oluşturulamadı" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "Siteler yenilenemedi" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Nginx yapılandırmaları geri yüklenemedi: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "Nginx UI dosyaları geri yüklenemedi: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "Sertifika iptal edilemedi" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "Sertifika iptal edilemedi: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "Yapılandırma kaydedilemedi" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "İndirilen dosya kaydedilirken hata oluştu: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "Sağlık kontrol yapılandırması kaydedilemedi" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Nginx performans ayarları kaydedilemedi" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "Sıralama kaydedilemedi" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "Test mesajı gönderilemedi" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "Geçici konteyner başlatılamadı: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "Durum güncellenemedi" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "Dosya yüklenemedi" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "Hash doğrulama başarısız: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "Yedek dosyası yazılamadı: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "Sıkıştırılmamış verilerin yazılması başarısız oldu: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "Şifresi çözülmüş dosya yazılamadı: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "Şifrelenmiş dosya yazma hatası: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "Güvenlik anahtarı dosyası yazılamadı: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "ZIP tamponuna yazma başarısız: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "Özellikler" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2246,6 +2844,10 @@ msgstr "Dosya" msgid "File exists" msgstr "Dosya zaten var" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "%{path} için dosya indeksi yeniden oluşturma başarıyla başlatıldı" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "Dosya Bulunamadı" @@ -2254,19 +2856,35 @@ msgstr "Dosya Bulunamadı" msgid "File or directory not found: {0}" msgstr "Dosya veya dizin bulunamadı: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "Dosya yolu gereklidir" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "Dosya boyutu 5 MB'ı aşamaz" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "Dosya başarıyla yüklendi" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "Dosya adı boş" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "Filtre" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "Günlük içeriğini filtrele" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "Bitmiş" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "İlk Görünüm" @@ -2278,7 +2896,11 @@ msgstr "klasör" msgid "Folder" msgstr "Klasör" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "Yönlendirmeleri takip et" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2295,6 +2917,33 @@ msgstr "Çin kullanıcıları için" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "Çinli kullanıcılar için: https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "Ticari veya profesyonel kullanım için iletişime geçin" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" +"Hata günlükleri için daha iyi bir görüntüleme deneyimi için Ham Günlük " +"Görüntüleyici'yi kullanın." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" +"IP tabanlı sertifika yapılandırmalarında yalnızca HTTP-01 meydan okuma " +"yöntemi desteklenir. DNS-01 meydan okuması IP tabanlı sertifikalarla uyumlu " +"değildir." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "" +"IP tabanlı sertifikalar için, sertifikaya dahil edilecek sunucu IP adresini " +"belirtiniz." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "Form ayrıştırma başarısız" @@ -2315,6 +2964,22 @@ msgstr "Biçim: dakika saat gün ay haftanın_günü" msgid "Friday" msgstr "Cuma" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "Dizine alınmış kayıtlardan" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "Önyüz" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "Tam Metin Arama" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "Tam metin arama desteği" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "Genel Sertifika" @@ -2323,16 +2988,16 @@ msgstr "Genel Sertifika" msgid "Generate" msgstr "Oluştur" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "Yeni Kurtarma Kodları Oluştur" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "Kurtarma Kodları Oluştur" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "Kurtarma kodları başarıyla oluşturuldu" @@ -2340,6 +3005,39 @@ msgstr "Kurtarma kodları başarıyla oluşturuldu" msgid "Generating private key for registering account" msgstr "Hesap kaydı için özel anahtar oluşturuluyor" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "GeoLite2 Veritabanı" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "GeoLite2 veritabanı mevcut" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "GeoLite2 Veritabanı Yüklendi" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "GeoLite2 veritabanı {0} adresinde bulunamadı" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"GeoLite2 veritabanı {0} konumunda bulunamadı. Günlük dizinlemesi, coğrafi " +"IP analizi için GeoLite2 veritabanına ihtiyaç duyar" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "GeoLite2 Veritabanı Gereklidir" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "ACME kullanıcısı alınırken hata: {0}" @@ -2352,8 +3050,7 @@ msgstr "Veri alınamadı" msgid "Get dns credential error: {0}" msgstr "DNS kimlik bilgisi alınırken hata: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "Sürüm bilgilerini alma hatası" @@ -2365,10 +3062,39 @@ msgstr "Sertifika alınıyor, lütfen bekleyin..." msgid "Github Proxy" msgstr "Github Proxy" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "Küresel Erişim Haritası" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "Dünya Haritası" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "Ham Log Görüntüleyiciye Git" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" +"gRPC sağlık kontrolü, sunucunun gRPC Sağlık Kontrol hizmetini " +"(grpc.health.v1.Health) uygulamasını gerektirir." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"gRPCS, TLS şifrelemesi kullanır. Sunucu, gRPC Sağlık Kontrol hizmetini " +"uygulamalıdır. Test için, SSL doğrulaması varsayılan olarak devre dışıdır." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "GZIP Sıkıştırma" @@ -2381,25 +3107,51 @@ msgstr "GZIP Sıkıştırma Seviyesi" msgid "GZIP Min Length" msgstr "GZIP Minimum Uzunluk" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "Hash doğrulaması başarısız: dosya bütünlüğü bozuldu" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "Sağlık Kontrolü" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "Sağlık Kontrolü Yapılandırması" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "Sağlık kontrolü yapılandırması kaydedildi" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "Sağlık kontrol yapılandırması başarıyla kaydedildi" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "Sağlık Durumu" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "Gizle" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "Asistanı gizle" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "Yüksek" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "Daha yüksek bir değer, daha iyi bağlantı yeniden kullanımı anlamına gelir" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "Geçmiş" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "Anasayfa" @@ -2408,10 +3160,11 @@ msgid "Host" msgstr "Host" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "Saat" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2419,7 +3172,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "HTTP Doğrulama Bağlantı Noktası" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "HTTP Yöntemi" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2427,15 +3184,15 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "HTTPS Protokolü" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "ICP Numarası" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "Boş bırakılırsa, varsayılan CA Dir kullanılır." - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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." @@ -2444,7 +3201,7 @@ msgstr "" "yasaklama eşiği dakikaları içinde maksimum deneme sayısına ulaşırsa, IP " "adresi belirli bir süre için yasaklanacaktır." -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." @@ -2452,13 +3209,21 @@ msgstr "" "Eski sertifikayı otomatik olarak iptal etmek istiyorsanız, bu seçeneği " "etkinleştirin." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" +"Depolama konumunu değiştirmek isterseniz, Nginx UI yapılandırmasında " +"`nginx_log` bölümünün `IndexPath` değerini ayarlayabilirsiniz." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "" "Tarayıcınız WebAuthn Passkey'i destekliyorsa, bir iletişim kutusu " "görüntülenecektir." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2470,12 +3235,12 @@ msgstr "" msgid "Import" msgstr "İçe Aktar" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "Sertifika İçe Aktar" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "Etkin Olmayan Süre" @@ -2487,7 +3252,46 @@ msgstr "" "Ana süreç, çalışan süreçler, önbellek süreçleri ve diğer Nginx süreçlerini " "içerir" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "Artımlı indeks tarama" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "Dizin ve istatistiklerin yeniden oluşturulması başarıyla başlatıldı" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "Dizin oluşturma başarısız" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "Dizin oluşturma başarısız oldu, lütfen yeniden oluşturmayı deneyin" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "Dizin yeniden oluşturma başlatıldı" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "Dizin Durumu" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "Dizine Alındı" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "Dizinleme" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "Günlükler dizinleniyor..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "Dizinleniyor..." @@ -2495,10 +3299,14 @@ msgstr "Dizinleniyor..." msgid "Indicator" msgstr "Gösterge" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "Bilgi" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "Başlangıç kullanıcı mevcut değil" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "İlk çekirdek yükseltici hatası" @@ -2507,7 +3315,7 @@ msgstr "İlk çekirdek yükseltici hatası" msgid "Initialing core upgrader" msgstr "Çekirdek yükseltici başlatılıyor" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "Uygulamadan kodu girin:" @@ -2522,7 +3330,7 @@ msgstr "Güvensiz Doğrulamayı Atla" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "Yükle" @@ -2550,27 +3358,36 @@ msgstr "" msgid "Interval" msgstr "Aralık" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "Geçersiz" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "Geçersiz AES IV biçimi: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "Geçersiz AES anahtar biçimi: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "Geçersiz sertifika biçimi" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "Geçersiz talep türü" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "Geçersiz commit SHA" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "Geçersiz dosya nesnesi" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "Geçersiz dosya yolu: {0}" @@ -2583,6 +3400,10 @@ msgstr "Geçersiz dosya adı" msgid "Invalid folder name" msgstr "Geçersiz klasör adı" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "Geçersiz bildirim kimliği" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "Geçersiz bildirim yapılandırması" @@ -2591,7 +3412,7 @@ msgstr "Geçersiz bildirim yapılandırması" msgid "Invalid otp code" msgstr "Geçersiz OTP kodu" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "Şifresi çözülmüş veride geçersiz dolgu" @@ -2599,10 +3420,15 @@ msgstr "Şifresi çözülmüş veride geçersiz dolgu" msgid "Invalid passcode or recovery code" msgstr "Geçersiz parola veya kurtarma kodu" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "Geçersiz yol: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "Geçersiz özel anahtar biçimi" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "Geçersiz kurtarma kodu" @@ -2611,19 +3437,41 @@ msgstr "Geçersiz kurtarma kodu" msgid "Invalid request format" msgstr "Geçersiz istek biçimi" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "Geçersiz güvenlik belirteci biçimi" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "Geçersiz Telegram Sohbet Kimliği: sıfır olamaz" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "Geçersiz zaman damgası biçimi" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "Geçersiz WebSocket mesaj türü" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "IP Adresi" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "IP Sertifika Bildirimi" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "Sertifika ver" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "Sertifika Düzenle" @@ -2643,7 +3491,7 @@ msgstr "öğe(ler)" msgid "Jwt Secret" msgstr "Jwt Secret" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2655,12 +3503,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "Keepalive Zaman Aşımı" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "Anahtar Türü" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "Dil" @@ -2672,6 +3520,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark Özel" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "Son 12 saat" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "Son 14 gün" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "Son 15 dakika" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "Son 24 saat" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "Son 30 gün" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "Son 30 dakika" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "Son 4 saat" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "Son 7 gün" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "Son 90 gün" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "Son Yedekleme Durumu" @@ -2680,15 +3566,35 @@ msgstr "Son Yedekleme Durumu" msgid "Last Backup Time" msgstr "Son Yedekleme Zamanı" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "Son Kontrol" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "En son şu tarihte kontrol edildi" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "Son 1 saat" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "Son Dizinlenme" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "Geçen ay" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "Son güncelleme" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "Son güncelleme:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "En son kullanıldığı zaman" @@ -2704,12 +3610,18 @@ msgstr "Varsayılan için boş bırakın: https://api.openai.com/" msgid "Leave blank if do not want to modify" msgstr "Değiştirmek istemiyorsanız boş bırakın" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "ACME sağlayıcınız tarafından gerekli değilse boş bırakın" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "Buna ihtiyacınız yoksa boş bırakın." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "Boş bırakmak hiçbir şeyi değiştirmeyecektir" @@ -2717,16 +3629,24 @@ msgstr "Boş bırakmak hiçbir şeyi değiştirmeyecektir" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "TOTP etkin olmadığı için eski kurtarma kodu kullanılamaz" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego CNAME Desteğini Devre Dışı Bırak" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "Lisans" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "Lisans Dağılımı" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "Lisans Türleri" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "Bağlantı" @@ -2742,32 +3662,32 @@ msgstr "Dinliyor" msgid "Load Average:" msgstr "Yük Ortalaması:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "Ayarlar'dan yükle" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "Başarıyla yüklendi" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "Yüklendi" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "Yükleyici Dosyaları" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "Yükleyici Ayarları" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "Yükleyici Bekleme Süresi" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "Yükleyici Eşiği" @@ -2775,9 +3695,15 @@ msgstr "Yükleyici Eşiği" msgid "Loading data..." msgstr "Veriler yükleniyor..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "Yükleniyor..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2796,11 +3722,11 @@ msgstr "Konum" msgid "Locations" msgstr "Konumlar" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "Günlük" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2810,23 +3736,61 @@ msgstr "" "nginx-ui kullanıyorsanız, daha fazla bilgi için " "https://nginxui.com/zh_CN/guide/config-nginx-log.html adresine bakın." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "Günlük dosyası mevcut değil" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "Günlük dosyası normal bir dosya değil" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "Günlük dosyası mevcut değil" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "Günlük dosyası henüz dizine eklenmedi" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "Günlük indeksleyici mevcut değil" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "Günlük indeksleme tamamlandı! Güncel veriler yükleniyor..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "Kayıt satırı maksimum uzunluğu aşar" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "Günlük Listesi" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" +"Kayıt ayrıştırıcı başlatılmadı; kullanmadan önce indexer.InitLogParser() " +"metodunu çağırın" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "Günlük yolu beyaz listede değil" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "Giriş" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "Giriş Başarılı" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "Çıkış başarılı" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Logrotate" @@ -2846,9 +3810,20 @@ msgstr "" "olarak etkinleştirebilir. Nginx UI'nin crontab görev zamanlayıcısı, " "belirlediğiniz dakika aralığında logrotate komutunu çalıştıracaktır." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "Düşük" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "Ana Düğüm" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "Bakım" @@ -2864,7 +3839,7 @@ msgstr "Bakım modu başarıyla etkinleştirildi" msgid "Make certificate dir error: {0}" msgstr "Sertifika dizini oluşturma hatası: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2879,11 +3854,11 @@ msgstr "" msgid "Manage Configs" msgstr "Yapılandırmaları Yönet" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "Siteleri Yönet" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "Akışları Yönet" @@ -2895,15 +3870,15 @@ msgstr "Kullanıcıları Yönet" msgid "Managed Certificate" msgstr "Yönetilen Sertifika" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "Yönetici Dosyaları" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "Yönetici Uykusu" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "Yönetici Eşiği" @@ -2929,7 +3904,7 @@ msgstr "Ana süreç" msgid "Master Process" msgstr "Ana Süreç" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "Maksimum Deneme Sayısı" @@ -2937,11 +3912,15 @@ msgstr "Maksimum Deneme Sayısı" msgid "Max Concurrent Connections" msgstr "Maksimum Eşzamanlı Bağlantı" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "Maksimum Yönlendirme" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "Saniyede Maksimum İstek Sayısı" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "Maksimum Önbellek Boyutu" @@ -2958,7 +3937,7 @@ msgstr "Maksimum eşzamanlı bağlantı sayısı" msgid "Maximum number of connections per worker process" msgstr "Çalışan işlem başına maksimum bağlantı sayısı" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "Önbelleğin maksimum toplam boyutu" @@ -2968,6 +3947,7 @@ msgstr "Maksimum çalışan işlem sayısı:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "Bellek" @@ -2975,22 +3955,39 @@ msgstr "Bellek" msgid "Memory and Storage" msgstr "Bellek ve Depolama" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "Bellek Tasarımı" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "Bellek Kullanımı (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "Yöntem" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "Metot Adı" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "Sıkıştırma için minimum dosya boyutu" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "Minimum Boş Alan" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "Önbellek dizinindeki minimum boş alan" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "Minimum:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "Dakika" @@ -2999,21 +3996,36 @@ msgstr "Dakika" msgid "Minutes" msgstr "Dakika" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "Ayna" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "Model" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "Modern analiz hizmeti mevcut değil" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "Modern indeksleme hizmeti mevcut değil" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "Modern arama hizmeti mevcut değil" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "Değiştirilme Tarihi" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "Değiştir" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "Sertifikayı Düzenle" @@ -3021,7 +4033,7 @@ msgstr "Sertifikayı Düzenle" msgid "Modify Config" msgstr "Yapılandırmayı Düzenle" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "Modül" @@ -3029,6 +4041,10 @@ msgstr "Modül" msgid "Modules" msgstr "Modüller" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "Modül önbelleği yenilendi" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "Pazartesi" @@ -3041,39 +4057,66 @@ msgstr "Aylık" msgid "Monthly on day %{day} at %{time}" msgstr "Her ayın %{day} günü %{time} saatinde" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "Çok boyutlu veri görselleştirme" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "Çok Satırlı Yönergeler" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "İnternetten erişilebilir bir genel IP adresi olmalıdır" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "Yok" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "İsim" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "Ad veya içerik" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "İsim alanı" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "İsim Alanları" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "stub_status modülünün etkinleştirilmesi gerekiyor" @@ -3086,6 +4129,10 @@ msgstr "Ağ" msgid "Network Statistics" msgstr "Ağ İstatistikleri" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "Yeni Sohbet" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "Yeni DNS sorgulama sağlayıcı hatası: {0}" @@ -3114,18 +4161,18 @@ msgstr "Yeni Yol" msgid "New transport error: {0}" msgstr "Yeni taşıma hatası: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "Yeni sürüm yayınlandı" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "Sonraki" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3137,7 +4184,7 @@ msgstr "Nginx -T çıktısı boş" msgid "Nginx Access Log Path" msgstr "Nginx Erişim Günlüğü Yolu" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Nginx erişim günlüğü yolu mevcut" @@ -3166,15 +4213,15 @@ msgstr "Nginx yapılandırması sites-enabled içermiyor" msgid "Nginx conf not include stream-enabled" msgstr "Nginx yapılandırması stream-enabled içermiyor" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "Nginx yapılandırma dizini ayarlanmamış" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Nginx yapılandırma dizini mevcut" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "Nginx yapılandırma giriş dosyası mevcut" @@ -3182,8 +4229,8 @@ msgstr "Nginx yapılandırma giriş dosyası mevcut" msgid "Nginx configuration has been restored" msgstr "Nginx yapılandırması geri yüklendi" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Nginx Yapılandırma Ayrıştırma Hatası" @@ -3212,7 +4259,7 @@ msgstr "Nginx CPU kullanım oranı" msgid "Nginx Error Log Path" msgstr "Nginx Hata Günlüğü Yolu" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "Nginx hata günlüğü yolu mevcut" @@ -3221,7 +4268,7 @@ msgid "Nginx error: {0}" msgstr "Nginx hatası: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3236,7 +4283,7 @@ msgstr "Nginx başka bir konteynerde çalışmıyor" msgid "Nginx is running" msgstr "Nginx çalışıyor" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Nginx Günlüğü" @@ -3244,6 +4291,10 @@ msgstr "Nginx Günlüğü" msgid "Nginx Log Directory Whitelist" msgstr "Nginx Günlük Dizin Beyaz Listesi" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Nginx Günlük Dizini Oluşturuluyor..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3253,7 +4304,7 @@ msgstr "Nginx Bellek Kullanımı" msgid "Nginx PID Path" msgstr "Nginx PID Yolu" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Nginx PID yolu mevcut" @@ -3266,7 +4317,7 @@ msgstr "Nginx Yeniden Yükleme Komutu" msgid "Nginx reload failed: {0}" msgstr "Nginx yeniden yükleme başarısız: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Nginx yeniden yükleme işlemleri uzak düğümlere gönderildi" @@ -3278,7 +4329,7 @@ msgstr "Nginx başarıyla yeniden yüklendi" msgid "Nginx Restart Command" msgstr "Nginx Yeniden Başlatma Komutu" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Nginx yeniden başlatma işlemleri uzak düğümlere gönderildi" @@ -3286,7 +4337,7 @@ msgstr "Nginx yeniden başlatma işlemleri uzak düğümlere gönderildi" msgid "Nginx restarted successfully" msgstr "Nginx başarıyla yeniden başlatıldı" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Nginx sbin yolu mevcut" @@ -3319,41 +4370,73 @@ msgstr "" "Nginx UI yapılandırması geri yüklendi ve birkaç saniye içinde otomatik " "olarak yeniden başlatılacak." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf, conf.d dizinini içerir" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf, sites-enabled dizinini içerir" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf, streams-enabled dizinini içerir" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "Hayır" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "Eylem Yok" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "Kullanılabilir sertifika yok" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "Çin coğrafi verisi mevcut değil" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "Veri yok" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "Veri yok" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "Geçerli sayfada hiçbir giriş yok" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "Coğrafi veri mevcut değil" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "Seçilen zaman aralığında kayıt bulunamadı." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "Hiçbir düğüm seçilmedi" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "Hiçbir kayıt seçilmedi" @@ -3362,24 +4445,33 @@ msgstr "Hiçbir kayıt seçilmedi" msgid "No servers configured" msgstr "Yapılandırılmış sunucu yok" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "Site bulunamadı" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "" +"server_name yapılandırmasında belirli bir IP adresi bulunamadı. Lütfen " +"sertifika için sunucu IP adresini aşağıda belirtin." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "Yapılandırılmış günlük verisi mevcut değil" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "Yapılandırılmış yukarı akış yok" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "Düğüm" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "Düğüm Grubu" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "Düğüm Grupları" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "Düğüm analizi başarısız: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3389,7 +4481,12 @@ msgstr "Düğüm adı" msgid "Node Secret" msgstr "Düğüm Sırrı" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "Düğüm Durumu" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "Düğümler" @@ -3397,26 +4494,38 @@ msgstr "Düğümler" msgid "Not After" msgstr "Sonra Değil" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "Beklenmeyen Metin" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "Bulunamadı" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "Dizine Alınmamış" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "Yüklenmedi" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "IP sertifikaları için desteklenmiyor" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "Geçerlilik Başlangıç Tarihi: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "Not" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." @@ -3424,11 +4533,24 @@ msgstr "" "Not: Eğer yapılandırma dosyası başka yapılandırmalar veya sertifikalar " "içeriyorsa, lütfen bunları uzak düğümlere önceden senkronize edin." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"Not: Sunucu gRPC Yansımasını desteklemiyorsa, sağlık kontrolleri başarısız " +"olabilir. Lütfen gRPC sunucunuzda Yansıma'nın etkin olduğundan emin olun." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "Kopyalanacak bir şey yok" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "Bildirim" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "Bildirimler" @@ -3437,17 +4559,21 @@ msgstr "Bildirimler" msgid "Notifier not found" msgstr "Bildirici bulunamadı" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "" "Eşzamanlı çalışan işlem sayısı, otomatik olarak CPU çekirdek sayısına " "ayarlanır" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "Önbellek yükleyicisi tarafından bir seferde işlenen dosya sayısı" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "Önbellek yöneticisi tarafından bir seferde işlenen dosya sayısı" @@ -3462,7 +4588,7 @@ msgstr "Çalışan işlem sayısı" msgid "Obtain cert error: {0}" msgstr "Sertifika alma hatası: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "Sertifika al" @@ -3470,11 +4596,11 @@ msgstr "Sertifika al" msgid "Obtaining certificate" msgstr "Sertifika alınıyor" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP Must Staple" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." @@ -3483,7 +4609,7 @@ msgstr "" "kullanıcılarda hatalara neden olabilir." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "Kapalı" @@ -3491,48 +4617,58 @@ msgstr "Kapalı" msgid "Official Document" msgstr "Resmi Belge" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "Çevrimdışı" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "Çevrimdışı GeoIP analizi" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "Tamam" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "Açık" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "Doğrulama tamamlandığında, kayıtlar kaldırılacaktır." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "Çevrimiçi" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "Çevrimiçi Sayısı" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "Sadece ZIP dosyalarına izin verilir" @@ -3541,23 +4677,46 @@ msgstr "Sadece ZIP dosyalarına izin verilir" msgid "Open" msgstr "Açık" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "Açık Kaynak Sınırlaması" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "İşletim Sistemi" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "İşletim Sistemi İstatistikleri" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "Veya" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "veya dosyayı aşağıdaki düzenleyiciye sürükleyin" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "Veya gizli anahtarı girin: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "Sıra başarıyla kaydedildi" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "Orijinal ad" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "İşletim Sistemi" @@ -3604,11 +4763,15 @@ msgstr "Parametreler" msgid "Params Optimization" msgstr "Parametre Optimizasyonu" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "Ayrıştırıcı Performansı" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "Geçiş Anahtarı" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3618,7 +4781,7 @@ msgstr "" "kimliğinizi doğrulayan WebAuthn kimlik bilgileridir. Bir şifre yerine veya " "iki faktörlü kimlik doğrulama (2FA) yöntemi olarak kullanılabilirler." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "Şifre" @@ -3647,11 +4810,13 @@ msgstr "Şifreler eşleşmiyor" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "Yol" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "Yol, verilen erişim yollarında değil: {0}" @@ -3663,12 +4828,28 @@ msgstr "Yol: {0}, nginx yapılandırma dizini: {1} altında değil" msgid "Payload resource is nil" msgstr "Yük kaynağı nil" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "Zirve Saati" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "Beklemede" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "Yüzde" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "Uygula" @@ -3712,7 +4893,11 @@ msgstr "" "İstek istatistikleri, bağlantı sayısı vb. bilgileri almak için lütfen " "stub_status modülünü etkinleştirin." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "Lütfen girin" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." @@ -3720,11 +4905,19 @@ msgstr "" "Oluşturmak istediğiniz anahtar için bir ad girin ve aşağıdaki Tamam " "butonuna tıklayın." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "Lütfen geçerli bir IPv4 adresi girin (her oktet için 0-255)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "Lütfen geçerli bir IPv4 veya IPv6 adresi girin" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "Lütfen geçerli bir port aralığı girin" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "Lütfen en az bir alan adı girin" @@ -3741,6 +4934,10 @@ msgstr "Lütfen güvenlik belirtecini girin" msgid "Please enter the security token received during backup" msgstr "Lütfen yedekleme sırasında alınan güvenlik belirtecini girin" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "Lütfen sunucu IP adresini girin" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "Lütfen tüm alanları doğru şekilde doldurun" @@ -3749,13 +4946,13 @@ msgstr "Lütfen tüm alanları doğru şekilde doldurun" msgid "Please fill in required S3 configuration fields" msgstr "Lütfen gerekli S3 yapılandırma alanlarını doldurun" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." msgstr "Lütfen DNS sağlayıcınız tarafından sağlanan API kimlik bilgilerini doldurun." -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3764,7 +4961,7 @@ msgstr "" "bilgilerini ekleyin, ardından DNS sağlayıcısının API'sini talep etmek için " "aşağıdaki kimlik bilgilerinden birini seçin." -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3802,20 +4999,20 @@ msgstr "" msgid "Please input your E-mail!" msgstr "Lütfen e-posta adresinizi giriniz!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "Lütfen şifrenizi girin!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "Lütfen kullanıcı adınızı girin!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "Lütfen giriş yapın." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "" "Lütfen aşağıdaki zaman yapılandırmalarının birimlerinin saniye cinsinden " @@ -3835,25 +5032,31 @@ msgstr "" msgid "Please select a backup file" msgstr "Lütfen bir yedekleme dosyası seçin" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "Lütfen bir bildirim türü seçin" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "Lütfen geçerli bir %{type} dosyası seçin (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "Lütfen en az bir öğe seçin" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Lütfen Nginx'i yeniden yüklemek için en az bir düğüm seçin" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Lütfen Nginx'i yeniden başlatmak için en az bir düğüm seçin" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "Lütfen yükseltmek için en az bir düğüm seçin" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "Onaylamak için \"İptal Et\" yazın" @@ -3866,23 +5069,26 @@ msgstr "Lütfen tam onay metnini yazın" msgid "Port" msgstr "Port" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "HTTP-01 challenge doğrulaması için 80 numaralı port açık olmalıdır" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "Port Tarayıcı" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "Senkronizasyon Sonrası İşlem" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "Ön Sürüm" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "Tercih" @@ -3890,6 +5096,19 @@ msgstr "Tercih" msgid "Preparing lego configurations" msgstr "Lego yapılandırmaları hazırlanıyor" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "Özel CA:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "Özel IP'ler (192.168.x.x, 10.x.x.x, 172.16-31.x.x) başarısız olacaktır" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "özel anahtar" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "Süreç" @@ -3906,6 +5125,10 @@ msgstr "Süreç bilgisi" msgid "Processing {count}/{total}" msgstr "İşleniyor {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "Üretim Hattı" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "Demoda root şifresini değiştirmek yasaktır" @@ -3922,6 +5145,10 @@ msgstr "Proje Ekibi" msgid "Protected Directory" msgstr "Korumalı Dizin" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "Protokol" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3931,7 +5158,7 @@ msgstr "" "Protokol yapılandırması yalnızca doğrudan bağlantı sırasında geçerlidir. " "Ters proxy kullanıyorsanız, protokolü ters proxyda ayrı olarak yapılandırın." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "Sağlayıcı" @@ -3939,22 +5166,57 @@ msgstr "Sağlayıcı" msgid "Provider not found: {0}" msgstr "Sağlayıcı bulunamadı: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "İl / Bölge" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "Proxy" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "Proxy Geçişi" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "Proxy Hedefleri" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "Genel CA Gereksinimleri:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "Kamu Güvenlik Numarası" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "Sayfa Görüntüleme" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "Sıraya alındı" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "Dizine ekleme için sırada..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "Hızlı Seçim" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "Ham" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "Veritabanını yeniden indir" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "Dizin okuma hatası: {0}" @@ -3969,24 +5231,48 @@ msgstr "Okuma istekleri" msgid "Reads" msgstr "Okumalar" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "Gerçek zamanlı analiz panosu" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "Yeniden oluştur" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "Tüm Dizinleri Yeniden Oluştur" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "Dosya Dizini Yeniden Oluştur" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "Dizini Yeniden Oluştur" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Al" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "Yeniden kontrol et" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "Önerilen:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "Kurtarma" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "Kurtarma Kodları" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -3998,15 +5284,29 @@ msgstr "" msgid "Recursive Nameservers" msgstr "Özyinelemeli İsim Sunucuları" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "Referer" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "Yenile" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "Modül Önbelleğini Yenile" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "Yanıtı yeniden oluştur" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "Kayıt Ol" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." @@ -4014,19 +5314,19 @@ msgstr "" "Bir kullanıcı kaydedin veya bu hesabı bir HTTP proxy üzerinden sertifika " "vermek için kullanın." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "Kayıt başarısız" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "Başlangıçta Kayıt Ol" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "Geçiş anahtarı başarıyla kaydedildi" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "Başarıyla kaydedildi" @@ -4034,28 +5334,30 @@ msgstr "Başarıyla kaydedildi" msgid "Registering user" msgstr "Kullanıcı kaydediliyor" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "Kayıt Durumu" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "Yeniden Yükle" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "Yayın API isteği başarısız oldu: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "Sürüm Notları" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "Yeniden Yükle" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Nginx'i Yeniden Yükle" @@ -4079,7 +5381,7 @@ msgstr "Uzak Nginx Yeniden Yükleme Hatası" msgid "Reload Remote Nginx Success" msgstr "Uzak Nginx Yeniden Yükleme Başarılı" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "Yeniden yükleme isteği başarısız oldu, lütfen ağ bağlantınızı kontrol edin" @@ -4091,22 +5393,28 @@ msgstr "Yeniden Yükleniyor" msgid "Reloading nginx" msgstr "nginx yeniden yükleniyor" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "Uzak" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "Kaldır" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "Başarıyla kaldırıldı" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "Başarıyla kaldırıldı" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4115,15 +5423,15 @@ msgid "Rename" msgstr "Yeniden Adlandır" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" msgstr "" -"%{env_name} üzerinde %{orig_path} dosyası %{new_path} olarak yeniden " +"%{node_name} üzerinde %{orig_path} dosyası %{new_path} olarak yeniden " "adlandırılamadı" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" msgstr "" -"%{orig_path}, %{env_name} üzerinde %{new_path} olarak başarıyla yeniden " +"%{orig_path}, %{node_name} üzerinde %{new_path} olarak başarıyla yeniden " "adlandırıldı" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 @@ -4134,41 +5442,41 @@ msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Hatası" msgid "Rename Remote Config Success" msgstr "Uzak Yapılandırma Yeniden Adlandırma Başarılı" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "Uzak Site Adı Değiştirme Hatası" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "Uzak Site Yeniden Adlandırma Başarılı" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "Uzak Akışı Yeniden Adlandırma Hatası" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "Uzak Akış Yeniden Adlandırma Başarılı" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "%{node} üzerinde %{name} sitesi %{new_name} olarak yeniden adlandırılamadı" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "" "Site %{name}, %{node} üzerinde %{new_name} olarak başarıyla yeniden " "adlandırıldı" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "" "%{node} üzerinde %{name} akışını %{new_name} olarak yeniden adlandırma " "başarısız oldu" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "" "Akış %{name}, %{node} üzerinde %{new_name} olarak başarıyla yeniden " @@ -4178,7 +5486,7 @@ msgstr "" msgid "Rename successfully" msgstr "Başarıyla yeniden adlandırıldı" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4188,8 +5496,8 @@ msgstr "Başarıyla yeniden adlandırıldı" msgid "Renew cert error: {0}" msgstr "Sertifika yenileme hatası: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "Sertifikayı Yenile" @@ -4201,11 +5509,23 @@ msgstr "Sertifika Yenileme Hatası" msgid "Renew Certificate Success" msgstr "Sertifika Yenileme Başarılı" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "Başarıyla yenilendi" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "İstek" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "İstek Gövdesi" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "İstek Yolu" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "İstek istatistikleri" @@ -4223,13 +5543,19 @@ msgid "Requests Per Connection" msgstr "Bağlantı Başına İstek Sayısı" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "Sıfırla" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "2FA'yı Sıfırla" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "Aramayı Sıfırla" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4239,6 +5565,10 @@ msgstr "" "Resident Set Size: Fiziksel bellekte gerçekte bulunan bellek, paylaşılan " "tüm kütüphane belleğini içerir ve birden fazla işlem için tekrar hesaplanır" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "Kaynak Kullanımı Uyarısı" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4248,9 +5578,8 @@ msgstr "Yanıtlar" msgid "Restart" msgstr "Yeniden Başlat" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Nginx'i Yeniden Başlat" @@ -4270,7 +5599,7 @@ msgstr "Uzak Nginx Yeniden Başlatma Hatası" msgid "Restart Remote Nginx Success" msgstr "Uzak Nginx Yeniden Başlatma Başarılı" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "Yeniden başlatma isteği başarısız oldu, lütfen ağ bağlantınızı kontrol edin" @@ -4309,8 +5638,8 @@ msgstr "Bu sürümü geri yükle" msgid "Restored successfully" msgstr "Başarıyla geri yüklendi" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "İptal et" @@ -4318,15 +5647,15 @@ msgstr "İptal et" msgid "Revoke cert error: {0}" msgstr "Sertifika iptal hatası: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "Eski Sertifikayı İptal Et" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "Bu sertifikayı iptal et" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." @@ -4334,15 +5663,15 @@ msgstr "" "Bir sertifikanın iptal edilmesi, şu anda onu kullanan tüm hizmetleri " "etkileyecektir. Bu işlem geri alınamaz." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "RP Görünen Adı" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "RP Kökenleri" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4378,10 +5707,6 @@ msgstr "S3 erişim anahtar kimliği gereklidir" msgid "S3 Bucket" msgstr "S3 Kovası" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "S3 kovası erişimi reddedildi: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "S3 kovası gereklidir" @@ -4390,7 +5715,7 @@ msgstr "S3 kovası gereklidir" msgid "S3 bucket name" msgstr "S3 kova adı" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "S3 yapılandırması eksik: {0} eksik" @@ -4398,27 +5723,15 @@ msgstr "S3 yapılandırması eksik: {0} eksik" msgid "S3 connection test failed" msgstr "S3 bağlantı testi başarısız oldu" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "S3 bağlantı testi başarısız oldu: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "S3 bağlantı testi başarılı" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "S3 kimlik bilgileri geçersiz: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "S3 Uç Noktası" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "S3 uç noktası geçersiz: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "S3 uç noktası gereklidir" @@ -4454,7 +5767,7 @@ msgstr "S3 Gizli Erişim Anahtarı" msgid "S3 secret access key is required" msgstr "S3 gizli erişim anahtarı gereklidir" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "S3 yükleme başarısız: {0}" @@ -4462,17 +5775,19 @@ msgstr "S3 yükleme başarısız: {0}" msgid "Saturday" msgstr "Cumartesi" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "Kaydet" @@ -4480,41 +5795,41 @@ msgstr "Kaydet" msgid "Save Directive" msgstr "Yönergeleri Kaydet" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "Kaydetme hatası %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "Sırayı Kaydet" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "Uzak Site Kaydetme Hatası" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "Uzak Site Başarıyla Kaydedildi" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "Uzak Akış Kaydetme Hatası" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "Uzak Akış Başarıyla Kaydedildi" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "%{name} sitesi %{node} üzerine kaydedilemedi" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "%{name} sitesi %{node} üzerine başarıyla kaydedildi" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "Akış %{name}, %{node} üzerine kaydedilemedi" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "Akış %{name}, %{node} üzerine başarıyla kaydedildi" @@ -4522,16 +5837,17 @@ msgstr "Akış %{name}, %{node} üzerine başarıyla kaydedildi" msgid "Save successful" msgstr "Başarıyla kaydedildi" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "Başarıyla kaydedildi" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "Başarıyla kaydedildi" @@ -4555,13 +5871,13 @@ msgstr "Portları Tara" msgid "Scan Results" msgstr "Tarama Sonuçları" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "Hesabı uygulamaya eklemek için telefonunuzla QR kodunu tarayın." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "Günlükler taranıyor..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "Taranıyor" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4576,16 +5892,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "Ara" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "Arama Filtreleri" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "Günlük içeriğinde ara..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "Modül adı ara" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "Modülleri ara" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "Arama aralığı" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "Şablonları ara" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "Gizli kod kopyalandı" @@ -4602,13 +5939,21 @@ msgstr "Güvenlik Belirteci" msgid "Security Token Information" msgstr "Güvenlik Belirteci Bilgileri" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" +"Önceden tanımlanmış bir CA dizini seçin veya özel bir tane girin. " +"Varsayılan CA dizinini kullanmak için boş bırakın." + #: src/language/curd.ts:31 msgid "Select all" msgstr "Tümünü seç" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "Senkronizasyon sonrası eylem seçin" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "Bir CA dizini URL'si seçin veya girin" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4618,7 +5963,7 @@ msgstr "Seçilen {count} dosya" msgid "Selector" msgstr "Seçici" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "Kendi Kendini Kontrol" @@ -4632,11 +5977,15 @@ msgstr "Kendi kendine kontrol başarısız oldu, Nginx UI düzgün çalışmayab msgid "Send" msgstr "Gönder" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "Test mesajı gönder" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "Sunucu" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "Sunucu hatası" @@ -4644,6 +5993,10 @@ msgstr "Sunucu hatası" msgid "Server Info" msgstr "Sunucu Bilgisi" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "Sunucu IP Adresi" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "Sunucu Adları Hash Kova Boyutu" @@ -4652,7 +6005,7 @@ msgstr "Sunucu Adları Hash Kova Boyutu" msgid "Server names hash table size" msgstr "Sunucu adları karma tablo boyutu" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "Yönergelerde server_name bulunamadı" @@ -4660,6 +6013,10 @@ msgstr "Yönergelerde server_name bulunamadı" msgid "ServerIdx out of range" msgstr "ServerIdx aralık dışında" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "Servis Adı" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "Oturum bulunamadı" @@ -4698,6 +6055,10 @@ msgstr "Ortam değişkenlerini ayarlama" msgid "Setting HTTP01 challenge provider" msgstr "HTTP01 meydan okuma sağlayıcısı ayarlanıyor" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "Ayarlar" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4718,7 +6079,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Nginx UI'nizi ayarlayın" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "Paylaşılan Bellek Bölgesi" @@ -4726,10 +6087,18 @@ msgstr "Paylaşılan Bellek Bölgesi" msgid "Show" msgstr "Göster" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "Asistanı Göster" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "Bir anahtarla oturum aç" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "SIMD ile optimize edilmiş akış işleme" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "Tek Direktif" @@ -4750,11 +6119,23 @@ msgstr "Site bakım modunda" msgid "Site Logs" msgstr "Site Kayıtları" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "Site Gezintisi" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "Site bulunamadı" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "Site yenileme başlatıldı" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "Siteler" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "Siteler dizini mevcut" @@ -4762,6 +6143,14 @@ msgstr "Siteler dizini mevcut" msgid "Sites List" msgstr "Site Listesi" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" +"Geçerli server_name yönergeleriyle nginx sunucu bloklarını " +"yapılandırdığınızda siteler burada görünecektir." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "Sites-available dizini mevcut değil" @@ -4771,6 +6160,8 @@ msgid "Sites-enabled directory not exist" msgstr "Sites-enabled dizini mevcut değil" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "Boyut" @@ -4778,19 +6169,36 @@ msgstr "Boyut" msgid "Skip Installation" msgstr "Kurulumu atla" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "Önbellek yükleyici tekrarları arasındaki bekleme süresi" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "Önbellek yöneticisi yinelemeleri arasındaki bekleme süresi" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "Soket" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "Sıralama ölçütü" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "Kaynak IP" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "Sponsor" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "Daha iyi G/Ç performansı için SSD depolama" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "SSL Sertifika İçeriği" @@ -4802,15 +6210,20 @@ msgstr "SSL sertifika dosyası Nginx yapılandırma dizini altında olmalıdır: msgid "SSL certificate file not found" msgstr "SSL sertifika dosyası bulunamadı" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "SSL Sertifika Anahtarı İçeriği" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "SSL Sertifika Anahtar Yolu" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "SSL Sertifika Yolu" @@ -4835,13 +6248,12 @@ msgstr "SSL Anahtar Yolu" msgid "SSL key path is required when HTTPS is enabled" msgstr "HTTPS etkinleştirildiğinde SSL anahtar yolu gereklidir" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "SSO Girişi" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "Kararlı" @@ -4849,33 +6261,49 @@ msgstr "Kararlı" msgid "Start" msgstr "Başla" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "Başlangıç Tarihi" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "Geri Yüklemeyi Başlat" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "İndirme başlıyor..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "Statik" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "Durum" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "Durum başarıyla güncellendi" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "Durduruldu" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "Depolama" @@ -4901,10 +6329,6 @@ msgstr "Depolama Yolu" msgid "Storage path is required" msgstr "Depolama yolu gereklidir" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "Depolama yolu verilen erişim yollarında değil: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4918,7 +6342,7 @@ msgstr "Yayın etkinleştirildi" msgid "Stream not found" msgstr "Akış bulunamadı" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "Akışlar dizini mevcut" @@ -4930,6 +6354,10 @@ msgstr "Streams-available dizini mevcut değil" msgid "Streams-enabled directory not exist" msgstr "Streams-enabled dizini mevcut değil" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "Yapılandırılmış" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "Stub Durum Portu" @@ -4938,7 +6366,7 @@ msgstr "Stub Durum Portu" msgid "Stub_status is not enabled" msgstr "Stub_status etkin değil" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4949,18 +6377,6 @@ msgstr "Başarı" msgid "Sunday" msgstr "Pazar" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Backend ile iletişimi Server-Sent Events protokolü üzerinden destekler. " -"Nginx UI'nız bir Nginx ters proxy üzerinden kullanılıyorsa, ilgili " -"yapılandırma dosyasını yazmak için bu bağlantıya bakın: " -"https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -5009,12 +6425,12 @@ msgid "Sync Certificate" msgstr "Sertifikayı Senkronize Et" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "Sertifika %{cert_name}, %{env_name} ortamına senkronize edilemedi" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "Sertifika %{cert_name}, %{node_name} ile eşleştirilemedi" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "Sertifika %{cert_name}, %{env_name} ortamına başarıyla senkronize edildi" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "Sertifika %{cert_name}, %{node_name} ile başarıyla senkronize edildi" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -5025,14 +6441,12 @@ msgid "Sync Certificate Success" msgstr "Sertifika Başarıyla Senkronize Edildi" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "Yapılandırma %{config_name}, %{env_name} ortamına senkronize edilemedi" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "Yapılandırma %{config_name}, %{node_name} ile eşleştirilemedi" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "" -"Yapılandırma %{config_name}, %{env_name} ortamına başarıyla senkronize " -"edildi" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "Yapılandırma %{config_name}, %{node_name} ile başarıyla senkronize edildi" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -5042,24 +6456,29 @@ msgstr "Yapılandırma Senkronizasyon Hatası" msgid "Sync Config Success" msgstr "Yapılandırma Başarıyla Senkronize Edildi" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "Senkronizasyon Düğümleri" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "Senkronizasyon Önizleme" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "Senkronizasyon stratejisi" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "Senkronize Et" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "Senkronizasyon" @@ -5076,10 +6495,14 @@ msgstr "Sistem Yedekleme" msgid "System Check" msgstr "Sistem Kontrolü" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "Sistem Başlangıç Kullanıcısı" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "Sistem Gereksinimleri" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "Sistem Geri Yükleme" @@ -5100,19 +6523,45 @@ msgstr "Görev bulunamadı" msgid "Telegram" msgstr "Telegram" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "Terminal" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "Terminal Asistanı" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "Terminal Başlatma Komutu" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "Test" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "Test başarısız: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "Test başarısız: Sağlık kontrolü yapılamadı" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "Test mesajı başarıyla gönderildi" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "S3 Bağlantısını Test Et" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "Test başarılı! Yanıt süresi: %{response_time}ms" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " @@ -5122,6 +6571,22 @@ msgstr "" "verildiğinden bu yana 1 haftadan fazla zaman geçmişse veya ayarlarda " "belirlediğiniz süre dolmuşsa yenilenecektir." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "" +"Çevrimdışı coğrafi IP analizi için GeoLite2 veritabanına ihtiyaç vardır. Bu " +"özelliği etkinleştirmek için lütfen indirin." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "" +"GeoLite2 veritabanı, IP adresleri için coğrafi bilgi sağlar. Bu, günlük " +"analizinde çevrimdışı coğrafi analiz için kullanılır." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " @@ -5130,11 +6595,11 @@ msgstr "" "ICP Numarası yalnızca harfler, unicode, sayılar, kısa çizgiler, uzun " "çizgiler, iki nokta üst üste ve noktalar içermelidir." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "Girdi bir SSL Sertifikası değil" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "Girdi bir SSL Sertifika Anahtarı değil" @@ -5173,11 +6638,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "server_name parametresi gereklidir" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "Yol mevcut, ancak dosya bir sertifika değil" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "Yol mevcut, ancak dosya bir özel anahtar değil" @@ -5189,7 +6654,7 @@ msgstr "" "Kamu Güvenlik Numarası yalnızca harfler, unicode, sayılar, kısa çizgiler, " "uzun çizgiler, iki nokta üst üste ve noktalar içermelidir." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5199,7 +6664,7 @@ msgstr "" "hatalardan kaçınmak için lütfen uzak Nginx UI'yi yerel sürümle eşleşecek " "şekilde güncelleyin." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5229,7 +6694,7 @@ msgstr "Teorik maksimum eşzamanlı bağlantı:" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "Teorik maksimum RPS (Saniyedeki İstek Sayısı):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5239,11 +6704,15 @@ msgstr "" "hesabınıza erişmek için son çaredir. Bu kodları bulamazsanız, hesabınıza " "erişimi kaybedersiniz." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "Üçüncü Taraf Bileşenler" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "Bu Otomatik Sertifika öğesi geçersiz, lütfen kaldırın." -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "Bu sertifika Nginx UI tarafından yönetilmektedir" @@ -5251,9 +6720,9 @@ msgstr "Bu sertifika Nginx UI tarafından yönetilmektedir" msgid "This directory is protected and cannot be deleted for system safety." msgstr "Bu dizin korumalıdır ve sistem güvenliği için silinemez." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "Bu alan zorunludur" @@ -5279,6 +6748,10 @@ msgid "" "-_./:" msgstr "Bu alan yalnızca harfler, Unicode karakterler, sayılar ve -_./: içermelidir" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "Bu, Nginx UI'den %{Timestamp} adresinden gönderilen bir test mesajıdır." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " @@ -5287,7 +6760,15 @@ msgstr "" "Bu modül, Nginx istek istatistikleri, bağlantı sayısı vb. verileri sağlar. " "Etkinleştirdikten sonra performans istatistiklerini görüntüleyebilirsiniz." -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "Bu ay" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "Bu bildirim devre dışı bırakıldı" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." @@ -5295,6 +6776,26 @@ msgstr "" "Bu işlem yalnızca sertifikayı veritabanından kaldıracaktır. Dosya " "sistemindeki sertifika dosyaları silinmeyecektir." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"Bu site, HTTPS (port 443) için varsayılan sunucu (default_server) olarak " +"yapılandırılmıştır. IP sertifikaları, Sertifika Yetkilisi (CA) desteği " +"gerektirir ve tüm ACME sağlayıcıları ile kullanılamayabilir." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"Bu site, genellikle IP tabanlı bir sertifikayı gösteren joker karakterli " +"sunucu adı (_) kullanıyor. IP sertifikaları, Sertifika Yetkilisi (CA) " +"desteği gerektirir ve tüm ACME sağlayıcıları ile kullanılamayabilir." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5311,6 +6812,19 @@ msgstr "Bu değer zaten alınmış" msgid "This will permanently delete the %{type}." msgstr "Bu, %{type} kalıcı olarak silinecektir." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"Bu, tüm günlük indeksini yeniden oluşturacaktır. Mevcut tüm indeks verileri " +"silinecek ve sıfırdan yeniden oluşturulacaktır. Bu biraz zaman alabilir. " +"Devam etmek istiyor musunuz?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "Bu, bu belirli dosya için indeks verilerini yeniden oluşturacaktır: %{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5329,13 +6843,13 @@ msgstr "" "Bu işlem yapılandırma dosyalarını ve veritabanını geri yükleyecektir. Geri " "yükleme tamamlandıktan sonra Nginx UI yeniden başlatılacaktır." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" "Bu işlem, %{nodeNames} üzerindeki Nginx UI'yi %{version} sürümüne " "yükseltecek veya yeniden yükleyecektir." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "Kısıtlama" @@ -5343,8 +6857,21 @@ msgstr "Kısıtlama" msgid "Thursday" msgstr "Perşembe" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "Zaman" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "Zaman Aralığı" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "Zaman aşımı (saniye)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "İpuçları" @@ -5361,11 +6888,15 @@ msgstr "" msgid "Title" msgstr "Başlık" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "silmeyi onaylamak için" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "İptali onaylamak için lütfen aşağıdaki alana \"İptal\" yazın:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5373,7 +6904,7 @@ msgstr "" "Etkinleştirmek için telefonunuza Google Authenticator veya Microsoft " "Authenticator uygulamasını yüklemeniz gerekir." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5418,15 +6949,41 @@ msgstr "Token boş" msgid "Token is not valid" msgstr "Token geçerli değil" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "En İyi 10 Ülke / Bölge" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "En İyi 10 İl / Bölge" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "En İyi 10 URL" + #: src/language/curd.ts:5 msgid "Total" msgstr "Toplam" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "Toplam %{total} öğe" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "Toplam Bileşenler" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "Toplam bağlantılar" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "Toplam Girdiler" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5440,6 +6997,10 @@ msgstr "Toplam Nginx süreçleri" msgid "Total Nginx Processes" msgstr "Toplam Nginx Süreçleri" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "Toplam PV" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "Toplam Alınan" @@ -5457,11 +7018,15 @@ msgstr "Toplam İstekler / Toplam Bağlantılar" msgid "Total Send" msgstr "Toplam Gönderim" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "Toplam UV" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -5469,25 +7034,41 @@ msgstr "" "TOTP, zaman tabanlı tek kullanımlık şifre algoritması kullanan iki faktörlü " "bir kimlik doğrulama yöntemidir." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "Trafik" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "Hata çevriliyor..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "Çöp" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "Arama kriterlerinizi ayarlamayı veya farklı sayfalara gitmeyi deneyin." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "Arama kriterlerinizi veya zaman aralığınızı ayarlamayı deneyin." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "Salı" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "İki faktörlü kimlik doğrulama gerekiyor" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "Tür" @@ -5495,15 +7076,47 @@ msgstr "Tür" msgid "Type %{delete} to confirm" msgstr "Onaylamak için %{delete} yazın" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "Tarayıcı yazın veya seçin" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "Cihaz yazın veya seçin" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "Yazın veya işletim sistemini seçin" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "Durum kodlarını yazın veya seçin" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "Mesajınızı buraya yazın..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "Benzersiz Sayfalar" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "Bilinmeyen" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "Desteklenmeyen yedekleme türü: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "Desteklenmeyen günlük formatı" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "Güncelleme zaten devam ediyor" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "Şifreyi Güncelle" @@ -5512,32 +7125,30 @@ msgstr "Şifreyi Güncelle" msgid "Update Profile" msgstr "Profili Güncelle" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "Başarıyla güncellendi" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "Güncellenme Tarihi" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "Yükselt" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "%{node} üzerindeki Nginx UI başarıyla güncellendi 🎉" @@ -5545,11 +7156,22 @@ msgstr "%{node} üzerindeki Nginx UI başarıyla güncellendi 🎉" msgid "Upgraded successfully" msgstr "Başarıyla yükseltildi" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "Güncelleyici çekirdeği özeti boş" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "Güncelleme çekirdeği indirme URL'si boş" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Nginx UI güncelleniyor, lütfen bekleyin..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "%{type} Dosyasını Yükle" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "Dosyaları Yükle" @@ -5558,19 +7180,29 @@ msgstr "Dosyaları Yükle" msgid "Upload Folders" msgstr "Klasörleri Yükle" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "Yukarı Akış" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Yukarı Akış Adı" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "Üst Akım Soketleri" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "Yukarı Akış Test Türü" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "Çalışma Süresi:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5582,14 +7214,19 @@ msgstr "OTP Kullan" msgid "Use recovery code" msgstr "Kurtarma kodunu kullan" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "Geçici Yol Kullan" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "Kullanıcı" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "Kullanıcı Aracısı" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "Kullanıcı yasaklandı" @@ -5606,7 +7243,7 @@ msgstr "Kullanıcı OTP'yi 2FA olarak etkinleştirmedi" msgid "User Profile" msgstr "Kullanıcı Profili" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "Kullanıcı Adı" @@ -5619,12 +7256,20 @@ msgstr "Kullanıcı Adı (*)" msgid "Username length cannot exceed 255 characters" msgstr "Kullanıcı adı uzunluğu 255 karakteri geçemez" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "Benzersiz Ziyaretçi" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "Geçerli" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "SSL Sertifikasını Doğrula" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "Değer" @@ -5634,45 +7279,65 @@ msgstr "Değer" msgid "Verify Backup File Integrity" msgstr "Yedek Dosya Bütünlüğünü Doğrula" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "Ana bilgisayar adını doğrula" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "Sistem Gereksinimlerini Doğrulun" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "Sürüm" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "Görüntüle" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "Tüm bildirimleri görüntüle" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "GitHub'da Görüntüle" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "Kurtarma Kodlarını Görüntüle" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "Üçüncü Taraf Bileşenleri Görüntüle" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "Görüntülendi" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "Ziyaretler" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "Bekleme süreçleri" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "Uyarı" @@ -5687,7 +7352,21 @@ msgstr "" "Geçerli bir yedekleme dosyasına ve güvenlik belirtecine sahip olduğunuzdan " "emin olun ve neyi geri yükleyeceğinizi dikkatlice seçin." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"Uyarı: Bu bir özel IP adresi gibi görünüyor. Let's Encrypt gibi kamu " +"sertifika yetkilileri özel IP'ler için sertifika veremez. Kamu IP adresi " +"kullanın veya özel bir sertifika yetkilisi kullanmayı düşünün." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "Herhangi bir özellik talebini kabul etmiyoruz" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." @@ -5695,7 +7374,7 @@ msgstr "" "Mülkiyet doğrulaması için alan adınızın DNS kayıtlarına bir veya daha fazla " "TXT kaydı ekleyeceğiz." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" @@ -5703,7 +7382,7 @@ msgstr "" "Bu dosyadan HTTPChallenge yapılandırmasını kaldıracağız ve Nginx'i yeniden " "yükleyeceğiz. Devam etmek istediğinizden emin misiniz?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "WebAuthn" @@ -5711,10 +7390,18 @@ msgstr "WebAuthn" msgid "WebAuthn settings are not configured" msgstr "WebAuthn ayarları yapılandırılmamış" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "WebSocket bağlantı hatası" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket bağlı değil, lütfen bağlantı için bekleyin" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "WeCom" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "Çarşamba" @@ -5727,7 +7414,7 @@ msgstr "Haftalık" msgid "Weekly on %{day} at %{time}" msgstr "Haftalık olarak %{day} günü %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5737,17 +7424,17 @@ msgstr "" "yeniden kaydedecektir. Genellikle, bir geliştirme ortamında değilseniz ve " "Pebble'ı CA olarak kullanmıyorsanız bunu etkinleştirmeyin." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" "Bu siteyi etkinleştirdiğinizde/devre dışı bıraktığınızda, sildiğinizde veya " -"kaydettiğinizde, Düğüm Grubunda ayarlanan düğümler ve aşağıda seçilen " -"düğümler senkronize edilecektir." +"kaydettiğinizde, ad alanında ayarlanan düğümler ve aşağıda seçilen düğümler " +"senkronize edilecektir." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." @@ -5755,11 +7442,11 @@ msgstr "" "Yeni kurtarma kodları oluşturduğunuzda, yeni kodları indirmeli veya " "yazdırmalısınız." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "Geçici dosyalar yazılırken geçici bir yol kullanılıp kullanılmayacağı" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "Wildcard Sertifikası" @@ -5778,8 +7465,8 @@ msgstr "Çalışan Süreçler" msgid "Workers" msgstr "Çalışanlar" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "Çalışma alanı" @@ -5804,16 +7491,18 @@ msgstr "Sertifika özel anahtarı diske yazılıyor" msgid "Writing certificate to disk" msgstr "Sertifika diske yazılıyor" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "Evet" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5826,11 +7515,11 @@ msgstr "" msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "nginx yapılandırma yolu dışındaki bir dosyayı silmenize izin verilmez" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "En son sürümü kullanıyorsunuz" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "Bu sayfada Nginx UI güncellemesini kontrol edebilirsiniz." @@ -5842,7 +7531,7 @@ msgstr "Bu iletişim kutusunu %{countdown} saniye içinde kapatabilirsiniz" msgid "You can close this dialog now" msgstr "Şimdi bu iletişim kutusunu kapatabilirsiniz" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." @@ -5850,17 +7539,17 @@ msgstr "" "WebAuthn ayarlarını yapılandırmadığınız için bir geçiş anahtarı " "ekleyemezsiniz." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" "Henüz 2FA'yı etkinleştirmediniz. Kurtarma kodları oluşturmak için lütfen " "2FA'yı etkinleştirin." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "Henüz kurtarma kodları oluşturmadınız." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." @@ -5868,15 +7557,196 @@ msgstr "" "Mevcut kurtarma kodunuz güncel olmayabilir ve güvenli olmayabilir. " "Güvenliği sağlamak için en kısa sürede yeni kurtarma kodları oluşturun." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "Eski kodlarınız artık çalışmayacak." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "Geçiş Anahtarlarınız" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "Tahsisatsız boru hattı" + +#~ msgid "in the same directory as" +#~ msgstr "aynı dizinde" + +#~ msgid "Sandbox test successful" +#~ msgstr "Sandbox testi başarılı" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "İzole sandbox modunda test edildi" + +#~ msgid "All" +#~ msgstr "Tümü" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "M2 Pro (12 çekirdek) testlerine dayalı" + +#~ msgid "CPU Utilization" +#~ msgstr "CPU Kullanımı" + +#~ msgid "Indexing Throughput" +#~ msgstr "Dizinleme Verimi" + +#~ msgid "Memory Efficiency" +#~ msgstr "Bellek Verimliliği" + +#~ msgid "Performance Impact Notice" +#~ msgstr "Performans Etkisi Uyarısı" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "Sıfır tahsisli boru hattı optimizasyonu" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "ChatGPT'den Yardım İsteyin" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "Coğrafi haritalama ve içgörüler" + +#~ msgid "No feature requests accepted." +#~ msgstr "Özellik talepleri kabul edilmez" + +#~ msgid "Time-series trend analysis" +#~ msgstr "Zaman serisi trend analizi" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "Kullanıcı Aracısı ve tarayıcı analizi" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ çekirdek (Apple M2 Pro veya Intel eşdeğeri)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "Optimum performans için 4 GB ve üzeri RAM" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "Uyarlanabilir toplu iş boyutu" + +#~ msgid "CPU Architecture" +#~ msgstr "CPU Mimarisi" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "GeoIP ve Kullanıcı Aracısı Analizi" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "En az 1 GB RAM" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "Modern CPU (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "Gerçek zamanlı performans izleme" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "Modern donanımda sürekli performans" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "Yedekleme yolu, verilen erişim yollarında değil: {0}" + +#~ msgid "Build with" +#~ msgstr "İle Oluşturuldu" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "Veritabanı dizini kopyalanamadı: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "Yedek dizini oluşturulamadı: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "Sembolik bağlantılar değerlendirilemedi: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "Nginx UI dosyaları geri yüklenemedi: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "ZIP tamponuna yazma başarısız: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "Hash doğrulaması başarısız: dosya bütünlüğü bozuldu" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "S3 kovası erişimi reddedildi: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "S3 bağlantı testi başarısız oldu: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "S3 kimlik bilgileri geçersiz: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "S3 uç noktası geçersiz: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "Depolama yolu verilen erişim yollarında değil: {0}" + +#~ msgid "files" +#~ msgstr "dosyalar" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "Günlükler dizinleniyor, lütfen bekleyin..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "Pano verileri yükleniyor..." + +#~ msgid "Today" +#~ msgstr "Bugün" + +#~ msgid "Data refreshed successfully" +#~ msgstr "Veriler başarıyla güncellendi" + +#~ msgid "Failed to refresh data" +#~ msgstr "Veri yenileme başarısız" + +#~ msgid "Log File:" +#~ msgstr "Günlük Dosyası:" + +#~ msgid "Log path" +#~ msgstr "Günlük yolu" + +#~ msgid "Index Size" +#~ msgstr "Dizin Boyutu" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "Sayfa Boyutu" + +#~ msgid "Environments" +#~ msgstr "Ortamlar" + +#~ msgid "Node Group" +#~ msgstr "Düğüm Grubu" + +#~ msgid "Node Groups" +#~ msgstr "Düğüm Grupları" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "conf.d dizininin var olup olmadığını kontrol edin" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Backend ile iletişimi Server-Sent Events protokolü üzerinden destekler. " +#~ "Nginx UI'nız bir Nginx ters proxy üzerinden kullanılıyorsa, ilgili " +#~ "yapılandırma dosyasını yazmak için bu bağlantıya bakın: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "Boş bırakılırsa, varsayılan CA Dir kullanılır." + +#~ msgid "Save error %{msg}" +#~ msgstr "Kaydetme hatası %{msg}" + +#~ msgid "Main" +#~ msgstr "Ana" + +#~ msgid "Select an action after sync" +#~ msgstr "Senkronizasyon sonrası eylem seçin" + #~ msgid "Link Start" #~ msgstr "Bağlantı Başlat" @@ -5910,9 +7780,6 @@ msgstr "Geçiş Anahtarlarınız" #~ msgid "Last Backup Error" #~ msgstr "Son Yedekleme Hatası" -#~ msgid "Apply" -#~ msgstr "Uygula" - #~ msgid "Apply bulk action successfully" #~ msgstr "Toplu işlem başarıyla uygulandı" @@ -5940,10 +7807,6 @@ msgstr "Geçiş Anahtarlarınız" #~ msgid "Recovered Successfully" #~ msgstr "Başarıyla kurtarıldı" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "Toplam %{total} öğe" - #~ msgid "View Details" #~ msgstr "Detayları Görüntüle" @@ -5991,13 +7854,6 @@ msgstr "Geçiş Anahtarlarınız" #~ msgid "Format error %{msg}" #~ msgstr "Biçimlendirme hatası %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "Kaydedilemedi, yapılandırmada sözdizimi hatası(ları) tespit edildi." - -#, fuzzy -#~ msgid "Access Token" -#~ msgstr "Erişim Günlükleri" - #, fuzzy #~ msgid "Bot Token" #~ msgstr "API Token" @@ -6013,10 +7869,6 @@ msgstr "Geçiş Anahtarlarınız" #~ msgid "Created At" #~ msgstr "Oluşturulma Tarihi" -#, fuzzy -#~ msgid "Restart Required" -#~ msgstr "Yeniden Başlatma" - #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "%{conf_name} yapılandırması başarıyla %{node_name} düğümüne dağıtıldı" @@ -6103,10 +7955,6 @@ msgstr "Geçiş Anahtarlarınız" #~ msgid "Incorrect username or password" #~ msgstr "Kullanıcı adı veya şifre yanlış" -#, fuzzy -#~ msgid "Recovery Code:" -#~ msgstr "Kurtarma Kodu:" - #, fuzzy #~ msgid "The recovery code is only displayed once, please save it in a safe place." #~ msgstr "" @@ -6127,10 +7975,6 @@ msgstr "Geçiş Anahtarlarınız" #~ "2] üzerinde %{orig_path}'ı %{new_path} olarak yeniden adlandırmak başarısız " #~ "oldu, lütfen uzak Nginx kullanıcı arayüzünü en son sürüme yükseltin" -#, fuzzy -#~ msgid "Server Name" -#~ msgstr "Sunucu Adı" - #~ msgid "" #~ "Customize the name of local server to be displayed in the environment " #~ "indicator." diff --git a/app/src/language/uk_UA/app.po b/app/src/language/uk_UA/app.po index 1574a978a..dbba1d7af 100644 --- a/app/src/language/uk_UA/app.po +++ b/app/src/language/uk_UA/app.po @@ -14,96 +14,143 @@ msgstr "" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 5.11\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "" "[Nginx UI] Користувач ACME: %{name}, Електронна пошта: %{email}, Каталог " "CA: %{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "" "[Nginx UI] Резервне копіювання поточного сертифіката для подальшого " "відкликання" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] Сертифікат успішно оновлено" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] Сертифікат успішно відкликано" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" "[Nginx UI] Сертифікат використовувався для сервера, перезавантаження " "TLS-сертифіката сервера" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] Створення клієнта для спрощення зв’язку з сервером CA" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] Змінні середовища очищено" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] Завершено" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] Сертифікат успішно видано" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] Отримання сертифіката" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] Підготовка до відкликання сертифіката" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] Підготовка конфігурацій lego" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] Перезавантаження nginx" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] Відкликання завершено" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] Відкликання сертифіката" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] Відкликання старого сертифіката" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] Налаштування провайдера виклику DNS01" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] Налаштування змінних середовища" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] Налаштування провайдера HTTP01-виклику" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] Запис приватного ключа сертифіката на диск" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] Запис сертифіката на диск" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} скопійовано в буфер обміну" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* Включає вузли з групи %{groupName} та вузли, вибрані вручну" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "" +"* Файли індексу за замовчуванням зберігаються в каталозі \"log-index\" у " +"шляху конфігурації NGINX UI." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* Показники продуктивності вимірювалися на Apple M2 Pro (12 ядер) з 32 ГБ " +"оперативної пам’яті. Фактична продуктивність може відрізнятися залежно від " +"конфігурації вашого обладнання." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{start}-%{end} з %{total} елементів" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "Мінімум 1 ядро" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "Мінімум 1 ГБ оперативної пам'яті" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "Рекомендовано 2+ ядра" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "24-годинна статистика UV/PV" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "2FA" @@ -112,11 +159,15 @@ msgstr "2FA" msgid "2FA Settings" msgstr "2FA Налаштування" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "Рекомендується 4 ГБ оперативної пам’яті або більше" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "Про программу" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "Логи доступу" @@ -125,30 +176,28 @@ msgid "Access log path not exist" msgstr "Шлях до журналу доступу не існує" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "Логи доступу" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "ACME Логін" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "Дія" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "Дії" @@ -163,15 +212,15 @@ msgid "Actual worker to configured ratio" msgstr "Фактичне співвідношення робочих до налаштованих" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "Додати" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "Додати ключ доступу" @@ -185,10 +234,14 @@ msgstr "Додати конфігурацію" msgid "Add Directive Below" msgstr "Додайте директиву нижче" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "Додати домен" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "Додати заголовок" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -202,15 +255,15 @@ msgstr "Додати сервер" msgid "Add Site" msgstr "Додати сайт" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "Додати стрім" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "Додати upstream" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "Успішно додано" @@ -218,25 +271,51 @@ msgstr "Успішно додано" msgid "Additional" msgstr "Додатково" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "Розширений режим" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "Розширене індексування увімкнено, але не вдалося розпочати перебудову" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "Розширене індексування успішно ввімкнено" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" +"Розширені функції індексації журналів є безкоштовними та з відкритим кодом " +"для всіх користувачів" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "Розширена система пулу пам'яті" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "Розширений пошук і фільтрація" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "Розширені налаштування" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "Після цього оновіть цю сторінку та натисніть «Додати ключ доступу» знову." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "Усі" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "Усі компоненти" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "Усі коди відновлення використано" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." @@ -244,6 +323,28 @@ msgstr "" "Усі вибрані піддомени повинні належати до одного й того самого " "DNS-провайдера, інакше запит на сертифікат не буде успішним." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"Як альтернативу, якщо ви не можете завантажити базу даних, ви можете вручну " +"розмістити GeoLite2-City.mmdb у тому самому каталозі, що й app.ini." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "Сервіс аналітики недоступний" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "Будь-який" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "" +"Будь-яку доступну IP-адресу можна використовувати з приватним центром " +"сертифікації" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "Базова URL-адреса API" @@ -264,36 +365,40 @@ msgstr "API-токен" msgid "API Type" msgstr "API Тип" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "Додаток" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "Застосувати" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "Архітектура" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "Ви впевнені, що хочите видалити цю заборонену IP-адресу?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "Ви впевнені, що хочете видалити цей ключ?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "Підтверджуєте генерацію нових кодів відновлення?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "Ви впевнені, що хочете скинути 2FA?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "Ви впевнені, що бажаєте очистити всі сповіщення?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "Ви впевнені, що бажаєте очистити запис чату?" @@ -301,18 +406,18 @@ msgstr "Ви впевнені, що бажаєте очистити запис msgid "Are you sure you want to delete permanently?" msgstr "Ви впевнені, що хочете видалити назавжди?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "Ви впевнені, що хочете видалити?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "" "Ви впевнені, що бажаєте перезавантажити Nginx на наступних вузлах " "синхронізації?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "Ви впевнені, що хочете видалити цю директиву?" @@ -324,7 +429,7 @@ msgstr "Ви впевнені, що хочете видалити цей еле msgid "Are you sure you want to remove this location?" msgstr "Ви впевнені, що хочете видалити цю локацію?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "" "Ви впевнені, що хочете перезавантажити Nginx на вказаних синхронізованих " @@ -334,23 +439,27 @@ msgstr "" msgid "Are you sure you want to restore?" msgstr "Ви впевнені, що хочете відновити?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "Запитати допомоги у ChatGPT" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "За зростанням" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "Помічник" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "Не менше 20 ГБ вільного місця на диску" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "Спробувати виправити" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "Спроби" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "Авторизація" @@ -358,12 +467,12 @@ msgstr "Авторизація" msgid "Authenticate with a passkey" msgstr "Автентифікація пасоком" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "Налаштування аутентифікації" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "Аутентифікація..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "Автор" @@ -397,28 +506,27 @@ msgstr "Автоматичне резервне копіювання не вда msgid "Auto Backup Storage Failed" msgstr "Не вдалося зберегти автоматичну резервну копію" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "Автоматичне оновлення" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "Автоматичне оновлення вимкнено" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "Автоматичне оновлення увімкнено" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "Автоматичне відновлення вимкнено на %{name}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "Автоматичне відновлення увімкнено для %{name}" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert виконується, будь ласка, зачекайте..." @@ -427,16 +535,32 @@ msgstr "AutoCert виконується, будь ласка, зачекайте msgid "AutoCert is running..." msgstr "AutoCert виконується..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "Автоматичне виявлення ротації логів" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "Автоматичний перезапуск" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "Середня затримка" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "Середньодобовий UV" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "Середн./PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "Назад" @@ -448,6 +572,22 @@ msgstr "На головну" msgid "Back to List" msgstr "Повернутися до списку" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "Бекенд" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "" +"Фонове індексування триває. Дані будуть автоматично оновлені, коли будуть " +"готові." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "Фонова служба журналів недоступна" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "Резервна копія" @@ -456,7 +596,7 @@ msgstr "Резервна копія" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "Перевірка цілісності резервного файлу не вдалася, можливо, його було змінено" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "Файл резервної копії не знайдено: {0}" @@ -468,24 +608,20 @@ msgstr "Резервну копію успішно завантажено" msgid "Backup Path" msgstr "Шлях резервного копіювання" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "Шлях резервного копіювання не існує: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "Шлях резервного копіювання не є директорією: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "" "Шлях резервного копіювання необхідний для резервного копіювання " "спеціального каталогу" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "Шлях резервного копіювання не входить до наданих шляхів доступу: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "Розклад резервного копіювання" @@ -512,15 +648,15 @@ msgstr "" msgid "Backup Type" msgstr "Тип резервної копії" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "Хвилини до блокування" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "Заблоковані IP-адреси" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "Заблоковано до" @@ -532,18 +668,18 @@ msgstr "Bark" msgid "Base information" msgstr "Основна інформація" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "Базові" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "Базовий режим" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "Основні налаштування" @@ -555,7 +691,7 @@ msgstr "Групове редагування" msgid "Batch Modify" msgstr "Масове редагування" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "Групове оновлення" @@ -567,11 +703,28 @@ msgstr "Нижче наведені елементи, які ви обрали msgid "Block is nil" msgstr "Блок є nil" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "Створено за допомогою" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "Браузер" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "Статистика браузера" -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"Увімкнувши розширене індексування, ви підтверджуєте, що ваша система " +"відповідає вимогам і розумієте наслідки для продуктивності. Це негайно " +"почне індексувати наявні файли журналів." + +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "Каталог CA" @@ -579,11 +732,11 @@ msgstr "Каталог CA" msgid "Cache" msgstr "Кеш" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "Елементи кешу, до яких не було звернень протягом цього часу, будуть видалені" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "Порог часу обробки завантажувача кешу" @@ -592,15 +745,15 @@ msgstr "Порог часу обробки завантажувача кешу" msgid "Cache manager processes" msgstr "Процеси керування кешем" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "Порог часу обробки менеджера кешу" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "Налаштування менеджера кешу" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "Шлях до кешу" @@ -609,7 +762,7 @@ msgstr "Шлях до кешу" msgid "Cache Processes" msgstr "Кеш-процеси" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "Структура рівнів підкаталогів кешу, напр. 1:2" @@ -627,24 +780,33 @@ msgstr "" "продуктивність залежить від апаратного забезпечення, конфігурації та " "навантаження" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "Скасувати" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "Не вдається отримати доступ до шляху резервної копії {0}: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "Не вдається отримати доступ до файлу журналу" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "Неможливо отримати доступ до шляху зберігання {0}: {1}" @@ -668,7 +830,7 @@ msgstr "Не вдається отримати дані про ефективн msgid "Cannot remove initial user" msgstr "Не можна видалити початкового користувача" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "Сертифікат" @@ -676,6 +838,11 @@ msgstr "Сертифікат" msgid "Cert path is not under the nginx conf dir" msgstr "Шлях до сертифіката не знаходиться в каталозі конфігурації nginx" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "сертифікат" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "Термін дії сертифіката %{name} закінчився" @@ -690,6 +857,10 @@ msgstr "Сертифікат %{name} закінчиться через %{days} msgid "Certificate %{name} will expire in 1 day" msgstr "Термін дії сертифіката %{name} закінчиться через 1 день" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "Вміст сертифіката та закритий ключ не можуть бути порожніми" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "Помилка декодування сертифіката" @@ -708,6 +879,14 @@ msgstr "Термін дії сертифіката закінчився" msgid "Certificate Expiring Soon" msgstr "Сертифікат незабаром закінчується" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "Файли сертифікатів успішно завантажено" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "Назва сертифіката не може бути порожньою" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "Сертифікат не знайдено: %{error}" @@ -720,8 +899,8 @@ msgstr "Помилка аналізу сертифіката" msgid "Certificate path is empty" msgstr "Шлях до сертифіката порожній" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "Сертифікат успішно видалено" @@ -737,13 +916,13 @@ msgstr "Сертифікат успішно поновлено" msgid "Certificate revoked successfully" msgstr "Сертифікат успішно відкликано" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Стан сертифіката" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "Тип сертифіката" @@ -752,7 +931,7 @@ msgstr "Тип сертифіката" msgid "Certificates" msgstr "Сертифікати" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "Список сертифікатів" @@ -760,7 +939,7 @@ msgstr "Список сертифікатів" msgid "Challenge error: {0}" msgstr "Помилка перевірки: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "Метод перевірки" @@ -782,26 +961,33 @@ msgstr[0] "Змінено сертифікат" msgid "Changed Path" msgstr "Змінений шлях" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "Канал" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "Чат" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "Чат для %{path}" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "Перевірити" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "Перевірте ще раз" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "Перевірити фавікон" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -833,6 +1019,22 @@ msgstr "" "небезпечним і перешкоджає використанню Passkeys та функцій буфера обміну" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "Перевірте, чи знаходиться каталог conf.d у каталозі конфігурації nginx" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"Перевірте, чи доступна база даних GeoLite2 при увімкненому індексуванні " +"журналів. База даних GeoLite2 необхідна для географічного аналізу IP-адрес " +"у журналі. Ви можете завантажити її з сторінки налаштувань або розташувати " +"GeoLite2-City.mmdb вручну в тому ж каталозі, що й app.ini" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -848,15 +1050,15 @@ msgstr "" "журналу доступу. Докладніше див. у документації: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "Перевірити, чи існує каталог конфігурації nginx" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "Перевірити, чи існує файл конфігурації nginx" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -872,7 +1074,7 @@ msgstr "" "журналу помилок. Докладніше див. у документації: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -886,23 +1088,23 @@ msgstr "" "конфігураційний файл, щоб вказати шлях до PID Nginx. Докладніше див. у " "документації: https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "Перевірте, чи існує шлях до sbin nginx" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "Перевірити, чи включає файл nginx.conf директорію conf.d" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "Перевірити, чи nginx.conf включає каталог sites-enabled" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "Перевірити, чи включає nginx.conf каталог streams-enabled" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" @@ -910,7 +1112,7 @@ msgstr "" "Перевірте, чи каталоги sites-available та sites-enabled знаходяться в " "каталозі конфігурації nginx" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" @@ -918,6 +1120,19 @@ msgstr "" "Перевірте, чи каталоги streams-available та streams-enabled знаходяться в " "каталозі конфігурації nginx" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "Інтервал перевірки (секунди)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "Карта доступу Китаю" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "Карта Китаю" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "Зашифрований текст занадто короткий" @@ -926,13 +1141,13 @@ msgstr "Зашифрований текст занадто короткий" msgid "Cleaning environment variables" msgstr "Змінні навколишнього середовища очищення" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "Чіткий" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "Успішно очищено" @@ -952,7 +1167,7 @@ msgstr "Натисніть або перетягніть файли в цю об msgid "Click or drag folders to this area to upload" msgstr "Натисніть або перетягніть папки в цю область для завантаження" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "Клацніть, щоб скопіювати" @@ -960,10 +1175,18 @@ msgstr "Клацніть, щоб скопіювати" msgid "Client Body Buffer Size" msgstr "Розмір буфера кузова клієнта" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "Клієнтський сертифікат" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "Розмір буфера заголовків клієнта" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "Ключ клієнта" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "Максимальний розмір тіла клієнта" @@ -992,6 +1215,14 @@ msgstr "Автозавершення коду не ввімкнено" msgid "Code Completion Model" msgstr "Модель автодоповнення коду" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "Згорнути" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "Налаштування стовпців" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "Команда" @@ -1000,7 +1231,7 @@ msgstr "Команда" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "Команда завершилася з неочікуваним кодом виходу: {0}, помилка: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -1023,11 +1254,34 @@ msgstr "Порівняйте вибрані" msgid "Compare with Current" msgstr "Порівняйте з струмом" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "Повне індексування з можливостями пошуку" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "компоненти" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "Підтримка стиснених файлів журналів" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "Рівень стиснення, 1 найнижчий, 9 - найвищий" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "Обчислення статистики" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "Каталог conf.d існує" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Каталог Conf.d не існує" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "Конфігурація" @@ -1040,22 +1294,30 @@ msgstr "Каталог конфігурації не існує" msgid "Config entry file not exist" msgstr "Вхідний файл конфігурації не існує" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "Конфігурація не знайдена" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "Конфігурація порожній" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "Шаблон конфігурації" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "Конфігурація" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "Файл конфігурації успішно протестовано" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "Файл конфігурації успішно протестовано в ізольованому пісочному ящику" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "Історія конфігурації" @@ -1076,11 +1338,20 @@ msgstr "Конфігурації" msgid "Configure SSL" msgstr "Налаштувати SSL" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "Підтвердити видалення" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "Підтвердити новий пароль" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "Потрібне підтвердження" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "Підключено" @@ -1088,9 +1359,9 @@ msgstr "Підключено" msgid "Connection error, trying to reconnect..." msgstr "Помилка з'єднання, спроба повторного підключення..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "З'єднання, будь ласка, оновіть сторінку." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "Втрачено зв’язок із цим терміналом. Оновіть, якщо потрібно." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1100,14 +1371,14 @@ msgstr "Період таймауту з'єднання" msgid "Container status unknown" msgstr "Стан контейнера невідомий" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "Вміст" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "Скопійовано" @@ -1120,14 +1391,38 @@ msgstr "Скопійовано!" msgid "Copy" msgstr "Копіювати" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "Копіювати коди" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "Оновлення ядра" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "Не вдалося знайти назву старого контейнера" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "Не вдалося знайти тимчасовий контейнер" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "Кількість" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "Країна / Регіон" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "ЦП" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "Статус процесора" @@ -1172,10 +1467,10 @@ msgstr "" "комп’ютер." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "Створено" @@ -1200,11 +1495,15 @@ msgstr "Повноваження" msgid "Cron Expression" msgstr "Вираз Cron" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "Кросфайлова кореляція часових шкал" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "Для поточного облікового запису ввімкнено TOTP." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "Поточний обліковий запис не має увімкненого TOTP." @@ -1260,12 +1559,12 @@ msgstr "Поточний пароль" msgid "Current usage" msgstr "Поточне використання" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "Поточна версія" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "Користувацький" @@ -1278,14 +1577,18 @@ msgstr "Спеціальний cron вираз" msgid "Custom Directory" msgstr "Спеціальний каталог" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "Користувацькі домени" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "Сертифікат користувацьких доменів" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "Користувацькі заголовки" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1296,6 +1599,10 @@ msgstr "Налаштуйте назву локального вузла для msgid "Daily" msgstr "Щоденно" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "Щоденні тенденції доступу" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "Щодня о %{time}" @@ -1303,10 +1610,18 @@ msgstr "Щодня о %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "Панель керування" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "Дата" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "Діапазон дат" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "День місяця" @@ -1319,34 +1634,48 @@ msgstr "День тижня" msgid "Days" msgstr "Дні" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "Файл бази даних не знайдено" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "Розпакування успішне, але не вдалося видалити стиснений файл: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "Розшифрування не вдалося" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "Типовий діапазон" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "Вкажіть назву та розмір зони спільної пам'яті, наприклад proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "Видалити" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "Не вдалося видалити %{path} на %{env_name}" +msgid "Delete %{path} on %{node_name} failed" +msgstr "Не вдалося видалити %{path} на %{node_name}" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "%{path} на %{env_name} успішно видалено" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "%{path} успішно видалено на %{node_name}" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "Видалити сертифікат" @@ -1366,43 +1695,44 @@ msgstr "Помилка видалення віддаленої конфігур msgid "Delete Remote Config Success" msgstr "Віддалена конфігурація успішно видалена" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "Помилка видалення віддаленого сайту" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "Віддалений сайт успішно видалено" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "Помилка видалення віддаленого потоку" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "Віддалений потік успішно видалено" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "Не вдалося видалити сайт %{name} з %{node}" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "Сайт %{name} успішно видалено з %{node}" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "Сайт видалено: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "Не вдалося видалити потік %{name} з %{node}" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "Потік %{name} успішно видалено з %{node}" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "Видалити потік: %{stream_name}" @@ -1418,8 +1748,16 @@ msgstr "Демо" msgid "Deploy" msgstr "Розгорнути" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "Режим розгортання" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "Спадаючий" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "" "Опис\"\n" @@ -1471,18 +1809,44 @@ msgstr "Файл призначення: {0} вже існує" msgid "Details" msgstr "Деталі" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Розробка" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "Розробка" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "Режим розробки" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "Пристрій" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "Статистика пристроїв" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "Тип пристрою" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "Зміст файлу контрольної суми порожній" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "ДінТок" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "Пряма" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "Директива" @@ -1503,98 +1867,101 @@ msgstr "DirectiveIdx поза діапазоном" msgid "Directives" msgstr "Директиви" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "Рівні каталогу" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "Шлях до каталогу для зберігання файлів кешу" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "Вимкнути" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "Не вдалося вимкнути автоматичне поновлення для %{name}" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "Помилка вимкнення віддаленого сайту" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "Помилка вимкнення технічного обслуговування віддаленого сайту" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "Вимкнення технічного обслуговування віддаленого сайту успішне" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "Віддалений сайт успішно вимкнено" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "Помилка вимкнення віддаленого потоку" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "Віддалений потік успішно вимкнено" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "Не вдалося вимкнути сайт %{name} з %{node}" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "Сайт %{name} успішно вимкнено з %{node}" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "Не вдалося вимкнути обслуговування сайту %{name} на %{node}" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "Обслуговування сайту %{name} на %{node} успішно вимкнено" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "Не вдалося вимкнути потік %{name} з %{node}" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "Потік %{name} успішно вимкнено з %{node}" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "Вимкнено" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "Успішно вимкнено" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "Відключено" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "Дисковий ввід/вивід" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "DNS облікові дані" @@ -1603,11 +1970,15 @@ msgstr "DNS облікові дані" msgid "DNS Provider" msgstr "DNS-провайдер" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "DNS-резолвер" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "Не вмикайте цю опцію, якщо ви не впевнені, що вона вам потрібна." @@ -1615,11 +1986,11 @@ msgstr "Не вмикайте цю опцію, якщо ви не впевнен msgid "Do you want to %{action} this site?" msgstr "Ви хочете %{action} цей сайт?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "Ви хочете %{action} цей потік?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "Ви хочете вимкнути автоматичне оновлення сертифіката?" @@ -1632,7 +2003,7 @@ msgstr "Ви хочете увімкнути TLS?" msgid "Do you want to remove this server?" msgstr "Ви хочете видалити цей сервер?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "Ви хочете видалити цей апстрім?" @@ -1640,7 +2011,7 @@ msgstr "Ви хочете видалити цей апстрім?" msgid "Docker client not initialized" msgstr "Клієнт Docker не ініціалізовано" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Сокет Docker існує" @@ -1654,14 +2025,35 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "Документ" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "Кількість документів" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "Домен" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "Список доменів порожній, спробуйте знову відкрити Auto Cert для %{config}" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "Завантажити файли сертифіката" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "Завантаження завершено" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "Завантаження не вдалося" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "Завантажити базу даних GeoLite2" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "Помилка завантаження останнього релізу" @@ -1670,12 +2062,19 @@ msgstr "Помилка завантаження останнього реліз msgid "Downloading latest release" msgstr "Завантаження останнього релізу" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "Перетягніть файл сертифіката сюди" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "Перетягніть файл приватного ключа сюди" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "Увімкнено тестовий режим" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1684,10 +2083,12 @@ msgstr "" "пас-ключі на вебсайтах без HTTPS, окрім випадків, коли сайт працює на " "localhost." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "Дублювати" @@ -1696,21 +2097,33 @@ msgstr "Дублювати" msgid "Duplicate to local successfully" msgstr "Успішно дубльовано локально" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "Динамічний" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "Динамічне управління шардами" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "напр., 0 0 * * * (щодня о півночі)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "Ключ HMAC EAB" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "ID ключа EAB" + #: src/language/curd.ts:8 msgid "Edit" msgstr "Редагувати" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "Редагувати %{n}" @@ -1727,7 +2140,7 @@ msgstr "Редагувати сайт" msgid "Edit Stream" msgstr "Редагувати потік" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "Електронна пошта" @@ -1736,16 +2149,28 @@ msgstr "Електронна пошта" msgid "Email (*)" msgstr "Електронна пошта (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "Порожній рядок журналу" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "увімкнути" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "2FA успішно ввімкнено" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "Увімкнути розширене індексування" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "Увімкнути розширене індексування журналів" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "Не вдалося увімкнути автоматичне оновлення для %{name}" @@ -1769,57 +2194,61 @@ msgstr "Увімкнути HTTP/3" msgid "Enable HTTPS" msgstr "Увімкнути HTTPS" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "Увімкнути індексацію" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "Увімкнути кеш проксі" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "Помилка активації віддаленого сайту" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "Помилка увімкнення технічного обслуговування віддаленого сайту" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "Успішне ввімкнення режиму обслуговування віддаленого сайту" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "Віддалений сайт успішно увімкнено" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "Помилка ввімкнення віддаленого потоку" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "Віддалений потік успішно ввімкнено" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "Не вдалося увімкнути технічне обслуговування сайту %{name} на %{node}" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "Обслуговування сайту %{name} на %{node} успішно ввімкнено" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "Не вдалося увімкнути сайт %{name} на %{node}" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "Сайт %{name} успішно увімкнено на %{node}" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "Не вдалося увімкнути потік %{name} на %{node}" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "Потік %{name} успішно ввімкнено на %{node}" @@ -1831,29 +2260,29 @@ msgstr "Увімкнути модуль stub_status" msgid "Enable TLS" msgstr "Увімкнути TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "Увімкнути TOTP" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "Увімкнено" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "Успішно ввімкнено" @@ -1869,6 +2298,16 @@ msgstr "" "Увімкнути підтримку HTTP/3 на основі протоколу QUIC для найкращої " "продуктивності" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"Увімкнення розширеного індексування журналів споживатиме значні " +"обчислювальні ресурси, включаючи процесор та пам’ять. Перш ніж продовжити, " +"переконайтеся, що ваша система відповідає мінімальним вимогам." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Зашифрувати вебсайт за допомогою Let's Encrypt" @@ -1877,11 +2316,19 @@ msgstr "Зашифрувати вебсайт за допомогою Let's Encr msgid "End" msgstr "Кінець" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "Дата завершення" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "Введіть ім’я домену" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "Введіть IP-адресу сервера (наприклад, 203.0.113.1 або 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "Введіть ваш домен" @@ -1893,39 +2340,58 @@ msgstr "Конфігурація середовища порожня" msgid "Environment variables cleaned" msgstr "Змінні середовища очищено" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "Середовища" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "Помилка" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "Деталі помилки" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "Помилка ініціалізації переглядача різниць" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "Журнал помилок" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "Виявлено журнал помилок" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "Шлях до журналу помилок не існує" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "Журнали помилок" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "" +"Журнали помилок не підтримують структурований аналіз, оскільки вони містять " +"довільні текстові повідомлення." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "Розпізнавання шаблонів помилок" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "Помилка обробки вмісту" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "Виконуваний бінарний файл порожній" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "Шлях до виконуваного файлу" @@ -1941,6 +2407,22 @@ msgstr "Виконувати щодня о %{time}" msgid "Execute on every month on day %{day} at %{time}" msgstr "Виконувати щомісяця %{day} числа о %{time}" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "Розгорнути" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "Очікувана продуктивність" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "Очікувані коди стану" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "Очікуваний текст" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1954,12 +2436,36 @@ msgstr "Термін дії закінчився: %{date}" msgid "Export Excel" msgstr "Експорт у Excel" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "" +"Ключ HMAC для прив’язки зовнішнього облікового запису (необов’язково). " +"Повинен бути у форматі кодування Base64 URL." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "" +"Ідентифікатор ключа зовнішнього облікового запису (опціонально). Потрібен " +"для деяких провайдерів ACME, таких як ZeroSSL." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "Зовнішній контейнер Docker" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "Зовнішню конфігурацію сповіщень не знайдено" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "Тест зовнішнього сповіщення" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "Зовнішнє сповіщення" @@ -1988,15 +2494,15 @@ msgstr "Не вдалося створити резервну копію фай msgid "Failed to build nginx config: {0}" msgstr "Не вдалося створити конфігурацію nginx: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "Не вдалося обчислити хеш: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Не вдалося обчислити хеш Nginx: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Не вдалося обчислити хеш інтерфейсу Nginx: {0}" @@ -2009,38 +2515,35 @@ msgid "Failed to copy config file: {0}" msgstr "Не вдалося скопіювати файл конфігурації: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "Не вдалося скопіювати каталог бази даних: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "Не вдалося скопіювати файл бази даних: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "Не вдалося скопіювати вміст файлу: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Не вдалося скопіювати каталог конфігурації Nginx: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "Не вдалося скопіювати в буфер обміну" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "Не вдалося створити резервну копію" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "Не вдалося створити директорію для резервних копій: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "Не вдалося створити резервний файл: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "Не вдалося створити директорію: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "Не вдалося створити файл: {0}" @@ -2048,19 +2551,19 @@ msgstr "Не вдалося створити файл: {0}" msgid "Failed to create hash info file: {0}" msgstr "Не вдалося створити файл з інформацією про хеш: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "Не вдалося створити батьківський каталог: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "Не вдалося створити директорію відновлення: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "Не вдалося створити каталог сховища {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "Не вдалося створити символічне посилання: {0}" @@ -2076,48 +2579,64 @@ msgstr "Не вдалося створити тимчасову директор msgid "Failed to create temporary subdirectory" msgstr "Не вдалося створити тимчасову піддиректорію" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "Не вдалося створити читач xz: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "Не вдалося створити ZIP-архів: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "Не вдалося створити запис у ZIP: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "Не вдалося створити ZIP-файл: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "Не вдалося створити заголовок ZIP: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "Не вдалося розпакувати базу даних GeoLite2: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "Не вдалося розшифрувати дані: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "Не вдалося розшифрувати файл: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Не вдалося розшифрувати каталог Nginx: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Не вдалося розшифрувати каталог Nginx UI: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "Не вдалося видалити всі індекси" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "Не вдалося видалити сертифікат" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "Не вдалося видалити сертифікат з бази даних: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "Не вдалося видалити індекс файлу" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "Не вдалося вимкнути %{msg}" @@ -2125,20 +2644,32 @@ msgstr "Не вдалося вимкнути %{msg}" msgid "Failed to disable maintenance mode %{msg}" msgstr "Не вдалося вимкнути режим обслуговування %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "Не вдалося завантажити файли сертифіката" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "Не вдалося завантажити базу даних GeoLite2: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "Не вдалося увімкнути %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "Не вдалося увімкнути розширене індексування" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "Не вдалося увімкнути режим обслуговування %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "Не вдалося зашифрувати дані: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "Не вдалося зашифрувати файл: {0}" @@ -2150,10 +2681,6 @@ msgstr "Не вдалося зашифрувати каталог Nginx: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Не вдалося зашифрувати каталог Nginx UI: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "Не вдалося оцінити символічні посилання: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "Не вдалося виконати команду: {0}" @@ -2162,7 +2689,7 @@ msgstr "Не вдалося виконати команду: {0}" msgid "Failed to execute template: {0}" msgstr "Не вдалося виконати шаблон: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "Не вдалося розпакувати архів: {0}" @@ -2182,14 +2709,30 @@ msgstr "Не вдалося отримати інформацію про сер msgid "Failed to get container id: {0}" msgstr "Не вдалося отримати ідентифікатор контейнера: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "Не вдалося отримати розмір файлу: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "Не вдалося отримати статус індексу" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Не вдалося отримати налаштування продуктивності Nginx" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "Не вдалося отримати шлях до nginx.conf" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "Не вдалося отримати дані про продуктивність" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "Не вдалося отримати статистику стійкості" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "Не вдалося отримати статус заглушки: {0}" @@ -2206,15 +2749,19 @@ msgstr "Не вдалося перевірити поточний контейн msgid "Failed to load history records" msgstr "Не вдалося завантажити історичні записи" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "Не вдалося відкрити файл: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "Не вдалося відкрити вихідний файл: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "Не вдалося відкрити запис у ZIP: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "Не вдалося відкрити ZIP-файл: {0}" @@ -2234,15 +2781,23 @@ msgstr "Не вдалося розібрати шаблон: {0}" msgid "Failed to pull image: {0}" msgstr "Не вдалося отримати образ: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "Не вдалося прочитати стиснені дані: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "Не вдалося прочитати зашифрований файл: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "Не вдалося прочитати файл" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "Не вдалося прочитати файл: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "Не вдалося прочитати файл з інформацією про хеш: {0}" @@ -2258,57 +2813,97 @@ msgstr "Не вдалося прочитати вивід: {0}" msgid "Failed to read response body: {0}" msgstr "Не вдалося прочитати тіло відповіді: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "Не вдалося прочитати символічне посилання: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "Не вдалося перебудувати індекс файлу" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "Не вдалося перебудувати індекс" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "Не вдалося оновити сайти" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Не вдалося відновити конфігурації Nginx: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "Не вдалося відновити файли Nginx UI: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "Не вдалося відкликати сертифікат" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "Не вдалося відкликати сертифікат: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "Не вдалося зберегти конфігурацію" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "Не вдалося зберегти завантажений файл: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "Не вдалося зберегти конфігурацію перевірки стану" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Не вдалося зберегти налаштування продуктивності Nginx" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "Не вдалося зберегти порядок" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "Не вдалося надіслати тестове повідомлення" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "Не вдалося запустити тимчасовий контейнер: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "Не вдалося оновити статус" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "Не вдалося завантажити файл" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "Не вдалося перевірити хеші: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "Не вдалося записати резервний файл: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "Не вдалося записати розпаковані дані: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "Не вдалося записати розшифрований файл: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "Не вдалося записати зашифрований файл: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "Не вдалося записати файл ключа безпеки: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "Не вдалося записати в zip-буфер: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "Функції" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2322,6 +2917,10 @@ msgstr "Файл" msgid "File exists" msgstr "Файл існує" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "Перебудову індексу файлу для %{path} успішно розпочато" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "Файл не знайдено" @@ -2330,19 +2929,35 @@ msgstr "Файл не знайдено" msgid "File or directory not found: {0}" msgstr "Файл або каталог не знайдено: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "Необхідний шлях до файлу" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "Розмір файлу не може перевищувати 5 МБ" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "Файл успішно завантажено" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "Назва файлу порожня" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "Фільтр" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "Фільтрувати вміст журналу" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "Завершено" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "Перший перегляд" @@ -2354,7 +2969,11 @@ msgstr "папка" msgid "Folder" msgstr "Папка" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "Дотримуватися перенаправлень" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2371,6 +2990,31 @@ msgstr "Для китайських користувачів" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "Для китайських користувачів: https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "Для комерційного або професійного використання зв'яжіться з" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "Для журналів помилок використовуйте Raw Log Viewer для кращого перегляду." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" +"Для конфігурацій сертифікатів на основі IP підтримується лише метод " +"перевірки HTTP-01. Метод перевірки DNS-01 несумісний із сертифікатами на " +"основі IP." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "" +"Для сертифікатів на основі IP вкажіть IP-адресу сервера, яка буде включена " +"до сертифіката." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "Не вдалося розібрати форму" @@ -2391,6 +3035,22 @@ msgstr "Формат: хвилина година день місяць день msgid "Friday" msgstr "П'ятниця" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "З індексованих журналів" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "Фронтенд" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "Повнотекстовий пошук" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "Підтримка повнотекстового пошуку" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "Загальний сертифікат" @@ -2399,16 +3059,16 @@ msgstr "Загальний сертифікат" msgid "Generate" msgstr "Згенерувати" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "Створити нові коди відновлення" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "Згенерувати коди відновлення" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "Коди відновлення успішно згенеровано" @@ -2416,6 +3076,39 @@ msgstr "Коди відновлення успішно згенеровано" msgid "Generating private key for registering account" msgstr "Генерація приватного ключа для реєстрації облікового запису" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "База даних GeoLite2" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "База даних GeoLite2 доступна" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "База даних GeoLite2 встановлена" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "База даних GeoLite2 не знайдена за адресою {0}" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"База даних GeoLite2 не знайдена за шляхом {0}. Індексування журналів " +"вимагає базу даних GeoLite2 для географічного аналізу IP-адрес" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "Необхідна база даних GeoLite2" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "Помилка отримання користувача ACME: {0}" @@ -2428,8 +3121,7 @@ msgstr "Не вдалося отримати дані" msgid "Get dns credential error: {0}" msgstr "Помилка отримання облікових даних DNS: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "Помилка отримання інформації про реліз" @@ -2441,10 +3133,40 @@ msgstr "Отримання сертифіката, зачекайте..." msgid "Github Proxy" msgstr "Github Проксі" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "Карта глобального доступу" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "Світова карта" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "Перейти до перегляду сирих логів" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" +"Перевірка стану gRPC вимагає, щоб сервер реалізував службу перевірки стану " +"gRPC (grpc.health.v1.Health)." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"gRPCS використовує шифрування TLS. Сервер повинен реалізувати службу " +"перевірки стану gRPC. Для тестування перевірка SSL за замовчуванням " +"вимкнена." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "Стиснення GZIP" @@ -2457,25 +3179,51 @@ msgstr "Рівень стиснення GZIP" msgid "GZIP Min Length" msgstr "Мінімальна довжина GZIP" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "Не вдалося перевірити хеш: цілісність файлу порушена" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "Перевірка стану" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "Конфігурація перевірки стану" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "Конфігурацію перевірки стану збережено" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "Конфігурацію перевірки стану успішно збережено" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "Стан здоров’я" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "Приховати" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "Приховати помічника" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "Високий" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "Вище значення означає краще повторне використання з’єднання" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "Історія" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "Головна" @@ -2484,10 +3232,11 @@ msgid "Host" msgstr "Хост" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "Година" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2495,7 +3244,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "Порт HTTP-запиту" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "Метод HTTP" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2503,15 +3256,15 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "Протокол HTTPS" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "Номер ICP" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "Якщо залишити порожнім, буде використовуватися стандартний каталог CA." - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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." @@ -2520,17 +3273,25 @@ msgstr "" "кількості спроб у межах встановленого часу блокування, ця IP-адреса буде " "заблокована на певний час." -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "Якщо ви хочете автоматично відкликати старий сертифікат, увімкніть цю опцію." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" +"Якщо ви хочете змінити місце зберігання, ви можете встановити `IndexPath` " +"розділу `nginx_log` у конфігурації інтерфейсу Nginx." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "Якщо ваш браузер підтримує WebAuthn Passkey, з’явиться діалогове вікно." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2542,12 +3303,12 @@ msgstr "" msgid "Import" msgstr "Імпорт" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "Імпортувати сертифікат" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "Час неактивності" @@ -2559,7 +3320,46 @@ msgstr "" "Включає головний процес, робочі процеси, процеси кешування та інші процеси " "Nginx" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "Інкрементальне сканування індексу" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "Перебудова індексу та статистики успішно розпочата" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "Помилка індексації" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "Не вдалося індексувати, спробуйте перебудувати" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "Перебудову індексу розпочато" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "Стан індексу" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "Проіндексовано" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "Індексація" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "Індексація журналів..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "Індексація..." @@ -2567,10 +3367,14 @@ msgstr "Індексація..." msgid "Indicator" msgstr "Індикатор" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "Інформація" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "Початковий користувач не існує" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "Помилка ініціалізації основного засобу оновлення" @@ -2579,7 +3383,7 @@ msgstr "Помилка ініціалізації основного засоб msgid "Initialing core upgrader" msgstr "Ініціалізація оновлення ядра" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "Введіть код з додатку:" @@ -2594,7 +3398,7 @@ msgstr "Небезпечне пропускання перевірки" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "Встановити" @@ -2622,27 +3426,36 @@ msgstr "" msgid "Interval" msgstr "Інтервал" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "Недійсний" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "Невірний формат AES IV: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "Невірний формат ключа AES: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "Недійсний формат сертифіката" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "Недійсний тип вимог" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "Невірний SHA коміта" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "Недійсний об’єкт файлу" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "Недійсний шлях до файлу: {0}" @@ -2655,6 +3468,10 @@ msgstr "Неправильна назва файлу" msgid "Invalid folder name" msgstr "Недійсна назва папки" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "Недійсний ідентифікатор сповіщення" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "Недійсна конфігурація сповіщення" @@ -2663,7 +3480,7 @@ msgstr "Недійсна конфігурація сповіщення" msgid "Invalid otp code" msgstr "Недійсний OTP-код" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "Недійсне заповнення в розшифрованих даних" @@ -2671,10 +3488,15 @@ msgstr "Недійсне заповнення в розшифрованих да msgid "Invalid passcode or recovery code" msgstr "Невірний код підтвердження або код відновлення" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "Недійсний шлях: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "Недійсний формат закритого ключа" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "Недійсний код відновлення" @@ -2683,19 +3505,41 @@ msgstr "Недійсний код відновлення" msgid "Invalid request format" msgstr "Недійсний формат запиту" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "Недійсний формат токена безпеки" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "Невірний ідентифікатор чату Telegram: не може бути нулем" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "Неправильний формат часової мітки" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "Недійсний тип повідомлення WebSocket" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "IP-адреса" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "Повідомлення про IP-сертифікат" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "Видати сертифікат" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "Видати сертифікат" @@ -2715,7 +3559,7 @@ msgstr "елемент(и)" msgid "Jwt Secret" msgstr "JWT Секрет" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2727,12 +3571,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "Таймаут Keepalive" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "Тип ключа" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "Мова" @@ -2744,6 +3588,44 @@ msgstr "Ларк" msgid "Lark Custom" msgstr "Lark Користувацький" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "Останні 12 годин" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "Останні 14 днів" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "Останні 15 хвилин" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "Останні 24 години" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "Останні 30 днів" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "Останні 30 хвилин" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "Останні 4 години" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "Останні 7 днів" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "Останні 90 днів" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "Статус останнього резервного копіювання" @@ -2752,15 +3634,35 @@ msgstr "Статус останнього резервного копіюван msgid "Last Backup Time" msgstr "Час останньої резервної копії" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "Остання перевірка" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "Остання перевірка" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "Остання година" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "Останнє індексування" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "Минулий місяць" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "Останнє оновлення" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "Останнє оновлення:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "Востаннє використано" @@ -2776,12 +3678,18 @@ msgstr "Залиште порожнім для значення за замов msgid "Leave blank if do not want to modify" msgstr "Залиште порожнім, якщо не хочете змінювати" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "Залиште порожнім, якщо ваш ACME-провайдер цього не вимагає" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "Залиште порожнім, якщо вам це не потрібно." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "Залишити порожнім — нічого не зміниться" @@ -2789,16 +3697,24 @@ msgstr "Залишити порожнім — нічого не змінитьс msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "Застарілий код відновлення не дозволяється, оскільки TOTP не ввімкнено" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego вимкнути підтримку CNAME" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "Ліцензія" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "Розподіл ліцензій" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "Типи ліцензій" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "Зв’язок" @@ -2814,32 +3730,32 @@ msgstr "Прослуховує" msgid "Load Average:" msgstr "Середнє навантаження:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "Завантажити з налаштувань" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "Успішно завантажено" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "Завантажено" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "Файли завантажувача" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "Налаштування завантажувача" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "Час очікування завантажувача" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "Поріг завантажувача" @@ -2847,9 +3763,15 @@ msgstr "Поріг завантажувача" msgid "Loading data..." msgstr "Завантаження даних..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "Завантаження..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2868,11 +3790,11 @@ msgstr "Розташування" msgid "Locations" msgstr "Розташування" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "Журнал" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2883,23 +3805,61 @@ msgstr "" "https://nginxui.com/zh_CN/guide/config-nginx-log.html для отримання " "додаткової інформації." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "Файл журналу не існує" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "Файл журналу не є звичайним файлом" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "Файл журналу недоступний" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "Файл журналу ще не проіндексовано" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "Індексатор журналів недоступний" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "Індексація журналів завершена! Завантаження оновлених даних..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "Рядок журналу перевищує максимально допустиму довжину" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "Список журналів" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" +"Аналізатор журналу не ініціалізований; викличте indexer.InitLogParser() " +"перед використанням" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "Шлях до журналу не знаходиться у білому списку" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "Увійти" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "Успішний вхід" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "Вихід успішний" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Logrotate" @@ -2919,9 +3879,20 @@ msgstr "" "можете вручну активувати цю опцію. Планувальник завдань crontab у Nginx UI " "виконуватиме команду logrotate з інтервалом, який ви встановите у хвилинах." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "Низький" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "Головний вузол" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "Технічне обслуговування" @@ -2937,7 +3908,7 @@ msgstr "Режим обслуговування успішно ввімкнен msgid "Make certificate dir error: {0}" msgstr "Помилка створення каталогу сертифіката: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2952,11 +3923,11 @@ msgstr "" msgid "Manage Configs" msgstr "Керування конфігураціями" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "Керування сайтами" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "Керування потоками" @@ -2968,15 +3939,15 @@ msgstr "Керування користувачами" msgid "Managed Certificate" msgstr "Керований сертифікат" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "Файли менеджера" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "Час очікування менеджера" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "Поріг менеджера" @@ -3002,7 +3973,7 @@ msgstr "Головний процес" msgid "Master Process" msgstr "Головний процес" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "Максимальна кількість спроб" @@ -3010,11 +3981,15 @@ msgstr "Максимальна кількість спроб" msgid "Max Concurrent Connections" msgstr "Максимальна кількість одночасних з’єднань" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "Максимальна кількість перенаправлень" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "Максимальна кількість запитів за секунду" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "Максимальний розмір кешу" @@ -3031,7 +4006,7 @@ msgstr "Максимальна кількість одночасних з’єд msgid "Maximum number of connections per worker process" msgstr "Максимальна кількість з’єднань на один робочий процес" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "Максимальний загальний розмір кешу" @@ -3041,6 +4016,7 @@ msgstr "Максимальна кількість робочих процесі #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "Пам'ять" @@ -3048,22 +4024,39 @@ msgstr "Пам'ять" msgid "Memory and Storage" msgstr "Пам’ять та сховище" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "Дизайн пам'яті" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "Використання пам'яті (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "Метод" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "Назва методу" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "Мінімальний розмір файлу для стиснення" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "Мінімальний вільний простір" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "Мінімальний вільний простір у кеш-директорії" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "Мінімум:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "Хвилина" @@ -3072,21 +4065,36 @@ msgstr "Хвилина" msgid "Minutes" msgstr "Хвилини" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "Дзеркало" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "Модель" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "Сучасний аналітичний сервіс недоступний" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "Сучасна служба індексації недоступна" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "Сучасний пошуковий сервіс недоступний" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "Змінено" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "Змінити" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "Редагувати сертифікат" @@ -3094,7 +4102,7 @@ msgstr "Редагувати сертифікат" msgid "Modify Config" msgstr "Змінити конфігурацію" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "Модуль" @@ -3102,6 +4110,10 @@ msgstr "Модуль" msgid "Modules" msgstr "Модулі" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "Кеш модулів оновлено" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "Понеділок" @@ -3114,39 +4126,66 @@ msgstr "Щомісяця" msgid "Monthly on day %{day} at %{time}" msgstr "Щомісяця %{day} числа о %{time}" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "Багатовимірна візуалізація даних" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "Багаторядкова директива" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "Повинна бути публічною IP-адресою, доступною з Інтернету" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "Н/Д" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "Ім'я" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "Ім’я або вміст" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "Простір імен" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "Простори імен" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "Потрібно активувати модуль stub_status" @@ -3159,6 +4198,10 @@ msgstr "Мережа" msgid "Network Statistics" msgstr "Мережева статистика" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "Новий чат" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "Помилка нового постачальника DNS-виклику: {0}" @@ -3187,18 +4230,18 @@ msgstr "Новий шлях" msgid "New transport error: {0}" msgstr "Помилка нового транспорту: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "Випущено нову версію" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "Далі" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3210,7 +4253,7 @@ msgstr "Вивід Nginx -T порожній" msgid "Nginx Access Log Path" msgstr "Шлях до журналу доступу Nginx" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Шлях до журналу доступу Nginx існує" @@ -3239,15 +4282,15 @@ msgstr "Конфігурація Nginx не містить sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "Конфігурація Nginx не містить stream-enabled" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "Каталог конфігурації Nginx не встановлено" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Каталог конфігурації Nginx існує" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "Файл входу конфігурації Nginx існує" @@ -3255,8 +4298,8 @@ msgstr "Файл входу конфігурації Nginx існує" msgid "Nginx configuration has been restored" msgstr "Конфігурацію Nginx відновлено" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Помилка аналізу конфігурації Nginx" @@ -3285,7 +4328,7 @@ msgstr "Рівень використання CPU Nginx" msgid "Nginx Error Log Path" msgstr "Шлях до журналу помилок Nginx" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "Шлях до журналу помилок Nginx існує" @@ -3294,7 +4337,7 @@ msgid "Nginx error: {0}" msgstr "Помилка Nginx: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3309,7 +4352,7 @@ msgstr "Nginx не працює в іншому контейнері" msgid "Nginx is running" msgstr "Nginx працює" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Nginx Журнал" @@ -3317,6 +4360,10 @@ msgstr "Nginx Журнал" msgid "Nginx Log Directory Whitelist" msgstr "Білий список каталогів журналів Nginx" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Індексація логів Nginx..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3326,7 +4373,7 @@ msgstr "Використання пам'яті Nginx" msgid "Nginx PID Path" msgstr "Шлях до PID Nginx" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Шлях PID Nginx існує" @@ -3339,7 +4386,7 @@ msgstr "Команда перезавантаження Nginx" msgid "Nginx reload failed: {0}" msgstr "Не вдалося перезавантажити Nginx: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Операції перезавантаження Nginx були відправлені на віддалені вузли" @@ -3351,7 +4398,7 @@ msgstr "Nginx успішно перезавантажено" msgid "Nginx Restart Command" msgstr "Команда перезавантаження Nginx" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Операції перезапуску Nginx були відправлені на віддалені вузли" @@ -3359,7 +4406,7 @@ msgstr "Операції перезапуску Nginx були відправл msgid "Nginx restarted successfully" msgstr "Nginx успішно перезапущено" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Шлях sbin для Nginx існує" @@ -3392,41 +4439,73 @@ msgstr "" "Конфігурацію Nginx UI відновлено, і вона автоматично перезавантажиться за " "кілька секунд." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf включає каталог conf.d" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf включає каталог sites-enabled" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf включає каталог streams-enabled" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "Ні" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "Без дії" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "Сертифіката немає" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "Географічні дані Китаю недоступні" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "Немає даних" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "Немає даних" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "Немає записів у поточній сторінці" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "Географічні дані недоступні" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "У вибраному часовому діапазоні журналів не знайдено." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "Не вибрано жодного вузла" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "Не вибрано жодного запису" @@ -3435,24 +4514,33 @@ msgstr "Не вибрано жодного запису" msgid "No servers configured" msgstr "Сервери не налаштовані" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "Сайтів не знайдено" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "" +"У конфігурації server_name не знайдено конкретної IP-адреси. Будь ласка, " +"вкажіть IP-адресу сервера нижче для сертифіката." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "Структуровані дані журналу відсутні" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "Не налаштовано жодного апстріму" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "Вузол" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "Група вузлів" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "Групи вузлів" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "Аналіз вузла не вдалося: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3462,7 +4550,12 @@ msgstr "Ім’я вузла" msgid "Node Secret" msgstr "Секрет вузла" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "Стан вузла" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "Вузли" @@ -3470,26 +4563,38 @@ msgstr "Вузли" msgid "Not After" msgstr "Не пізніше" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "Неочікуваний текст" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "Не знайдено" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "Не індексовано" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "Не завантажено" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "Не підтримується для IP-сертифікатів" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "Не дійсний до: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "Примітка" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." @@ -3497,11 +4602,25 @@ msgstr "" "Примітка: якщо файл конфігурації містить інші налаштування або сертифікати, " "будь ласка, синхронізуйте їх з віддаленими вузлами заздалегідь." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"Примітка: Якщо сервер не підтримує gRPC Reflection, перевірки стану можуть " +"завершитися невдачею. Переконайтеся, що на вашому сервері gRPC увімкнено " +"Reflection." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "Немає чого копіювати" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "Сповіщення" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "Сповіщення" @@ -3510,17 +4629,21 @@ msgstr "Сповіщення" msgid "Notifier not found" msgstr "Сповіщувач не знайдено" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "" "Кількість одночасних робочих процесів, автоматично встановлюється за " "кількістю ядер процесора" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "Кількість файлів, які обробляються завантажувачем кешу за один раз" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "Кількість файлів, які обробляються менеджером кешу одночасно" @@ -3535,7 +4658,7 @@ msgstr "Кількість робочих процесів" msgid "Obtain cert error: {0}" msgstr "Помилка отримання сертифіката: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "Отримати сертифікат" @@ -3543,11 +4666,11 @@ msgstr "Отримати сертифікат" msgid "Obtaining certificate" msgstr "Отримання сертифіката" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP Must Staple" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." @@ -3556,7 +4679,7 @@ msgstr "" "першого доступу за допомогою Firefox." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "Вимкнено" @@ -3564,48 +4687,58 @@ msgstr "Вимкнено" msgid "Official Document" msgstr "Офіційна документація" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "Офлайн" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "Офлайн-аналіз GeoIP" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "Гаразд" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "Увімкнено" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "Після завершення перевірки записи будуть видалені." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "Онлайн" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "Кількість онлайн" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "Дозволені лише zip-файли" @@ -3614,23 +4747,46 @@ msgstr "Дозволені лише zip-файли" msgid "Open" msgstr "Відкрито" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "Обмеження відкритого коду" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "Операційна система" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "Статистика операційної системи" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "Або" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "або перетягніть файл у редактор нижче" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "Або введіть секрет: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "Порядок успішно збережено" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "Оригінальна назва" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "ОС" @@ -3677,11 +4833,15 @@ msgstr "Параметри" msgid "Params Optimization" msgstr "Оптимізація параметрів" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "Продуктивність парсера" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "Ключ доступу" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3692,7 +4852,7 @@ msgstr "" "можуть використовуватися замість пароля або як метод двофакторної " "аутентифікації (2FA)." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "Пароль" @@ -3721,11 +4881,13 @@ msgstr "Паролі не збігаються" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "Шлях" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "Шлях не входить до наданих шляхів доступу: {0}" @@ -3737,12 +4899,28 @@ msgstr "Шлях: {0} не знаходиться в каталозі конфі msgid "Payload resource is nil" msgstr "Ресурс навантаження є nil" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "Пікова година" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "Очікується" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "Відсоток" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "Виконати" @@ -3786,7 +4964,11 @@ msgstr "" "Будь ласка, увімкніть модуль stub_status, щоб отримати статистику запитів, " "кількість з’єднань тощо." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "Будь ласка, введіть" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." @@ -3794,11 +4976,19 @@ msgstr "" "Будь ласка, введіть назву для ключа доступу, який ви хочете створити, і " "натисніть кнопку OK нижче." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "Будь ласка, введіть дійсну IPv4-адресу (0-255 для кожного октету)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "Будь ласка, введіть дійсну IPv4 або IPv6 адресу" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "Будь ласка, введіть дійсний діапазон портів" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "Будь ласка, введіть хоча б один домен" @@ -3815,6 +5005,10 @@ msgstr "Будь ласка, введіть токен безпеки" msgid "Please enter the security token received during backup" msgstr "Будь ласка, введіть токен безпеки, отриманий під час резервного копіювання" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "Будь ласка, введіть IP-адресу сервера" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "Будь ласка, заповніть усі поля правильно" @@ -3823,13 +5017,13 @@ msgstr "Будь ласка, заповніть усі поля правильн msgid "Please fill in required S3 configuration fields" msgstr "Будь ласка, заповніть обов’язкові поля конфігурації S3" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." msgstr "Будь ласка, заповніть облікові дані API, надані вашим DNS-провайдером." -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3838,7 +5032,7 @@ msgstr "" "потім виберіть один із наведених нижче облікових записів, щоб надіслати " "запит до API постачальника DNS." -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3876,20 +5070,20 @@ msgstr "" msgid "Please input your E-mail!" msgstr "Будь ласка, введіть вашу електронну пошту!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "Будь ласка, введіть ваш пароль!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "Будь ласка, введіть ваше ім'я користувача!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "Будь ласка, увійдіть." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "" "Будь ласка, зверніть увагу, що одиницею виміру часу в наведених нижче " @@ -3909,25 +5103,31 @@ msgstr "" msgid "Please select a backup file" msgstr "Будь ласка, виберіть файл резервної копії" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "Будь ласка, виберіть тип сповіщення" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "Будь ласка, виберіть дійсний файл %{type} (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "Будь ласка, виберіть хоча б один елемент" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Будь ласка, виберіть принаймні один вузол для перезавантаження Nginx" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Будь ласка, виберіть принаймні один вузол для перезапуску Nginx" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "Будь ласка, виберіть принаймні один вузол для оновлення" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "Будь ласка, введіть \"Скасувати\" для підтвердження" @@ -3940,23 +5140,26 @@ msgstr "Будь ласка, введіть точний текст підтве msgid "Port" msgstr "Порт" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "Порт 80 має бути відкритим для перевірки HTTP-01 challenge" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "Сканер портів" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "Дія після синхронізації" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "Попередній випуск" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "Налаштування" @@ -3964,6 +5167,19 @@ msgstr "Налаштування" msgid "Preparing lego configurations" msgstr "Підготовка конфігурацій Lego" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "Приватний CA:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "Приватні IP-адреси (192.168.x.x, 10.x.x.x, 172.16-31.x.x) не працюватимуть" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "приватний ключ" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "Процес" @@ -3980,6 +5196,10 @@ msgstr "Інформація про процес" msgid "Processing {count}/{total}" msgstr "Обробка {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "Виробничий конвеєр" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "У демо-версії заборонено змінювати пароль root" @@ -3996,6 +5216,10 @@ msgstr "Команда проекту" msgid "Protected Directory" msgstr "Захищена директорія" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "Протокол" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -4006,7 +5230,7 @@ msgstr "" "використовуєте зворотний проксі, налаштуйте протокол окремо у зворотному " "проксі." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "Провайдер" @@ -4014,22 +5238,57 @@ msgstr "Провайдер" msgid "Provider not found: {0}" msgstr "Постачальника не знайдено: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "Провінція / Регіон" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "Проксі" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "Проксі-передача" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "Цілі проксі" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "Вимоги публічного CA:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "Номер громадської безпеки" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "Перегляди сторінок" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "У черзі" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "У черзі на індексацію..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "Швидкий вибір" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "Сирий" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "Перезавантажити базу даних" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "Не вдалося прочитати каталог: {0}" @@ -4044,24 +5303,48 @@ msgstr "Запити на читання" msgid "Reads" msgstr "Читання" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "Панель аналітики в реальному часі" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "Перебудувати" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "Перебудувати всі індекси" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "Перебудувати індекс файлу" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "Перебудувати індекс" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Отримання" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "Перевірити знову" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "Рекомендовано:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "Відновлення" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "Коди відновлення" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -4074,15 +5357,29 @@ msgstr "" msgid "Recursive Nameservers" msgstr "Рекурсивні сервери імен" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "Реферер" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "Оновити" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "Оновити кеш модулів" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "Повторити відповідь" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "Зареєструватися" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." @@ -4090,19 +5387,19 @@ msgstr "" "Зареєструйте користувача або використовуйте цей обліковий запис для видачі " "сертифіката через HTTP-проксі." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "Не вдалося зареєструвати" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "Реєстрація при запуску" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "Ключ доступу успішно зареєстровано" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "Успішно зареєстровано" @@ -4110,28 +5407,30 @@ msgstr "Успішно зареєстровано" msgid "Registering user" msgstr "Реєстрація користувача" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "Стан реєстрації" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "Перевстановити" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "Запит API випуску не вдалося: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "Примітки до версії" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "Перезавантажити" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Перезавантажити Nginx" @@ -4155,7 +5454,7 @@ msgstr "Помилка перезавантаження віддаленого N msgid "Reload Remote Nginx Success" msgstr "Успішне перезавантаження віддаленого Nginx" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "" "Не вдалося виконати запит на перезавантаження, будь ласка, перевірте " @@ -4169,22 +5468,28 @@ msgstr "Перезавантаження" msgid "Reloading nginx" msgstr "Перезавантаження nginx" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "Віддалено" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "Видалити" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "Успішно видалено" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "Успішно видалено" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4193,12 +5498,12 @@ msgid "Rename" msgstr "Перейменувати" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "Не вдалося перейменувати %{orig_path} на %{new_path} у %{env_name}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "Не вдалося перейменувати %{orig_path} на %{new_path} на %{node_name}" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "%{orig_path} успішно перейменовано на %{new_path} у %{env_name}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "Успішно перейменовано %{orig_path} на %{new_path} у %{node_name}" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4208,37 +5513,37 @@ msgstr "Помилка перейменування віддаленої кон msgid "Rename Remote Config Success" msgstr "Вдале налаштування успішно перейменовано" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "Помилка перейменування віддаленого сайту" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "Успішне перейменування віддаленого сайту" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "Помилка перейменування віддаленого потоку" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "Вдале потік успішно перейменовано" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "Не вдалося перейменувати сайт %{name} на %{new_name} у %{node}" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "Сайт %{name} успішно перейменовано на %{new_name} на %{node}" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "Не вдалося перейменувати потік %{name} на %{new_name} на %{node}" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "Потік %{name} успішно перейменовано на %{new_name} на %{node}" @@ -4246,7 +5551,7 @@ msgstr "Потік %{name} успішно перейменовано на %{new_ msgid "Rename successfully" msgstr "Успішно перейменовано" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4256,8 +5561,8 @@ msgstr "Успішно перейменовано" msgid "Renew cert error: {0}" msgstr "Помилка поновлення сертифіката: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "Оновити сертифікат" @@ -4269,11 +5574,23 @@ msgstr "Помилка поновлення сертифіката" msgid "Renew Certificate Success" msgstr "Успішне поновлення сертифіката" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "Оновлення успішне" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "Запит" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "Тіло запиту" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "Шлях запиту" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "Статистика запитів" @@ -4291,13 +5608,19 @@ msgid "Requests Per Connection" msgstr "Запитів на зʼєднання" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "Скинути" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "Скинути 2FA" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "Скинути пошук" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4308,6 +5631,10 @@ msgstr "" "пам'яті, включаючи всю пам'ять спільних бібліотек, яка буде повторно " "обчислюватися для кількох процесів" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "Попередження про використання ресурсів" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4317,9 +5644,8 @@ msgstr "Відповіді" msgid "Restart" msgstr "Перезавантажити" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Перезапустити Nginx" @@ -4339,7 +5665,7 @@ msgstr "Помилка перезапуску віддаленого Nginx" msgid "Restart Remote Nginx Success" msgstr "Віддалений перезапуск Nginx успішний" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "" "Не вдалося виконати запит на перезавантаження, будь ласка, перевірте " @@ -4380,8 +5706,8 @@ msgstr "Відновити цю версію" msgid "Restored successfully" msgstr "Успішно відновлено" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "Анулювати" @@ -4389,15 +5715,15 @@ msgstr "Анулювати" msgid "Revoke cert error: {0}" msgstr "Помилка скасування сертифіката: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "Відкликати старий сертифікат" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "Відкликати цей сертифікат" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." @@ -4405,15 +5731,15 @@ msgstr "" "Відкликання сертифіката вплине на всі служби, які його використовують. Цю " "дію не можна скасувати." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "Відображуване ім’я RP" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "Джерела RP" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4449,10 +5775,6 @@ msgstr "Потрібен ідентифікатор ключа доступу S3 msgid "S3 Bucket" msgstr "S3-відро" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "Доступ до сховища S3 заборонено: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "Потрібен S3-відро" @@ -4461,7 +5783,7 @@ msgstr "Потрібен S3-відро" msgid "S3 bucket name" msgstr "Назва S3-відра" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "Конфігурація S3 неповна: відсутній {0}" @@ -4469,27 +5791,15 @@ msgstr "Конфігурація S3 неповна: відсутній {0}" msgid "S3 connection test failed" msgstr "Тест підключення S3 не вдався" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "Тест підключення S3 не вдався: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "Тест підключення S3 успішний" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "Облікові дані S3 недійсні: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "Кінцева точка S3" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "Кінцева точка S3 недійсна: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "Потрібна кінцева точка S3" @@ -4525,7 +5835,7 @@ msgstr "Секретний ключ доступу S3" msgid "S3 secret access key is required" msgstr "Потрібен секретний ключ доступу S3" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "Помилка завантаження в S3: {0}" @@ -4533,17 +5843,19 @@ msgstr "Помилка завантаження в S3: {0}" msgid "Saturday" msgstr "Субота" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "Зберегти" @@ -4551,41 +5863,41 @@ msgstr "Зберегти" msgid "Save Directive" msgstr "Зберегти директиву" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "Помилка збереження %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "Зберегти порядок" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "Помилка збереження віддаленого сайту" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "Віддалений сайт успішно збережено" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "Помилка збереження віддаленого потоку" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "Віддалений потік успішно збережено" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "Не вдалося зберегти сайт %{name} на %{node}" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "Сайт %{name} успішно збережено на %{node}" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "Не вдалося зберегти потік %{name} на %{node}" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "Потік %{name} успішно збережено на %{node}" @@ -4593,16 +5905,17 @@ msgstr "Потік %{name} успішно збережено на %{node}" msgid "Save successful" msgstr "Успішно збережено" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "Успішно збережено" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "Успішно збережено" @@ -4626,15 +5939,15 @@ msgstr "Сканувати порти" msgid "Scan Results" msgstr "Результати сканування" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "" "Відскануйте QR-код за допомогою мобільного телефону, щоб додати обліковий " "запис до програми." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "Сканування журналів..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "Сканування" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4649,16 +5962,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "Пошук" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "Фільтри пошуку" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "Пошук у вмісті журналу..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "Назва модуля пошуку" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "Пошук модулів" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "Діапазон пошуку" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "Пошук шаблонів" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "Секрет скопійовано" @@ -4675,13 +6009,21 @@ msgstr "Токен безпеки" msgid "Security Token Information" msgstr "Інформація про токен безпеки" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" +"Виберіть попередньо визначений каталог CA або введіть власний. Залиште " +"порожнім, щоб використовувати каталог CA за замовчуванням." + #: src/language/curd.ts:31 msgid "Select all" msgstr "Вибрати все" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "Виберіть дію після синхронізації" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "Виберіть або введіть URL-адресу каталогу CA" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4691,7 +6033,7 @@ msgstr "Вибрано {count} файлів" msgid "Selector" msgstr "Селектор" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "Самоперевірка" @@ -4705,11 +6047,15 @@ msgstr "Самоперевірка не вдалася, інтерфейс Nginx msgid "Send" msgstr "Надіслати" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "Надіслати тестове повідомлення" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "Сервер" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "Помилка сервера" @@ -4717,6 +6063,10 @@ msgstr "Помилка сервера" msgid "Server Info" msgstr "Інформація про сервер" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "IP-адреса сервера" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "Розмір хеш-таблиці імен серверів" @@ -4725,7 +6075,7 @@ msgstr "Розмір хеш-таблиці імен серверів" msgid "Server names hash table size" msgstr "Розмір хеш-таблиці імен серверів" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "server_name не знайдено в директивах" @@ -4733,6 +6083,10 @@ msgstr "server_name не знайдено в директивах" msgid "ServerIdx out of range" msgstr "ServerIdx поза діапазоном" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "Назва сервісу" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "Сесію не знайдено" @@ -4771,6 +6125,10 @@ msgstr "Налаштування змінних середовища" msgid "Setting HTTP01 challenge provider" msgstr "Налаштування провайдера HTTP01-виклику" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "Налаштування" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4793,7 +6151,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Налаштуйте ваш Nginx UI" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "Зона спільної пам'яті" @@ -4801,10 +6159,18 @@ msgstr "Зона спільної пам'яті" msgid "Show" msgstr "Показати" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "Показати помічника" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "Увійти за допомогою ключа доступу" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "Оптимізована SIMD обробка потоку" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "Одинарна директива" @@ -4825,11 +6191,23 @@ msgstr "Сайт у режимі технічного обслуговуванн msgid "Site Logs" msgstr "Журнали сайту" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "Навігація по сайту" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "Сайт не знайдено" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "Оновлення сайту розпочато" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "Сайти" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "Каталог сайтів існує" @@ -4837,6 +6215,14 @@ msgstr "Каталог сайтів існує" msgid "Sites List" msgstr "Список сайтів" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" +"Сайти з’являться тут після налаштування блоків сервера nginx з дійсними " +"директивами server_name." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "Каталог Sites-available не існує" @@ -4846,6 +6232,8 @@ msgid "Sites-enabled directory not exist" msgstr "Каталог sites-enabled не існує" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "Розмір" @@ -4853,19 +6241,36 @@ msgstr "Розмір" msgid "Skip Installation" msgstr "Пропустити встановлення" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "Час очікування між ітераціями завантажувача кешу" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "Час очікування між ітераціями менеджера кешу" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "Сокет" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "Відсортовано за" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "Вихідна IP" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "Спонсор" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "SSD-накопич для кращої продуктивності вводу-виводу" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "Вміст SSL-сертифіката" @@ -4877,15 +6282,20 @@ msgstr "Файл SSL-сертифіката повинен знаходитис msgid "SSL certificate file not found" msgstr "Файл SSL-сертифіката не знайдено" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "Вміст ключа SSL-сертифіката" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "Шлях до ключа SSL-сертифіката" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "Шлях до SSL-сертифікату" @@ -4910,13 +6320,12 @@ msgstr "Шлях до SSL-ключа" msgid "SSL key path is required when HTTPS is enabled" msgstr "Шлях до SSL-ключа обов’язковий при ввімкненні HTTPS" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "Вхід через SSO" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "Стабільна" @@ -4924,33 +6333,49 @@ msgstr "Стабільна" msgid "Start" msgstr "Початок" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "Дата початку" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "Почати відновлення" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "Починається завантаження..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "Статичний" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "Статус" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "Статус успішно оновлено" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "Зупинено" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "Сховище" @@ -4976,10 +6401,6 @@ msgstr "Шлях зберігання" msgid "Storage path is required" msgstr "Шлях до сховища обов’язковий" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "Шлях зберігання не входить до наданих шляхів доступу: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4993,7 +6414,7 @@ msgstr "Потік увімкнено" msgid "Stream not found" msgstr "Потік не знайдено" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "Каталог Streams існує" @@ -5005,6 +6426,10 @@ msgstr "Каталог Streams-available не існує" msgid "Streams-enabled directory not exist" msgstr "Каталог streams-enabled не існує" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "Структурований" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "Порт статусу Stub" @@ -5013,7 +6438,7 @@ msgstr "Порт статусу Stub" msgid "Stub_status is not enabled" msgstr "Stub_status не увімкнено" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -5024,18 +6449,6 @@ msgstr "Успіх" msgid "Sunday" msgstr "Неділя" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Підтримка зв’язку з бекендом через протокол Server-Sent Events. Якщо ваш " -"Nginx UI використовується через зворотний проксі Nginx, перейдіть за цим " -"посиланням, щоб написати відповідний конфігураційний файл: " -"https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -5084,12 +6497,12 @@ msgid "Sync Certificate" msgstr "Синхронізувати сертифікат" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "Не вдалося синхронізувати сертифікат %{cert_name} з %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "Не вдалося синхронізувати сертифікат %{cert_name} з %{node_name}" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "Сертифікат %{cert_name} успішно синхронізовано з %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "Сертифікат %{cert_name} успішно синхронізовано з %{node_name}" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -5100,12 +6513,12 @@ msgid "Sync Certificate Success" msgstr "Сертифікат успішно синхронізовано" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "Не вдалося синхронізувати конфігурацію %{config_name} з %{env_name}" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "Не вдалося синхронізувати конфігурацію %{config_name} з %{node_name}" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "Конфігурацію %{config_name} успішно синхронізовано з %{env_name}" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "Конфігурацію %{config_name} успішно синхронізовано з %{node_name}" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -5115,24 +6528,29 @@ msgstr "Помилка синхронізації конфігурації" msgid "Sync Config Success" msgstr "Успішна синхронізація конфігурації" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "Синхронізовані вузли" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "Попередній перегляд синхронізації" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "Стратегія синхронізації" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "Синхронізувати з" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "Синхронізація" @@ -5149,10 +6567,14 @@ msgstr "Резервне копіювання системи" msgid "System Check" msgstr "Перевірка системи" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "Початковий користувач системи" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "Системні вимоги" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "Відновлення системи" @@ -5173,19 +6595,45 @@ msgstr "Завдання не знайдено" msgid "Telegram" msgstr "Телеграм" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "Термінал" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "Термінальний помічник" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "Команда запуску терміналу" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "Тест" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "Тест не пройшов: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "Тест не вдався: Не вдалося виконати перевірку стану" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "Тестове повідомлення успішно надіслано" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "Перевірити підключення S3" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "Тест успішний! Час відповіді: %{response_time}мс" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " @@ -5195,6 +6643,22 @@ msgstr "" "поновлюватися, якщо з моменту останнього випуску минуло більше 1 тижня або " "встановлений вами період у налаштуваннях." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "" +"Для відключеного географічного аналізу IP-адрес потрібна база даних " +"GeoLite2. Будь ласка, завантажте її, щоб увімкнути цю функцію." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "" +"База даних GeoLite2 надає географічну інформацію для IP-адрес. Вона " +"використовується для офлайн-географічного аналізу в аналізі журналів." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " @@ -5203,11 +6667,11 @@ msgstr "" "Номер ICP повинен містити лише літери, unicode, цифри, дефіси, тире, " "двокрапки та крапки." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "Введені дані не є SSL-сертифікатом" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "Введений текст не є ключем SSL-сертифіката" @@ -5246,11 +6710,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "Параметр server_name є обов'язковим" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "Шлях існує, але файл не є сертифікатом" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "Шлях існує, але файл не є приватним ключем" @@ -5262,7 +6726,7 @@ msgstr "" "Номер громадської безпеки повинен містити лише літери, unicode, цифри, " "дефіси, тире, двокрапки та крапки." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5272,7 +6736,7 @@ msgstr "" "уникнути потенційних помилок, будь ласка, оновіть віддалений Nginx UI до " "версії, яка відповідає локальній." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5302,7 +6766,7 @@ msgstr "Теоретична максимальна кількість одно msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "Теоретичний максимум RPS (запитів за секунду):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5312,13 +6776,17 @@ msgstr "" "втрати пароля та других факторів. Якщо ви не зможете знайти ці коди, ви " "втратите доступ до свого облікового запису." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "Сторонні компоненти" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "" "Цей елемент автоматичного сертифікату є недійсним, будь ласка, видаліть " "його." -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "Цей сертифікат керується Nginx UI" @@ -5326,9 +6794,9 @@ msgstr "Цей сертифікат керується Nginx UI" msgid "This directory is protected and cannot be deleted for system safety." msgstr "Цей каталог захищений і не може бути видалений для безпеки системи." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "Це поле обов'язкове" @@ -5354,6 +6822,10 @@ msgid "" "-_./:" msgstr "Це поле має містити лише літери, символи Unicode, цифри та -_./:" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "Це тестове повідомлення, надіслане на %{timestamp} з користувача Nginx." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " @@ -5362,7 +6834,15 @@ msgstr "" "Цей модуль надає дані, такі як статистика запитів Nginx, кількість з’єднань " "тощо. Після ввімкнення ви зможете переглядати статистику продуктивності" -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "Цей місяць" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "Це сповіщення вимкнено" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." @@ -5370,6 +6850,26 @@ msgstr "" "Ця операція лише видалить сертифікат із бази даних. Файли сертифіката у " "файловій системі не будуть видалені." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"Цей сайт налаштований як сервер за замовчуванням (default_server) для HTTPS " +"(порт 443). IP-сертифікати вимагають підтримки Центру сертифікації (CA) і " +"можуть бути недоступні у всіх провайдерів ACME." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"Цей сайт використовує шаблонне ім’я сервера (_), яке зазвичай вказує на " +"IP-сертифікат. IP-сертифікати вимагають підтримки Центру сертифікації (CA) " +"і можуть бути недоступні у всіх провайдерів ACME." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5386,6 +6886,19 @@ msgstr "Це значення вже використовується" msgid "This will permanently delete the %{type}." msgstr "Це призведе до остаточного видалення %{type}." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"Це призведе до повної перебудови індексу журналів. Усі наявні дані індексу " +"будуть видалені та перебудовані з нуля. Це може зайняти деякий час. " +"Продовжити?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "Це перебудує дані індексу для цього конкретного файлу: %{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5404,11 +6917,11 @@ msgstr "" "Це відновить файли конфігурації та базу даних. Nginx UI перезапуститься " "після завершення відновлення." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "Це оновить або перевстановить Nginx UI на %{nodeNames} до версії %{version}." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "Обмеження" @@ -5416,8 +6929,21 @@ msgstr "Обмеження" msgid "Thursday" msgstr "Четвер" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "Час" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "Часовий діапазон" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "Таймаут (секунди)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "Поради" @@ -5434,11 +6960,15 @@ msgstr "" msgid "Title" msgstr "Назва" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "підтвердити видалення" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "Щоб підтвердити анулювання, введіть \"Анулювати\" у поле нижче:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5446,7 +6976,7 @@ msgstr "" "Щоб увімкнути його, вам потрібно встановити додаток Google Authenticator " "або Microsoft Authenticator на свій мобільний телефон." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5491,15 +7021,41 @@ msgstr "Токен порожній" msgid "Token is not valid" msgstr "Токен недійсний" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "Топ-10 країн / регіонів" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "Топ-10 провінцій / регіонів" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "Топ-10 URL-адрес" + #: src/language/curd.ts:5 msgid "Total" msgstr "Всього" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "Всього %{total} елементів" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "Всього компонентів" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "Загальна кількість з’єднань" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "Всього записів" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5513,6 +7069,10 @@ msgstr "Загальна кількість процесів Nginx" msgid "Total Nginx Processes" msgstr "Загальна кількість процесів Nginx" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "Загальна кількість переглядів" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "Загальний прийом" @@ -5530,11 +7090,15 @@ msgstr "Загальна кількість запитів / Загальна к msgid "Total Send" msgstr "Всього відправлено" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "Загальна кількість унікальних відвідувачів" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -5542,25 +7106,41 @@ msgstr "" "TOTP — це двофакторний метод автентифікації, який використовує алгоритм " "одноразового пароля на основі часу." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "Трафік" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "Переклад помилки..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "Кошик" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "Спробуйте змінити критерії пошуку або перейти на інші сторінки." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "Спробуйте змінити критерії пошуку або часовий діапазон." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "Вівторок" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "Потрібна двофакторна аутентифікація" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "Тип" @@ -5568,15 +7148,47 @@ msgstr "Тип" msgid "Type %{delete} to confirm" msgstr "Введіть %{delete} для підтвердження" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "Введіть або виберіть браузер" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "Введіть або виберіть пристрій" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "Введіть або виберіть ОС" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "Введіть або виберіть коди статусу" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "Введіть ваше повідомлення тут..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "Унікальні сторінки" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "Невідомо" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "Тип резервної копії не підтримується: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "Непідтримуваний формат журналу" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "Оновлення вже в процесі" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "Оновити пароль" @@ -5585,32 +7197,30 @@ msgstr "Оновити пароль" msgid "Update Profile" msgstr "Оновити профіль" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "Успішно оновлено" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "Оновлено" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "Оновити" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "Nginx UI на %{node} успішно оновлено 🎉" @@ -5618,11 +7228,22 @@ msgstr "Nginx UI на %{node} успішно оновлено 🎉" msgid "Upgraded successfully" msgstr "Успішно оновлено" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "Хеш-сума ядра оновлювача порожня" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "URL завантаження ядра оновлення порожній" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Оновлення Nginx UI, зачекайте..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "Завантажити файл %{type}" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "Завантажити файли" @@ -5631,19 +7252,29 @@ msgstr "Завантажити файли" msgid "Upload Folders" msgstr "Завантажити папки" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "Вгору за течією" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Назва апстріму" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "Сокети Upstream" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "Тип тестування апстриму" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "Час роботи:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5655,14 +7286,19 @@ msgstr "Використовувати OTP" msgid "Use recovery code" msgstr "Використати код відновлення" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "Використовувати тимчасовий шлях" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "Користувач" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "Користувацький агент" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "Користувача заблоковано" @@ -5679,7 +7315,7 @@ msgstr "Користувач не увімкнув OTP як 2FA" msgid "User Profile" msgstr "Профіль користувача" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "Ім’я користувача" @@ -5692,12 +7328,20 @@ msgstr "Ім’я користувача (*)" msgid "Username length cannot exceed 255 characters" msgstr "Довжина імені користувача не може перевищувати 255 символів" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "Унікальні відвідувачі" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "Дійсний" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "Перевірити SSL-сертифікат" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "Значення" @@ -5707,45 +7351,65 @@ msgstr "Значення" msgid "Verify Backup File Integrity" msgstr "Перевірити цілісність резервної копії" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "Перевірити ім’я хоста" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "Перевірте системні вимоги" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "Версія" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "Переглянути" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "Переглянути всі сповіщення" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "Переглянути на GitHub" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "Переглянути коди відновлення" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "Переглянути сторонні компоненти" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "Переглянутий" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "Візити" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "Процеси очікування" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "Попередження" @@ -5760,7 +7424,22 @@ msgstr "" "Переконайтеся, що у вас є дійсний файл резервної копії та токен безпеки, і " "ретельно виберіть, що відновлювати." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"Попередження: Схоже, що це приватна IP-адреса. Публічні центри " +"сертифікації, такі як Let's Encrypt, не можуть видавати сертифікати для " +"приватних IP. Використовуйте публічну IP-адресу або розгляньте можливість " +"використання приватного центру сертифікації." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "Ми не приймаємо жодних запитів на функції" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." @@ -5768,7 +7447,7 @@ msgstr "" "Ми додамо один або кілька TXT-записів до DNS-записів вашого домену для " "підтвердження власності." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" @@ -5776,7 +7455,7 @@ msgstr "" "Ми видалимо конфігурацію HTTPChallenge з цього файлу та перезавантажимо " "Nginx. Ви впевнені, що хочете продовжити?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "WebAuthn" @@ -5784,10 +7463,18 @@ msgstr "WebAuthn" msgid "WebAuthn settings are not configured" msgstr "Налаштування WebAuthn не налаштовані" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "Помилка підключення WebSocket" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket не підключено, будь ласка, зачекайте на з’єднання" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "WeCom" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "середа" @@ -5800,7 +7487,7 @@ msgstr "Щотижня" msgid "Weekly on %{day} at %{time}" msgstr "Щотижня в %{day} о %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5810,16 +7497,16 @@ msgstr "" "запуску. Як правило, не вмикайте цю функцію, якщо ви не перебуваєте у " "середовищі розробки та використовуєте Pebble як CA." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" "Коли ви вмикаєте/вимикаєте, видаляєте або зберігаєте цей сайт, вузли, " -"встановлені в Групі вузлів, і вузли, вибрані нижче, будуть синхронізовані." +"встановлені в просторі імен, і вузли, вибрані нижче, будуть синхронізовані." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." @@ -5827,11 +7514,11 @@ msgstr "" "Коли ви генеруєте нові коди відновлення, ви повинні завантажити або " "надрукувати нові коди." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "Чи використовувати тимчасовий шлях під час запису тимчасових файлів" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "Сертифікат зі знаком підстановки" @@ -5850,8 +7537,8 @@ msgstr "Робочі процеси" msgid "Workers" msgstr "Робочі процеси" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "Робоча область" @@ -5876,16 +7563,18 @@ msgstr "Запис приватного ключа сертифіката на msgid "Writing certificate to disk" msgstr "Запис сертифіката на диск" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "Так" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5898,11 +7587,11 @@ msgstr "" msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "Вам не дозволено видаляти файл за межами шляху конфігурації nginx" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "Ви використовуєте останню версію" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "На цій сторінці ви можете перевірити оновлення Nginx UI." @@ -5914,23 +7603,23 @@ msgstr "Ви можете закрити це вікно через %{countdown} msgid "You can close this dialog now" msgstr "Тепер ви можете закрити це діалогове вікно" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." msgstr "Ви не налаштували параметри WebAuthn, тому не можете додати ключ доступу." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" "Ви ще не ввімкнули двофакторну аутентифікацію. Будь ласка, увімкніть її, " "щоб згенерувати коди відновлення." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "Ви ще не згенерували коди відновлення." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." @@ -5938,15 +7627,196 @@ msgstr "" "Ваш поточний код відновлення може бути застарілим і ненадійним. Будь ласка, " "згенеруйте нові коди відновлення якнайшвидше, щоб забезпечити безпеку." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "Ваші старі коди більше не працюватимуть." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "Ваші ключі доступу" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "Конвеєр без виділення пам’яті" + +#~ msgid "in the same directory as" +#~ msgstr "у тому ж каталозі, що й" + +#~ msgid "Sandbox test successful" +#~ msgstr "Тест пісочниці успішний" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "Протестовано в ізольованому пісочниці" + +#~ msgid "All" +#~ msgstr "Усі" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "На основі тестування M2 Pro (12 ядер)" + +#~ msgid "CPU Utilization" +#~ msgstr "Використання процесора" + +#~ msgid "Indexing Throughput" +#~ msgstr "Продуктивність індексації" + +#~ msgid "Memory Efficiency" +#~ msgstr "Ефективність пам'яті" + +#~ msgid "Performance Impact Notice" +#~ msgstr "Повідомлення про вплив на продуктивність" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "Оптимізація конвеєра без виділення пам'яті" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "Запитати допомоги у ChatGPT" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "Географічне картографування та аналітика" + +#~ msgid "No feature requests accepted." +#~ msgstr "Запити на функціонал не приймаються" + +#~ msgid "Time-series trend analysis" +#~ msgstr "Аналіз часових рядів" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "Аналітика User-Agent та браузера" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ ядер (Apple M2 Pro або еквівалент Intel)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "4 ГБ+ оперативної пам’яті для оптимальної продуктивності" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "Адаптивний розмір пакету" + +#~ msgid "CPU Architecture" +#~ msgstr "Архітектура процесора" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "Аналіз GeoIP та User-Agent" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "Мінімум 1 ГБ оперативної пам'яті" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "Сучасний процесор (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "Моніторинг продуктивності в реальному часі" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "Стабільна продуктивність на сучасному обладнанні" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "Шлях резервного копіювання не входить до наданих шляхів доступу: {0}" + +#~ msgid "Build with" +#~ msgstr "Створено за допомогою" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "Не вдалося скопіювати каталог бази даних: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "Не вдалося створити директорію для резервних копій: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "Не вдалося оцінити символічні посилання: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "Не вдалося відновити файли Nginx UI: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "Не вдалося записати в zip-буфер: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "Не вдалося перевірити хеш: цілісність файлу порушена" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "Доступ до сховища S3 заборонено: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "Тест підключення S3 не вдався: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "Облікові дані S3 недійсні: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "Кінцева точка S3 недійсна: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "Шлях зберігання не входить до наданих шляхів доступу: {0}" + +#~ msgid "files" +#~ msgstr "файли" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "Індексація журналів, будь ласка, зачекайте..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "Завантаження даних панелі керування..." + +#~ msgid "Today" +#~ msgstr "Сьогодні" + +#~ msgid "Data refreshed successfully" +#~ msgstr "Дані успішно оновлено" + +#~ msgid "Failed to refresh data" +#~ msgstr "Не вдалося оновити дані" + +#~ msgid "Log File:" +#~ msgstr "Файл журналу:" + +#~ msgid "Log path" +#~ msgstr "Шлях до журналу" + +#~ msgid "Index Size" +#~ msgstr "Розмір індексу" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "Розмір сторінки" + +#~ msgid "Environments" +#~ msgstr "Середовища" + +#~ msgid "Node Group" +#~ msgstr "Група вузлів" + +#~ msgid "Node Groups" +#~ msgstr "Групи вузлів" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "Перевірте, чи існує каталог conf.d" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Підтримка зв’язку з бекендом через протокол Server-Sent Events. Якщо ваш " +#~ "Nginx UI використовується через зворотний проксі Nginx, перейдіть за цим " +#~ "посиланням, щоб написати відповідний конфігураційний файл: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "Якщо залишити порожнім, буде використовуватися стандартний каталог CA." + +#~ msgid "Save error %{msg}" +#~ msgstr "Помилка збереження %{msg}" + +#~ msgid "Main" +#~ msgstr "Головний" + +#~ msgid "Select an action after sync" +#~ msgstr "Виберіть дію після синхронізації" + #~ msgid "Link Start" #~ msgstr "Почати зв’язок" @@ -5980,9 +7850,6 @@ msgstr "Ваші ключі доступу" #~ msgid "Last Backup Error" #~ msgstr "Помилка останнього резервного копіювання" -#~ msgid "Apply" -#~ msgstr "Застосувати" - #~ msgid "Apply bulk action successfully" #~ msgstr "Групову дію успішно застосовано" @@ -6010,10 +7877,6 @@ msgstr "Ваші ключі доступу" #~ msgid "Recovered Successfully" #~ msgstr "Успішно відновлено" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "Всього %{total} елемент" - #~ msgid "View Details" #~ msgstr "Переглянути деталі" diff --git a/app/src/language/vi_VN/app.po b/app/src/language/vi_VN/app.po index b9be8e6f5..03972e09a 100644 --- a/app/src/language/vi_VN/app.po +++ b/app/src/language/vi_VN/app.po @@ -9,92 +9,138 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "[Nginx UI] Người dùng ACME: %{name}, Email: %{email}, Thư mục CA: %{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "[Nginx UI] Đang sao lưu chứng chỉ hiện tại để thu hồi sau này" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] Gia hạn chứng chỉ thành công" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] Hủy chứng chỉ thành công" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "" "[Nginx UI] Chứng chỉ đã được sử dụng cho máy chủ, đang tải lại chứng chỉ " "TLS của máy chủ" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] Tạo máy khách để tạo điều kiện giao tiếp với máy chủ CA" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] Đã dọn dẹp biến môi trường" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] Đã hoàn thành" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] Đã cấp chứng chỉ thành công" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] Đang lấy chứng chỉ" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] Chuẩn bị thu hồi chứng chỉ" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] Đang chuẩn bị cấu hình lego" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] Đang tải lại nginx" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] Đã hoàn tất thu hồi" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] Đang thu hồi chứng chỉ" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] Đang thu hồi chứng chỉ cũ" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] Đang thiết lập nhà cung cấp thử thách DNS01" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] Đang thiết lập biến môi trường" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] Đang thiết lập nhà cung cấp thử thách HTTP01" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] Đang ghi khóa riêng của chứng chỉ vào ổ đĩa" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] Đang ghi chứng chỉ vào ổ đĩa" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} đã được sao chép vào bảng nhớ tạm" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* Bao gồm các nút từ nhóm %{groupName} và các nút được chọn thủ công" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "" +"* Các tệp chỉ mục được lưu trữ trong thư mục \"log-index\" trong đường dẫn " +"cấu hình NGINX UI theo mặc định." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "" +"* Số liệu hiệu suất được đo trên Apple M2 Pro (12 lõi) với 32GB RAM. Hiệu " +"suất thực tế có thể thay đổi tùy theo cấu hình phần cứng của bạn." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "%{start}-%{end} trong %{total} mục" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "Tối thiểu 1 lõi" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "Tối thiểu 1GB RAM" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "Khuyên dùng 2+ lõi" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "Thống kê UV/PV 24 giờ" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "2fa" @@ -103,11 +149,15 @@ msgstr "2fa" msgid "2FA Settings" msgstr "Cài đặt 2FA" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "Khuyến nghị RAM 4GB trở lên" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "Tác giả" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "Nhật ký truy cập" @@ -116,30 +166,28 @@ msgid "Access log path not exist" msgstr "Đường dẫn nhật ký truy cập không tồn tại" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "Log truy cập" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "Người dùng ACME" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "Hành động" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "Hành động" @@ -154,15 +202,15 @@ msgid "Actual worker to configured ratio" msgstr "Tỷ lệ công nhân thực tế so với cấu hình" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "Thêm" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "Thêm khóa truy cập" @@ -176,10 +224,14 @@ msgstr "Thêm cấu hình" msgid "Add Directive Below" msgstr "Thêm Directive" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "Thêm tên miền" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "Thêm tiêu đề" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -193,15 +245,15 @@ msgstr "Thêm máy chủ" msgid "Add Site" msgstr "Thêm Website" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "Thêm luồng" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "Thêm upstream" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "Đã thêm thành công" @@ -209,25 +261,51 @@ msgstr "Đã thêm thành công" msgid "Additional" msgstr "Bổ sung" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "Nâng cao" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "Đã bật lập chỉ mục nâng cao nhưng không thể bắt đầu xây dựng lại" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "Đã bật lập chỉ mục nâng cao thành công" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "" +"Các tính năng lập chỉ mục nhật ký nâng cao là miễn phí và mã nguồn mở cho " +"tất cả người dùng" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "Hệ thống phân bổ bộ nhớ nâng cao" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "Tìm kiếm & lọc nâng cao" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "Cài đặt nâng cao" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "Sau đó, làm mới trang này và nhấp vào thêm khóa truy cập một lần nữa." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "Tất cả" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "Tất cả các thành phần" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "Tất cả mã khôi phục đã được sử dụng" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." @@ -235,6 +313,28 @@ msgstr "" "Tất cả các tên miền phụ được chọn phải thuộc cùng một Nhà cung cấp DNS, nếu " "không, việc xin cấp chứng chỉ sẽ thất bại." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "" +"Ngoài ra, nếu bạn không thể tải xuống cơ sở dữ liệu, bạn có thể đặt thủ " +"công tệp GeoLite2-City.mmdb vào cùng thư mục với app.ini." + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "Dịch vụ phân tích không khả dụng" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "Bất kỳ" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "" +"Bất kỳ địa chỉ IP có thể truy cập nào đều có thể được sử dụng với các cơ " +"quan cấp chứng chỉ riêng tư" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "URL Cơ sở API" @@ -255,36 +355,40 @@ msgstr "Mã API" msgid "API Type" msgstr "Loại API" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "Ứng dụng" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "Áp dụng" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "Kiến trúc" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "Bạn có chắc chắn muốn xóa IP bị cấm này ngay lập tức không?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "Bạn có chắc chắn muốn xóa ngay lập tức khóa truy cập này không?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "Bạn có chắc chắn muốn tạo mã khôi phục mới không?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "Bạn có chắc chắn muốn đặt lại xác thực hai yếu tố không?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "Bạn có chắc chắn muốn xóa tất cả thông báo không?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "Bạn có chắc chắn muốn xóa lịch sử trò chuyện không?" @@ -292,16 +396,16 @@ msgstr "Bạn có chắc chắn muốn xóa lịch sử trò chuyện không?" msgid "Are you sure you want to delete permanently?" msgstr "Bạn có chắc chắn muốn xóa vĩnh viễn không?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "Bạn có chắc chắn muốn xóa không?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "Bạn có chắc chắn muốn tải lại Nginx trên các nút đồng bộ sau không?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "Bạn chắc chắn muốn xoá directive này ?" @@ -313,7 +417,7 @@ msgstr "Bạn có chắc chắn muốn xóa mục này không?" msgid "Are you sure you want to remove this location?" msgstr "Bạn có chắc chắn muốn xóa vị trí này không?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "Bạn có chắc chắn muốn khởi động lại Nginx trên các nút đồng bộ sau không?" @@ -321,23 +425,27 @@ msgstr "Bạn có chắc chắn muốn khởi động lại Nginx trên các nú msgid "Are you sure you want to restore?" msgstr "Bạn có chắc chắn muốn khôi phục không?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "Hỏi ChatGPT" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "Tăng dần" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "Trợ lý" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "Ít nhất 20GB dung lượng đĩa trống" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "Cố gắng sửa chữa" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "Nỗ lực" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "Xác thực" @@ -345,12 +453,12 @@ msgstr "Xác thực" msgid "Authenticate with a passkey" msgstr "Xác thực với một cô ấy" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "Cài đặt xác thực" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "Đang xác thực..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "Tác giả" @@ -384,28 +492,27 @@ msgstr "Sao lưu tự động thất bại" msgid "Auto Backup Storage Failed" msgstr "Lưu trữ sao lưu tự động thất bại" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "Tự động làm mới" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "Tự động làm mới đã bị vô hiệu hóa" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "Cập nhật tự động đã được bật" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "Đã tắt tự động gia hạn SSL cho %{name}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "Đã bật tự động gia hạn SSL cho %{name}" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert đang chạy, vui lòng chờ..." @@ -414,16 +521,32 @@ msgstr "AutoCert đang chạy, vui lòng chờ..." msgid "AutoCert is running..." msgstr "AutoCert đang chạy..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "Phát hiện luân chuyển nhật ký tự động" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "Khởi động lại tự động" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "Độ trễ trung bình" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "UV trung bình hàng ngày" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "TB/PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "Quay lại" @@ -435,6 +558,22 @@ msgstr "Trở về trang chủ" msgid "Back to List" msgstr "Quay lại danh sách" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "Backend" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "" +"Đang tiến hành lập chỉ mục nền. Dữ liệu sẽ được tự động cập nhật khi sẵn " +"sàng." + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "Dịch vụ nhật ký nền không khả dụng" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "Sao lưu" @@ -443,7 +582,7 @@ msgstr "Sao lưu" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "Kiểm tra tính toàn vẹn của tập tin sao lưu thất bại, có thể đã bị can thiệp" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "Không tìm thấy tệp sao lưu: {0}" @@ -455,22 +594,18 @@ msgstr "Đã tải xuống bản sao lưu thành công" msgid "Backup Path" msgstr "Đường dẫn sao lưu" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "Đường dẫn sao lưu không tồn tại: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "Đường dẫn sao lưu không phải là thư mục: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "Đường dẫn sao lưu là bắt buộc để sao lưu thư mục tùy chỉnh" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "Đường dẫn sao lưu không nằm trong các đường dẫn truy cập được cấp: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "Lịch trình sao lưu" @@ -493,15 +628,15 @@ msgstr "Tác vụ sao lưu %{backup_name} không thể thực thi, lỗi: %{erro msgid "Backup Type" msgstr "Loại sao lưu" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "Phút Ngưỡng Cấm" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "Danh sách IP bị cấm" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "Bị cấm đến" @@ -513,18 +648,18 @@ msgstr "Bark" msgid "Base information" msgstr "Thông tin" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "Cơ bản" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "Cơ bản" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "Cài đặt cơ bản" @@ -536,7 +671,7 @@ msgstr "Chỉnh sửa hàng loạt" msgid "Batch Modify" msgstr "Chỉnh sửa hàng loạt" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "Nâng cấp hàng loạt" @@ -548,11 +683,28 @@ msgstr "Dưới đây là các mục đã chọn mà bạn muốn sửa hàng lo msgid "Block is nil" msgstr "Khối là nil" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "Xây dựng với" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "Trình duyệt" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "Thống kê trình duyệt" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "" +"Bằng cách kích hoạt lập chỉ mục nâng cao, bạn xác nhận rằng hệ thống của " +"bạn đáp ứng các yêu cầu và hiểu rõ các tác động đến hiệu suất. Điều này sẽ " +"bắt đầu lập chỉ mục các tệp nhật ký hiện có ngay lập tức." -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "Thư mục CA" @@ -560,11 +712,11 @@ msgstr "Thư mục CA" msgid "Cache" msgstr "Bộ nhớ đệm" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "Các mục bộ nhớ đệm không được truy cập trong thời gian này sẽ bị xóa" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "Ngưỡng thời gian xử lý của bộ nạp bộ nhớ đệm" @@ -573,15 +725,15 @@ msgstr "Ngưỡng thời gian xử lý của bộ nạp bộ nhớ đệm" msgid "Cache manager processes" msgstr "Tiến trình quản lý bộ nhớ đệm" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "Ngưỡng thời gian xử lý của trình quản lý bộ nhớ đệm" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "Cài đặt Quản lý Bộ nhớ đệm" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "Đường dẫn bộ nhớ đệm" @@ -590,7 +742,7 @@ msgstr "Đường dẫn bộ nhớ đệm" msgid "Cache Processes" msgstr "Tiến trình bộ nhớ đệm" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "Cấu trúc cấp độ thư mục con của bộ nhớ đệm, ví dụ: 1:2" @@ -607,24 +759,33 @@ msgstr "" "Được tính toán dựa trên worker_processes * worker_connections. Hiệu suất " "thực tế phụ thuộc vào phần cứng, cấu hình và khối lượng công việc" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "Huỷ" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "Không thể truy cập đường dẫn sao lưu {0}: {1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "Không thể truy cập tệp nhật ký" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "Không thể truy cập đường dẫn lưu trữ {0}: {1}" @@ -648,7 +809,7 @@ msgstr "Không thể nhận được dữ liệu hiệu suất ở trạng thái msgid "Cannot remove initial user" msgstr "Không thể xóa người dùng ban đầu" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "Chứng chỉ" @@ -656,6 +817,11 @@ msgstr "Chứng chỉ" msgid "Cert path is not under the nginx conf dir" msgstr "Đường dẫn chứng chỉ không nằm trong thư mục cấu hình nginx" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "chứng chỉ" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "Chứng chỉ %{name} đã hết hạn" @@ -670,6 +836,10 @@ msgstr "Chứng chỉ %{name} sẽ hết hạn sau %{days} ngày" msgid "Certificate %{name} will expire in 1 day" msgstr "Chứng chỉ %{name} sẽ hết hạn trong 1 ngày" +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "Nội dung chứng chỉ và khóa riêng tư không thể để trống" + #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" msgstr "Lỗi giải mã chứng chỉ" @@ -688,6 +858,14 @@ msgstr "Chứng chỉ đã hết hạn" msgid "Certificate Expiring Soon" msgstr "Chứng chỉ sắp hết hạn" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "Tải xuống tệp chứng chỉ thành công" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "Tên chứng chỉ không được để trống" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "Không tìm thấy chứng chỉ: %{error}" @@ -700,8 +878,8 @@ msgstr "Lỗi phân tích chứng chỉ" msgid "Certificate path is empty" msgstr "Đường dẫn chứng chỉ trống" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "Đã xóa chứng chỉ thành công" @@ -717,13 +895,13 @@ msgstr "Gia hạn chứng chỉ thành công" msgid "Certificate revoked successfully" msgstr "Hủy chứng chỉ thành công" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "Trạng thái chứng chỉ" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "Loại chứng chỉ" @@ -732,7 +910,7 @@ msgstr "Loại chứng chỉ" msgid "Certificates" msgstr "Chứng chỉ" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "Danh sách chứng chỉ" @@ -740,7 +918,7 @@ msgstr "Danh sách chứng chỉ" msgid "Challenge error: {0}" msgstr "Lỗi thử thách: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "Phương pháp xác thực" @@ -762,26 +940,33 @@ msgstr[0] "Chứng chỉ đã thay đổi" msgid "Changed Path" msgstr "Đường dẫn đã thay đổi" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "Kênh" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "Trò chuyện" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "Trò chuyện cho %{path}" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "Kiểm tra" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "Kiểm tra lại" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "Kiểm tra favicon" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -814,6 +999,22 @@ msgstr "" "không an toàn và ngăn chặn việc sử dụng tính năng Passkeys và clipboard" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "Kiểm tra xem thư mục conf.d có nằm trong thư mục cấu hình nginx không" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"Kiểm tra xem cơ sở dữ liệu GeoLite2 có sẵn không khi chỉ mục nhật ký được " +"bật. Cơ sở dữ liệu GeoLite2 là cần thiết cho phân tích địa lý IP trong chỉ " +"mục nhật ký. Bạn có thể tải nó từ trang Tùy chọn hoặc đặt tệp " +"GeoLite2-City.mmdb vào cùng thư mục với app.ini một cách thủ công" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -829,15 +1030,15 @@ msgstr "" "định đường dẫn nhật ký truy cập. Tham khảo tài liệu để biết thêm chi tiết: " "https://nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "Kiểm tra xem thư mục cấu hình nginx có tồn tại không" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "Kiểm tra xem tệp cấu hình đầu vào của nginx có tồn tại không" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -853,7 +1054,7 @@ msgstr "" "định đường dẫn nhật ký lỗi. Tham khảo tài liệu để biết thêm chi tiết: " "https://nginxui.com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -867,23 +1068,23 @@ msgstr "" "định đường dẫn PID của Nginx. Tham khảo tài liệu để biết thêm chi tiết: " "https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "Kiểm tra xem đường dẫn sbin của nginx có tồn tại không" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục conf.d không" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục sites-enabled không" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "Kiểm tra xem tệp nginx.conf có bao gồm thư mục streams-enabled không" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" @@ -891,7 +1092,7 @@ msgstr "" "Kiểm tra xem các thư mục sites-available và sites-enabled có nằm trong thư " "mục cấu hình nginx không" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" @@ -899,6 +1100,19 @@ msgstr "" "Kiểm tra xem các thư mục streams-available và streams-enabled có nằm trong " "thư mục cấu hình nginx không" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "Khoảng thời gian kiểm tra (giây)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "Bản đồ Truy cập Trung Quốc" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "Bản đồ Trung Quốc" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "Văn bản mã hóa quá ngắn" @@ -907,13 +1121,13 @@ msgstr "Văn bản mã hóa quá ngắn" msgid "Cleaning environment variables" msgstr "Xoá các biến môi trường" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "Xoá" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "Đã xóa thành công" @@ -931,7 +1145,7 @@ msgstr "Nhấp hoặc kéo thả tệp vào khu vực này để tải lên" msgid "Click or drag folders to this area to upload" msgstr "Nhấp hoặc kéo thư mục vào khu vực này để tải lên" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "Bấm để sao chép" @@ -939,10 +1153,18 @@ msgstr "Bấm để sao chép" msgid "Client Body Buffer Size" msgstr "Kích thước bộ đệm thân máy khách" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "Chứng chỉ khách hàng" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "Kích thước bộ đệm tiêu đề máy khách" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "Khóa khách hàng" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "Kích thước tối đa của phần thân máy khách" @@ -971,6 +1193,14 @@ msgstr "Hoàn thành mã không được bật" msgid "Code Completion Model" msgstr "Mô hình hoàn thành mã" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "Thu gọn" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "Cài đặt cột" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "Lệnh" @@ -979,7 +1209,7 @@ msgstr "Lệnh" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "Lệnh thoát với mã lỗi không mong muốn: {0}, lỗi: {1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -1002,11 +1232,34 @@ msgstr "So sánh đã chọn" msgid "Compare with Current" msgstr "So sánh với hiện tại" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "Lập chỉ mục hoàn chỉnh với khả năng tìm kiếm" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "thành phần" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "Hỗ trợ tệp nhật ký nén" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "Mức nén, 1 là thấp nhất, 9 là cao nhất" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "Tính toán thống kê" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "Thư mục conf.d tồn tại" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Thư mục Conf.d không tồn tại" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "Cấu hình" @@ -1019,22 +1272,30 @@ msgstr "Thư mục cấu hình không tồn tại" msgid "Config entry file not exist" msgstr "Tệp nhập cấu hình không tồn tại" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "Không tìm thấy cấu hình" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "Đường dẫn cấu hình trống" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "Mẫu cấu hình" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "Cấu hình" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "Tệp cấu hình được kiểm tra thành công" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "Tệp cấu hình đã được kiểm tra thành công trong môi trường cát cách ly" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "Lịch sử cấu hình" @@ -1055,11 +1316,20 @@ msgstr "Cấu hình" msgid "Configure SSL" msgstr "Cấu hình SSL" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "Xác nhận xóa" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "Xác nhận mật khẩu mới" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "Yêu cầu xác nhận" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "Đã kết nối" @@ -1067,9 +1337,9 @@ msgstr "Đã kết nối" msgid "Connection error, trying to reconnect..." msgstr "Lỗi kết nối, đang thử kết nối lại..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "Kết nối bị mất, xin vui lòng làm mới trang." +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "Mất kết nối với thiết bị đầu cuối này. Vui lòng làm mới nếu cần." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1079,14 +1349,14 @@ msgstr "Khoảng thời gian chờ kết nối" msgid "Container status unknown" msgstr "Trạng thái container không xác định" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "Nội dung" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "Đã sao chép" @@ -1099,14 +1369,38 @@ msgstr "Đã sao chép!" msgid "Copy" msgstr "Sao chép" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "Sao chép mã" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "Cập nhật core" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "Không thể tìm thấy tên container cũ" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "Không thể tìm thấy container tạm thời" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "Số lượng" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "Quốc gia / Vùng" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "CPU" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "Trạng thái CPU" @@ -1148,10 +1442,10 @@ msgstr "" "tệp sao lưu sẽ tự động được tải xuống máy tính của bạn." #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "Ngày tạo" @@ -1176,11 +1470,15 @@ msgstr "Chứng chỉ" msgid "Cron Expression" msgstr "Biểu thức Cron" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "Tương quan dòng thời gian xuyên file" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "Tài khoản hiện tại đã bật TOTP." -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "Tài khoản hiện tại chưa bật TOTP." @@ -1200,12 +1498,12 @@ msgstr "Mật khẩu hiện tại" msgid "Current usage" msgstr "Mức sử dụng hiện tại" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "Phiên bản hiện tại" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "Tuỳ chỉnh" @@ -1218,14 +1516,18 @@ msgstr "Biểu thức cron tùy chỉnh" msgid "Custom Directory" msgstr "Thư mục tùy chỉnh" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "Tên miền tùy chỉnh" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "Chứng chỉ Tên miền Tùy chỉnh" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "Tiêu đề tùy chỉnh" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1236,6 +1538,10 @@ msgstr "Tùy chỉnh tên nút cục bộ để hiển thị trong chỉ báo m msgid "Daily" msgstr "Hàng ngày" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "Xu hướng truy cập hàng ngày" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "Hàng ngày lúc %{time}" @@ -1243,10 +1549,18 @@ msgstr "Hàng ngày lúc %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "Bảng điều khiển" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "Ngày" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "Phạm vi ngày" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "Ngày trong tháng" @@ -1259,34 +1573,48 @@ msgstr "Ngày trong tuần" msgid "Days" msgstr "Ngày" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "Tệp cơ sở dữ liệu không tìm thấy" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "Giải nén thành công nhưng không thể xóa tệp đã nén: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "Giải mã thất bại" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "Phạm vi mặc định" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "Xác định tên và kích thước vùng bộ nhớ dùng chung, ví dụ proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "Xoá" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "Xóa %{path} trên %{env_name} thất bại" +msgid "Delete %{path} on %{node_name} failed" +msgstr "Xóa %{path} trên %{node_name} thất bại" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "Đã xóa %{path} trên %{env_name} thành công" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "Đã xóa %{path} trên %{node_name} thành công" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "Xóa chứng chỉ" @@ -1306,43 +1634,44 @@ msgstr "Lỗi xóa cấu hình từ xa" msgid "Delete Remote Config Success" msgstr "Xóa cấu hình từ xa thành công" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "Lỗi xóa trang web từ xa" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "Xóa trang web từ xa thành công" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "Lỗi xóa luồng từ xa" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "Xóa luồng từ xa thành công" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "Xóa trang %{name} từ %{node} thất bại" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "Đã xóa trang web %{name} từ %{node} thành công" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "Xoá trang web: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "Xóa luồng %{name} từ %{node} thất bại" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "Đã xóa luồng %{name} từ %{node} thành công" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "Xóa luồng: %{stream_name}" @@ -1358,8 +1687,16 @@ msgstr "Bản demo" msgid "Deploy" msgstr "Triển khai" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "Chế độ triển khai" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "Giảm dần" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "Mô tả" @@ -1375,18 +1712,44 @@ msgstr "Tệp đích: {0} đã tồn tại" msgid "Details" msgstr "Chi tiết" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Dev" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "Phát triển" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "Chế độ phát triển" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "Thiết bị" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "Thống kê thiết bị" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "Loại thiết bị" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "Nội dung tệp tiêu đề trống" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "DingTalk" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "Trực tiếp" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "Directive" @@ -1407,98 +1770,101 @@ msgstr "DirectiveIdx nằm ngoài phạm vi" msgid "Directives" msgstr "Directives" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "Cấp độ thư mục" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "Đường dẫn thư mục để lưu trữ các tệp bộ nhớ đệm" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "Vô hiệu hóa" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "Vô hiệu hóa gia hạn tự động thất bại cho %{name}" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "Lỗi vô hiệu hóa trang từ xa" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "Lỗi tắt bảo trì trang web từ xa" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "Vô hiệu hóa bảo trì trang web từ xa thành công" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "Đã vô hiệu hóa trang web từ xa thành công" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "Lỗi tắt luồng từ xa" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "Vô hiệu hóa luồng từ xa thành công" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "Không thể vô hiệu hóa trang web %{name} từ %{node}" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "Đã vô hiệu hóa trang %{name} từ %{node} thành công" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "Không thể tắt bảo trì trang web %{name} trên %{node}" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "Đã tắt bảo trì trang web %{name} trên %{node} thành công" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "Không thể tắt luồng %{name} từ %{node}" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "Đã vô hiệu hóa luồng %{name} từ %{node} thành công" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "Đã tắt" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "Đã tắt thành công" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "Ngắt kết nối" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "Disk IO" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "Xác thực DNS" @@ -1507,11 +1873,15 @@ msgstr "Xác thực DNS" msgid "DNS Provider" msgstr "Nhà cung cấp DNS" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "Bộ phân giải DNS" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "Không bật tùy chọn này trừ khi bạn chắc chắn cần đến nó." @@ -1519,11 +1889,11 @@ msgstr "Không bật tùy chọn này trừ khi bạn chắc chắn cần đến msgid "Do you want to %{action} this site?" msgstr "Bạn có muốn %{action} trang web này không?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "Bạn có muốn %{action} luồng này không?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "Bạn muốn tắt tự động gia hạn chứng chỉ SSL ?" @@ -1536,7 +1906,7 @@ msgstr "Bạn có muốn bật TLS không?" msgid "Do you want to remove this server?" msgstr "Bạn có muốn xóa máy chủ này không?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "Bạn có muốn xóa upstream này không?" @@ -1544,7 +1914,7 @@ msgstr "Bạn có muốn xóa upstream này không?" msgid "Docker client not initialized" msgstr "Máy khách Docker chưa được khởi tạo" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Ổ cắm Docker tồn tại" @@ -1558,16 +1928,37 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "Tài liệu" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "Số lượng tài liệu" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "Tên miền" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "" "Danh sách tên miền rỗng, hãy thử mở lại chức năng Tạo chứng chỉ tự động cho " "%{config}" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "Tải xuống tệp chứng chỉ" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "Tải xuống hoàn tất" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "Tải xuống thất bại" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "Tải xuống cơ sở dữ liệu GeoLite2" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "Đã có lỗi xảy ra khi tải về phiên bản mới nhất" @@ -1576,12 +1967,19 @@ msgstr "Đã có lỗi xảy ra khi tải về phiên bản mới nhất" msgid "Downloading latest release" msgstr "Đang tải phiên bản mới nhất" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "Thả tệp chứng chỉ vào đây" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "Thả tệp khóa riêng tư vào đây" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "Đã bật chế độ Dry run" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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." @@ -1589,10 +1987,12 @@ msgstr "" "Do chính sách bảo mật của một số trình duyệt, bạn không thể sử dụng passkey " "trên các trang web không phải HTTPS, trừ khi chạy trên localhost." +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "Nhân bản" @@ -1601,21 +2001,33 @@ msgstr "Nhân bản" msgid "Duplicate to local successfully" msgstr "Nhân bản thành công vào bộ nhớ cục bộ" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "Động" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "Quản lý phân đoạn động" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "vd, 0 0 * * * (hàng ngày vào nửa đêm)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "Khóa HMAC EAB" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "ID khóa EAB" + #: src/language/curd.ts:8 msgid "Edit" msgstr "Chỉnh sửa" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "Sửa %{n}" @@ -1632,7 +2044,7 @@ msgstr "Sửa trang web" msgid "Edit Stream" msgstr "Chỉnh sửa luồng" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "Email" @@ -1641,16 +2053,28 @@ msgstr "Email" msgid "Email (*)" msgstr "Email (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "Dòng nhật ký trống" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "bật" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "Bật 2FA thành công" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "Bật lập chỉ mục nâng cao" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "Bật lập chỉ mục nhật ký nâng cao" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "Không thể bật tự động gia hạn SSL cho %{name}" @@ -1674,57 +2098,61 @@ msgstr "Bật HTTP/3" msgid "Enable HTTPS" msgstr "Bật HTTPS" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "Bật lập chỉ mục" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "Bật bộ nhớ đệm proxy" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "Lỗi kích hoạt trang từ xa" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "Lỗi bật bảo trì trang web từ xa" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "Kích hoạt chế độ bảo trì trang web từ xa thành công" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "Kích hoạt trang từ xa thành công" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "Lỗi bật luồng từ xa" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "Bật luồng từ xa thành công" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "Không thể bật chế độ bảo trì cho trang web %{name} trên %{node}" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "Đã bật chế độ bảo trì trang web %{name} trên %{node} thành công" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "Không thể kích hoạt trang web %{name} trên %{node}" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "Đã bật trang web %{name} trên %{node} thành công" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "Không thể bật luồng %{name} trên %{node}" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "Đã bật luồng %{name} trên %{node} thành công" @@ -1736,29 +2164,29 @@ msgstr "Bật module stub_status" msgid "Enable TLS" msgstr "Bật TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "Bật TOTP" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "Đã bật" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "Đã bật" @@ -1770,6 +2198,16 @@ msgstr "Bật hỗ trợ HTTP/2 với khả năng ghép kênh và đẩy dữ li msgid "Enables HTTP/3 support based on QUIC protocol for best performance" msgstr "Bật hỗ trợ HTTP/3 dựa trên giao thức QUIC để có hiệu suất tốt nhất" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "" +"Bật tính năng lập chỉ mục nhật ký nâng cao sẽ tiêu tốn tài nguyên tính toán " +"đáng kể bao gồm CPU và bộ nhớ. Vui lòng đảm bảo hệ thống của bạn đáp ứng " +"các yêu cầu tối thiểu trước khi tiếp tục." + #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" msgstr "Bảo mật trang web với Let's Encrypt" @@ -1778,11 +2216,19 @@ msgstr "Bảo mật trang web với Let's Encrypt" msgid "End" msgstr "Kết thúc" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "Ngày kết thúc" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "Nhập tên miền" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "Nhập địa chỉ IP máy chủ (ví dụ: 203.0.113.1 hoặc 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "Nhập tên miền của bạn" @@ -1794,39 +2240,58 @@ msgstr "Cấu hình môi trường trống" msgid "Environment variables cleaned" msgstr "Đã dọn dẹp biến môi trường" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "Môi trường" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "Lỗi" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "Chi tiết lỗi" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "Lỗi khởi tạo trình xem khác biệt" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "Nhật ký lỗi" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "Đã phát hiện nhật ký lỗi" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "Đường dẫn nhật ký lỗi không tồn tại" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "Log lỗi" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "" +"Nhật ký lỗi không hỗ trợ phân tích có cấu trúc vì chúng chứa các thông báo " +"văn bản tự do." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "Nhận dạng mẫu lỗi" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "Lỗi xử lý nội dung" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "Tập tin nhị phân thực thi đang trống" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "Đường dẫn thực thi" @@ -1842,6 +2307,22 @@ msgstr "Thực hiện mỗi ngày vào lúc %{time}" msgid "Execute on every month on day %{day} at %{time}" msgstr "Thực thi vào mỗi tháng vào ngày %{day} lúc %{time}" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "Mở rộng" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "Hiệu suất dự kiến" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "Mã trạng thái mong đợi" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "Văn bản mong đợi" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1855,12 +2336,36 @@ msgstr "Hết hạn vào: %{date}" msgid "Export Excel" msgstr "Xuất Excel" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "" +"Khóa HMAC Liên kết Tài khoản Bên ngoài (tùy chọn). Nên ở định dạng mã hóa " +"Base64 URL." + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "" +"ID khóa liên kết tài khoản bên ngoài (tùy chọn). Bắt buộc đối với một số " +"nhà cung cấp ACME như ZeroSSL." + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "Container Docker bên ngoài" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "Không tìm thấy cấu hình thông báo bên ngoài" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "Kiểm tra thông báo bên ngoài" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "Thông báo bên ngoài" @@ -1889,15 +2394,15 @@ msgstr "Sao lưu tệp Nginx UI không thành công: {0}" msgid "Failed to build nginx config: {0}" msgstr "Không thể xây dựng cấu hình nginx: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "Không thể tính toán hash: {0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "Không thể tính toán băm Nginx: {0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "Không thể tính toán băm giao diện người dùng Nginx: {0}" @@ -1910,38 +2415,35 @@ msgid "Failed to copy config file: {0}" msgstr "Không thể sao chép tệp cấu hình: {0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "Không thể sao chép thư mục cơ sở dữ liệu: {0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "Không thể sao chép tệp cơ sở dữ liệu: {0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "Không thể sao chép nội dung tệp: {0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "Không thể sao chép thư mục cấu hình Nginx: {0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "Sao chép vào bộ nhớ tạm thất bại" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "Không thể tạo bản sao lưu" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "Không thể tạo thư mục sao lưu: {0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "Không thể tạo tệp sao lưu: {0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "Không thể tạo thư mục: {0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "Không thể tạo tệp: {0}" @@ -1949,19 +2451,19 @@ msgstr "Không thể tạo tệp: {0}" msgid "Failed to create hash info file: {0}" msgstr "Không thể tạo tệp thông tin băm: {0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "Không thể tạo thư mục cha: {0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "Không thể tạo thư mục khôi phục: {0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "Không thể tạo thư mục lưu trữ {0}: {1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "Không thể tạo liên kết tượng trưng: {0}" @@ -1977,48 +2479,64 @@ msgstr "Không thể tạo thư mục tạm thời" msgid "Failed to create temporary subdirectory" msgstr "Không thể tạo thư mục con tạm thời" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "Không thể tạo trình đọc xz: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "Không thể tạo tệp nén ZIP: {0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "Không thể tạo mục ZIP: {0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "Không thể tạo tệp ZIP: {0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "Không thể tạo tiêu đề ZIP: {0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "Thất bại khi giải nén cơ sở dữ liệu GeoLite2: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "Giải mã dữ liệu thất bại: {0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "Giải mã tệp thất bại: {0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "Giải mã thư mục Nginx thất bại: {0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "Không thể giải mã thư mục Nginx UI: {0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "Không thể xóa tất cả các chỉ mục" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "Xóa chứng chỉ không thành công" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "Xóa chứng chỉ từ cơ sở dữ liệu thất bại: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "Không thể xóa chỉ mục tệp" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "Không thể tắt %{msg}" @@ -2026,20 +2544,32 @@ msgstr "Không thể tắt %{msg}" msgid "Failed to disable maintenance mode %{msg}" msgstr "Không thể tắt chế độ bảo trì %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "Tải xuống tệp chứng chỉ thất bại" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "Không thể tải xuống cơ sở dữ liệu GeoLite2: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "Không thể bật %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "Không thể bật lập chỉ mục nâng cao" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "Không thể bật chế độ bảo trì %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "Không thể mã hóa dữ liệu: {0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "Không thể mã hóa tệp: {0}" @@ -2051,10 +2581,6 @@ msgstr "Không thể mã hóa thư mục Nginx: {0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "Không thể mã hóa thư mục Nginx UI: {0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "Không thể đánh giá liên kết tượng trưng: {0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "Không thể thực thi lệnh: {0}" @@ -2063,7 +2589,7 @@ msgstr "Không thể thực thi lệnh: {0}" msgid "Failed to execute template: {0}" msgstr "Không thể thực thi mẫu: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "Không thể giải nén tệp lưu trữ: {0}" @@ -2083,14 +2609,30 @@ msgstr "Không thể truy xuất thông tin chứng chỉ" msgid "Failed to get container id: {0}" msgstr "Không thể lấy ID container: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "Không thể lấy kích thước tệp: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "Không thể lấy trạng thái chỉ mục" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "Không thể lấy cài đặt hiệu suất Nginx" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "Không thể lấy đường dẫn của nginx.conf" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "Không thể lấy dữ liệu hiệu suất" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "Không thể lấy thống kê duy trì" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "Không thể lấy trạng thái stub: {0}" @@ -2107,15 +2649,19 @@ msgstr "Không thể kiểm tra container hiện tại: {0}" msgid "Failed to load history records" msgstr "Không thể tải bản ghi lịch sử" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "Không thể mở tệp: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "Không thể mở tệp nguồn: {0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "Không thể mở mục ZIP: {0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "Không thể mở tệp ZIP: {0}" @@ -2135,15 +2681,23 @@ msgstr "Phân tích mẫu thất bại: {0}" msgid "Failed to pull image: {0}" msgstr "Không thể tải hình ảnh: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "Không thể đọc dữ liệu nén: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "Không thể đọc tệp đã mã hóa: {0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "Không thể đọc tệp" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "Không thể đọc tệp: {0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "Không thể đọc tệp thông tin băm: {0}" @@ -2159,57 +2713,97 @@ msgstr "Không thể đọc đầu ra: {0}" msgid "Failed to read response body: {0}" msgstr "Không thể đọc nội dung phản hồi: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "Không thể đọc liên kết tượng trưng: {0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "Không thể xây dựng lại chỉ mục tệp" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "Không thể xây dựng lại chỉ mục" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "Không thể làm mới trang web" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "Khôi phục cấu hình Nginx thất bại: {0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "Khôi phục tệp giao diện Nginx thất bại: {0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "Không thể thu hồi chứng chỉ" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "Không thể thu hồi chứng chỉ: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "Lưu cấu hình thất bại" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "Không thể lưu tệp đã tải xuống: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "Không thể lưu cấu hình kiểm tra trạng thái" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "Không thể lưu cài đặt hiệu suất Nginx" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "Lưu thứ tự thất bại" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "Gửi tin nhắn kiểm tra thất bại" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "Không thể khởi động container tạm thời: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "Cập nhật trạng thái thất bại" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "Tải lên tệp thất bại" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "Không thể xác minh băm: {0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "Không thể ghi tệp sao lưu: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "Không thể ghi dữ liệu đã giải nén: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "Không thể ghi tệp đã giải mã: {0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "Không thể ghi tệp đã mã hóa: {0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "Không thể ghi tệp khóa bảo mật: {0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "Không thể ghi vào bộ đệm zip: {0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "Tính năng" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2223,6 +2817,10 @@ msgstr "Tệp tin" msgid "File exists" msgstr "Tệp tin đã tồn tại" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "Đã bắt đầu xây dựng lại chỉ mục tệp thành công cho %{path}" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "Không tìm thấy tệp tin" @@ -2231,19 +2829,35 @@ msgstr "Không tìm thấy tệp tin" msgid "File or directory not found: {0}" msgstr "Không tìm thấy tệp hoặc thư mục: {0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "Đường dẫn tệp là bắt buộc" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "Kích thước tệp không được vượt quá 5MB" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "Tải lên tệp thành công" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "Tên tệp trống" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "Lọc" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "Lọc nội dung nhật ký" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "Đã hoàn thành" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "Xem lần đầu" @@ -2255,7 +2869,11 @@ msgstr "thư mục" msgid "Folder" msgstr "Thư mục" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "Theo dõi chuyển hướng" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2272,6 +2890,32 @@ msgstr "Dành cho người dùng Trung Quốc" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "Dành cho người dùng Trung Quốc: https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "Để sử dụng thương mại hoặc chuyên nghiệp, vui lòng liên hệ" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "" +"Đối với nhật ký lỗi, vui lòng sử dụng Trình xem Nhật ký Thô để có trải " +"nghiệm xem tốt hơn." + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "" +"Đối với cấu hình chứng chỉ dựa trên IP, chỉ phương thức thử thách HTTP-01 " +"được hỗ trợ. Thử thách DNS-01 không tương thích với chứng chỉ dựa trên IP." + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "" +"Đối với chứng chỉ dựa trên IP, vui lòng chỉ định địa chỉ IP của máy chủ sẽ " +"được đưa vào chứng chỉ." + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "Phân tích biểu mẫu thất bại" @@ -2292,6 +2936,22 @@ msgstr "Định dạng: phút giờ ngày tháng thứ_trong_tuần" msgid "Friday" msgstr "Thứ Sáu" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "Từ nhật ký đã lập chỉ mục" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "Giao diện người dùng" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "Tìm kiếm toàn văn" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "Hỗ trợ tìm kiếm toàn văn" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "Chứng chỉ chung" @@ -2300,16 +2960,16 @@ msgstr "Chứng chỉ chung" msgid "Generate" msgstr "Tạo" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "Tạo mã khôi phục mới" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "Tạo mã khôi phục" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "Tạo mã khôi phục thành công" @@ -2317,6 +2977,39 @@ msgstr "Tạo mã khôi phục thành công" msgid "Generating private key for registering account" msgstr "Tạo khóa riêng để đăng ký tài khoản" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "Cơ sở dữ liệu GeoLite2" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "Cơ sở dữ liệu GeoLite2 có sẵn" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "Cơ sở dữ liệu GeoLite2 đã được cài đặt" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "Cơ sở dữ liệu GeoLite2 không tìm thấy tại {0}" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "" +"Cơ sở dữ liệu GeoLite2 không tìm thấy tại {0}. Việc lập chỉ mục nhật ký yêu " +"cầu cơ sở dữ liệu GeoLite2 để phân tích địa lý IP" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "Cần có cơ sở dữ liệu GeoLite2" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "Lỗi khi lấy người dùng ACME: {0}" @@ -2329,8 +3022,7 @@ msgstr "Không thể lấy dữ liệu" msgid "Get dns credential error: {0}" msgstr "Lỗi khi lấy thông tin xác thực DNS: {0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "Lỗi lấy thông tin phát hành" @@ -2342,10 +3034,39 @@ msgstr "Đang lấy chứng chỉ, vui lòng đợi..." msgid "Github Proxy" msgstr "Proxy Github" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "Bản đồ Truy cập Toàn cầu" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "Bản đồ Thế giới" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "Đi đến Trình xem Nhật ký Thô" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "" +"Kiểm tra sức khỏe gRPC yêu cầu máy chủ triển khai dịch vụ kiểm tra sức khỏe " +"gRPC (grpc.health.v1.Health)." + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "" +"gRPCS sử dụng mã hóa TLS. Máy chủ phải triển khai dịch vụ kiểm tra sức khỏe " +"gRPC. Để kiểm tra, xác thực SSL bị vô hiệu hóa theo mặc định." + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "Nén GZIP" @@ -2358,25 +3079,51 @@ msgstr "Mức độ nén GZIP" msgid "GZIP Min Length" msgstr "Độ dài tối thiểu GZIP" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "Xác minh hash thất bại: tính toàn vẹn của tệp bị xâm phạm" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "Kiểm tra sức khỏe" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "Cấu hình kiểm tra trạng thái" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "Đã lưu cấu hình kiểm tra trạng thái" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "Cấu hình kiểm tra sức khỏe đã được lưu thành công" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "Trạng thái sức khỏe" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "Ẩn" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "Ẩn trợ lý" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "Cao" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "Giá trị cao hơn có nghĩa là tái sử dụng kết nối tốt hơn" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "Lịch sử" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "Trang chủ" @@ -2385,10 +3132,11 @@ msgid "Host" msgstr "Máy chủ" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "Giờ" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2396,7 +3144,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "Cổng thử thách HTTP" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "Phương thức HTTP" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2404,15 +3156,15 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "Giao thức HTTPS" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "Số ICP" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "Nếu để trống, thư mục CA mặc định sẽ được sử dụng." - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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." @@ -2420,17 +3172,25 @@ msgstr "" "Nếu số lần đăng nhập thất bại từ một IP đạt đến số lần thử tối đa trong " "khoảng thời gian ngưỡng cấm, IP đó sẽ bị cấm trong một khoảng thời gian." -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "Nếu bạn muốn tự động thu hồi chứng chỉ cũ, vui lòng bật tùy chọn này." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "" +"Nếu bạn muốn thay đổi vị trí lưu trữ, bạn có thể đặt `IndexPath` của phần " +"`nginx_log` trong cấu hình giao diện Nginx." + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "Nếu trình duyệt của bạn hỗ trợ WebAuthn Passkey, một hộp thoại sẽ xuất hiện." -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2442,12 +3202,12 @@ msgstr "" msgid "Import" msgstr "Nhập" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "Nhập chứng chỉ" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "Thời gian không hoạt động" @@ -2459,7 +3219,46 @@ msgstr "" "Bao gồm quá trình chính, quá trình worker, quá trình cache và các quá trình " "Nginx khác" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "Quét chỉ mục tăng dần" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "Đã bắt đầu xây dựng lại chỉ mục và thống kê thành công" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "Lập chỉ mục thất bại" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "Lập chỉ mục thất bại, vui lòng thử xây dựng lại" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "Đã khởi động tái lập chỉ mục" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "Trạng thái chỉ mục" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "Đã lập chỉ mục" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "Đang lập chỉ mục" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "Đang lập chỉ mục nhật ký..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "Đang lập chỉ mục..." @@ -2467,10 +3266,14 @@ msgstr "Đang lập chỉ mục..." msgid "Indicator" msgstr "Chỉ số" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "Thông tin" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "Người dùng khởi tạo không tồn tại" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "Không thể khởi tạo trình nâng cấp" @@ -2479,7 +3282,7 @@ 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/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "Nhập mã từ ứng dụng:" @@ -2494,7 +3297,7 @@ msgstr "Bỏ qua xác minh không an toàn" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "Cài đặt" @@ -2522,27 +3325,36 @@ msgstr "" msgid "Interval" msgstr "Khoảng thời gian" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "Không hợp lệ" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "Định dạng AES IV không hợp lệ: {0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "Định dạng khóa AES không hợp lệ: {0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "Định dạng chứng chỉ không hợp lệ" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "Loại yêu cầu không hợp lệ" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "SHA cam kết không hợp lệ" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "Đối tượng tệp không hợp lệ" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "Đường dẫn tệp không hợp lệ: {0}" @@ -2555,6 +3367,10 @@ msgstr "Tên tệp không hợp lệ" msgid "Invalid folder name" msgstr "Tên thư mục không hợp lệ" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "ID thông báo không hợp lệ" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "Cấu hình thông báo không hợp lệ" @@ -2563,7 +3379,7 @@ msgstr "Cấu hình thông báo không hợp lệ" msgid "Invalid otp code" msgstr "Mã OTP không hợp lệ" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "Đệm không hợp lệ trong dữ liệu đã giải mã" @@ -2571,10 +3387,15 @@ msgstr "Đệm không hợp lệ trong dữ liệu đã giải mã" msgid "Invalid passcode or recovery code" msgstr "Mã xác thực hoặc mã khôi phục không hợp lệ" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "Đường dẫn không hợp lệ: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "Định dạng khóa riêng không hợp lệ" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "Mã khôi phục không hợp lệ" @@ -2583,19 +3404,41 @@ msgstr "Mã khôi phục không hợp lệ" msgid "Invalid request format" msgstr "Định dạng yêu cầu không hợp lệ" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "Định dạng mã bảo mật không hợp lệ" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "ID cuộc trò chuyện Telegram không hợp lệ: không thể là số không" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "Định dạng dấu thời gian không hợp lệ" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "Loại tin nhắn WebSocket không hợp lệ" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "Địa chỉ IP" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "Thông báo chứng chỉ IP" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "Cấp chứng chỉ" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "Cấp chứng chỉ" @@ -2615,7 +3458,7 @@ msgstr "mục" msgid "Jwt Secret" msgstr "Mật khẩu JWT" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2627,12 +3470,12 @@ msgstr "" msgid "Keepalive Timeout" msgstr "Thời gian chờ Keepalive" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "Loại khóa" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "Ngôn ngữ" @@ -2644,6 +3487,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark Tùy chỉnh" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "12 giờ trước" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "14 ngày trước" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "15 phút trước" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "24 giờ qua" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "30 ngày qua" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "30 phút trước" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "4 giờ trước" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "7 ngày trước" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "90 ngày qua" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "Trạng thái sao lưu cuối cùng" @@ -2652,15 +3533,35 @@ msgstr "Trạng thái sao lưu cuối cùng" msgid "Last Backup Time" msgstr "Thời gian sao lưu cuối cùng" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "Lần kiểm tra cuối" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "Kiểm tra lần cuối lúc" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "Giờ qua" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "Lần lập chỉ mục cuối" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "Tháng trước" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "Cập nhật cuối cùng" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "Lần cập nhật cuối:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "Lần sử dụng cuối" @@ -2676,12 +3577,18 @@ msgstr "Bỏ trống để sử dụng địa chỉ mặc định: https://api.o msgid "Leave blank if do not want to modify" msgstr "Để trống nếu không muốn thay đổi" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "Để trống nếu nhà cung cấp ACME của bạn không yêu cầu" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "Để trống nếu bạn không cần cái này." -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "Để trống sẽ không thay đổi bất cứ điều gì" @@ -2689,16 +3596,24 @@ msgstr "Để trống sẽ không thay đổi bất cứ điều gì" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "Không cho phép mã khôi phục cũ vì TOTP chưa được bật" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego tắt hỗ trợ CNAME" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "Giấy phép" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "Phân phối giấy phép" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "Loại giấy phép" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "Liên kết" @@ -2714,32 +3629,32 @@ msgstr "Đang lắng nghe" msgid "Load Average:" msgstr "Tải trung bình:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "Tải từ cài đặt" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "Tải thành công" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "Đã tải" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "Tệp bộ nạp" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "Cài đặt bộ nạp" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "Thời gian nghỉ của bộ nạp" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "Ngưỡng tải" @@ -2747,9 +3662,15 @@ msgstr "Ngưỡng tải" msgid "Loading data..." msgstr "Đang tải dữ liệu..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "Đang tải..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2768,11 +3689,11 @@ msgstr "Location" msgid "Locations" msgstr "Locations" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "Nhật ký" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2783,23 +3704,61 @@ msgstr "" "https://nginxui.com/zh_CN/guide/config-nginx-log.html để biết thêm thông " "tin." -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "Tập tin nhật ký không tồn tại" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "Tập tin nhật ký không phải là tập tin thông thường" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "Tệp nhật ký không có sẵn" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "Tệp nhật ký chưa được lập chỉ mục" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "Bộ lập chỉ mục nhật ký không khả dụng" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "Lập chỉ mục nhật ký hoàn tất! Đang tải dữ liệu cập nhật..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "Dòng nhật ký vượt quá độ dài tối đa" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "Danh sách nhật ký" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "" +"Bộ phân tích nhật ký chưa được khởi tạo; hãy gọi indexer.InitLogParser() " +"trước khi sử dụng" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "Đường dẫn nhật ký không nằm trong danh sách trắng" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "Đăng nhập" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "Đăng nhập thành công" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "Đã đăng xuất" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Logrotate" @@ -2819,9 +3778,20 @@ msgstr "" "chọn này. Bộ lập lịch tác vụ crontab của Nginx UI sẽ thực thi lệnh " "logrotate theo khoảng thời gian bạn đặt (tính bằng phút)." +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "Thấp" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "Nút chính" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "Bảo trì" @@ -2837,7 +3807,7 @@ msgstr "Đã bật chế độ bảo trì thành công" msgid "Make certificate dir error: {0}" msgstr "Lỗi tạo thư mục chứng chỉ: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2852,11 +3822,11 @@ msgstr "" msgid "Manage Configs" msgstr "Quản lý cấu hình" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "Quản lý Website" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "Quản lý luồng" @@ -2868,15 +3838,15 @@ msgstr "Người dùng" msgid "Managed Certificate" msgstr "Chứng chỉ được quản lý" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "Tập tin quản lý" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "Thời gian chờ của trình quản lý" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "Ngưỡng Quản lý" @@ -2902,7 +3872,7 @@ msgstr "Tiến trình chính" msgid "Master Process" msgstr "Tiến trình chính" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "Số lần thử tối đa" @@ -2910,11 +3880,15 @@ msgstr "Số lần thử tối đa" msgid "Max Concurrent Connections" msgstr "Kết nối đồng thời tối đa" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "Chuyển hướng tối đa" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "Yêu cầu tối đa mỗi giây" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "Kích thước bộ nhớ đệm tối đa" @@ -2931,7 +3905,7 @@ msgstr "Số lượng kết nối đồng thời tối đa" msgid "Maximum number of connections per worker process" msgstr "Số kết nối tối đa trên mỗi tiến trình worker" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "Kích thước tối đa của bộ nhớ đệm" @@ -2941,6 +3915,7 @@ msgstr "Số lượng tiến trình worker tối đa:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "Memory" @@ -2948,22 +3923,39 @@ msgstr "Memory" msgid "Memory and Storage" msgstr "Memory và Storage" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "Thiết kế bộ nhớ" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "Mức sử dụng bộ nhớ (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "Phương pháp" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "Tên phương thức" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "Kích thước tệp tối thiểu để nén" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "Dung lượng trống tối thiểu" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "Dung lượng trống tối thiểu trong thư mục bộ nhớ đệm" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "Tối thiểu:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "Phút" @@ -2972,21 +3964,36 @@ msgstr "Phút" msgid "Minutes" msgstr "Phút" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "Gương" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "Mô hình" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "Dịch vụ phân tích hiện đại không khả dụng" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "Dịch vụ lập chỉ mục hiện đại không khả dụng" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "Dịch vụ tìm kiếm hiện đại không khả dụng" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "Đã sửa đổi lúc" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "Sửa đổi" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "Sửa đổi chứng chỉ" @@ -2994,7 +4001,7 @@ msgstr "Sửa đổi chứng chỉ" msgid "Modify Config" msgstr "Sửa cấu hình" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "Mô-đun" @@ -3002,6 +4009,10 @@ msgstr "Mô-đun" msgid "Modules" msgstr "Mô-đun" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "Đã làm mới bộ nhớ đệm mô-đun" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "Thứ Hai" @@ -3014,39 +4025,66 @@ msgstr "Hàng tháng" msgid "Monthly on day %{day} at %{time}" msgstr "Hàng tháng vào ngày %{day} lúc %{time}" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "Trực quan hóa dữ liệu đa chiều" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "Chỉ thị nhiều dòng" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "Phải là địa chỉ IP công cộng có thể truy cập từ internet" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "Không có" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "Tên" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "Tên hoặc nội dung" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "Không gian tên" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "Không gian tên" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "Cần bật module stub_status" @@ -3059,6 +4097,10 @@ msgstr "Mạng" msgid "Network Statistics" msgstr "Thống kê mạng" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "Trò chuyện mới" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" msgstr "Lỗi nhà cung cấp thử thách DNS mới: {0}" @@ -3087,18 +4129,18 @@ msgstr "Đường dẫn mới" msgid "New transport error: {0}" msgstr "Lỗi vận chuyển mới: {0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "Đã có phiên bản mới" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "Tiếp theo" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3110,7 +4152,7 @@ msgstr "Đầu ra của Nginx -T trống" msgid "Nginx Access Log Path" msgstr "Vị trí lưu log truy cập (Access log) của Nginx" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Đường dẫn nhật ký truy cập Nginx tồn tại" @@ -3139,15 +4181,15 @@ msgstr "Cấu hình Nginx không bao gồm sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "Cấu hình Nginx không bao gồm stream-enabled" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "Thư mục cấu hình Nginx chưa được thiết lập" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Thư mục cấu hình Nginx tồn tại" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "Tập tin cấu hình đầu vào Nginx tồn tại" @@ -3155,8 +4197,8 @@ msgstr "Tập tin cấu hình đầu vào Nginx tồn tại" msgid "Nginx configuration has been restored" msgstr "Cấu hình Nginx đã được khôi phục" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Lỗi phân tích cấu hình Nginx" @@ -3185,7 +4227,7 @@ msgstr "Tỷ lệ sử dụng CPU của Nginx" msgid "Nginx Error Log Path" msgstr "Vị trí lưu log lỗi (Error log) của Nginx" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "Đường dẫn nhật ký lỗi Nginx tồn tại" @@ -3194,7 +4236,7 @@ msgid "Nginx error: {0}" msgstr "Lỗi Nginx: {0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3209,7 +4251,7 @@ msgstr "Nginx không chạy trong một container khác" msgid "Nginx is running" msgstr "Nginx đang chạy" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Nhật ký Nginx" @@ -3217,6 +4259,10 @@ msgstr "Nhật ký Nginx" msgid "Nginx Log Directory Whitelist" msgstr "Danh sách trắng thư mục nhật ký Nginx" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Đang lập chỉ mục nhật ký Nginx..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3226,7 +4272,7 @@ msgstr "Mức sử dụng bộ nhớ Nginx" msgid "Nginx PID Path" msgstr "Đường dẫn PID của Nginx" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Đường dẫn PID của Nginx tồn tại" @@ -3239,7 +4285,7 @@ msgstr "Lệnh Tải lại Nginx" msgid "Nginx reload failed: {0}" msgstr "Tải lại Nginx thất bại: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Các thao tác tải lại Nginx đã được gửi đến các nút từ xa" @@ -3251,7 +4297,7 @@ msgstr "Nginx đã tải lại thành công" msgid "Nginx Restart Command" msgstr "Lệnh khởi động lại Nginx" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Các thao tác khởi động lại Nginx đã được gửi đến các nút từ xa" @@ -3259,7 +4305,7 @@ msgstr "Các thao tác khởi động lại Nginx đã được gửi đến cá msgid "Nginx restarted successfully" msgstr "Khởi động lại Nginx thành công" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Đường dẫn sbin của Nginx tồn tại" @@ -3292,41 +4338,73 @@ msgstr "" "Cấu hình Nginx UI đã được khôi phục và sẽ tự động khởi động lại sau vài " "giây." -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf bao gồm thư mục conf.d" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf bao gồm thư mục sites-enabled" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf bao gồm thư mục streams-enabled" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "Không" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "Không hành động" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "Không có chứng chỉ khả dụng" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "Không có dữ liệu địa lý Trung Quốc" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "Không có dữ liệu" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "Không có dữ liệu" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "Không có mục nào trong trang hiện tại" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "Không có dữ liệu địa lý" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "Không tìm thấy nhật ký trong khoảng thời gian đã chọn." + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "Không có nút nào được chọn" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "Không có bản ghi nào được chọn" @@ -3335,24 +4413,33 @@ msgstr "Không có bản ghi nào được chọn" msgid "No servers configured" msgstr "Không có máy chủ nào được cấu hình" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "Không tìm thấy trang web nào" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "" +"Không tìm thấy địa chỉ IP cụ thể trong cấu hình server_name. Vui lòng chỉ " +"định địa chỉ IP máy chủ bên dưới để lấy chứng chỉ." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "Không có dữ liệu nhật ký có cấu trúc nào khả dụng" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "Không có upstream nào được cấu hình" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "Nút" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "Nhóm nút" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "Nhóm nút" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "Phân tích nút thất bại: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3362,7 +4449,12 @@ msgstr "Tên nút" msgid "Node Secret" msgstr "Bí mật nút" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "Trạng thái nút" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "Nút" @@ -3370,26 +4462,38 @@ msgstr "Nút" msgid "Not After" msgstr "Không phải sau khi" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "Văn bản không mong muốn" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "Không tìm thấy" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "Chưa được lập chỉ mục" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "Chưa tải" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "Không hỗ trợ cho chứng chỉ IP" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "Không hợp lệ trước: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "Ghi chú" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." @@ -3397,11 +4501,24 @@ msgstr "" "Lưu ý, nếu tệp cấu hình bao gồm các cấu hình hoặc chứng chỉ khác, vui lòng " "đồng bộ chúng với các nút từ xa trước." +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "" +"Lưu ý: Nếu máy chủ không hỗ trợ gRPC Reflection, việc kiểm tra tình trạng " +"có thể thất bại. Hãy đảm bảo rằng máy chủ gRPC của bạn đã bật Reflection." + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "Không có gì để sao chép" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "Thông báo" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "Thông báo" @@ -3410,15 +4527,19 @@ msgstr "Thông báo" msgid "Notifier not found" msgstr "Không tìm thấy trình thông báo" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "Số lượng tiến trình worker đồng thời, tự động đặt theo số lõi CPU" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "Số lượng tệp được xử lý bởi bộ nạp bộ đệm cùng một lúc" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "Số lượng tệp được xử lý bởi trình quản lý bộ nhớ đệm cùng một lúc" @@ -3433,7 +4554,7 @@ msgstr "Số lượng tiến trình worker" msgid "Obtain cert error: {0}" msgstr "Lỗi khi lấy chứng chỉ: {0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "Nhận chứng chỉ" @@ -3441,11 +4562,11 @@ msgstr "Nhận chứng chỉ" msgid "Obtaining certificate" msgstr "Đang nhận chứng chỉ" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP Must Staple" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." @@ -3454,7 +4575,7 @@ msgstr "" "đầu bằng Firefox." #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "Tắt" @@ -3462,48 +4583,58 @@ msgstr "Tắt" msgid "Official Document" msgstr "Tài liệu chính thức" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "Ngoại tuyến" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "Phân tích GeoIP ngoại tuyến" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "Đồng ý" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "Bật" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa." -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "Trực tuyến" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "Số lượng trực tuyến" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "Chỉ cho phép tệp zip" @@ -3512,23 +4643,46 @@ msgstr "Chỉ cho phép tệp zip" msgid "Open" msgstr "Mở" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "Hạn chế mã nguồn mở" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "Hệ điều hành" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "Thống kê hệ điều hành" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "Hoặc" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "hoặc kéo tệp vào trình soạn thảo bên dưới" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "Hoặc nhập mã bí mật: %{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "Đã lưu thứ tự thành công" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "Tên gốc" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "Hệ điều hành" @@ -3575,11 +4729,15 @@ msgstr "Tham số" msgid "Params Optimization" msgstr "Tối ưu hóa tham số" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "Hiệu suất phân tích" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "Khóa truy cập" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3590,7 +4748,7 @@ msgstr "" "có thể được sử dụng để thay thế mật khẩu hoặc làm phương thức xác thực hai " "yếu tố (2FA)." -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "Mật khẩu" @@ -3619,11 +4777,13 @@ msgstr "Mật khẩu không khớp" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "Đường dẫn" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "Đường dẫn không nằm trong các đường dẫn truy cập được cấp: {0}" @@ -3635,12 +4795,28 @@ msgstr "Đường dẫn: {0} không nằm trong thư mục cấu hình nginx: {1 msgid "Payload resource is nil" msgstr "Tài nguyên tải trọng là nil" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "Giờ cao điểm" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "Đang chờ" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "Phần trăm" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "Thực hiện" @@ -3684,7 +4860,11 @@ msgstr "" "Vui lòng bật module stub_status để nhận thống kê yêu cầu, số lượng kết nối, " "v.v." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "Vui lòng nhập" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." @@ -3692,11 +4872,19 @@ msgstr "" "Vui lòng nhập tên cho khóa truy cập bạn muốn tạo và nhấp vào nút OK bên " "dưới." +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "Vui lòng nhập địa chỉ IPv4 hợp lệ (0-255 mỗi octet)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "Vui lòng nhập địa chỉ IPv4 hoặc IPv6 hợp lệ" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "Vui lòng nhập một phạm vi cổng hợp lệ" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "Vui lòng nhập ít nhất một tên miền" @@ -3713,6 +4901,10 @@ msgstr "Vui lòng nhập mã bảo mật" msgid "Please enter the security token received during backup" msgstr "Vui lòng nhập mã bảo mật nhận được trong quá trình sao lưu" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "Vui lòng nhập địa chỉ IP của máy chủ" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "Vui lòng điền đầy đủ và chính xác tất cả các trường" @@ -3721,13 +4913,13 @@ msgstr "Vui lòng điền đầy đủ và chính xác tất cả các trường msgid "Please fill in required S3 configuration fields" msgstr "Vui lòng điền vào các trường cấu hình S3 bắt buộc" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." msgstr "Vui lòng điền thông tin xác thực API do nhà cung cấp DNS của bạn cung cấp" -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." @@ -3735,7 +4927,7 @@ msgstr "" "Trước tiên, vui lòng thêm thông tin xác thực trong Chứng chỉ > Thông tin " "xác thực DNS, sau đó chọn nhà cung cấp DNS" -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3769,20 +4961,20 @@ msgstr "Vui lòng nhập tên, tên này sẽ được sử dụng làm tên t msgid "Please input your E-mail!" msgstr "Vui lòng nhập E-mail của bạn!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "Vui lòng nhập mật khẩu!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "Vui lòng nhập username!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "Vui lòng đăng nhập." -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "Lưu ý đơn vị cấu hình thời gian bên dưới được tính bằng giây." @@ -3798,25 +4990,31 @@ msgstr "Vui lòng lưu token bảo mật này, bạn sẽ cần nó để khôi msgid "Please select a backup file" msgstr "Vui lòng chọn tệp sao lưu" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "Vui lòng chọn loại thông báo" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "Vui lòng chọn tệp %{type} hợp lệ (%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "Vui lòng chọn ít nhất một mục" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "Vui lòng chọn ít nhất một nút để tải lại Nginx" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "Vui lòng chọn ít nhất một nút để khởi động lại Nginx" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "Vui lòng chọn ít nhất một nút để nâng cấp" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "Vui lòng nhập \"Thu hồi\" để xác nhận" @@ -3829,23 +5027,26 @@ msgstr "Vui lòng nhập chính xác văn bản xác nhận" msgid "Port" msgstr "Cổng" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "Cổng 80 phải được mở để xác thực thử thách HTTP-01" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "Trình quét cổng" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "Hành động sau đồng bộ" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "Bản phát hành trước" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "Cài đặt" @@ -3853,6 +5054,19 @@ msgstr "Cài đặt" msgid "Preparing lego configurations" msgstr "Chuẩn bị cấu hình Lego" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "CA riêng:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "IP riêng (192.168.x.x, 10.x.x.x, 172.16-31.x.x) sẽ thất bại" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "khóa riêng tư" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "Quá trình" @@ -3869,6 +5083,10 @@ msgstr "Thông tin tiến trình" msgid "Processing {count}/{total}" msgstr "Đang xử lý {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "Quy trình sản xuất" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "Cấm thay đổi mật khẩu root trong demo" @@ -3885,6 +5103,10 @@ msgstr "Đội ngũ phát triển" msgid "Protected Directory" msgstr "Thư mục được bảo vệ" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "Giao thức" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3894,7 +5116,7 @@ msgstr "" "Cấu hình giao thức chỉ có hiệu lực khi kết nối trực tiếp. Nếu sử dụng proxy " "ngược, vui lòng cấu hình giao thức riêng trong proxy ngược." -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "Nhà cung cấp" @@ -3902,22 +5124,57 @@ msgstr "Nhà cung cấp" msgid "Provider not found: {0}" msgstr "Không tìm thấy nhà cung cấp: {0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "Tỉnh / Vùng" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "Proxy" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "Chuyển tiếp Proxy" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "Mục tiêu proxy" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "Yêu cầu của CA công cộng:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "Số An ninh Công cộng" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "Lượt xem trang" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "Đang xếp hàng" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "Đang xếp hàng để lập chỉ mục..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "Chọn nhanh" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "Thô" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "Tải lại cơ sở dữ liệu" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "Đọc thư mục thất bại: {0}" @@ -3932,24 +5189,48 @@ msgstr "Yêu cầu đọc" msgid "Reads" msgstr "Đọc" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "Bảng điều khiển phân tích thời gian thực" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "Xây dựng lại" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "Xây dựng lại tất cả chỉ mục" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "Xây dựng lại chỉ mục tệp" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "Xây dựng lại chỉ mục" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "Nhận" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "Kiểm tra lại" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "Đề xuất:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "Khôi phục" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "Mã khôi phục" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -3961,15 +5242,29 @@ msgstr "" msgid "Recursive Nameservers" msgstr "Máy chủ tên đệ quy" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "Người giới thiệu" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "Làm mới" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "Làm mới bộ nhớ đệm mô-đun" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "Tạo lại câu trả lời" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "Đăng ký" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." @@ -3977,19 +5272,19 @@ msgstr "" "Đăng ký người dùng hoặc sử dụng tài khoản này để cấp chứng chỉ thông qua " "proxy HTTP." -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "Đăng ký thất bại" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "Đăng ký khi khởi động" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "Đăng ký khóa truy cập thành công" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "Đăng ký thành công" @@ -3997,28 +5292,30 @@ msgstr "Đăng ký thành công" msgid "Registering user" msgstr "Đăng ký người dùng" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "Trạng thái đăng ký" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "Cài đặt lại" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "Yêu cầu API phát hành không thành công: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "Ghi chú phát hành" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "Tải lại" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "Tải lại Nginx" @@ -4042,7 +5339,7 @@ msgstr "Lỗi tải lại Nginx từ xa" msgid "Reload Remote Nginx Success" msgstr "Tải lại Nginx từ xa thành công" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "Yêu cầu tải lại thất bại, vui lòng kiểm tra kết nối mạng của bạn" @@ -4054,22 +5351,28 @@ msgstr "Đang tải lại" msgid "Reloading nginx" msgstr "Tải lại nginx" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "Từ xa" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "Xóa" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "Xóa thành công" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "Đã xóa thành công" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4078,12 +5381,12 @@ msgid "Rename" msgstr "Đổi tên" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "Đổi tên %{orig_path} thành %{new_path} trên %{env_name} thất bại" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "Đổi tên %{orig_path} thành %{new_path} trên %{node_name} thất bại" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "Đã đổi tên %{orig_path} thành %{new_path} trên %{env_name} thành công" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "Đã đổi tên %{orig_path} thành %{new_path} trên %{node_name} thành công" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4093,37 +5396,37 @@ msgstr "Lỗi đổi tên cấu hình từ xa" msgid "Rename Remote Config Success" msgstr "Đổi tên cấu hình từ xa thành công" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "Lỗi đổi tên trang từ xa" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "Đổi tên trang từ xa thành công" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "Lỗi đổi tên luồng từ xa" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "Đổi tên luồng từ xa thành công" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "Đổi tên trang web %{name} thành %{new_name} trên %{node} thất bại" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "Đã đổi tên trang web %{name} thành %{new_name} trên %{node} thành công" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "Đổi tên luồng %{name} thành %{new_name} trên %{node} thất bại" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "Đổi tên luồng %{name} thành %{new_name} trên %{node} thành công" @@ -4131,7 +5434,7 @@ msgstr "Đổi tên luồng %{name} thành %{new_name} trên %{node} thành côn msgid "Rename successfully" msgstr "Đổi tên thành công" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4141,8 +5444,8 @@ msgstr "Đổi tên thành công" msgid "Renew cert error: {0}" msgstr "Lỗi gia hạn chứng chỉ: {0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "Gia hạn chứng chỉ" @@ -4154,11 +5457,23 @@ msgstr "Lỗi gia hạn chứng chỉ" msgid "Renew Certificate Success" msgstr "Gia hạn chứng chỉ thành công" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "Gia hạn thành công" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "Yêu cầu" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "Nội dung Yêu cầu" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "Đường dẫn yêu cầu" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "Thống kê yêu cầu" @@ -4176,13 +5491,19 @@ msgid "Requests Per Connection" msgstr "Yêu cầu mỗi kết nối" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "Đặt lại" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "Đặt lại 2FA" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "Đặt lại tìm kiếm" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4193,6 +5514,10 @@ msgstr "" "lý, bao gồm tất cả bộ nhớ thư viện dùng chung, sẽ được tính toán lặp lại " "cho nhiều tiến trình" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "Cảnh báo sử dụng tài nguyên" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4202,9 +5527,8 @@ msgstr "Phản hồi" msgid "Restart" msgstr "Khởi động lại" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "Khởi động lại Nginx" @@ -4224,7 +5548,7 @@ msgstr "Lỗi khởi động lại Nginx từ xa" msgid "Restart Remote Nginx Success" msgstr "Khởi động lại Nginx từ xa thành công" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "Yêu cầu khởi động lại thất bại, vui lòng kiểm tra kết nối mạng của bạn" @@ -4263,8 +5587,8 @@ msgstr "Khôi phục phiên bản này" msgid "Restored successfully" msgstr "Khôi phục thành công" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "Thu hồi" @@ -4272,15 +5596,15 @@ msgstr "Thu hồi" msgid "Revoke cert error: {0}" msgstr "Lỗi thu hồi chứng chỉ: {0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "Thu hồi chứng chỉ cũ" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "Thu hồi chứng chỉ này" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." @@ -4288,15 +5612,15 @@ msgstr "" "Việc thu hồi chứng chỉ sẽ ảnh hưởng đến bất kỳ dịch vụ nào hiện đang sử " "dụng nó. Hành động này không thể hoàn tác." -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "Tên hiển thị RP" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "Nguồn gốc RP" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4332,10 +5656,6 @@ msgstr "Yêu cầu ID khóa truy cập S3" msgid "S3 Bucket" msgstr "Thùng S3" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "Truy cập vào bộ chứa S3 bị từ chối: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "Yêu cầu phải có S3 bucket" @@ -4344,7 +5664,7 @@ msgstr "Yêu cầu phải có S3 bucket" msgid "S3 bucket name" msgstr "Tên bucket S3" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "Cấu hình S3 không đầy đủ: thiếu {0}" @@ -4352,27 +5672,15 @@ msgstr "Cấu hình S3 không đầy đủ: thiếu {0}" msgid "S3 connection test failed" msgstr "Kiểm tra kết nối S3 thất bại" -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "Kiểm tra kết nối S3 thất bại: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" msgstr "Kiểm tra kết nối S3 thành công" -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "Thông tin xác thực S3 không hợp lệ: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "Điểm cuối S3" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "Điểm cuối S3 không hợp lệ: {0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "Yêu cầu điểm cuối S3" @@ -4408,7 +5716,7 @@ msgstr "Khóa truy cập bí mật S3" msgid "S3 secret access key is required" msgstr "Yêu cầu khóa truy cập bí mật S3" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" msgstr "Tải lên S3 thất bại: {0}" @@ -4416,17 +5724,19 @@ msgstr "Tải lên S3 thất bại: {0}" msgid "Saturday" msgstr "Thứ Bảy" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "Lưu" @@ -4434,41 +5744,41 @@ msgstr "Lưu" msgid "Save Directive" msgstr "Lưu Directive" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "Đã xảy ra lỗi khi lưu %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "Lưu thứ tự" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "Lỗi lưu trang từ xa" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "Lưu trang từ xa thành công" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "Lỗi lưu luồng từ xa" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "Lưu luồng từ xa thành công" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "Lưu trang %{name} vào %{node} thất bại" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "Đã lưu trang %{name} vào %{node} thành công" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "Lưu luồng %{name} vào %{node} thất bại" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "Đã lưu luồng %{name} vào %{node} thành công" @@ -4476,16 +5786,17 @@ msgstr "Đã lưu luồng %{name} vào %{node} thành công" msgid "Save successful" msgstr "Lưu thành công" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "Lưu thành công" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "Lưu thành công" @@ -4509,13 +5820,13 @@ msgstr "Quét cổng" msgid "Scan Results" msgstr "Kết quả quét" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "Quét mã QR bằng điện thoại di động của bạn để thêm tài khoản vào ứng dụng." -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "Đang quét nhật ký..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "Đang quét" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4530,16 +5841,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "Tìm kiếm" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "Bộ lọc tìm kiếm" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "Tìm kiếm trong nội dung nhật ký..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "Tên mô-đun tìm kiếm" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "Tìm kiếm mô-đun" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "Phạm vi tìm kiếm" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "Tìm kiếm mẫu" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "Mật khẩu đã được sao chép" @@ -4556,13 +5888,21 @@ msgstr "Mã bảo mật" msgid "Security Token Information" msgstr "Thông tin mã bảo mật" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "" +"Chọn thư mục CA được định nghĩa trước hoặc nhập thư mục tùy chỉnh. Để trống " +"để sử dụng thư mục CA mặc định." + #: src/language/curd.ts:31 msgid "Select all" msgstr "Chọn tất cả" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "Chọn hành động sau khi đồng bộ" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "Chọn hoặc nhập URL thư mục CA" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4572,7 +5912,7 @@ msgstr "Đã chọn {count} tệp" msgid "Selector" msgstr "Bộ chọn" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "Tự kiểm tra" @@ -4586,11 +5926,15 @@ msgstr "Tự kiểm tra thất bại, giao diện Nginx có thể không hoạt msgid "Send" msgstr "Gửi" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "Gửi tin nhắn kiểm tra" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "Máy chủ" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "Lỗi máy chủ" @@ -4598,6 +5942,10 @@ msgstr "Lỗi máy chủ" msgid "Server Info" msgstr "Thông tin máy chủ" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "Địa chỉ IP máy chủ" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "Kích thước bảng băm tên máy chủ" @@ -4606,7 +5954,7 @@ msgstr "Kích thước bảng băm tên máy chủ" msgid "Server names hash table size" msgstr "Kích thước bảng băm tên máy chủ" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "không tìm thấy server_name trong directives" @@ -4614,6 +5962,10 @@ msgstr "không tìm thấy server_name trong directives" msgid "ServerIdx out of range" msgstr "ServerIdx nằm ngoài phạm vi" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "Tên dịch vụ" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "Không tìm thấy phiên" @@ -4650,6 +6002,10 @@ msgstr "Đặt biến môi trường" msgid "Setting HTTP01 challenge provider" msgstr "Đang thiết lập nhà cung cấp thử thách HTTP01" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "Cài đặt" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4670,7 +6026,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "Thiết lập giao diện Nginx của bạn" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "Vùng Bộ Nhớ Chia Sẻ" @@ -4678,10 +6034,18 @@ msgstr "Vùng Bộ Nhớ Chia Sẻ" msgid "Show" msgstr "Hiển thị" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "Hiển thị trợ lý" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "Đăng nhập bằng khóa truy cập" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "Xử lý luồng được tối ưu hóa SIMD" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "Single Directive" @@ -4702,11 +6066,23 @@ msgstr "Trang web đang trong chế độ bảo trì" msgid "Site Logs" msgstr "Nhật ký trang web" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "Điều hướng trang web" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "Không tìm thấy trang web" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "Đã khởi động làm mới trang web" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "Trang web" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "Thư mục trang web tồn tại" @@ -4714,6 +6090,14 @@ msgstr "Thư mục trang web tồn tại" msgid "Sites List" msgstr "Danh sách Website" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "" +"Các trang web sẽ xuất hiện ở đây sau khi bạn cấu hình các khối máy chủ " +"nginx với các chỉ thị server_name hợp lệ." + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "Thư mục Sites-available không tồn tại" @@ -4723,6 +6107,8 @@ msgid "Sites-enabled directory not exist" msgstr "Thư mục sites-enabled không tồn tại" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "Kích thước" @@ -4730,19 +6116,36 @@ msgstr "Kích thước" msgid "Skip Installation" msgstr "Bỏ qua cài đặt" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "Thời gian chờ giữa các lần lặp của bộ nạp bộ đệm" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "Thời gian chờ giữa các lần lặp của trình quản lý bộ nhớ đệm" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "Socket" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "Sắp xếp theo" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "IP nguồn" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "Nhà tài trợ" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "Lưu trữ SSD để hiệu suất I/O tốt hơn" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "Nội dung chứng chỉ SSL" @@ -4754,15 +6157,20 @@ msgstr "Tệp chứng chỉ SSL phải nằm trong thư mục cấu hình Nginx: msgid "SSL certificate file not found" msgstr "Không tìm thấy tệp chứng chỉ SSL" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "Nội dung khóa chứng chỉ SSL" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "Đường dẫn khóa chứng chỉ SSL" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "Đường dẫn chứng chỉ SSL" @@ -4787,13 +6195,12 @@ msgstr "Đường dẫn khóa SSL" msgid "SSL key path is required when HTTPS is enabled" msgstr "Đường dẫn khóa SSL là bắt buộc khi bật HTTPS" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "Đăng nhập SSO" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "Ổn định" @@ -4801,33 +6208,49 @@ msgstr "Ổn định" msgid "Start" msgstr "Bắt đầu" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "Ngày bắt đầu" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "Bắt đầu khôi phục" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "Đang bắt đầu tải xuống..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "Tĩnh" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "Trạng thái" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "Cập nhật trạng thái thành công" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "Đã dừng" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "Storage" @@ -4853,10 +6276,6 @@ msgstr "Đường dẫn lưu trữ" msgid "Storage path is required" msgstr "Đường dẫn lưu trữ là bắt buộc" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "Đường dẫn lưu trữ không nằm trong các đường dẫn truy cập được cấp: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4870,7 +6289,7 @@ msgstr "Luồng đã được bật" msgid "Stream not found" msgstr "Không tìm thấy luồng" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "Thư mục Streams tồn tại" @@ -4882,6 +6301,10 @@ msgstr "Thư mục Streams-available không tồn tại" msgid "Streams-enabled directory not exist" msgstr "Thư mục streams-enabled không tồn tại" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "Có cấu trúc" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "Cổng trạng thái stub" @@ -4890,7 +6313,7 @@ msgstr "Cổng trạng thái stub" msgid "Stub_status is not enabled" msgstr "Stub_status chưa được bật" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4901,18 +6324,6 @@ msgstr "Thành công" msgid "Sunday" msgstr "Chủ nhật" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"Hỗ trợ giao tiếp với backend thông qua giao thức Server-Sent Events. Nếu " -"Nginx UI của bạn đang được sử dụng qua proxy ngược Nginx, vui lòng tham " -"khảo liên kết này để viết tệp cấu hình tương ứng: " -"https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -4961,12 +6372,12 @@ msgid "Sync Certificate" msgstr "Đồng bộ chứng chỉ" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "Đồng bộ chứng chỉ %{cert_name} tới %{env_name} thất bại" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "Đồng bộ chứng chỉ %{cert_name} tới %{node_name} thất bại" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "Đồng bộ chứng chỉ %{cert_name} tới %{env_name} thành công" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "Đồng bộ chứng chỉ %{cert_name} tới %{node_name} thành công" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -4977,12 +6388,12 @@ msgid "Sync Certificate Success" msgstr "Đồng bộ chứng chỉ thành công" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "Đồng bộ cấu hình %{config_name} tới %{env_name} thất bại" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "Đồng bộ cấu hình %{config_name} tới %{node_name} thất bại" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "Đồng bộ cấu hình %{config_name} tới %{env_name} thành công" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "Đồng bộ cấu hình %{config_name} với %{node_name} thành công" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -4992,24 +6403,29 @@ msgstr "Lỗi đồng bộ cấu hình" msgid "Sync Config Success" msgstr "Đồng bộ cấu hình thành công" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "Nút đồng bộ" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "Xem trước đồng bộ" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "Chiến lược đồng bộ hóa" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "Đồng bộ tới" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "Đồng bộ hóa" @@ -5026,10 +6442,14 @@ msgstr "Sao lưu hệ thống" msgid "System Check" msgstr "Kiểm tra hệ thống" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "Người dùng ban đầu của hệ thống" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "Yêu cầu hệ thống" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "Khôi phục hệ thống" @@ -5050,19 +6470,45 @@ msgstr "Không tìm thấy tác vụ" msgid "Telegram" msgstr "Telegram" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "Thiết bị đầu cuối" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "Trợ lý Terminal" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "Lệnh Khởi động Terminal" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "Kiểm tra" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "Kiểm tra thất bại: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "Kiểm tra thất bại: Không thể thực hiện kiểm tra tình trạng" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "Gửi tin nhắn kiểm tra thành công" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "Kiểm tra kết nối S3" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "Kiểm tra thành công! Thời gian phản hồi: %{response_time}ms" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " @@ -5072,6 +6518,22 @@ msgstr "" "nếu đã hơn 1 tuần hoặc khoảng thời gian bạn đặt trong cài đặt kể từ lần " "phát hành cuối cùng." +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "" +"Cần có cơ sở dữ liệu GeoLite2 để phân tích địa lý IP ngoại tuyến. Vui lòng " +"tải xuống để kích hoạt tính năng này." + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "" +"Cơ sở dữ liệu GeoLite2 cung cấp thông tin địa lý cho các địa chỉ IP. Điều " +"này được sử dụng để phân tích địa lý ngoại tuyến trong phân tích nhật ký." + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " @@ -5080,11 +6542,11 @@ msgstr "" "Số ICP chỉ được chứa chữ cái, unicode, số, dấu gạch ngang, dấu gạch dài, " "dấu hai chấm và dấu chấm." -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "Đầu vào không phải là Chứng chỉ SSL" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "Đầu vào không phải là Khóa Chứng chỉ SSL" @@ -5123,11 +6585,11 @@ msgstr "" msgid "The parameter of server_name is required" msgstr "Tham số của server_name là bắt buộc" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "Đường dẫn tồn tại, nhưng tệp không phải là chứng chỉ" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "Đường dẫn tồn tại, nhưng tệp không phải là khóa riêng tư" @@ -5139,7 +6601,7 @@ msgstr "" "Số Công an chỉ được chứa chữ cái, unicode, số, dấu gạch ngang, dấu gạch " "dài, dấu hai chấm và dấu chấm." -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " @@ -5149,7 +6611,7 @@ msgstr "" "Để tránh các lỗi tiềm ẩn, vui lòng nâng cấp phiên bản Nginx UI từ xa để " "khớp với phiên bản cục bộ." -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5179,7 +6641,7 @@ msgstr "Số kết nối đồng thời tối đa lý thuyết:" msgid "Theoretical maximum RPS (Requests Per Second):" msgstr "RPS tối đa lý thuyết (Yêu cầu mỗi giây):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " @@ -5189,11 +6651,15 @@ msgstr "" "trường hợp bạn mất mật khẩu và các yếu tố xác thực thứ hai. Nếu bạn không " "thể tìm thấy những mã này, bạn sẽ mất quyền truy cập vào tài khoản." -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "Thành phần bên thứ ba" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "Mục Chứng chỉ tự động này không hợp lệ, vui lòng xóa nó" -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "Chứng chỉ này được quản lý bởi Nginx UI" @@ -5201,9 +6667,9 @@ msgstr "Chứng chỉ này được quản lý bởi Nginx UI" msgid "This directory is protected and cannot be deleted for system safety." msgstr "Thư mục này được bảo vệ và không thể xóa vì lý do an toàn hệ thống." -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "Trường này là bắt buộc" @@ -5229,6 +6695,10 @@ msgid "" "-_./:" msgstr "Trường này chỉ được chứa chữ cái, ký tự Unicode, số và -_./:" +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "Đây là một thông báo thử nghiệm được gửi tại %{Timestamp} từ nginx UI." + #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" "This module provides Nginx request statistics, connection count, etc. data. " @@ -5237,7 +6707,15 @@ msgstr "" "Mô-đun này cung cấp dữ liệu như thống kê yêu cầu Nginx, số lượng kết nối, " "v.v. Sau khi bật, bạn có thể xem thống kê hiệu suất" -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "Tháng này" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "Thông báo này đã bị vô hiệu hóa" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." @@ -5245,6 +6723,26 @@ msgstr "" "Thao tác này sẽ chỉ xóa chứng chỉ khỏi cơ sở dữ liệu. Các tệp chứng chỉ " "trên hệ thống tệp sẽ không bị xóa." +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"Trang web này được cấu hình làm máy chủ mặc định (default_server) cho HTTPS " +"(cổng 443). Chứng chỉ IP yêu cầu hỗ trợ từ Tổ chức cấp chứng chỉ (CA) và có " +"thể không khả dụng với tất cả nhà cung cấp ACME." + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "" +"Trang web này sử dụng tên máy chủ đại diện (_) thường chỉ ra chứng chỉ dựa " +"trên IP. Chứng chỉ IP yêu cầu hỗ trợ từ Tổ chức cấp chứng chỉ (CA) và có " +"thể không khả dụng với tất cả nhà cung cấp ACME." + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5261,6 +6759,19 @@ msgstr "Giá trị này đã được sử dụng" msgid "This will permanently delete the %{type}." msgstr "Hành động này sẽ xóa vĩnh viễn %{type}." +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "" +"Điều này sẽ xây dựng lại toàn bộ chỉ mục nhật ký. Tất cả dữ liệu chỉ mục " +"hiện có sẽ bị xóa và xây dựng lại từ đầu. Việc này có thể mất một thời " +"gian. Tiếp tục?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "Điều này sẽ xây dựng lại dữ liệu chỉ mục cho tệp cụ thể này: %{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5279,13 +6790,13 @@ msgstr "" "Thao tác này sẽ khôi phục các tệp cấu hình và cơ sở dữ liệu. Giao diện " "Nginx sẽ khởi động lại sau khi quá trình khôi phục hoàn tất." -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "" "Thao tác này sẽ nâng cấp hoặc cài đặt lại Nginx UI trên %{nodeNames} lên " "phiên bản %{version}." -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "Hạn chế" @@ -5293,8 +6804,21 @@ msgstr "Hạn chế" msgid "Thursday" msgstr "Thứ Năm" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "Thời gian" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "Phạm vi thời gian" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "Thời gian chờ (giây)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "Mẹo" @@ -5311,11 +6835,15 @@ msgstr "" msgid "Title" msgstr "Tiêu đề" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "để xác nhận xóa" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "Để xác nhận thu hồi, vui lòng nhập \"Thu hồi\" vào trường bên dưới:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 msgid "" "To enable it, you need to install the Google or Microsoft Authenticator app " "on your mobile phone." @@ -5323,7 +6851,7 @@ msgstr "" "Để bật tính năng này, bạn cần cài đặt ứng dụng Google Authenticator hoặc " "Microsoft Authenticator trên điện thoại di động của mình." -#: src/views/preference/components/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5368,15 +6896,41 @@ msgstr "Token trống" msgid "Token is not valid" msgstr "Mã thông báo không hợp lệ" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "Top 10 quốc gia / khu vực" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "Top 10 Tỉnh / Vùng" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "10 URL hàng đầu" + #: src/language/curd.ts:5 msgid "Total" msgstr "Tổng" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "Tổng %{total} mục" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "Tổng số thành phần" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "Tổng số kết nối" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "Tổng số mục" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5390,6 +6944,10 @@ msgstr "Tổng số tiến trình Nginx" msgid "Total Nginx Processes" msgstr "Tổng số tiến trình Nginx" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "Tổng PV" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "Tổng nhận" @@ -5407,11 +6965,15 @@ msgstr "Tổng số yêu cầu / Tổng số kết nối" msgid "Total Send" msgstr "Tổng gửi" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "Tổng UV" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." @@ -5419,25 +6981,41 @@ msgstr "" "TOTP là một phương pháp xác thực hai yếu tố sử dụng thuật toán mật khẩu một " "lần dựa trên thời gian." +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "Lưu lượng" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "Đang dịch lỗi..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "Thùng rác" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "Hãy thử điều chỉnh tiêu chí tìm kiếm hoặc điều hướng đến các trang khác." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "Hãy thử điều chỉnh tiêu chí tìm kiếm hoặc khoảng thời gian." + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "Thứ Ba" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "Yêu cầu xác thực hai yếu tố" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "Loại" @@ -5445,15 +7023,47 @@ msgstr "Loại" msgid "Type %{delete} to confirm" msgstr "Nhập %{delete} để xác nhận" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "Nhập hoặc chọn trình duyệt" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "Nhập hoặc chọn thiết bị" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "Nhập hoặc chọn hệ điều hành" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "Nhập hoặc chọn mã trạng thái" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "Nhập tin nhắn của bạn vào đây..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "Trang duy nhất" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "Không xác định" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "Loại sao lưu không được hỗ trợ: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "Định dạng nhật ký không được hỗ trợ" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "Cập nhật đang được thực hiện" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "Cập nhật mật khẩu" @@ -5462,32 +7072,30 @@ msgstr "Cập nhật mật khẩu" msgid "Update Profile" msgstr "Cập nhật hồ sơ" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "Cập nhật thành công" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "Ngày cập nhật" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "Cập nhật" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "Nâng cấp Nginx UI trên %{node} thành công 🎉" @@ -5495,11 +7103,22 @@ msgstr "Nâng cấp Nginx UI trên %{node} thành công 🎉" msgid "Upgraded successfully" msgstr "Nâng cấp thành công" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "Bản tóm tắt lõi của trình nâng cấp trống" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "URL tải xuống lõi cập nhật trống" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "Đang cập nhật Nginx UI, vui lòng đợi..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "Tải lên tệp %{type}" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "Tải lên tệp" @@ -5508,19 +7127,29 @@ msgstr "Tải lên tệp" msgid "Upload Folders" msgstr "Tải lên thư mục" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "Ngược dòng" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Tên Upstream" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "Các cổng Upstream" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "Loại kiểm tra upstream" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "Thời gian hoạt động:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5532,14 +7161,19 @@ msgstr "Sử dụng OTP" msgid "Use recovery code" msgstr "Sử dụng mã khôi phục" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "Sử dụng đường dẫn tạm thời" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "Người dùng" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "Trình duyệt người dùng" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "Người dùng bị cấm" @@ -5556,7 +7190,7 @@ msgstr "Người dùng chưa bật OTP làm 2FA" msgid "User Profile" msgstr "Hồ sơ người dùng" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "Username" @@ -5569,12 +7203,20 @@ msgstr "Username (*)" msgid "Username length cannot exceed 255 characters" msgstr "Độ dài tên người dùng không được vượt quá 255 ký tự" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "Lượt truy cập duy nhất" + #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "Hợp lệ" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "Xác thực chứng chỉ SSL" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "Giá trị" @@ -5584,45 +7226,65 @@ msgstr "Giá trị" msgid "Verify Backup File Integrity" msgstr "Xác minh tính toàn vẹn của tệp sao lưu" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "Xác minh tên máy chủ" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "Xác minh các yêu cầu hệ thống" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "Phiên bản" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "Xem" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "Xem tất cả thông báo" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "Xem trên GitHub" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "Xem mã phục hồi" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "Xem các thành phần bên thứ ba" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "Đã xem" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "Lượt truy cập" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "Quá trình chờ đợi" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "Lưu ý" @@ -5637,7 +7299,21 @@ msgstr "" "có tệp sao lưu hợp lệ và mã bảo mật, đồng thời cẩn thận chọn nội dung cần " "khôi phục." -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"Cảnh báo: Đây có vẻ là một địa chỉ IP riêng. Các tổ chức cấp chứng chỉ công " +"cộng như Let's Encrypt không thể cấp chứng chỉ cho các IP riêng. Hãy sử " +"dụng địa chỉ IP công cộng hoặc cân nhắc sử dụng tổ chức cấp chứng chỉ riêng." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "Chúng tôi không chấp nhận bất kỳ yêu cầu tính năng nào" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." @@ -5645,7 +7321,7 @@ msgstr "" "Chúng tôi sẽ thêm một hoặc nhiều bản ghi TXT để xác minh quyền sở hữu tên " "miền của bạn." -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" @@ -5653,7 +7329,7 @@ msgstr "" "Chúng tôi sẽ xóa cấu hình HTTPChallenge khỏi tệp này và tải lại Nginx. Bạn " "có muốn tiếp tục không?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "WebAuthn" @@ -5661,10 +7337,18 @@ msgstr "WebAuthn" msgid "WebAuthn settings are not configured" msgstr "Cài đặt WebAuthn chưa được cấu hình" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "Lỗi kết nối WebSocket" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket chưa được kết nối, vui lòng chờ kết nối" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "WeCom" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "Thứ Tư" @@ -5677,7 +7361,7 @@ msgstr "Hàng tuần" msgid "Weekly on %{day} at %{time}" msgstr "Hàng tuần vào %{day} lúc %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " @@ -5687,26 +7371,26 @@ msgstr "" "chung, không bật tính năng này trừ khi bạn đang ở trong môi trường phát " "triển và sử dụng Pebble làm CA." -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." +"namespace and the nodes selected below will be synchronized." msgstr "" -"Khi bạn bật/tắt, xóa hoặc lưu trang web này, các nút được đặt trong Nhóm " -"Nút và các nút được chọn bên dưới sẽ được đồng bộ hóa." +"Khi bạn bật/tắt, xóa hoặc lưu trang web này, các nút được đặt trong không " +"gian tên và các nút được chọn bên dưới sẽ được đồng bộ hóa." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." msgstr "Khi bạn tạo mã khôi phục mới, bạn phải tải xuống hoặc in các mã mới." -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "Có sử dụng đường dẫn tạm thời khi ghi các tập tin tạm thời hay không" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "Chứng Chỉ Wildcard" @@ -5725,8 +7409,8 @@ msgstr "Tiến trình công nhân" msgid "Workers" msgstr "Công nhân" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "Không gian làm việc" @@ -5751,16 +7435,18 @@ msgstr "Ghi Private Key vào disk" msgid "Writing certificate to disk" msgstr "Ghi chứng chỉ vào disk" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "Có" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5773,11 +7459,11 @@ msgstr "" msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "Bạn không được phép xóa một tệp bên ngoài đường dẫn cấu hình nginx" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "Bạn đang sử dụng phiên bản mới nhất" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 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" @@ -5789,23 +7475,23 @@ msgstr "Bạn có thể đóng hộp thoại này sau %{countdown} giây" msgid "You can close this dialog now" msgstr "Bạn có thể đóng hộp thoại này ngay bây giờ" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." msgstr "Bạn chưa cấu hình cài đặt WebAuthn, vì vậy không thể thêm khóa truy cập." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "" "Bạn chưa bật xác thực hai yếu tố. Vui lòng bật xác thực hai yếu tố để tạo " "mã khôi phục." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "Bạn chưa tạo mã khôi phục." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." @@ -5813,15 +7499,196 @@ msgstr "" "Mã khôi phục hiện tại của bạn có thể đã lỗi thời và không an toàn. Vui lòng " "tạo mã khôi phục mới càng sớm càng tốt để đảm bảo an toàn." -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "Mã cũ của bạn sẽ không còn hoạt động nữa." -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "Khóa truy cập của bạn" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "Đường ống không cấp phát" + +#~ msgid "in the same directory as" +#~ msgstr "trong cùng thư mục với" + +#~ msgid "Sandbox test successful" +#~ msgstr "Kiểm tra sandbox thành công" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "Đã kiểm tra trong chế độ sandbox cách ly" + +#~ msgid "All" +#~ msgstr "Tất cả" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "Dựa trên thử nghiệm M2 Pro (12 lõi)" + +#~ msgid "CPU Utilization" +#~ msgstr "Mức sử dụng CPU" + +#~ msgid "Indexing Throughput" +#~ msgstr "Thông lượng lập chỉ mục" + +#~ msgid "Memory Efficiency" +#~ msgstr "Hiệu suất bộ nhớ" + +#~ msgid "Performance Impact Notice" +#~ msgstr "Thông báo ảnh hưởng hiệu suất" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "Tối ưu hóa đường ống không cấp phát" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "Hỏi ChatGPT" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "Bản đồ địa lý & thông tin chi tiết" + +#~ msgid "No feature requests accepted." +#~ msgstr "Không chấp nhận yêu cầu tính năng" + +#~ msgid "Time-series trend analysis" +#~ msgstr "Phân tích xu hướng chuỗi thời gian" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "Phân tích User-Agent và trình duyệt" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ lõi (Apple M2 Pro hoặc tương đương Intel)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "RAM 4GB+ để có hiệu suất tối ưu" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "Kích thước lô thích ứng" + +#~ msgid "CPU Architecture" +#~ msgstr "Kiến trúc CPU" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "Phân tích GeoIP và User-Agent" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "Tối thiểu 1GB RAM" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "CPU hiện đại (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "Giám sát hiệu suất thời gian thực" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "Hiệu suất ổn định trên phần cứng hiện đại" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "Đường dẫn sao lưu không nằm trong các đường dẫn truy cập được cấp: {0}" + +#~ msgid "Build with" +#~ msgstr "Xây dựng với" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "Không thể sao chép thư mục cơ sở dữ liệu: {0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "Không thể tạo thư mục sao lưu: {0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "Không thể đánh giá liên kết tượng trưng: {0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "Khôi phục tệp giao diện Nginx thất bại: {0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "Không thể ghi vào bộ đệm zip: {0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "Xác minh hash thất bại: tính toàn vẹn của tệp bị xâm phạm" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "Truy cập vào bộ chứa S3 bị từ chối: {0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "Kiểm tra kết nối S3 thất bại: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "Thông tin xác thực S3 không hợp lệ: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "Điểm cuối S3 không hợp lệ: {0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "Đường dẫn lưu trữ không nằm trong các đường dẫn truy cập được cấp: {0}" + +#~ msgid "files" +#~ msgstr "tệp" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "Đang lập chỉ mục nhật ký, vui lòng chờ..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "Đang tải dữ liệu bảng điều khiển..." + +#~ msgid "Today" +#~ msgstr "Hôm nay" + +#~ msgid "Data refreshed successfully" +#~ msgstr "Dữ liệu đã được cập nhật thành công" + +#~ msgid "Failed to refresh data" +#~ msgstr "Không thể làm mới dữ liệu" + +#~ msgid "Log File:" +#~ msgstr "Tập tin nhật ký:" + +#~ msgid "Log path" +#~ msgstr "Đường dẫn nhật ký" + +#~ msgid "Index Size" +#~ msgstr "Kích thước chỉ mục" + +#, fuzzy +#~ msgid "File Size" +#~ msgstr "Kích thước trang" + +#~ msgid "Environments" +#~ msgstr "Môi trường" + +#~ msgid "Node Group" +#~ msgstr "Nhóm nút" + +#~ msgid "Node Groups" +#~ msgstr "Nhóm nút" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "Kiểm tra xem thư mục conf.d có tồn tại không" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "Hỗ trợ giao tiếp với backend thông qua giao thức Server-Sent Events. Nếu " +#~ "Nginx UI của bạn đang được sử dụng qua proxy ngược Nginx, vui lòng tham " +#~ "khảo liên kết này để viết tệp cấu hình tương ứng: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "Nếu để trống, thư mục CA mặc định sẽ được sử dụng." + +#~ msgid "Save error %{msg}" +#~ msgstr "Đã xảy ra lỗi khi lưu %{msg}" + +#~ msgid "Main" +#~ msgstr "Chính" + +#~ msgid "Select an action after sync" +#~ msgstr "Chọn hành động sau khi đồng bộ" + #~ msgid "Link Start" #~ msgstr "Liên kết bắt đầu" @@ -5855,9 +7722,6 @@ msgstr "Khóa truy cập của bạn" #~ msgid "Last Backup Error" #~ msgstr "Lỗi sao lưu cuối cùng" -#~ msgid "Apply" -#~ msgstr "Áp dụng" - #~ msgid "Apply bulk action successfully" #~ msgstr "Áp dụng hành động hàng loạt thành công" @@ -5885,10 +7749,6 @@ msgstr "Khóa truy cập của bạn" #~ msgid "Recovered Successfully" #~ msgstr "Khôi phục thành công" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "Tổng %{total} mục" - #~ msgid "View Details" #~ msgstr "Xem chi tiết" @@ -5933,13 +7793,6 @@ msgstr "Khóa truy cập của bạn" #~ msgid "Format error %{msg}" #~ msgstr "Lưu lỗi %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "Không lưu được, đã phát hiện thấy (các) lỗi cú pháp trong cấu hình." - -#, fuzzy -#~ msgid "Access Token" -#~ msgstr "Log truy cập" - #, fuzzy #~ msgid "Server URL" #~ msgstr "Thông tin máy chủ" @@ -5952,10 +7805,6 @@ msgstr "Khóa truy cập của bạn" #~ msgid "Created At" #~ msgstr "Ngày tạo" -#, fuzzy -#~ msgid "Restart Required" -#~ msgstr "Đang khởi động lại" - #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "Triển khai %{conf_name} tới %{node_name} thành công" @@ -6028,10 +7877,6 @@ msgstr "Khóa truy cập của bạn" #~ "the remote Nginx UI to the latest version" #~ msgstr "Nhân bản %{conf_name} thành %{node_name} thành công" -#, fuzzy -#~ msgid "Server Name" -#~ msgstr "Thông tin máy chủ" - #, fuzzy #~ msgid "Enable 2FA" #~ msgstr "Đã bật" diff --git a/app/src/language/zh_CN/app.po b/app/src/language/zh_CN/app.po index c1a0a8f94..dcea6bee9 100644 --- a/app/src/language/zh_CN/app.po +++ b/app/src/language/zh_CN/app.po @@ -15,90 +15,132 @@ msgstr "" "X-Generator: Poedit 3.6\n" "Generated-By: easygettext\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "[Nginx UI] ACME 用户:%{name},邮箱:%{email},CA 目录:%{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "[Nginx UI] 正在备份当前证书以便后续撤销" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] 证书更新成功" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] 证书成功撤销" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "[Nginx UI] 证书已用于服务器,正在重新加载服务器 TLS 证书" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] 正在创建客户端用于与 CA 服务器通信" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] 环境变量已清理" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] 已完成" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] 证书申请成功" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] 正在获取证书" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] 准备撤销证书" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] 正在准备 lego 配置" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] 重新加载 Nginx" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] 吊销完成" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] 正在撤销证书" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] 正在撤销旧证书" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] 正在设置 DNS01 验证提供程序" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] 正在设置环境变量" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] 正在设置 HTTP01 验证提供程序" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] 正在将证书私钥写入磁盘" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] 正在将证书写入磁盘" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} 已复制到剪贴板" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* 包含来自组 %{groupName} 的节点和手动选择的节点" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "* 索引文件默认存储在您的 Nginx UI 配置路径下的 \"log-index\" 目录中。" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "* 性能指标基于 Apple M2 Pro (12 核)和 32GB 内存测得。实际性能可能因您的硬件配置而异。" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "第 %{start}-%{end} 条,共 %{total} 条" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "至少 1 核" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "至少 1GB 内存" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "推荐 2+ 核心" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "24 小时 UV/PV 统计" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "2FA" @@ -107,11 +149,15 @@ msgstr "2FA" msgid "2FA Settings" msgstr "2FA 设置" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "推荐 4GB 以上内存" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "关于" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "访问日志" @@ -120,30 +166,28 @@ msgid "Access log path not exist" msgstr "访问日志路径不存在" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "访问日志" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "ACME 用户" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "操作" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "操作" @@ -158,15 +202,15 @@ msgid "Actual worker to configured ratio" msgstr "实际工作进程与配置比例" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "添加" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "添加通行密钥" @@ -180,10 +224,14 @@ msgstr "添加配置" msgid "Add Directive Below" msgstr "在下面添加指令" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "添加域名" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "添加标头" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -197,15 +245,15 @@ msgstr "添加服务器" msgid "Add Site" msgstr "添加站点" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "添加 Stream" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "添加上游" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "添加成功" @@ -213,30 +261,72 @@ msgstr "添加成功" msgid "Additional" msgstr "额外选项" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "高级模式" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "高级索引已启用但未能开始重建" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "高级索引已成功启用" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "高级日志索引功能对所有用户免费且开源" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "高级内存池系统" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "高级搜索和筛选" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "高级设置" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "之后,请刷新此页面并再次点击添加通行密钥。" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "全部" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "所有组件" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "所有恢复代码已用完" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." msgstr "所有选定的子域名必须属于同一 DNS 提供商,否则证书申请将失败。" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "或者,如果您无法下载数据库,可以手动将 GeoLite2-City.mmdb 文件放置在与 app.ini 相同的目录中。" + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "分析服务不可用" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "任意" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "任何可访问的 IP 地址均可用于私有证书颁发机构" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "API 地址" @@ -251,42 +341,46 @@ msgstr "API 代理" #: src/views/preference/tabs/OpenAISettings.vue:58 msgid "API Token" -msgstr "API令牌" +msgstr "API 令牌" #: src/views/preference/tabs/OpenAISettings.vue:67 msgid "API Type" msgstr "API 类型" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "应用" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "应用" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "架构" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "您确定要立即删除这个被禁用的 IP 吗?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "您确定要立即删除这个 Passkey 吗?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "您确定要生成新的恢复代码吗?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "您确定要重设双重身份验证?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "您确定要清除所有通知吗?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "你确定你要清除聊天记录吗?" @@ -294,16 +388,16 @@ msgstr "你确定你要清除聊天记录吗?" msgid "Are you sure you want to delete permanently?" msgstr "确定要永久删除吗?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "您确定要删除吗?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "你确定要在以下同步节点上重载 Nginx?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "您确定要删除这条指令?" @@ -315,7 +409,7 @@ msgstr "您确定要删除这个项目吗?" msgid "Are you sure you want to remove this location?" msgstr "您确定要删除这个 Location?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "你确定要在以下同步节点上重启 Nginx 吗?" @@ -323,23 +417,27 @@ msgstr "你确定要在以下同步节点上重启 Nginx 吗?" msgid "Are you sure you want to restore?" msgstr "您确定要恢复吗?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "与ChatGPT聊天" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "升序" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "助手" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "至少 20GB 可用磁盘空间" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "尝试修复" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "尝试次数" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "认证" @@ -347,12 +445,12 @@ msgstr "认证" msgid "Authenticate with a passkey" msgstr "通过 Passkey 认证" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "认证设置" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "正在验证..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "作者" @@ -386,28 +484,27 @@ msgstr "自动备份失败" msgid "Auto Backup Storage Failed" msgstr "自动备份存储失败" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "自动刷新" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "自动刷新已禁用" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "自动刷新已启用" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "成功关闭 %{name} 自动续签" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "成功启用 %{name} 自动续签" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert 正在运行,请稍候..." @@ -416,16 +513,32 @@ msgstr "AutoCert 正在运行,请稍候..." msgid "AutoCert is running..." msgstr "AutoCert 正在运行..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "自动日志轮转检测" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "自动重启" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "平均延迟" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "日均 UV" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "平均/PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "返回" @@ -437,6 +550,20 @@ msgstr "返回首页" msgid "Back to List" msgstr "返回列表" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "后端" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "后台索引正在进行中。数据将在准备就绪后自动更新。" + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "后台日志服务不可用" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "备份" @@ -445,7 +572,7 @@ msgstr "备份" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "备份文件完整性检查失败,可能已被篡改" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "未找到备份文件: {0}" @@ -457,22 +584,18 @@ msgstr "已成功下载备份" msgid "Backup Path" msgstr "备份路径" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "备份路径不存在: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "备份路径不是目录: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "自定义目录备份需要备份路径" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "备份路径不在授予的访问路径中: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "备份计划" @@ -493,15 +616,15 @@ msgstr "备份任务 %{backup_name} 执行失败,错误:%{error}" msgid "Backup Type" msgstr "备份类型" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "禁止阈值(分钟)" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "禁止 IP 列表" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "禁用至" @@ -513,18 +636,18 @@ msgstr "Bark" msgid "Base information" msgstr "基本信息" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "基本" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "基本模式" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "基本设置" @@ -536,7 +659,7 @@ msgstr "批量编辑" msgid "Batch Modify" msgstr "批量修改" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "批量升级" @@ -548,11 +671,25 @@ msgstr "以下是您选定的需要批量修改的项目" msgid "Block is nil" msgstr "区块为空" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "构建基于" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "浏览器" -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "浏览器统计" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "启用高级索引即表示您确认系统满足要求并了解性能影响。这将立即开始对现有日志文件进行索引。" + +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "CA 目录" @@ -560,11 +697,11 @@ msgstr "CA 目录" msgid "Cache" msgstr "缓存" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "在此时间内未被访问的缓存项目将被移除" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "缓存加载器处理时间阈值" @@ -573,15 +710,15 @@ msgstr "缓存加载器处理时间阈值" msgid "Cache manager processes" msgstr "缓存管理器进程数" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "缓存管理器处理时间阈值" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "缓存管理器设置" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "缓存路径" @@ -590,7 +727,7 @@ msgstr "缓存路径" msgid "Cache Processes" msgstr "缓存进程数" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "缓存子目录级别结构,如 1:2" @@ -605,24 +742,33 @@ msgid "" "performance depends on hardware, configuration, and workload" msgstr "基于 worker_processes * worker_connections 计算得出。实际性能取决于硬件、配置和工作负载" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "取消" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "无法访问备份路径 {0}:{1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "无法访问日志文件" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "无法访问存储路径 {0}:{1}" @@ -646,7 +792,7 @@ msgstr "在此状态下无法获取性能数据" msgid "Cannot remove initial user" msgstr "不可删除初始用户" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "证书" @@ -654,6 +800,11 @@ msgstr "证书" msgid "Cert path is not under the nginx conf dir" msgstr "证书路径不在 Nginx 配置目录下" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "证书" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "证书 %{name} 已过期" @@ -666,7 +817,11 @@ msgstr "证书 %{name} 将在 %{days} 天后过期" #: src/components/Notification/notifications.ts:58 msgid "Certificate %{name} will expire in 1 day" -msgstr "证书 %{name} 将在1天后过期" +msgstr "证书 %{name} 将在 1 天后过期" + +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "证书内容和私钥内容不能为空" #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" @@ -686,6 +841,14 @@ msgstr "证书已过期" msgid "Certificate Expiring Soon" msgstr "证书即将过期" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "证书文件下载成功" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "证书名称不能为空" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "未找到证书:%{error}" @@ -698,8 +861,8 @@ msgstr "证书解析错误" msgid "Certificate path is empty" msgstr "证书路径为空" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "证书已成功移除" @@ -715,13 +878,13 @@ msgstr "证书更新成功" msgid "Certificate revoked successfully" msgstr "证书撤销成功" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "证书状态" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "证书类型" @@ -730,7 +893,7 @@ msgstr "证书类型" msgid "Certificates" msgstr "证书" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "证书列表" @@ -738,7 +901,7 @@ msgstr "证书列表" msgid "Challenge error: {0}" msgstr "验证错误:{0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "挑战方法" @@ -760,26 +923,33 @@ msgstr[0] "变更证书" msgid "Changed Path" msgstr "变更后的路径" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "通道" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "聊天" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "%{path} 的聊天" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "检查" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "重新检查" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "检查网站图标" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -806,6 +976,20 @@ msgid "" msgstr "检查是否启用了 HTTPS。在本地主机之外使用 HTTP 是不安全的,这也会导致无法使用 Passkey 和剪贴板功能" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "检查 conf.d 目录是否位于 nginx 配置目录下" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"当启用日志索引时,检查 GeoLite2 数据库是否可用。GeoLite2 数据库是日志索引中地理 IP " +"分析所必需的。您可以在偏好设置页面下载它,或者手动将 GeoLite2-City.mmdb 放在与 app.ini 相同的目录中" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -818,15 +1002,15 @@ msgstr "" "获取。如果无法获取或获取的路径未指向有效的现有文件,将报告错误。在这种情况下,您需要修改配置文件以指定访问日志路径。更多详情请参阅文档:https://" "nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "检查 Nginx 配置目录是否存在" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "检查 nginx 配置入口文件是否存在" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -839,7 +1023,7 @@ msgstr "" "获取。如果无法获取或获取的路径未指向有效的现有文件,将报错。此时需要修改配置文件以指定错误日志路径。详情请参阅文档:https://nginxui." "com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -851,34 +1035,47 @@ msgstr "" "获取的。如果无法获取,将会报错。在这种情况下,您需要修改配置文件以指定 Nginx PID " "路径。更多详情请参阅文档:https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "检查 nginx sbin 路径是否存在" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "检查 nginx.conf 是否包含 conf.d 目录" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "检查 nginx.conf 是否包含 sites-enabled 目录" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "检查 nginx.conf 是否包含 streams-enabled 的目录" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" msgstr "检查 sites-available 和 sites-enabled 目录是否位于 Nginx 配置目录下" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" msgstr "检查 Nginx 配置目录下是否有 streams-available 和 streams-enabled 目录" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "检查间隔(秒)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "中国访问地图" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "中国地图" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "密码文本太短" @@ -887,13 +1084,13 @@ msgstr "密码文本太短" msgid "Cleaning environment variables" msgstr "正在清理环境变量" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "清空" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "清除成功" @@ -911,7 +1108,7 @@ msgstr "点击或拖拽文件到此处上传" msgid "Click or drag folders to this area to upload" msgstr "点击或拖拽文件夹到此处上传" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "点击复制" @@ -919,10 +1116,18 @@ msgstr "点击复制" msgid "Client Body Buffer Size" msgstr "客户端请求体缓冲区大小" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "客户端证书" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "客户端请求头缓冲区大小" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "客户端密钥" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "客户端最大请求体大小" @@ -951,6 +1156,14 @@ msgstr "代码补全未启用" msgid "Code Completion Model" msgstr "代码补全模型" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "折叠" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "列设置" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "命令" @@ -959,7 +1172,7 @@ msgstr "命令" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "命令以意外退出代码结束:{0},错误:{1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -982,11 +1195,34 @@ msgstr "比较选定" msgid "Compare with Current" msgstr "与当前的比较" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "具备搜索功能的完整索引" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "组件" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "压缩日志文件支持" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "压缩级别,1 为最低,9 为最高" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "计算统计信息" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "conf.d 目录存在" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Conf.d 目录不存在" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "配置" @@ -999,22 +1235,30 @@ msgstr "配置目录不存在" msgid "Config entry file not exist" msgstr "配置入口文件不存在" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "未找到配置" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "配置路径为空" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "配置模板" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "配置" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "配置文件测试成功" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "配置文件在隔离的沙箱中测试成功" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "配置历史记录" @@ -1035,11 +1279,20 @@ msgstr "配置" msgid "Configure SSL" msgstr "配置 SSL" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "确认删除" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "确认新密码" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "需要确认" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "已连接" @@ -1047,9 +1300,9 @@ msgstr "已连接" msgid "Connection error, trying to reconnect..." msgstr "连接错误,正在尝试重新连接..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "连接中断,请刷新页面。" +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "此终端连接已断开。请根据需要刷新。" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1059,14 +1312,14 @@ msgstr "连接超时期限" msgid "Container status unknown" msgstr "容器状态未知" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "内容" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "已拷贝" @@ -1079,14 +1332,38 @@ msgstr "已拷贝!" msgid "Copy" msgstr "拷贝" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "复制代码" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "核心升级" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "找不到旧容器名称" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "找不到临时容器" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "计数" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "国家 / 地区" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "CPU" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "CPU 状态" @@ -1126,10 +1403,10 @@ msgid "" msgstr "创建系统备份,包括 Nginx 配置和 Nginx UI 设置。备份文件将自动下载到你的电脑。" #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "创建时间" @@ -1154,11 +1431,15 @@ msgstr "凭证" msgid "Cron Expression" msgstr "Cron 表达式" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "跨文件时间线关联" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "当前账户已启用 TOTP 验证。" -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "当前用户未启用 TOTP 验证。" @@ -1178,12 +1459,12 @@ msgstr "当前密码" msgid "Current usage" msgstr "当前用量" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "当前版本" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "自定义" @@ -1196,14 +1477,18 @@ msgstr "自定义 cron 表达式" msgid "Custom Directory" msgstr "自定义目录" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "自定义域名" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "自定义域名证书" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "自定义标头" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1214,6 +1499,10 @@ msgstr "自定义显示在环境指示器中的本地服务器名称。" msgid "Daily" msgstr "每日" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "每日访问趋势" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "每天 %{time}" @@ -1221,10 +1510,18 @@ msgstr "每天 %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "仪表盘" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "日期" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "日期范围" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "月中的某天" @@ -1237,34 +1534,48 @@ msgstr "星期几" msgid "Days" msgstr "天" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "数据库文件未找到" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "解压成功但删除压缩文件失败: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "解密失败" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "默认范围" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "定义共享内存区名称和大小,例如 proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "删除" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "删除 %{env_name} 上的 %{path} 失败" +msgid "Delete %{path} on %{node_name} failed" +msgstr "删除 %{node_name} 上的 %{path} 失败" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "已在 %{env_name} 上成功删除 %{path}" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "在 %{node_name} 上成功删除 %{path}" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "删除证书" @@ -1284,43 +1595,44 @@ msgstr "删除远程配置错误" msgid "Delete Remote Config Success" msgstr "远程配置删除成功" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "删除远程站点错误" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "删除远程站点成功" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "删除远程 Stream 错误" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "删除远程 Stream 成功" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "部署 %{name} 到 %{node} 失败" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "成功从 %{node} 中删除站点 %{name}" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "删除站点: %{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "从 %{node} 删除 Stream %{name} 失败" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "已成功从 %{node} 删除 Stream %{name}" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "删除 Stream: %{stream_name}" @@ -1336,8 +1648,16 @@ msgstr "Demo" msgid "Deploy" msgstr "部署" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "部署模式" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "降序" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "描述" @@ -1353,18 +1673,44 @@ msgstr "目标文件: {0} 已存在" msgid "Details" msgstr "详情" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "开发版" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "开发" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "开发模式" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "设备" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "设备统计" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "设备类型" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "摘要文件内容为空" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "钉钉" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "直接" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "指令" @@ -1385,98 +1731,101 @@ msgstr "指令 index 超出范围" msgid "Directives" msgstr "指令" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "目录层级" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "存储缓存文件的目录路径" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "禁用" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "禁用 %{name} 的自动续期失败" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "禁用远程站点错误" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "禁用远程站点维护错误" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "远程站点维护已成功禁用" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "远程站点禁用成功" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "禁用远程 Stream 错误" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" -msgstr "禁用远程 Stream成功" +msgstr "禁用远程 Stream 成功" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "在 %{node} 上禁用 %{name} 成功" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "在 %{node} 上禁用 %{name} 成功" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" msgstr "停用站点 %{name} 维护 %{node} 失败" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "成功停用站点 %{name} 上 %{node} 的维护功能" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "在 %{node} 中启用 %{name} 失败" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "在 %{node} 上禁用 %{name} 成功" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "禁用" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "禁用成功" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "已断开连接" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "磁盘 IO" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "DNS 凭证" @@ -1485,11 +1834,15 @@ msgstr "DNS 凭证" msgid "DNS Provider" msgstr "DNS 提供商" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "DNS 解析器" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "除非确定需要,否则不要启用该选项。" @@ -1497,11 +1850,11 @@ msgstr "除非确定需要,否则不要启用该选项。" msgid "Do you want to %{action} this site?" msgstr "您想将这个网站%{action}吗?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" msgstr "您要%{action}此流吗?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "你想禁用自动更新证书吗?" @@ -1514,7 +1867,7 @@ msgstr "你想启用 TLS 吗?" msgid "Do you want to remove this server?" msgstr "你想删除这个服务器吗?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "你想删除这个 Upstream 吗?" @@ -1522,7 +1875,7 @@ msgstr "你想删除这个 Upstream 吗?" msgid "Docker client not initialized" msgstr "Docker 客户端未初始化" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Docker Socket 存在" @@ -1536,14 +1889,35 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "文档" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "文档数量" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "域名" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "域名列表为空,请尝试为 %{config} 重新打开证书自动续期" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "下载证书文件" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "下载完成" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "下载失败" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "下载 GeoLite2 数据库" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "下载最新版本错误" @@ -1552,21 +1926,30 @@ msgstr "下载最新版本错误" msgid "Downloading latest release" msgstr "下载最新版本" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "将证书文件拖放到此处" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "将私钥文件拖放到此处" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "试运行模式已启动" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "复制" @@ -1575,21 +1958,33 @@ msgstr "复制" msgid "Duplicate to local successfully" msgstr "成功复制到本地" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "动态" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "动态分片管理" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "例如:0 0 * * *(每天午夜)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "EAB HMAC 密钥" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "EAB 密钥 ID" + #: src/language/curd.ts:8 msgid "Edit" msgstr "编辑" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "编辑 %{n}" @@ -1606,7 +2001,7 @@ msgstr "编辑站点" msgid "Edit Stream" msgstr "编辑 Stream" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "邮箱" @@ -1615,16 +2010,28 @@ msgstr "邮箱" msgid "Email (*)" msgstr "邮箱 (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "空日志行" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "启用" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "二步验证启用成功" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "启用高级索引" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "启用高级日志索引" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "启用 %{name} 自动续签失败" @@ -1648,57 +2055,61 @@ msgstr "启用 HTTP/3" msgid "Enable HTTPS" msgstr "启用 HTTPS" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "启用索引" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "启用代理缓存" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "启用远程站点错误" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "在 %{node} 上启用 %{site} 失败" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "成功启用远程站点维护" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "启用远程站点成功" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "启用远程 Steam 错误" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "启用远程 Stream 成功" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "在 %{node} 中为 %{name} 启用维护模式失败" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" msgstr "在 %{node} 上成功启用站点 %{name} 维护模式" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" msgstr "在 %{node} 中启用 %{name} 失败" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "在 %{node} 上启用 %{name} 成功" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "在 %{node} 中启用 %{name} 失败" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "在 %{node} 上启用 %{name} 成功" @@ -1710,39 +2121,46 @@ msgstr "启用 stub_status 模块" msgid "Enable TLS" msgstr "启用 TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "启用 TOTP" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "启用" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "启用成功" #: src/views/preference/tabs/ServerSettings.vue:52 msgid "Enables HTTP/2 support with multiplexing and server push capabilities" -msgstr "启用HTTP/2支持,具备多路复用和服务器推送能力" +msgstr "启用 HTTP/2 支持,具备多路复用和服务器推送能力" #: src/views/preference/tabs/ServerSettings.vue:56 msgid "Enables HTTP/3 support based on QUIC protocol for best performance" -msgstr "基于QUIC协议启用HTTP/3支持以获得最佳性能" +msgstr "基于 QUIC 协议启用 HTTP/3 支持以获得最佳性能" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "启用高级日志索引将消耗大量计算资源,包括 CPU 和内存。请确保您的系统满足最低要求后再继续。" #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" @@ -1752,11 +2170,19 @@ msgstr "用 Let's Encrypt 对网站进行加密" msgid "End" msgstr "结束" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "结束日期" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "输入域名" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "输入服务器 IP 地址(例如:203.0.113.1 或 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "输入您的域名" @@ -1768,39 +2194,56 @@ msgstr "环境配置为空" msgid "Environment variables cleaned" msgstr "环境变量已清理" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "环境" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "错误" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "错误详情" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "差异查看器初始化出错" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "错误日志" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "检测到错误日志" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "错误日志路径不存在" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "错误日志" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "错误日志不支持结构化分析,因为它们包含自由格式的文本消息。" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "错误模式识别" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "内容处理错误" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "可执行二进制文件为空" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "可执行文件路径" @@ -1816,6 +2259,22 @@ msgstr "每天 %{time} 执行" msgid "Execute on every month on day %{day} at %{time}" msgstr "每月 %{day} 日 %{time} 执行" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "展开" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "预期性能" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "预期状态码" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "预期文本" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1829,12 +2288,32 @@ msgstr "过期时间: %{date}" msgid "Export Excel" msgstr "导出 Excel" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "外部账户绑定 HMAC 密钥(可选)。应为 Base64 URL 编码格式。" + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "外部账户绑定密钥 ID (可选)。某些 ACME 提供商(如 ZeroSSL)需要此信息。" + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "外部 Docker 容器" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "未找到外部通知配置" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "外部通知测试" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "外部通知" @@ -1863,15 +2342,15 @@ msgstr "备份 Nginx UI 文件失败:{0}" msgid "Failed to build nginx config: {0}" msgstr "构建 nginx 配置失败: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "计算哈希值失败:{0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "计算 Nginx 哈希值失败:{0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "计算 Nginx UI 哈希值失败:{0}" @@ -1884,38 +2363,35 @@ msgid "Failed to copy config file: {0}" msgstr "复制配置文件失败:{0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "复制数据库目录失败:{0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "复制数据库文件失败:{0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "复制文件内容失败:{0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "复制 Nginx 配置目录失败:{0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "复制到剪贴板失败" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "创建备份失败" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "创建备份目录失败:{0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "创建备份文件失败:{0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "创建目录失败:{0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "创建文件失败:{0}" @@ -1923,19 +2399,19 @@ msgstr "创建文件失败:{0}" msgid "Failed to create hash info file: {0}" msgstr "创建哈希信息文件失败:{0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "创建父目录失败:{0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "创建还原目录失败:{0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "创建存储目录失败 {0}:{1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "创建符号链接失败:{0}" @@ -1951,48 +2427,64 @@ msgstr "创建临时目录失败" msgid "Failed to create temporary subdirectory" msgstr "创建临时子目录失败" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "创建 xz 读取器失败: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "创建 zip 压缩包失败:{0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "创建 zip 条目失败:{0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "创建压缩文件失败:{0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "创建 zip 头失败:{0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "解压 GeoLite2 数据库失败: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "解密数据失败:{0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "解密文件失败:{0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "解密 Nginx 目录失败:{0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "解密 Nginx UI 目录失败:{0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "删除所有索引失败" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "删除证书失败" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "从数据库中删除证书失败:%{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "删除文件索引失败" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "禁用失败 %{msg}" @@ -2000,20 +2492,32 @@ msgstr "禁用失败 %{msg}" msgid "Failed to disable maintenance mode %{msg}" msgstr "停用维护模式失败 %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "下载证书文件失败" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "下载 GeoLite2 数据库失败: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "启用失败 %{msg}" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "启用高级索引失败" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "启用维护模式失败 %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "加密数据失败:{0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "加密文件失败:{0}" @@ -2025,10 +2529,6 @@ msgstr "加密 Nginx 目录失败:{0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "加密 Nginx UI 目录失败:{0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "符号链接解析失败:{0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "执行命令失败:{0}" @@ -2037,7 +2537,7 @@ msgstr "执行命令失败:{0}" msgid "Failed to execute template: {0}" msgstr "执行模板失败: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "解压缩失败:{0}" @@ -2057,14 +2557,30 @@ msgstr "获取证书信息失败" msgid "Failed to get container id: {0}" msgstr "获取容器 ID 失败: {0}" +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "获取文件大小失败: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "获取索引状态失败" + #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "获取 Nginx 性能参数失败" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "无法获取 nginx.conf 路径" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "获取性能数据失败" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "获取持久化统计信息失败" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "获取存根状态失败: {0}" @@ -2081,15 +2597,19 @@ msgstr "检查当前容器失败:{0}" msgid "Failed to load history records" msgstr "加载历史记录失败" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "打开文件失败: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "打开源文件失败:{0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "打开 zip 条目失败:{0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "打开压缩文件失败:{0}" @@ -2109,15 +2629,23 @@ msgstr "解析模板失败: {0}" msgid "Failed to pull image: {0}" msgstr "拉取镜像失败:{0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "读取压缩数据失败: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "读取加密文件失败:{0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "读取文件失败" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "读取文件失败:{0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "读取哈希信息文件失败:{0}" @@ -2133,57 +2661,97 @@ msgstr "读取输出失败:{0}" msgid "Failed to read response body: {0}" msgstr "读取响应正文失败: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "读取符号链接失败:{0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "重建文件索引失败" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "重建索引失败" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "刷新站点失败" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "恢复 Nginx 配置失败:{0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "恢复 Nginx UI 文件失败:{0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "证书撤销失败" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "撤销证书失败:%{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "保存配置失败" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "保存下载的文件失败: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "保存健康检查配置失败" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "保存 Nginx 性能参数失败" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "保存顺序失败" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "发送测试消息失败" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "启动临时容器失败:{0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "更新状态失败" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "文件上传失败" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "验证哈希值失败:{0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "写入备份文件失败: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "写入解压缩数据失败: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "写入解密文件失败:{0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "写入加密文件失败:{0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "无法写入安全密钥文件:{0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "写入 zip 缓冲区失败:{0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "功能" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2197,6 +2765,10 @@ msgstr "文件" msgid "File exists" msgstr "文件已存在" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "已成功开始为 %{path} 重建文件索引" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "未找到文件" @@ -2205,19 +2777,35 @@ msgstr "未找到文件" msgid "File or directory not found: {0}" msgstr "未找到文件或目录:{0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "文件路径是必需的" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "文件大小不能超过 5MB" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "文件上传成功" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "文件名为空" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "过滤" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "过滤日志内容" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "完成" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "首次查看" @@ -2229,7 +2817,11 @@ msgstr "文件夹" msgid "Folder" msgstr "文件夹" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "跟随重定向" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2244,6 +2836,26 @@ msgstr "中国用户" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "中国用户:https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "如需商业或专业用途,请联系" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "对于错误日志,请使用原始日志查看器以获得更好的查看体验。" + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "对于基于 IP 的证书配置,仅支持 HTTP-01 验证方法。DNS-01 验证与基于 IP 的证书不兼容。" + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "对于基于 IP 的证书,请指定将包含在证书中的服务器 IP 地址。" + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "表单解析失败" @@ -2264,6 +2876,22 @@ msgstr "格式:分钟 小时 日 月 星期" msgid "Friday" msgstr "星期五" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "来自已索引的日志" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "前端" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "全文搜索" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "全文搜索支持" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "普通证书" @@ -2272,16 +2900,16 @@ msgstr "普通证书" msgid "Generate" msgstr "生成" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "生成新的恢复代码" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "生成恢复代码" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "成功生成恢复代码" @@ -2289,6 +2917,37 @@ msgstr "成功生成恢复代码" msgid "Generating private key for registering account" msgstr "正在生成私钥用于注册账户" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "GeoLite2 数据库" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "GeoLite2 数据库可用" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "GeoLite2 数据库已安装" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "在 {0} 未找到 GeoLite2 数据库" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "未在 {0} 找到 GeoLite2 数据库。日志索引需要 GeoLite2 数据库进行地理 IP 分析" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "需要 GeoLite2 数据库" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "获取 ACME 用户错误: {0}" @@ -2301,8 +2960,7 @@ msgstr "获取数据失败" msgid "Get dns credential error: {0}" msgstr "获取 DNS 凭证错误:{0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "获取发布信息错误" @@ -2314,13 +2972,38 @@ msgstr "正在获取证书,请稍等..." msgid "Github Proxy" msgstr "Github 代理" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "全球访问地图" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "全球地图" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "转到原始日志查看器" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "gRPC 健康检查要求服务器实现 gRPC 健康检查服务(grpc.health.v1.Health)。" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "gRPCS 使用 TLS 加密。服务器必须实现 gRPC 健康检查服务。出于测试目的,默认情况下禁用 SSL 验证。" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" -msgstr "GZIP压缩" +msgstr "GZIP 压缩" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87 msgid "GZIP Compression Level" @@ -2330,25 +3013,51 @@ msgstr "GZIP 压缩级别" msgid "GZIP Min Length" msgstr "GZIP 最小长度" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "哈希验证失败:文件完整性受损" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "健康检查" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "健康检查配置" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "健康检查配置已保存" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "健康检查配置保存成功" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "健康状态" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "隐藏" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "隐藏助手" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "高" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "更高的值意味着更好的连接再利用" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "历史" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "首页" @@ -2357,10 +3066,11 @@ msgid "Host" msgstr "主机" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "小时" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2368,7 +3078,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "HTTP Challenge 监听端口" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "HTTP 方法" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2376,31 +3090,37 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "HTTPS 协议" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" -msgstr "ICP备案号" - -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "如果留空,则使用默认 CA Dir。" +msgstr "ICP 备案号" -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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 "如果某个 IP 的登录失败次数达到禁用阈值分钟内的最大尝试次数,该 IP 将被禁止登录一段时间。" -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "如果要自动撤销旧证书,请启用此选项。" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "如果要更改存储位置,可以在 Nginx UI 配置中设置 `nginx_log` 部分的 `IndexPath`。" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "如果您的浏览器支持 WebAuthn Passkey,则会出现一个对话框。" -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2410,12 +3130,12 @@ msgstr "如果您的域名有 CNAME 记录且无法获取证书,则需要启 msgid "Import" msgstr "导入" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "导入证书" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "非活动时间" @@ -2425,7 +3145,46 @@ msgid "" "processes" msgstr "包括主进程、工作进程、缓存进程和其他 Nginx 进程" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "增量索引扫描" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "索引和统计重建已成功启动" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "索引失败" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "索引失败,请尝试重新构建" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "索引重建已启动" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "索引状态" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "已索引" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "索引中" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "正在索引日志..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "索引中..." @@ -2433,10 +3192,14 @@ msgstr "索引中..." msgid "Indicator" msgstr "指示器" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "信息" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "初始用户不存在" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "初始化核心升级程序错误" @@ -2445,7 +3208,7 @@ msgstr "初始化核心升级程序错误" msgid "Initialing core upgrader" msgstr "初始化核心升级器" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "输入应用程序中的代码:" @@ -2460,7 +3223,7 @@ msgstr "跳过证书认证" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "安装" @@ -2486,27 +3249,36 @@ msgstr "系统启动 10 分钟后不允许安装,请重启 Nginx UI。" msgid "Interval" msgstr "间隔" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "无效的" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "AES IV 格式无效:{0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "AES 密钥格式无效:{0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "证书格式无效" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "无效的声明类型" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "无效的提交 SHA" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "无效文件对象" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "文件路径无效:{0}" @@ -2519,6 +3291,10 @@ msgstr "文件名无效" msgid "Invalid folder name" msgstr "无效文件夹名" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "无效的通知 ID" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "通知配置无效" @@ -2527,7 +3303,7 @@ msgstr "通知配置无效" msgid "Invalid otp code" msgstr "无效的 OTP 代码" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "解密数据中的无效填充" @@ -2535,10 +3311,15 @@ msgstr "解密数据中的无效填充" msgid "Invalid passcode or recovery code" msgstr "二次验证码或恢复代码无效" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "无效路径: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "私钥格式无效" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "无效的恢复代码" @@ -2547,19 +3328,41 @@ msgstr "无效的恢复代码" msgid "Invalid request format" msgstr "无效的请求格式" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "安全令牌格式无效" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "无效的 Telegram 聊天 ID:不能为零" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "时间戳格式无效" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "无效的 WebSocket 消息类型" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "IP 地址" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "IP 证书通知" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "签发证书" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "签发证书" @@ -2579,7 +3382,7 @@ msgstr "项" msgid "Jwt Secret" msgstr "Jwt 密钥" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2589,12 +3392,12 @@ msgstr "请像保护密码一样安全地保管您的恢复代码。我们建议 msgid "Keepalive Timeout" msgstr "Keepalive 超时" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "密钥类型" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "语言" @@ -2606,6 +3409,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark 自定义" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "过去 12 小时" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "过去 14 天" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "过去 15 分钟" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "过去 24 小时" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "过去 30 天" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "过去 30 分钟" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "过去 4 小时" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "最近 7 天" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "过去 90 天" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "上次备份状态" @@ -2614,15 +3455,35 @@ msgstr "上次备份状态" msgid "Last Backup Time" msgstr "上次备份时间" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "最后检查" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "最后检查时间" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "过去 1 小时" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "最后索引时间" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "上个月" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "上次更新" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "最后更新:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "上次使用" @@ -2638,12 +3499,18 @@ msgstr "留空为默认:https://api.openai.com/" msgid "Leave blank if do not want to modify" msgstr "如果不想修改,请留空" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "如果您的 ACME 提供商不需要,请留空" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "如果不需要,请留空。" -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "留空不做任何更改" @@ -2651,16 +3518,24 @@ msgstr "留空不做任何更改" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "由于未启用 TOTP,因此不允许使用传统恢复代码" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego 禁用 CNAME 支持" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "开源许可" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "许可证分布" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "许可证类型" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "连接" @@ -2676,32 +3551,32 @@ msgstr "监听中" msgid "Load Average:" msgstr "系统负载:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "从设置中加载" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "加载成功" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "已加载" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "加载器文件" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "加载器设置" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "加载器睡眠" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "加载器阈值" @@ -2709,9 +3584,15 @@ msgstr "加载器阈值" msgid "Loading data..." msgstr "正在加载数据..." -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "加载中..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2730,11 +3611,11 @@ msgstr "Location" msgid "Locations" msgstr "Locations" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "日志" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2743,23 +3624,59 @@ msgstr "" "日志文件 %{log_path} 不是常规文件。如果在 Docker 容器中使用 Nginx UI,请参阅 " "https://nginxui.com/zh_CN/guide/config-nginx-log.html 获取更多信息。" -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "日志文件不存在" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "日志文件不是常规文件" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "日志文件不可用" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "日志文件尚未建立索引" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "日志索引器不可用" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "日志索引完成!正在加载更新数据..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "日志行超出最大长度" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "日志列表" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "日志解析器未初始化;使用前请调用 indexer.InitLogParser()" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "日志路径不在白名单中" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "登录" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "登录成功" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "登出成功" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Logrotate" @@ -2776,9 +3693,20 @@ msgstr "" "定时任务,因此您无需修改本页面的参数。对于使用 Docker 容器安装 Nginx 用户界面的用户,您可以手动启用该选项。Nginx UI " "的定时任务任务调度器将按照您设置的时间间隔(以分钟为单位)执行 logrotate 命令。" +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "低" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "主节点" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "维护模式" @@ -2794,7 +3722,7 @@ msgstr "成功启用维护模式" msgid "Make certificate dir error: {0}" msgstr "创建证书目录错误:{0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2807,11 +3735,11 @@ msgstr "在获取签发证书前,请确保配置文件中已将 .well-known msgid "Manage Configs" msgstr "配置管理" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "网站管理" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "管理 Stream" @@ -2823,15 +3751,15 @@ msgstr "用户管理" msgid "Managed Certificate" msgstr "托管证书" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "管理器文件" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "管理器睡眠" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "管理器阈值" @@ -2857,7 +3785,7 @@ msgstr "主进程" msgid "Master Process" msgstr "主进程" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "最大尝试次数" @@ -2865,11 +3793,15 @@ msgstr "最大尝试次数" msgid "Max Concurrent Connections" msgstr "最大并发连接数" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "最大重定向次数" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "每秒最大请求次数" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "最大缓存大小" @@ -2886,7 +3818,7 @@ msgstr "最大并发连接数" msgid "Maximum number of connections per worker process" msgstr "每个工作进程的最大连接数" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "缓存的最大总容量" @@ -2896,6 +3828,7 @@ msgstr "最大工作进程数:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "内存" @@ -2903,22 +3836,39 @@ msgstr "内存" msgid "Memory and Storage" msgstr "内存与存储" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "内存设计" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "内存使用量(RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "方法" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "方法名称" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "压缩文件的最小尺寸" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "最小可用空间" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "缓存目录中的最小可用空间" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "最低要求:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "分钟" @@ -2927,21 +3877,36 @@ msgstr "分钟" msgid "Minutes" msgstr "分钟" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "镜像" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "模型" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "现代分析服务不可用" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "现代索引服务不可用" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "现代搜索服务不可用" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "修改时间" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "修改" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "修改证书" @@ -2949,7 +3914,7 @@ msgstr "修改证书" msgid "Modify Config" msgstr "修改配置文件" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "模块" @@ -2957,6 +3922,10 @@ msgstr "模块" msgid "Modules" msgstr "模块" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "模块缓存已刷新" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "星期一" @@ -2969,39 +3938,66 @@ msgstr "每月" msgid "Monthly on day %{day} at %{time}" msgstr "每月%{day}日%{time}" +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "多维数据可视化" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "多行指令" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "必须是可从互联网访问的公共 IP 地址" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "不适用" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "名称" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "名称或内容" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "命名空间" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "命名空间" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "需要启用 stub_status 模块" @@ -3014,9 +4010,13 @@ msgstr "网络" msgid "Network Statistics" msgstr "流量统计" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "新聊天" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" -msgstr "新建DNS验证提供程序错误:{0}" +msgstr "新建 DNS 验证提供程序错误:{0}" #: src/views/install/components/InstallView.vue:109 msgid "New Installation" @@ -3042,18 +4042,18 @@ msgstr "新路径" msgid "New transport error: {0}" msgstr "新建传输错误:{0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "新版本发布" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "下一步" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3065,7 +4065,7 @@ msgstr "Nginx -T 的输出为空" msgid "Nginx Access Log Path" msgstr "Nginx 访问日志路径" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "存在 Nginx 访问日志路径" @@ -3094,15 +4094,15 @@ msgstr "Nginx Conf 中未引用 sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "Nginx Conf 中未引用 stream-enabled" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "未设置 Nginx 配置目录" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Nginx 配置目录存在" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "存在 Nginx 配置入口文件" @@ -3110,8 +4110,8 @@ msgstr "存在 Nginx 配置入口文件" msgid "Nginx configuration has been restored" msgstr "Nginx 配置已恢复" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Nginx 配置解析错误" @@ -3140,7 +4140,7 @@ msgstr "Nginx CPU 使用率" msgid "Nginx Error Log Path" msgstr "Nginx 错误日志路径" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "存在 Nginx 错误日志路径" @@ -3149,7 +4149,7 @@ msgid "Nginx error: {0}" msgstr "Nginx 错误:{0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3164,7 +4164,7 @@ msgstr "Nginx 未在另一个容器中运行" msgid "Nginx is running" msgstr "Nginx 正在运行" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Nginx 日志" @@ -3172,6 +4172,10 @@ msgstr "Nginx 日志" msgid "Nginx Log Directory Whitelist" msgstr "Nginx 日志目录白名单" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Nginx 日志索引中..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3181,7 +4185,7 @@ msgstr "Nginx 内存使用量" msgid "Nginx PID Path" msgstr "Nginx PID 路径" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Nginx PID 路径存在" @@ -3194,7 +4198,7 @@ msgstr "Nginx 重载命令" msgid "Nginx reload failed: {0}" msgstr "Nginx 重载失败:{0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Nginx 重载操作已发送到远程节点" @@ -3206,7 +4210,7 @@ msgstr "Nginx 重载成功" msgid "Nginx Restart Command" msgstr "Nginx 重启命令" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Nginx 重启操作已发送到远程节点" @@ -3214,7 +4218,7 @@ msgstr "Nginx 重启操作已发送到远程节点" msgid "Nginx restarted successfully" msgstr "Nginx 重启成功" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Nginx Sbin 路径存在" @@ -3245,41 +4249,73 @@ msgid "" "a few seconds." msgstr "Nginx UI 配置已恢复,几秒钟后将自动重启。" -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf 包括 conf.d 目录" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf 包含 sites-enabled 目录" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "检查 nginx.conf 是否包含 streams-enabled 的目录" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "取消" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "无操作" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "没有可用的证书" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "无中国地理数据" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "没有数据" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "无数据" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "当前页面没有条目" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "无可用地理数据" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "在选定的时间范围内未找到日志。" + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "未选择节点" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "未选择记录" @@ -3288,24 +4324,31 @@ msgstr "未选择记录" msgid "No servers configured" msgstr "未配置服务器" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "未找到站点" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "在 server_name 配置中未找到特定 IP 地址。请在下方指定服务器 IP 地址以获取证书。" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "无结构化日志数据可用" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "未配置上游" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "节点" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "节点组" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "环境组" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "节点分析失败: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3315,7 +4358,12 @@ msgstr "节点名称" msgid "Node Secret" msgstr "节点密钥" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "节点状态" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "节点" @@ -3323,36 +4371,59 @@ msgstr "节点" msgid "Not After" msgstr "有效期" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "非预期文本" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "找不到页面" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "未索引" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "未加载" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "不支持 IP 证书" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "此前无效: %{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "注意" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." msgstr "注意,如果配置文件中包含其他配置或证书,请提前将它们同步到远程节点。" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "注意:如果服务器不支持 gRPC 反射,健康检查可能会失败。请确保您的 gRPC 服务器已启用反射功能。" + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "无内容可复制" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "通知" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "通知" @@ -3361,15 +4432,19 @@ msgstr "通知" msgid "Notifier not found" msgstr "未找到通知程序" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "并发工作进程数,自动设置为 CPU 内核数" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "缓存加载器一次处理的文件数量" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "缓存管理器一次处理的文件数量" @@ -3384,7 +4459,7 @@ msgstr "工作进程数量" msgid "Obtain cert error: {0}" msgstr "获取证书错误:{0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "获取证书" @@ -3392,18 +4467,18 @@ msgstr "获取证书" msgid "Obtaining certificate" msgstr "正在获取证书" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP 必须装订" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." msgstr "某些用户在使用 Firefox 首次访问时,OCSP Must Staple 可能会导致错误。" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "关闭" @@ -3411,73 +4486,106 @@ msgstr "关闭" msgid "Official Document" msgstr "官方文档" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "离线" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "离线 GeoIP 分析" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "确定" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "开启" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "一旦验证完成,这些记录将被删除。" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "在线" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "在线数量" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" -msgstr "只允许使用zip文件" +msgstr "只允许使用 zip 文件" #: src/components/PortScanner/PortScannerCompact.vue:44 msgid "Open" msgstr "开放" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "开源限制" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "操作系统" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "操作系统统计" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "或" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "或将文件拖拽到下方编辑器" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "或输入密钥:%{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "顺序保存成功" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "原名" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "OS" @@ -3524,18 +4632,22 @@ msgstr "参数" msgid "Params Optimization" msgstr "参数优化" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "解析器性能" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "Passkey" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "密码" @@ -3564,11 +4676,13 @@ msgstr "密码不匹配" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "路径" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "路径不在授予的访问路径中:{0}" @@ -3580,12 +4694,28 @@ msgstr "路径:{0} 不在 nginx 配置目录下:{1}" msgid "Payload resource is nil" msgstr "有效载荷资源为空" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "高峰时段" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "待处理" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "百分比" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "执行" @@ -3627,17 +4757,29 @@ msgid "" "count, etc." msgstr "请启用 stub_status 模块,以获取请求统计信息、连接数等。" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "请输入" + +#: src/views/preference/components/AuthSettings/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/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "请输入有效的 IPv4 地址(每个八位字节为 0-255)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "请输入有效的 IPv4 或 IPv6 地址" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "请输入有效的端口范围" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "请输入至少一个域名" @@ -3654,6 +4796,10 @@ msgstr "请输入安全令牌" msgid "Please enter the security token received during backup" msgstr "请输入备份时收到的安全令牌" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "请输入服务器 IP 地址" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "请正确填写所有字段" @@ -3662,19 +4808,19 @@ msgstr "请正确填写所有字段" msgid "Please fill in required S3 configuration fields" msgstr "请填写必填的 S3 配置字段" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." msgstr "请填写 DNS 提供商提供的 API 验证凭据。" -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." msgstr "请首先在 “证书”> “DNS 凭证” 中添加凭证,然后在下方选择一个凭证,请求 DNS 提供商的 API。" -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3706,20 +4852,20 @@ msgstr "请输入名称,这将作为新配置的文件名。" msgid "Please input your E-mail!" msgstr "请输入您的邮箱!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "请输入您的密码!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "请输入您的用户名!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "请登录。" -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "请注意,下面的时间单位配置均以秒为单位。" @@ -3735,25 +4881,31 @@ msgstr "请保存此安全令牌,恢复时会用到它:" msgid "Please select a backup file" msgstr "请选择备份文件" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "请选择通知类型" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "请选择有效的%{type}文件(%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "请至少选择一项" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "请至少选择一个节点重载 Nginx" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "请至少选择一个节点重启 Nginx" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "请至少选择一个节点进行升级" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "请键入 \"撤销 \"确认" @@ -3766,23 +4918,26 @@ msgstr "请输入确切的确认文本" msgid "Port" msgstr "端口" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "必须开放 80 端口以进行 HTTP-01 挑战验证" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "端口检测" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "同步后操作" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "预发布" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "偏好设置" @@ -3790,6 +4945,19 @@ msgstr "偏好设置" msgid "Preparing lego configurations" msgstr "正在准备 Lego 的配置" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "私有 CA:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "私有 IP (192.168.x.x、10.x.x.x、172.16-31.x.x)将失败" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "私钥" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "进程" @@ -3806,6 +4974,10 @@ msgstr "进程信息" msgid "Processing {count}/{total}" msgstr "处理中 {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "生产流水线" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "禁止在演示模式下修改 root 账户的密码" @@ -3822,6 +4994,10 @@ msgstr "项目团队" msgid "Protected Directory" msgstr "受保护目录" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "协议" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3829,7 +5005,7 @@ msgid "" "proxy." msgstr "协议配置仅在直接连接时生效。如果使用反向代理,请在反向代理中单独配置协议。" -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "提供商" @@ -3837,22 +5013,57 @@ msgstr "提供商" msgid "Provider not found: {0}" msgstr "未找到提供商:{0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "省份 / 地区" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "代理" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "代理传递" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "代理目标" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "公共 CA 要求:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "公安备案号" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "页面浏览量" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "已排队" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "排队等待索引中..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "快速选择" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "原始" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "重新下载数据库" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "读取文件夹失败: {0}" @@ -3867,24 +5078,48 @@ msgstr "读取请求数" msgid "Reads" msgstr "读" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "实时分析仪表板" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "重建" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "重建所有索引" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "重建文件索引" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "重建索引" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "下载" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "重新检查" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "推荐:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "恢复" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "恢复代码" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -3894,33 +5129,47 @@ msgstr "恢复代码用于在您无法访问双重身份验证设备时登录您 msgid "Recursive Nameservers" msgstr "递归域名服务器" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "来源" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "刷新" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "刷新模块缓存" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "重新生成响应" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "注册" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." msgstr "注册用户或使用此账户申请证书时通过 HTTP 代理。" -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "注册失败" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "启动时注册" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "Passkey 注册成功" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "注册成功" @@ -3928,28 +5177,30 @@ msgstr "注册成功" msgid "Registering user" msgstr "正在注册用户" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "注册状态" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "重新安装" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "发布 API 请求失败: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "发行日志" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "重载" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "重载 Nginx" @@ -3973,7 +5224,7 @@ msgstr "重载远程 Nginx 错误" msgid "Reload Remote Nginx Success" msgstr "重载远程 Nginx 成功" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "重载请求失败,请检查网络连接" @@ -3985,22 +5236,28 @@ msgstr "重载中" msgid "Reloading nginx" msgstr "正在重载 Nginx" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "远程" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "删除" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "移除成功" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "删除成功" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4009,12 +5266,12 @@ msgid "Rename" msgstr "重命名" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "成功将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "在 %{node_name} 上将 %{orig_path} 重命名为 %{new_path} 失败" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "成功将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "在 %{node_name} 上成功将 %{orig_path} 重命名为 %{new_path}" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4024,37 +5281,37 @@ msgstr "远程配置重命名错误" msgid "Rename Remote Config Success" msgstr "重命名远程配置成功" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "重命名远程站点错误" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "重命名远程站点成功" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "重命名远程 Stream 错误" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" -msgstr "重命名远程 Stream成功" +msgstr "重命名远程 Stream 成功" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功" @@ -4062,7 +5319,7 @@ msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功" msgid "Rename successfully" msgstr "重命名成功" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4072,8 +5329,8 @@ msgstr "重命名成功" msgid "Renew cert error: {0}" msgstr "续签证书错误:{0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "更新证书" @@ -4085,11 +5342,23 @@ msgstr "证书续期错误" msgid "Renew Certificate Success" msgstr "证书续期成功" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "更新成功" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "请求" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "请求体" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "请求路径" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "请求统计" @@ -4107,13 +5376,19 @@ msgid "Requests Per Connection" msgstr "每次连接请求数" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "重置" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "重置二步验证" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "重置搜索" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4121,6 +5396,10 @@ msgid "" "processes" msgstr "驻留集大小:实际驻留在物理内存中的内存,包括所有共享库内存,将为多个进程重复计算" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "资源使用警告" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4130,9 +5409,8 @@ msgstr "响应" msgid "Restart" msgstr "重启" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "重启 Nginx" @@ -4152,7 +5430,7 @@ msgstr "重启远程 Nginx 错误" msgid "Restart Remote Nginx Success" msgstr "重启远程 Nginx 成功" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "重启请求失败,请检查网络连接" @@ -4191,8 +5469,8 @@ msgstr "恢复此版本" msgid "Restored successfully" msgstr "恢复成功" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "撤销" @@ -4200,29 +5478,29 @@ msgstr "撤销" msgid "Revoke cert error: {0}" msgstr "吊销证书错误:{0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "撤销旧证书" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "撤销该证书" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." msgstr "撤销证书将影响当前使用该证书的任何服务。该操作无法撤销。" -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "依赖方显示名称" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "依赖方的源" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "依赖方 ID" @@ -4242,7 +5520,7 @@ msgstr "S3" #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:83 msgid "S3 access key ID" -msgstr "S3访问密钥ID" +msgstr "S3 访问密钥 ID" #: src/views/backup/AutoBackup/AutoBackup.vue:249 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:77 @@ -4258,10 +5536,6 @@ msgstr "必须提供 S3 访问密钥 ID" msgid "S3 Bucket" msgstr "S3 存储桶" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "S3存储桶访问被拒绝:{0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "必须填写 S3 存储桶" @@ -4270,35 +5544,23 @@ msgstr "必须填写 S3 存储桶" msgid "S3 bucket name" msgstr "S3 存储桶名称" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "S3 配置不完整:缺少 {0}" #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:34 msgid "S3 connection test failed" -msgstr "S3连接测试失败" - -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "S3连接测试失败: {0}" +msgstr "S3 连接测试失败" #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" -msgstr "S3连接测试成功" - -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "S3 凭证无效: {0}" +msgstr "S3 连接测试成功" #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "S3 终端节点" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "S3终端节点无效:{0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "必须提供 S3 端点" @@ -4332,27 +5594,29 @@ msgstr "S3 秘密访问密钥" #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:90 msgid "S3 secret access key is required" -msgstr "必须提供S3秘密访问密钥" +msgstr "必须提供 S3 秘密访问密钥" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" -msgstr "S3上传失败:{0}" +msgstr "S3 上传失败:{0}" #: src/views/backup/AutoBackup/components/CronEditor.vue:32 msgid "Saturday" msgstr "星期六" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "保存" @@ -4360,41 +5624,41 @@ msgstr "保存" msgid "Save Directive" msgstr "保存指令" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "保存错误 %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "保存顺序" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "保存远程站点错误" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "保存远程站点成功" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "保存远程 Stream 错误" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "保存远程 Stream 成功" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "成功将站点 %{name} 保存到 %{node} 中" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "成功将站点 %{name} 保存到 %{node} 中" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "部署 %{name} 到 %{node} 失败" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "成功将站点 %{name} 保存到 %{node} 中" @@ -4402,16 +5666,17 @@ msgstr "成功将站点 %{name} 保存到 %{node} 中" msgid "Save successful" msgstr "保存成功" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "保存成功" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "保存成功" @@ -4435,13 +5700,13 @@ msgstr "扫描端口" msgid "Scan Results" msgstr "扫描结果" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "用手机扫描二维码,将账户添加到应用程序中。" -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "正在扫描日志..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "扫描中" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4456,16 +5721,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "搜索" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "搜索筛选器" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "在日志内容中搜索..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "搜索模块名称" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "搜索模块" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "搜索范围" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "搜索模板" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "密钥已复制" @@ -4482,13 +5768,19 @@ msgstr "安全 Token" msgid "Security Token Information" msgstr "安全令牌信息" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "选择一个预定义的 CA 目录或输入自定义目录。留空则使用默认 CA 目录。" + #: src/language/curd.ts:31 msgid "Select all" msgstr "全选" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "选择同步后的操作" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "选择或输入 CA 目录 URL" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4498,7 +5790,7 @@ msgstr "已选择 {count} 个文件" msgid "Selector" msgstr "选择器" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "自我检查" @@ -4512,11 +5804,15 @@ msgstr "自检失败,Nginx UI 可能无法正常工作" msgid "Send" msgstr "上传" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "发送测试消息" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "服务器" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "服务器错误" @@ -4524,6 +5820,10 @@ msgstr "服务器错误" msgid "Server Info" msgstr "服务器信息" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "服务器 IP 地址" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "服务器名称哈希桶大小" @@ -4532,7 +5832,7 @@ msgstr "服务器名称哈希桶大小" msgid "Server names hash table size" msgstr "服务器名称哈希表大小" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "未在指令集合中找到 server_name" @@ -4540,6 +5840,10 @@ msgstr "未在指令集合中找到 server_name" msgid "ServerIdx out of range" msgstr "Server Index 超出范围" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "服务名称" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "未找到会话" @@ -4574,6 +5878,10 @@ msgstr "正在设置环境变量" msgid "Setting HTTP01 challenge provider" msgstr "使用 HTTP01 challenge provider" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "设置" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4587,14 +5895,14 @@ msgid "" "Settings.NginxLogSettings.ErrorLogPath is empty, refer to " "https://nginxui.com/guide/config-nginx.html for more information" msgstr "" -"Settings.NginxLogSettings.ErrorLogPath为空,更多信息请参阅 " +"Settings.NginxLogSettings.ErrorLogPath 为空,更多信息请参阅 " "https://nginxui.com/guide/config-nginx.html" #: src/views/install/components/InstallView.vue:65 msgid "Setup your Nginx UI" msgstr "设置你的 Nginx UI" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "共享内存区" @@ -4602,10 +5910,18 @@ msgstr "共享内存区" msgid "Show" msgstr "显示" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "显示助手" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "使用 Passkey 登录" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "SIMD 优化的流处理" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "单行指令" @@ -4626,11 +5942,23 @@ msgstr "网站处于维护模式" msgid "Site Logs" msgstr "站点列表" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "站点导航" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "网站未找到" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "站点刷新已启动" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "站点" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "网站目录存在" @@ -4638,6 +5966,12 @@ msgstr "网站目录存在" msgid "Sites List" msgstr "站点列表" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "配置带有有效 server_name 指令的 nginx 服务器块后,站点将显示在此处。" + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "Sites-available 目录不存在" @@ -4647,6 +5981,8 @@ msgid "Sites-enabled directory not exist" msgstr "Sites-enabled 目录不存在" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "大小" @@ -4654,19 +5990,36 @@ msgstr "大小" msgid "Skip Installation" msgstr "跳过安装" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "缓存加载器迭代之间的休眠时间" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "缓存管理器迭代之间的休眠时间" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "套接字" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "排序方式" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "源 IP" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "赞助" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "SSD 存储以获得更好的 I/O 性能" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "SSL 证书内容" @@ -4678,18 +6031,23 @@ msgstr "SSL 证书文件必须位于 Nginx 配置目录下:{0}" msgid "SSL certificate file not found" msgstr "未找到 SSL 证书文件" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "SSL 证书密钥内容" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" -msgstr "SSL证书密钥路径" +msgstr "SSL 证书密钥路径" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" -msgstr "SSL证书路径" +msgstr "SSL 证书路径" #: src/constants/errors/system.ts:4 msgid "SSL certificate path is required when HTTPS is enabled" @@ -4711,13 +6069,12 @@ msgstr "SSL 密钥路径" msgid "SSL key path is required when HTTPS is enabled" msgstr "启用 HTTPS 时需要 SSL 密钥路径" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "SSO 登录" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "稳定" @@ -4725,33 +6082,49 @@ msgstr "稳定" msgid "Start" msgstr "开始" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "开始日期" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "开始还原" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "开始下载..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "静态" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "状态" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "状态更新成功" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "已停止" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "存储" @@ -4775,10 +6148,6 @@ msgstr "存储路径" msgid "Storage path is required" msgstr "存储路径是必填项" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "存储路径不在授予的访问路径中: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4792,7 +6161,7 @@ msgstr "Stream 已启用" msgid "Stream not found" msgstr "Stream 未找到" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "Streams 目录存在" @@ -4804,6 +6173,10 @@ msgstr "Streams-available 目录不存在" msgid "Streams-enabled directory not exist" msgstr "Streams-enabled 目录不存在" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "结构化" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "Stub 状态端口" @@ -4812,7 +6185,7 @@ msgstr "Stub 状态端口" msgid "Stub_status is not enabled" msgstr "未启用 stub_status" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4823,16 +6196,6 @@ msgstr "成功" msgid "Sunday" msgstr "星期日" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"支持通过 Server-Sent Events 协议与后端通信。如果您的 Nginx UI 是通过 Nginx " -"反向代理使用的,请参考此链接编写相应的配置文件:https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -4879,12 +6242,12 @@ msgid "Sync Certificate" msgstr "同步证书" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "证书 %{cert_name} 已成功同步到 %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "同步证书 %{cert_name} 到 %{node_name} 失败" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "证书 %{cert_name} 已成功同步到 %{env_name}" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "证书 %{cert_name} 已成功同步至 %{node_name}" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -4895,12 +6258,12 @@ msgid "Sync Certificate Success" msgstr "同步证书成功" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "配置 %{config_name} 成功同步到 %{env_name}" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "同步配置 %{config_name} 到 %{node_name} 失败" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "配置 %{config_name} 成功同步到 %{env_name}" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "配置 %{config_name} 已成功同步到 %{node_name}" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -4910,24 +6273,29 @@ msgstr "同步配置错误" msgid "Sync Config Success" msgstr "同步配置成功" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "同步节点" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "同步预览" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "同步策略" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "同步到" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "同步" @@ -4944,10 +6312,14 @@ msgstr "系统备份" msgid "System Check" msgstr "系统检查" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "系统初始用户" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "系统要求" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "系统还原" @@ -4968,36 +6340,74 @@ msgstr "未找到任务" msgid "Telegram" msgstr "Telegram" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "终端" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "终端助手" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "终端启动命令" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "测试" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "测试失败: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "测试失败:无法执行健康检查" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "测试消息发送成功" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "测试 S3 连接" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "测试成功!响应时间:%{response_time}毫秒" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " "since it was last issued." msgstr "域名证书将在 30 分钟内接受检查,如果距离上次签发证书的时间超过 1 周或您在设置中设定的时间,证书将被更新。" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "离线地理 IP 分析需要 GeoLite2 数据库。请下载以启用此功能。" + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "GeoLite2 数据库为 IP 地址提供地理信息。这用于日志分析中的离线地理分析。" + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " "dashes, colons, and dots." msgstr "ICP 备案号只能包含字母、单码、数字、连字符、破折号、冒号和点。" -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "输入的内容不是 SSL 证书" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "输入的内容不是 SSL 证书密钥" @@ -5028,11 +6438,11 @@ msgstr "节点名称只能包含字母、统一码、数字、连字符、破折 msgid "The parameter of server_name is required" msgstr "必须为 server_name 指令指明参数" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "路径存在,但文件不是证书" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "路径存在,但文件不是私钥" @@ -5042,14 +6452,14 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "公安备案号只能包含字母、单码、数字、连字符、破折号、冒号和点。" -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " "match the local version." -msgstr "远程 Nginx UI 版本与本地 Nginx UI版本不兼容。为避免意料之外的错误,请升级远程 Nginx UI,使其与本地版本一致。" +msgstr "远程 Nginx UI 版本与本地 Nginx UI 版本不兼容。为避免意料之外的错误,请升级远程 Nginx UI,使其与本地版本一致。" -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5058,7 +6468,7 @@ msgstr "当前配置中的 server_name 必须是获取证书所需的域名, #: src/views/preference/tabs/CertSettings.vue:22 #: src/views/preference/tabs/HTTPSettings.vue:14 msgid "The url is invalid" -msgstr "URL无效" +msgstr "URL 无效" #: src/views/preference/tabs/OpenAISettings.vue:35 #: src/views/preference/tabs/OpenAISettings.vue:49 @@ -5075,20 +6485,24 @@ msgstr "理论最大并发连接数:" #: src/views/dashboard/components/PerformanceTablesCard.vue:189 msgid "Theoretical maximum RPS (Requests Per Second):" -msgstr "理论最大 RPS(每秒请求次数):" +msgstr "理论最大 RPS (每秒请求次数):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " "lose access to your account." msgstr "这些代码是在您丢失密码和双重身份验证方式时,访问账户的最后手段。如果找不到这些代码,您将无法再访问您的账户。" -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "第三方组件" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "这个证书自动续期项目是无效的,请删除。" -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "该证书由 Nginx UI 托管" @@ -5096,9 +6510,9 @@ msgstr "该证书由 Nginx UI 托管" msgid "This directory is protected and cannot be deleted for system safety." msgstr "此目录受保护,为确保系统安全无法删除。" -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "此字段必填" @@ -5122,7 +6536,11 @@ msgstr "该字段只能包含字母、unicode 字符、数字和 -_。" msgid "" "This field should only contain letters, unicode characters, numbers, and " "-_./:" -msgstr "此字段应仅包含字母、Unicode字符、数字和 -_./:" +msgstr "此字段应仅包含字母、Unicode 字符、数字和 -_./:" + +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "这是一条测试消息,于 %{timestamp} 从 Nginx UI 发送。" #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" @@ -5130,12 +6548,36 @@ msgid "" "After enabling it, you can view performance statistics" msgstr "该模块提供 Nginx 请求统计、连接数等数据。启用后,可以查看性能统计" -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "本月" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "此通知已禁用" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." msgstr "此操作只会从数据库中删除证书。文件系统中的证书文件不会被删除。" +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"此站点已配置为 HTTPS (端口 443)的默认服务器(default_server)。IP 证书需要证书颁发机构(CA)的支持,且并非所有 " +"ACME 提供商都提供此类证书。" + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "此站点使用通配符服务器名称(_),通常表示基于 IP 的证书。IP 证书需要证书颁发机构(CA)的支持,并且可能并非所有 ACME 提供商都提供。" + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5150,6 +6592,16 @@ msgstr "该字段的值已经存在" msgid "This will permanently delete the %{type}." msgstr "这将永久删除%{type}。" +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "这将重建整个日志索引。所有现有索引数据将被删除并从头开始重建。这可能需要一些时间。是否继续?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "这将重建此特定文件的索引数据:%{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5164,11 +6616,11 @@ msgid "" "after the restoration is complete." msgstr "这将恢复配置文件和数据库。恢复完成后,Nginx UI 将重新启动。" -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "将 %{nodeNames} 上的 Nginx UI 升级或重新安装到 %{version} 版本。" -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "限流" @@ -5176,8 +6628,21 @@ msgstr "限流" msgid "Thursday" msgstr "星期四" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "时间" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "时间范围" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "超时时间(秒)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "提示" @@ -5192,17 +6657,21 @@ msgstr "提示您可以通过增加 worker_processes 或 worker_connections 来 msgid "Title" msgstr "标题" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "确认删除" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "要确认撤销,请在下面的字段中输入 \"撤销\":" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 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/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5217,8 +6686,8 @@ msgid "" "we need to save this file and reload the Nginx. Are you sure you want to " "continue?" msgstr "" -"为了确保认证自动更新能够正常工作,我们需要添加一个能够代理从权威机构到后端的请求的 " -"Location,并且我们需要保存这个文件并重新加载Nginx。你确定要继续吗?" +"为了确保认证自动更新能够正常工作,我们需要添加一个能够代理从权威机构到后端的请求的 Location,并且我们需要保存这个文件并重新加载 " +"Nginx。你确定要继续吗?" #: src/views/preference/tabs/OpenAISettings.vue:36 msgid "" @@ -5241,15 +6710,41 @@ msgstr "令牌为空" msgid "Token is not valid" msgstr "Token 无效" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "前 10 个国家 / 地区" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "前 10 个省份 / 地区" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "前 10 个 URL" + #: src/language/curd.ts:5 msgid "Total" msgstr "总计" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "总计 %{total} 项" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "总组件数" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "连接总数" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "总条目数" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5263,9 +6758,13 @@ msgstr "Nginx 进程总数" msgid "Total Nginx Processes" msgstr "Nginx 进程总数" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "总访问量" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" -msgstr "总接收量" +msgstr "总接收" #: src/composables/usePerformanceMetrics.ts:99 #: src/views/dashboard/components/PerformanceTablesCard.vue:59 @@ -5280,35 +6779,55 @@ msgstr "请求总数/连接总数" msgid "Total Send" msgstr "总发送" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "总 UV 数" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." msgstr "TOTP 是一种使用基于时间的一次性密码算法的双因素身份验证方法。" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "流量" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "正在翻译错误..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "回收站" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "尝试调整搜索条件或导航到其他页面。" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "尝试调整您的搜索条件或时间范围。" + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "星期二" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "需要两步验证" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "类型" @@ -5316,15 +6835,47 @@ msgstr "类型" msgid "Type %{delete} to confirm" msgstr "输入 %{delete} 以确认" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "输入或选择浏览器" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "输入或选择设备" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "输入或选择操作系统" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "输入或选择状态码" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "在此输入您的消息..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "独立页面" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "未知" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "不支持的备份类型: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "不支持的日志格式" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "更新已经在进行中" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "更新密码" @@ -5333,32 +6884,30 @@ msgstr "更新密码" msgid "Update Profile" msgstr "更新资料" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "更新成功" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "修改时间" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "升级" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "成功升级 %{node} 上的 Nginx UI 🎉" @@ -5366,11 +6915,22 @@ msgstr "成功升级 %{node} 上的 Nginx UI 🎉" msgid "Upgraded successfully" msgstr "升级成功" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "升级器核心摘要为空" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "升级器核心下载URL为空" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "正在升级 Nginx UI,请等待..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "上传%{type}文件" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "上传文件" @@ -5379,19 +6939,29 @@ msgstr "上传文件" msgid "Upload Folders" msgstr "上传文件夹" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "上游" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Upstream 名称" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "上游套接字" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "上游测试类型" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "运行时间:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5403,14 +6973,19 @@ msgstr "使用二步验证码" msgid "Use recovery code" msgstr "使用恢复代码" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "使用临时路径" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "用户" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "用户代理" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "用户被禁止" @@ -5427,7 +7002,7 @@ msgstr "用户未启用 OTP 作为 2FA" msgid "User Profile" msgstr "用户资料" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "用户名" @@ -5438,14 +7013,22 @@ msgstr "用户名 (*)" #: src/views/install/components/InstallForm.vue:35 msgid "Username length cannot exceed 255 characters" -msgstr "用户名长度不能超过255个字符" +msgstr "用户名长度不能超过 255 个字符" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "独立访客" #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "有效的" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "验证 SSL 证书" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "值" @@ -5455,45 +7038,65 @@ msgstr "值" msgid "Verify Backup File Integrity" msgstr "验证备份文件的完整性" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "验证主机名" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "验证系统要求" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "版本" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "查看" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "查看全部通知" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "在 GitHub 上查看" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "查看恢复代码" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "查看第三方组件" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "已查看" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "访问量" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "等待处理" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "警告" @@ -5505,19 +7108,32 @@ msgid "" "to restore." msgstr "警告:还原操作将覆盖当前配置。请确保您有有效的备份文件和安全令牌,并仔细选择要还原的内容。" -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"警告:这似乎是一个私有 IP 地址。像 Let's Encrypt 这样的公共 CA 无法为私有 IP 颁发证书。请使用公共 IP 地址或考虑使用私有 " +"CA。" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "我们不接受任何功能请求" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." msgstr "我们将在您域名的 DNS 记录中添加一个或多个 TXT 记录,以核实域名所有权。" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" -msgstr "我们将从这个文件中删除HTTPChallenge的配置,并重新加载Nginx。你确定要继续吗?" +msgstr "我们将从这个文件中删除 HTTPChallenge 的配置,并重新加载 Nginx。你确定要继续吗?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "Webauthn" @@ -5525,10 +7141,18 @@ msgstr "Webauthn" msgid "WebAuthn settings are not configured" msgstr "WebAuthn 未配置" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "WebSocket 连接错误" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket 未连接,请等待连接" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "企业微信" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "星期三" @@ -5541,31 +7165,31 @@ msgstr "每周" msgid "Weekly on %{day} at %{time}" msgstr "每周%{day}的%{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " "Pebble as CA." msgstr "启用后,Nginx UI 将在启动时自动重新注册用户。一般情况下,除非在开发环境中使用 Pebble 作为 CA,否则不要启用此功能。" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." -msgstr "启用/禁用、删除或保存此站点时,环境组中设置的节点和下面选择的节点将同步执行操作。" +"namespace and the nodes selected below will be synchronized." +msgstr "当您启用/禁用、删除或保存此站点时,命名空间中设置的节点和下方选择的节点将被同步。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." msgstr "当您生成新的恢复代码时,必须下载或打印新的代码。" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "写入临时文件时是否使用临时路径" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "通配符证书" @@ -5584,8 +7208,8 @@ msgstr "工作进程" msgid "Workers" msgstr "Workers" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "工作区" @@ -5610,16 +7234,18 @@ msgstr "正在将证书私钥写入磁盘" msgid "Writing certificate to disk" msgstr "正在将证书写入磁盘" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "是的" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5629,11 +7255,11 @@ msgstr "您正在通过非本地主机域上的不安全 HTTP 连接访问此终 msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "不允许删除 nginx 配置路径之外的文件" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "您使用的是最新版本" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "你可以在这个页面检查 Nginx UI 的升级。" @@ -5645,35 +7271,210 @@ msgstr "您可以在 %{countdown} 秒后关闭此对话框" msgid "You can close this dialog now" msgstr "现在可以关闭此对话框" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/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/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "您尚未启用双重身份验证。请启用双重身份验证以生成恢复代码。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "您尚未生成恢复代码。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." msgstr "您的当前恢复代码可能已过期且不安全。请尽快生成新的恢复代码以确保安全。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "您的旧代码将不再有效。" -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "你的 Passkeys" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "零分配管道" + +#~ msgid "in the same directory as" +#~ msgstr "与...在同一个目录中" + +#~ msgid "Sandbox test successful" +#~ msgstr "沙盒测试成功" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "已在隔离沙箱模式下测试" + +#~ msgid "All" +#~ msgstr "全部" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "基于 M2 Pro (12 核)测试" + +#~ msgid "CPU Utilization" +#~ msgstr "CPU 使用率" + +#~ msgid "Indexing Throughput" +#~ msgstr "索引吞吐量" + +#~ msgid "Memory Efficiency" +#~ msgstr "内存效率" + +#~ msgid "Performance Impact Notice" +#~ msgstr "性能影响通知" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "零分配管道优化" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "与 ChatGPT 聊天" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "地理映射与洞察" + +#~ msgid "No feature requests accepted." +#~ msgstr "不接受功能请求" + +#~ msgid "Time-series trend analysis" +#~ msgstr "时间序列趋势分析" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "用户代理与浏览器分析" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ 核 (Apple M2 Pro 或同等 Intel 处理器)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "4GB+ 内存以获得最佳性能" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "自适应批量大小" + +#~ msgid "CPU Architecture" +#~ msgstr "CPU 架构" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "GeoIP 和用户代理解析" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "最低 1GB 内存" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "现代 CPU (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "实时性能监控" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "现代硬件上的持续性能" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "备份路径不在授予的访问路径中: {0}" + +#~ msgid "Build with" +#~ msgstr "构建基于" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "复制数据库目录失败:{0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "创建备份目录失败:{0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "符号链接解析失败:{0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "恢复 Nginx UI 文件失败:{0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "写入 zip 缓冲区失败:{0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "哈希验证失败:文件完整性受损" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "S3 存储桶访问被拒绝:{0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "S3 连接测试失败: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "S3 凭证无效: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "S3 终端节点无效:{0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "存储路径不在授予的访问路径中: {0}" + +#~ msgid "files" +#~ msgstr "文件" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "正在索引日志,请稍候..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "正在加载仪表板数据..." + +#~ msgid "Today" +#~ msgstr "今天" + +#~ msgid "Data refreshed successfully" +#~ msgstr "数据刷新成功" + +#~ msgid "Failed to refresh data" +#~ msgstr "刷新数据失败" + +#~ msgid "Log File:" +#~ msgstr "日志文件:" + +#~ msgid "Log path" +#~ msgstr "日志路径" + +#~ msgid "Index Size" +#~ msgstr "索引大小" + +#~ msgid "Environments" +#~ msgstr "环境" + +#~ msgid "Node Group" +#~ msgstr "节点组" + +#~ msgid "Node Groups" +#~ msgstr "节点组" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "检查 conf.d 目录是否存在" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "支持通过 Server-Sent Events 协议与后端通信。如果您的 Nginx UI 是通过 Nginx " +#~ "反向代理使用的,请参考此链接编写相应的配置文件:https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "如果留空,则使用默认 CA Dir。" + +#~ msgid "Save error %{msg}" +#~ msgstr "保存错误 %{msg}" + +#~ msgid "Main" +#~ msgstr "主" + +#~ msgid "Select an action after sync" +#~ msgstr "选择同步后的操作" + #~ msgid "Link Start" #~ msgstr "链接" @@ -5707,9 +7508,6 @@ msgstr "你的 Passkeys" #~ msgid "Last Backup Error" #~ msgstr "最后一次备份错误" -#~ msgid "Apply" -#~ msgstr "应用" - #~ msgid "Apply bulk action successfully" #~ msgstr "批量操作应用成功" @@ -5737,10 +7535,6 @@ msgstr "你的 Passkeys" #~ msgid "Recovered Successfully" #~ msgstr "恢复成功" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "共 %{total} 个项目" - #~ msgid "View Details" #~ msgstr "查看详情" @@ -5781,12 +7575,6 @@ msgstr "你的 Passkeys" #~ "directory in Nginx.LogDirWhiteList." #~ msgstr "如果日志未被索引,请检查日志文件是否位于 Nginx.LogDirWhiteList 中的目录下。" -#~ msgid "Indexed" -#~ msgstr "已索引" - -#~ msgid "Log file %{log_path} is not a regular file. " -#~ msgstr "日志文件 %{log_path} 不是常规文件。" - #~ msgid "Docker Socket" #~ msgstr "Docker Socket" @@ -5802,9 +7590,6 @@ msgstr "你的 Passkeys" #~ msgid "Format error %{msg}" #~ msgstr "保存错误 %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "保存失败,在配置中检测到语法错误。" - #~ msgid "" #~ "When you enable/disable, delete, or save this stream, the nodes set in the " #~ "Node Group and the nodes selected below will be synchronized." @@ -5816,21 +7601,12 @@ msgstr "你的 Passkeys" #~ msgid "Optimize Nginx Performance" #~ msgstr "优化 Nginx 性能" -#~ msgid "Optimize Performance" -#~ msgstr "性能调优" - #~ msgid "seconds" #~ msgstr "秒" -#~ msgid "Access Token" -#~ msgstr "Access Token" - #~ msgid "Bot Token" #~ msgstr "机器人令牌" -#~ msgid "Device Key" -#~ msgstr "设备密钥" - #~ msgid "Secret (Optional)" #~ msgstr "秘密(可选)" @@ -5861,9 +7637,6 @@ msgstr "你的 Passkeys" #~ msgid "Site Categories" #~ msgstr "网站分类" -#~ msgid "Restart Required" -#~ msgstr "必须重新启动" - #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "部署 %{conf_name} 到 %{node_name} 成功" @@ -5917,9 +7690,6 @@ msgstr "你的 Passkeys" #~ "2FA." #~ msgstr "如果丢失了手机,可以使用恢复代码重置二步验证。" -#~ msgid "Recovery Code:" -#~ msgstr "恢复代码:" - #~ msgid "The recovery code is only displayed once, please save it in a safe place." #~ msgstr "恢复密码只会显示一次,请妥善保存。" @@ -5937,9 +7707,6 @@ msgstr "你的 Passkeys" #~ "the remote Nginx UI to the latest version" #~ msgstr "将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path} 失败,请将远程 Nginx UI 升级到最新版本" -#~ msgid "Server Name" -#~ msgstr "服务器名称" - #~ msgid "Enable 2FA" #~ msgstr "启用二步验证" @@ -6009,8 +7776,8 @@ msgstr "你的 Passkeys" #~ "Once the verification is complete, the records will be removed.\n" #~ "Please note that the unit of time configurations below are all in seconds." #~ msgstr "" -#~ "请填写您的DNS提供商提供的API认证凭证。我们将在你的域名的DNS记录中添加一个或多个TXT记录,以进行所有权验证。一旦验证完成,这些记录将被删除。请" -#~ "注意,下面的时间配置都是以秒为单位。" +#~ "请填写您的 DNS 提供商提供的 API 认证凭证。我们将在你的域名的 DNS 记录中添加一个或多个 TXT " +#~ "记录,以进行所有权验证。一旦验证完成,这些记录将被删除。请注意,下面的时间配置都是以秒为单位。" #~ msgid "Delete ID: %{id}" #~ msgstr "删除 ID: %{id}" @@ -6027,21 +7794,18 @@ msgstr "你的 Passkeys" #~ msgid "Theme" #~ msgstr "主题" -#~ msgid "OperationSync" -#~ msgstr "操作同步" - #~ msgid "" #~ "Such as Reload and Configs, regex can configure as " #~ "`/api/nginx/reload|/api/nginx/test|/api/config/.+`, please see system api" #~ msgstr "" #~ "`重载`和`配置管理`的操作同步正则可以配置为`/api/nginx/reload|/api/nginx/test|/api/config/.+`" -#~ ",详细请查看系统API" +#~ ",详细请查看系统 API" #~ msgid "SyncApiRegex" -#~ msgstr "Api正则表达式" +#~ msgstr "Api 正则表达式" #~ msgid "Whether config api regex that will redo on this environment" -#~ msgstr "是否配置API正则操作同步到该环境" +#~ msgstr "是否配置 API 正则操作同步到该环境" #~ msgid "The Operation of Sites, Configs and Certification will redo on this" #~ msgstr "网站、配置和证书的操作同步到该环境" @@ -6055,10 +7819,10 @@ msgstr "你的 Passkeys" #~ msgid "" #~ "We need to add the HTTPChallenge configuration to this file and reload the " #~ "Nginx. Are you sure you want to continue?" -#~ msgstr "我们需要将 HTTPChallenge 的配置添加到这个文件中,并重新加载Nginx。你确定要继续吗?" +#~ msgstr "我们需要将 HTTPChallenge 的配置添加到这个文件中,并重新加载 Nginx。你确定要继续吗?" #~ msgid "Chat with ChatGPT" -#~ msgstr "与ChatGPT聊天" +#~ msgstr "与 ChatGPT 聊天" #~ msgid "Inspect Configurations" #~ msgstr "检查配置" @@ -6108,8 +7872,8 @@ msgstr "你的 Passkeys" #~ "you do not have a certificate before, please click \"Getting Certificate " #~ "from Let's Encrypt\" first." #~ msgstr "" -#~ "系统将会每小时检测一次该域名证书,若距离上次签发已超过1个月,则将自动续签。
如果您之前没有证书,请先点击 \"从 Let's Encrypt " -#~ "获取证书\"。" +#~ "系统将会每小时检测一次该域名证书,若距离上次签发已超过 1 个月,则将自动续签。
如果您之前没有证书,请先点击 \"从 Let's " +#~ "Encrypt 获取证书\"。" #~ msgid "Do you want to change the template to support the TLS?" #~ msgstr "你想要改变模板以支持 TLS 吗?" @@ -6140,6 +7904,3 @@ msgstr "你的 Passkeys" #~ msgid "Used: %{used} / Total: %{total}" #~ msgstr "已使用: %{used} / 总共: %{total}" - -#~ msgid "CPU" -#~ msgstr "CPU" diff --git a/app/src/language/zh_TW/app.po b/app/src/language/zh_TW/app.po index 08358a6d5..a7d535818 100644 --- a/app/src/language/zh_TW/app.po +++ b/app/src/language/zh_TW/app.po @@ -19,90 +19,132 @@ msgstr "" "X-Generator: Weblate 5.10.4\n" "Generated-By: easygettext\n" -#: src/language/generate.ts:33 +#: src/language/generate.ts:37 msgid "[Nginx UI] ACME User: %{name}, Email: %{email}, CA Dir: %{caDir}" msgstr "[Nginx UI] ACME 使用者:%{name},電子郵件:%{email},CA 目錄:%{caDir}" -#: src/language/generate.ts:34 +#: src/language/generate.ts:38 msgid "[Nginx UI] Backing up current certificate for later revocation" msgstr "[Nginx UI] 正在備份當前憑證以便後續撤銷" -#: src/language/generate.ts:35 +#: src/language/generate.ts:39 msgid "[Nginx UI] Certificate renewed successfully" msgstr "[Nginx UI] 憑證更新成功" -#: src/language/generate.ts:36 +#: src/language/generate.ts:40 msgid "[Nginx UI] Certificate successfully revoked" msgstr "[Nginx UI] 證書已成功撤銷" -#: src/language/generate.ts:37 +#: src/language/generate.ts:41 msgid "[Nginx UI] Certificate was used for server, reloading server TLS certificate" msgstr "[Nginx UI] 憑證已用於伺服器,正在重新載入伺服器 TLS 憑證" -#: src/language/generate.ts:38 +#: src/language/generate.ts:42 msgid "[Nginx UI] Creating client facilitates communication with the CA server" msgstr "[Nginx UI] 創建客戶端以促進與 CA 伺服器的通信" -#: src/language/generate.ts:39 +#: src/language/generate.ts:43 msgid "[Nginx UI] Environment variables cleaned" msgstr "[Nginx UI] 環境變數已清理" -#: src/language/generate.ts:40 +#: src/language/generate.ts:44 msgid "[Nginx UI] Finished" msgstr "[Nginx UI] 已完成" -#: src/language/generate.ts:41 +#: src/language/generate.ts:45 msgid "[Nginx UI] Issued certificate successfully" msgstr "[Nginx UI] 證書簽發成功" -#: src/language/generate.ts:42 +#: src/language/generate.ts:46 msgid "[Nginx UI] Obtaining certificate" msgstr "[Nginx UI] 正在取得憑證" -#: src/language/generate.ts:43 +#: src/language/generate.ts:47 msgid "[Nginx UI] Preparing for certificate revocation" msgstr "[Nginx UI] 準備撤銷憑證" -#: src/language/generate.ts:44 +#: src/language/generate.ts:48 msgid "[Nginx UI] Preparing lego configurations" msgstr "[Nginx UI] 正在準備 lego 配置" -#: src/language/generate.ts:45 +#: src/language/generate.ts:49 msgid "[Nginx UI] Reloading nginx" msgstr "[Nginx UI] 重新載入 Nginx" -#: src/language/generate.ts:46 +#: src/language/generate.ts:50 msgid "[Nginx UI] Revocation completed" msgstr "[Nginx UI] 撤銷完成" -#: src/language/generate.ts:47 +#: src/language/generate.ts:51 msgid "[Nginx UI] Revoking certificate" msgstr "[Nginx UI] 正在撤銷證書" -#: src/language/generate.ts:48 +#: src/language/generate.ts:52 msgid "[Nginx UI] Revoking old certificate" msgstr "[Nginx UI] 正在撤銷舊憑證" -#: src/language/generate.ts:49 +#: src/language/generate.ts:53 msgid "[Nginx UI] Setting DNS01 challenge provider" msgstr "[Nginx UI] 正在設定 DNS01 驗證提供者" -#: src/language/generate.ts:51 +#: src/language/generate.ts:55 msgid "[Nginx UI] Setting environment variables" msgstr "[Nginx UI] 設定環境變數" -#: src/language/generate.ts:50 +#: src/language/generate.ts:54 msgid "[Nginx UI] Setting HTTP01 challenge provider" msgstr "[Nginx UI] 正在設定 HTTP01 驗證提供者" -#: src/language/generate.ts:52 +#: src/language/generate.ts:56 msgid "[Nginx UI] Writing certificate private key to disk" msgstr "[Nginx UI] 正在將證書私鑰寫入磁碟" -#: src/language/generate.ts:53 +#: src/language/generate.ts:57 msgid "[Nginx UI] Writing certificate to disk" msgstr "[Nginx UI] 正在將憑證寫入磁碟" +#: src/views/certificate/components/CertificateBasicInfo.vue:29 +#: src/views/certificate/components/CertificateContentEditor.vue:30 +msgid "{label} copied to clipboard" +msgstr "{label} 已複製到剪貼簿" + +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:59 +msgid "* Includes nodes from group %{groupName} and manually selected nodes" +msgstr "* 包含來自群組 %{groupName} 的節點和手動選擇的節點" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:167 +msgid "" +"* Index files are stored in the \"log-index\" directory within your Nginx " +"UI config path by default." +msgstr "* 索引文件預設存儲在您的 Nginx UI 配置路徑下的 \"log-index\" 目錄中。" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:217 +msgid "" +"* Performance metrics measured on Apple M2 Pro (12-core) with 32GB RAM. " +"Actual performance may vary based on your hardware configuration." +msgstr "* 效能指標基於 Apple M2 Pro (12 核)和 32GB 記憶體測得。實際效能可能因您的硬體配置而異。" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:804 +msgid "%{start}-%{end} of %{total} items" +msgstr "第 %{start}-%{end} 條,共 %{total} 條" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:49 +msgid "1 core minimum" +msgstr "至少 1 核" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:55 +msgid "1GB RAM minimum" +msgstr "至少 1GB 記憶體" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:50 +msgid "2+ cores recommended" +msgstr "推薦 2+ 核心" + +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:67 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:68 +msgid "24-Hour UV/PV Statistics" +msgstr "24 小時 UV/PV 統計" + #: src/views/user/userColumns.tsx:30 msgid "2FA" msgstr "雙因素驗證" @@ -111,11 +153,15 @@ msgstr "雙因素驗證" msgid "2FA Settings" msgstr "多重要素驗證設定" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:56 +msgid "4GB+ RAM recommended" +msgstr "推薦 4GB 以上記憶體" + #: src/routes/modules/system.ts:38 msgid "About" msgstr "關於" -#: src/views/nginx_log/NginxLogList.vue:38 +#: src/language/constants.ts:64 msgid "Access Log" msgstr "存取日誌" @@ -124,30 +170,28 @@ msgid "Access log path not exist" msgstr "存取記錄路徑不存在" #: src/components/NgxConfigEditor/LogEntry.vue:90 -#: src/routes/modules/nginx_log.ts:17 +#: src/routes/modules/nginx_log.ts:17 src/views/nginx_log/NginxLogList.vue:43 msgid "Access Logs" msgstr "存取日誌" -#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:108 -#: src/views/certificate/components/ACMEUserSelector.vue:86 +#: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:149 +#: src/views/certificate/components/ACMEUserSelector.vue:64 msgid "ACME User" msgstr "ACME 使用者" -#: src/views/preference/tabs/AuthSettings.vue:26 +#: src/views/preference/tabs/AuthSettings.vue:27 msgid "Action" msgstr "操作" #: src/views/backup/AutoBackup/AutoBackup.vue:273 -#: src/views/certificate/ACMEUser.vue:90 +#: src/views/certificate/ACMEUser.vue:131 #: src/views/certificate/CertificateList/certColumns.tsx:92 -#: src/views/certificate/DNSCredential.vue:44 -#: src/views/config/configColumns.tsx:50 -#: src/views/environments/group/columns.ts:41 -#: src/views/environments/list/envColumns.tsx:96 -#: src/views/nginx_log/NginxLogList.vue:67 +#: src/views/certificate/DNSCredential.vue:71 +#: src/views/config/configColumns.tsx:51 src/views/namespace/columns.ts:97 +#: src/views/nginx_log/NginxLogList.vue:332 src/views/node/nodeColumns.tsx:96 #: src/views/notification/notificationColumns.tsx:72 -#: src/views/preference/components/ExternalNotify/columns.tsx:76 -#: src/views/site/site_list/columns.tsx:153 src/views/stream/columns.tsx:117 +#: src/views/preference/components/ExternalNotify/columns.tsx:85 +#: src/views/site/site_list/columns.tsx:160 src/views/stream/columns.tsx:123 #: src/views/user/userColumns.tsx:58 msgid "Actions" msgstr "操作" @@ -162,15 +206,15 @@ msgid "Actual worker to configured ratio" msgstr "實際工作進程與配置比例" #: src/components/NgxConfigEditor/NgxServer.vue:144 -#: src/components/NgxConfigEditor/NgxUpstream.vue:166 src/language/curd.ts:19 +#: src/components/NgxConfigEditor/NgxUpstream.vue:97 src/language/curd.ts:19 #: src/views/preference/tabs/CertSettings.vue:45 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:94 -#: src/views/site/site_list/SiteList.vue:95 src/views/stream/StreamList.vue:103 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:119 +#: src/views/site/site_list/SiteList.vue:73 src/views/stream/StreamList.vue:81 msgid "Add" msgstr "新增" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:49 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:53 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:50 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:54 msgid "Add a passkey" msgstr "新增通行金鑰" @@ -184,10 +228,14 @@ msgstr "新增設定" msgid "Add Directive Below" msgstr "在下方新增指令" -#: src/views/certificate/components/DNSIssueCertificate.vue:153 +#: src/views/certificate/components/DNSIssueCertificate.vue:154 msgid "Add Domain" msgstr "添加域名" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:441 +msgid "Add Header" +msgstr "添加標頭" + #: src/components/NgxConfigEditor/LocationEditor.vue:131 #: src/components/NgxConfigEditor/LocationEditor.vue:158 msgid "Add Location" @@ -201,15 +249,15 @@ msgstr "新增伺服器" msgid "Add Site" msgstr "新增網站" -#: src/views/stream/StreamList.vue:140 +#: src/views/stream/StreamList.vue:118 msgid "Add Stream" msgstr "新增 Stream" -#: src/components/NgxConfigEditor/NgxUpstream.vue:187 +#: src/components/NgxConfigEditor/NgxUpstream.vue:118 msgid "Add Upstream" msgstr "添加上游" -#: src/views/stream/StreamList.vue:72 +#: src/views/stream/StreamList.vue:50 msgid "Added successfully" msgstr "新增成功" @@ -217,30 +265,72 @@ msgstr "新增成功" msgid "Additional" msgstr "其他設定" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 -#: src/views/stream/components/StreamEditor.vue:57 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:107 +#: src/views/stream/components/StreamEditor.vue:80 msgid "Advance Mode" msgstr "進階模式" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:104 +#: src/views/nginx_log/NginxLogList.vue:391 +msgid "Advanced indexing enabled but failed to start rebuild" +msgstr "高級索引已啟用但未能開始重建" + +#: src/views/nginx_log/NginxLogList.vue:382 +msgid "Advanced indexing enabled successfully" +msgstr "高級索引已成功啟用" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:294 +msgid "Advanced log indexing features are free and open source for all users" +msgstr "高級日誌索引功能對所有用戶免費且開源" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:81 +msgid "Advanced memory pooling system" +msgstr "高級記憶體池系統" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:242 +msgid "Advanced search & filtering" +msgstr "進階搜尋和篩選" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:529 +msgid "Advanced Settings" +msgstr "進階設定" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:105 msgid "Afterwards, refresh this page and click add passkey again." msgstr "之後,請重新整理此頁面並再次點擊新增通行金鑰。" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:141 -msgid "All" -msgstr "全部" +#: src/views/system/Licenses.vue:152 +msgid "All Components" +msgstr "所有組件" -#: src/components/Notification/notifications.ts:189 +#: src/components/Notification/notifications.ts:193 #: src/language/constants.ts:58 msgid "All Recovery Codes Have Been Used" msgstr "所有恢復代碼已用完" -#: src/views/certificate/components/DNSIssueCertificate.vue:158 +#: src/views/certificate/components/DNSIssueCertificate.vue:159 msgid "" "All selected subdomains must belong to the same DNS Provider, otherwise the " "certificate application will fail." msgstr "所有選定的子網域名稱必須屬於同一 DNS 提供商,否則證書申請將失敗。" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:159 +msgid "" +"Alternatively, if you cannot download the database, you can manually place " +"GeoLite2-City.mmdb in the same directory as app.ini." +msgstr "或者,如果您無法下載數據庫,可以手動將 GeoLite2-City.mmdb 文件放置於與 app.ini 相同的目錄中。" + +#: src/constants/errors/nginx_log.ts:10 +msgid "Analytics service not available" +msgstr "分析服務不可用" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:96 +msgid "Any" +msgstr "任意" + +#: src/components/AutoCertForm/AutoCertForm.vue:209 +msgid "Any reachable IP address can be used with private Certificate Authorities" +msgstr "任何可訪問的 IP 地址均可用於私有證書頒發機構" + #: src/views/preference/tabs/OpenAISettings.vue:32 msgid "API Base Url" msgstr "API 基礎網址" @@ -255,42 +345,46 @@ msgstr "API 代理" #: src/views/preference/tabs/OpenAISettings.vue:58 msgid "API Token" -msgstr "API令牌" +msgstr "API 令牌" #: src/views/preference/tabs/OpenAISettings.vue:67 msgid "API Type" msgstr "API 類型" -#: src/views/preference/Preference.vue:52 +#: src/views/preference/Preference.vue:53 msgid "App" msgstr "應用" -#: src/views/system/Upgrade.vue:195 +#: src/language/curd.ts:65 +msgid "Apply" +msgstr "應用" + +#: src/views/system/Upgrade.vue:194 msgid "Arch" msgstr "架構" -#: src/views/preference/tabs/AuthSettings.vue:130 +#: src/views/preference/tabs/AuthSettings.vue:126 msgid "Are you sure to delete this banned IP immediately?" msgstr "您確定要刪除這個被停用的 IP 嗎?" -#: src/views/preference/components/AuthSettings/Passkey.vue:113 +#: src/views/preference/components/AuthSettings/Passkey.vue:114 msgid "Are you sure to delete this passkey immediately?" msgstr "您確定要刪除這個被停用的通行金鑰嗎?" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:154 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 msgid "Are you sure to generate new recovery codes?" msgstr "您確定要生成新的復原代碼嗎?" -#: src/views/preference/components/AuthSettings/TOTP.vue:85 +#: src/views/preference/components/AuthSettings/TOTP.vue:87 msgid "Are you sure to reset 2FA?" msgstr "您確定要重設 2FA 嗎?" -#: src/components/Notification/Notification.vue:110 +#: src/components/Notification/Notification.vue:111 #: src/views/notification/Notification.vue:40 msgid "Are you sure you want to clear all notifications?" msgstr "您確定要清除所有通知嗎?" -#: src/components/ChatGPT/ChatMessageInput.vue:19 +#: src/components/LLM/ChatMessageInput.vue:63 msgid "Are you sure you want to clear the record of chat?" msgstr "您確定要清除聊天記錄嗎?" @@ -298,16 +392,16 @@ msgstr "您確定要清除聊天記錄嗎?" msgid "Are you sure you want to delete permanently?" msgstr "確定要永久刪除嗎?" -#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:113 -#: src/views/stream/StreamList.vue:123 +#: src/language/curd.ts:25 src/views/site/site_list/SiteList.vue:91 +#: src/views/stream/StreamList.vue:101 msgid "Are you sure you want to delete?" msgstr "您確定要刪除嗎?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:155 +#: src/components/NamespaceTabs/NamespaceTabs.vue:134 msgid "Are you sure you want to reload Nginx on the following sync nodes?" msgstr "您確定要在以下同步節點上重新載入 Nginx 嗎?" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:97 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:100 msgid "Are you sure you want to remove this directive?" msgstr "您確定要刪除這條指令嗎?" @@ -319,7 +413,7 @@ msgstr "您確定要刪除此項目嗎?" msgid "Are you sure you want to remove this location?" msgstr "您確定要刪除此 Location 嗎?" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:167 +#: src/components/NamespaceTabs/NamespaceTabs.vue:146 msgid "Are you sure you want to restart Nginx on the following sync nodes?" msgstr "您確定要在以下同步節點上重新啟動 Nginx 嗎?" @@ -327,23 +421,27 @@ msgstr "您確定要在以下同步節點上重新啟動 Nginx 嗎?" msgid "Are you sure you want to restore?" msgstr "您確定要恢復?" -#: src/components/ChatGPT/ChatGPT.vue:55 -msgid "Ask ChatGPT for Help" -msgstr "向 ChatGPT 尋求幫助" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Ascending" +msgstr "升序" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "Assistant" msgstr "助理" -#: src/components/SelfCheck/SelfCheck.vue:31 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:61 +msgid "At least 20GB available disk space" +msgstr "至少 20GB 可用磁碟空間" + +#: src/components/SelfCheck/SelfCheck.vue:48 msgid "Attempt to fix" msgstr "嘗試修復" -#: src/views/preference/tabs/AuthSettings.vue:17 +#: src/views/preference/tabs/AuthSettings.vue:18 msgid "Attempts" msgstr "嘗試次數" -#: src/views/preference/Preference.vue:82 +#: src/views/preference/Preference.vue:83 msgid "Auth" msgstr "身份驗證" @@ -351,12 +449,12 @@ msgstr "身份驗證" msgid "Authenticate with a passkey" msgstr "使用通行金鑰認證" -#: src/views/preference/tabs/AuthSettings.vue:56 -msgid "Authentication Settings" -msgstr "認證設定" +#: src/views/other/Login.vue:259 +msgid "Authenticating..." +msgstr "正在驗證..." -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:71 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:97 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:122 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:96 msgid "Author" msgstr "作者" @@ -390,28 +488,27 @@ msgstr "自動備份失敗" msgid "Auto Backup Storage Failed" msgstr "自動備份儲存失敗" -#: src/views/environments/list/Environment.vue:165 -#: src/views/nginx_log/NginxLog.vue:150 +#: src/views/nginx_log/NginxLog.vue:101 src/views/node/Node.vue:164 msgid "Auto Refresh" msgstr "自動重新整理" -#: src/views/environments/list/Environment.vue:48 +#: src/views/node/Node.vue:47 msgid "Auto refresh disabled" msgstr "自動刷新已停用" -#: src/views/environments/list/Environment.vue:44 +#: src/views/node/Node.vue:43 msgid "Auto refresh enabled" msgstr "自動刷新已啟用" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:78 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 msgid "Auto-renewal disabled for %{name}" msgstr "已關閉 %{name} 的自動續簽" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:71 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 msgid "Auto-renewal enabled for %{name}" msgstr "已啟用 %{name} 的自動續簽" -#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:54 #: src/views/site/site_edit/components/Cert/IssueCert.vue:84 msgid "AutoCert is running, please wait..." msgstr "AutoCert 正在執行中,請稍候..." @@ -420,16 +517,32 @@ msgstr "AutoCert 正在執行中,請稍候..." msgid "AutoCert is running..." msgstr "AutoCert 正在運行..." +#: src/views/nginx_log/components/IndexingSettingsModal.vue:262 +msgid "Automated log rotation detection" +msgstr "自動日誌輪轉檢測" + #: src/components/SystemRestore/SystemRestoreContent.vue:332 msgid "Automatic Restart" msgstr "自動重啟" -#: src/views/certificate/CertificateEditor.vue:257 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:36 +msgid "Average Latency" +msgstr "平均延遲" + +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:33 +msgid "Avg Daily UV" +msgstr "日均 UV" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:786 +msgid "Avg/PV" +msgstr "平均 /PV" + +#: src/views/certificate/components/CertificateActions.vue:22 #: src/views/config/components/ConfigLeftPanel.vue:273 #: src/views/config/ConfigList.vue:120 src/views/config/ConfigList.vue:217 -#: src/views/nginx_log/NginxLog.vue:174 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:156 -#: src/views/stream/components/StreamEditor.vue:111 +#: src/views/nginx_log/NginxLog.vue:129 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:183 +#: src/views/stream/components/StreamEditor.vue:147 msgid "Back" msgstr "返回" @@ -441,6 +554,20 @@ msgstr "返回首頁" msgid "Back to List" msgstr "返回列表" +#: src/views/system/Licenses.vue:113 src/views/system/Licenses.vue:187 +msgid "Backend" +msgstr "後端" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:569 +msgid "" +"Background indexing in progress. Data will be updated automatically when " +"ready." +msgstr "後台索引正在進行中。數據將在準備就緒後自動更新。" + +#: src/constants/errors/nginx_log.ts:14 +msgid "Background log service not available" +msgstr "後台日誌服務不可用" + #: src/routes/modules/backup.ts:11 src/routes/modules/backup.ts:19 msgid "Backup" msgstr "備份" @@ -449,7 +576,7 @@ msgstr "備份" msgid "Backup file integrity check failed, it may have been tampered with" msgstr "備份檔案完整性檢查失敗,可能已被篡改" -#: src/constants/errors/backup.ts:41 +#: src/constants/errors/backup.ts:38 msgid "Backup file not found: {0}" msgstr "找不到備份檔案: {0}" @@ -461,22 +588,18 @@ msgstr "備份已成功下載" msgid "Backup Path" msgstr "備份路徑" -#: src/constants/errors/backup.ts:75 +#: src/constants/errors/backup.ts:63 msgid "Backup path does not exist: {0}" msgstr "備份路徑不存在: {0}" -#: src/constants/errors/backup.ts:77 +#: src/constants/errors/backup.ts:65 msgid "Backup path is not a directory: {0}" msgstr "備份路徑不是目錄: {0}" -#: src/constants/errors/backup.ts:62 +#: src/constants/errors/backup.ts:55 msgid "Backup path is required for custom directory backup" msgstr "自訂目錄備份需要備份路徑" -#: src/constants/errors/backup.ts:60 -msgid "Backup path not in granted access paths: {0}" -msgstr "備份路徑不在授予的訪問路徑中: {0}" - #: src/views/backup/AutoBackup/components/CronEditor.vue:141 msgid "Backup Schedule" msgstr "備份計劃" @@ -497,15 +620,15 @@ msgstr "備份任務 %{backup_name} 執行失敗,錯誤:%{error}" msgid "Backup Type" msgstr "備份類型" -#: src/views/preference/tabs/AuthSettings.vue:97 +#: src/views/preference/tabs/AuthSettings.vue:93 msgid "Ban Threshold Minutes" msgstr "封禁閾值分鐘數" -#: src/views/preference/tabs/AuthSettings.vue:118 +#: src/views/preference/tabs/AuthSettings.vue:114 msgid "Banned IPs" msgstr "被禁止的 IP" -#: src/views/preference/tabs/AuthSettings.vue:20 +#: src/views/preference/tabs/AuthSettings.vue:21 msgid "Banned Until" msgstr "禁止至" @@ -517,18 +640,18 @@ msgstr "Bark" msgid "Base information" msgstr "基本資訊" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:29 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:31 -#: src/views/stream/components/RightPanel/RightPanel.vue:19 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:41 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:43 +#: src/views/stream/components/RightPanel/RightPanel.vue:31 msgid "Basic" msgstr "基本" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:97 -#: src/views/stream/components/StreamEditor.vue:60 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:110 +#: src/views/stream/components/StreamEditor.vue:83 msgid "Basic Mode" msgstr "基本模式" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:118 msgid "Basic Settings" msgstr "基本設定" @@ -540,7 +663,7 @@ msgstr "批次編輯" msgid "Batch Modify" msgstr "批次修改" -#: src/views/environments/list/BatchUpgrader.vue:153 +#: src/views/node/BatchUpgrader.vue:153 msgid "Batch Upgrade" msgstr "批次升級" @@ -552,11 +675,25 @@ msgstr "以下是您要批次修改的選定項目" msgid "Block is nil" msgstr "區塊為空" -#: src/views/system/About.vue:75 -msgid "Build with" -msgstr "建構基於" +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:137 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:256 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:522 +msgid "Browser" +msgstr "瀏覽器" -#: src/views/certificate/ACMEUser.vue:36 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:36 +msgid "Browser Statistics" +msgstr "瀏覽器統計" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:316 +msgid "" +"By enabling advanced indexing, you acknowledge that your system meets the " +"requirements and understand the performance implications. This will start " +"indexing existing log files immediately." +msgstr "啟用進階索引即表示您確認系統滿足要求並瞭解效能影響。這將立即開始對現有日誌檔案進行索引。" + +#: src/views/certificate/ACMEUser.vue:38 msgid "CA Dir" msgstr "CA 目錄" @@ -564,11 +701,11 @@ msgstr "CA 目錄" msgid "Cache" msgstr "快取" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:177 msgid "Cache items not accessed within this time will be removed" msgstr "在此時間內未被存取的快取項目將被移除" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:349 msgid "Cache loader processing time threshold" msgstr "快取載入器處理時間門檻" @@ -577,15 +714,15 @@ msgstr "快取載入器處理時間門檻" msgid "Cache manager processes" msgstr "快取管理行程" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:287 msgid "Cache manager processing time threshold" msgstr "快取管理器處理時間門檻" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:245 msgid "Cache Manager Settings" msgstr "快取管理器設定" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:123 msgid "Cache Path" msgstr "快取路徑" @@ -594,7 +731,7 @@ msgstr "快取路徑" msgid "Cache Processes" msgstr "快取行程" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:136 msgid "Cache subdirectory levels structure, e.g. 1:2" msgstr "快取子目錄層級結構,例如 1:2" @@ -609,24 +746,33 @@ msgid "" "performance depends on hardware, configuration, and workload" msgstr "基於 worker_processes * worker_connections 計算得出。實際效能取決於硬體、配置和工作負載" -#: src/components/ChatGPT/ChatMessage.vue:216 +#: src/components/LLM/ChatMessage.vue:245 #: src/components/NgxConfigEditor/NgxServer.vue:61 -#: src/components/NgxConfigEditor/NgxUpstream.vue:37 src/language/curd.ts:37 +#: src/components/NgxConfigEditor/NgxUpstream.vue:32 src/language/curd.ts:37 #: src/views/config/components/Delete.vue:98 -#: src/views/preference/components/AuthSettings/Passkey.vue:141 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:632 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:64 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:102 +#: src/views/nginx_log/indexing/IndexManagement.vue:33 +#: src/views/nginx_log/indexing/IndexManagement.vue:59 +#: src/views/preference/components/AuthSettings/Passkey.vue:142 #: src/views/site/components/SiteStatusSelect.vue:124 #: src/views/site/site_edit/components/Cert/IssueCert.vue:40 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:143 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:145 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:21 -#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/components/StreamStatusSelect.vue:62 msgid "Cancel" msgstr "取消" -#: src/constants/errors/backup.ts:76 +#: src/constants/errors/backup.ts:64 msgid "Cannot access backup path {0}: {1}" msgstr "無法存取備份路徑 {0}:{1}" -#: src/constants/errors/backup.ts:79 +#: src/constants/errors/nginx_log.ts:13 +msgid "Cannot access log file" +msgstr "無法存取日誌檔案" + +#: src/constants/errors/backup.ts:67 msgid "Cannot access storage path {0}: {1}" msgstr "無法存取儲存路徑 {0}:{1}" @@ -650,7 +796,7 @@ msgstr "目前狀態無法取得效能資料" msgid "Cannot remove initial user" msgstr "無法移除初始使用者" -#: src/views/preference/Preference.vue:88 +#: src/views/preference/Preference.vue:89 msgid "Cert" msgstr "證書" @@ -658,6 +804,11 @@ msgstr "證書" msgid "Cert path is not under the nginx conf dir" msgstr "證書路徑不在 Nginx 設定檔資料夾下" +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "certificate" +msgstr "證書" + #: src/components/Notification/notifications.ts:42 msgid "Certificate %{name} has expired" msgstr "證書 %{name} 已過期" @@ -670,7 +821,11 @@ msgstr "憑證 %{name} 將在 %{days} 天後過期" #: src/components/Notification/notifications.ts:58 msgid "Certificate %{name} will expire in 1 day" -msgstr "證書 %{name} 將在1天後過期" +msgstr "證書 %{name} 將在 1 天後過期" + +#: src/views/certificate/components/CertificateDownload.vue:37 +msgid "Certificate content and private key content cannot be empty" +msgstr "證書內容和私鑰內容不能為空" #: src/constants/errors/cert.ts:4 msgid "Certificate decode error" @@ -690,6 +845,14 @@ msgstr "憑證已過期" msgid "Certificate Expiring Soon" msgstr "憑證即將到期" +#: src/views/certificate/components/CertificateDownload.vue:71 +msgid "Certificate files downloaded successfully" +msgstr "憑證檔案下載成功" + +#: src/views/certificate/components/CertificateDownload.vue:42 +msgid "Certificate name cannot be empty" +msgstr "證書名稱不能為空" + #: src/language/generate.ts:4 msgid "Certificate not found: %{error}" msgstr "找不到證書: %{error}" @@ -702,8 +865,8 @@ msgstr "憑證解析錯誤" msgid "Certificate path is empty" msgstr "憑證路徑為空" -#: src/views/certificate/components/RemoveCert.vue:42 -#: src/views/certificate/components/RemoveCert.vue:62 +#: src/views/certificate/components/RemoveCert.vue:51 +#: src/views/certificate/components/RemoveCert.vue:71 msgid "Certificate removed successfully" msgstr "憑證已成功移除" @@ -719,13 +882,13 @@ msgstr "憑證更新成功" msgid "Certificate revoked successfully" msgstr "證書撤銷成功" -#: src/views/certificate/CertificateEditor.vue:125 +#: src/views/certificate/components/AutoCertManagement.vue:67 #: src/views/site/site_edit/components/Cert/Cert.vue:58 msgid "Certificate Status" msgid_plural "Certificates Status" msgstr[0] "憑證狀態" -#: src/views/certificate/components/DNSIssueCertificate.vue:106 +#: src/views/certificate/components/DNSIssueCertificate.vue:107 msgid "Certificate Type" msgstr "證書類型" @@ -734,7 +897,7 @@ msgstr "證書類型" msgid "Certificates" msgstr "憑證" -#: src/routes/modules/certificates.ts:28 +#: src/routes/modules/certificates.ts:36 msgid "Certificates List" msgstr "憑證列表" @@ -742,7 +905,7 @@ msgstr "憑證列表" msgid "Challenge error: {0}" msgstr "驗證錯誤:{0}" -#: src/components/AutoCertForm/AutoCertForm.vue:66 +#: src/components/AutoCertForm/AutoCertForm.vue:218 msgid "Challenge Method" msgstr "驗證方式" @@ -764,26 +927,33 @@ msgstr[0] "變更後憑證" msgid "Changed Path" msgstr "變更後路徑" -#: src/views/environments/list/BatchUpgrader.vue:160 -#: src/views/system/Upgrade.vue:207 +#: src/views/node/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:206 msgid "Channel" msgstr "通道" -#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:38 -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:41 -#: src/views/stream/components/RightPanel/RightPanel.vue:22 +#: src/views/config/components/ConfigRightPanel/ConfigRightPanel.vue:50 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:53 +#: src/views/stream/components/RightPanel/RightPanel.vue:34 msgid "Chat" msgstr "聊天" +#: src/components/LLM/LLM.vue:63 +msgid "Chat for %{path}" +msgstr "%{path} 的聊天" + #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:40 #: src/components/SelfCheck/SelfCheckHeaderBanner.vue:64 msgid "Check" msgstr "檢查" -#: src/views/system/Upgrade.vue:204 +#: src/views/system/Upgrade.vue:203 msgid "Check again" msgstr "再次檢查" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:592 +msgid "Check Favicon" +msgstr "檢查網站圖示" + #: src/language/generate.ts:6 msgid "" "Check if /var/run/docker.sock exists. If you are using Nginx UI Official " @@ -810,6 +980,20 @@ msgid "" msgstr "檢查是否啟用了 HTTPS。在 localhost 之外使用 HTTP 不安全,並且會阻止使用 Passkeys 和剪貼簿功能" #: src/language/generate.ts:8 +msgid "Check if the conf.d directory is under the nginx configuration directory" +msgstr "檢查 conf.d 目錄是否位於 nginx 配置目錄下" + +#: src/language/generate.ts:7 +msgid "" +"Check if the GeoLite2 database is available when log indexing is enabled. " +"The GeoLite2 database is required for geographic IP analysis in log " +"indexing. You can download it from the Preference page or manually place " +"GeoLite2-City.mmdb in the same directory as app.ini" +msgstr "" +"當啟用日誌索引時,檢查 GeoLite2 資料庫是否可用。GeoLite2 資料庫是日誌索引中地理 IP " +"分析所必需的。您可以在偏好設置頁面下載它,或者手動將 GeoLite2-City.mmdb 放在與 app.ini 相同的目錄中" + +#: src/language/generate.ts:10 msgid "" "Check if the nginx access log path exists. By default, this path is " "obtained from 'nginx -V'. If it cannot be obtained or the obtained path " @@ -822,15 +1006,15 @@ msgstr "" "獲取。如果無法獲取或獲取的路徑未指向有效的現有文件,將報告錯誤。在這種情況下,您需要修改配置文件以指定訪問日誌路徑。更多詳情請參閱文檔:https://" "nginxui.com/zh_CN/guide/config-nginx.html#accesslogpath" -#: src/language/generate.ts:9 +#: src/language/generate.ts:11 msgid "Check if the nginx configuration directory exists" msgstr "檢查 nginx 配置目錄是否存在" -#: src/language/generate.ts:10 +#: src/language/generate.ts:12 msgid "Check if the nginx configuration entry file exists" msgstr "檢查 nginx 配置入口文件是否存在" -#: src/language/generate.ts:11 +#: src/language/generate.ts:13 msgid "" "Check if the nginx error log path exists. By default, this path is obtained " "from 'nginx -V'. If it cannot be obtained or the obtained path does not " @@ -843,7 +1027,7 @@ msgstr "" "獲取。如果無法獲取或獲取的路徑未指向有效的現有文件,將報錯。此時需要修改配置文件以指定錯誤日誌路徑。詳情請參閱文件:https://nginxui." "com/zh_CN/guide/config-nginx.html#errorlogpath" -#: src/language/generate.ts:7 +#: src/language/generate.ts:9 msgid "" "Check if the nginx PID path exists. By default, this path is obtained from " "'nginx -V'. If it cannot be obtained, an error will be reported. In this " @@ -855,34 +1039,47 @@ msgstr "" "獲取的。如果無法獲取,將會報錯。在這種情況下,您需要修改設定檔以指定 Nginx PID " "路徑。更多詳情請參閱文件:https://nginxui.com/zh_CN/guide/config-nginx.html#pidpath" -#: src/language/generate.ts:12 +#: src/language/generate.ts:14 msgid "Check if the nginx sbin path exists" msgstr "檢查 nginx sbin 路徑是否存在" -#: src/language/generate.ts:13 +#: src/language/generate.ts:15 msgid "Check if the nginx.conf includes the conf.d directory" msgstr "檢查 nginx.conf 是否包含 conf.d 目錄" -#: src/language/generate.ts:14 +#: src/language/generate.ts:16 msgid "Check if the nginx.conf includes the sites-enabled directory" msgstr "檢查 nginx.conf 是否包含 sites-enabled 目錄" -#: src/language/generate.ts:15 +#: src/language/generate.ts:17 msgid "Check if the nginx.conf includes the streams-enabled directory" msgstr "檢查 nginx.conf 是否包含 streams-enabled 目錄" -#: src/language/generate.ts:16 +#: src/language/generate.ts:18 msgid "" "Check if the sites-available and sites-enabled directories are under the " "nginx configuration directory" msgstr "檢查 sites-available 和 sites-enabled 目錄是否位於 nginx 配置目錄下" -#: src/language/generate.ts:17 +#: src/language/generate.ts:19 msgid "" "Check if the streams-available and streams-enabled directories are under " "the nginx configuration directory" msgstr "檢查 streams-available 和 streams-enabled 目錄是否位於 nginx 配置目錄下" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:532 +msgid "Check Interval (seconds)" +msgstr "檢查間隔(秒)" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:181 +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +msgid "China Access Map" +msgstr "中國訪問地圖" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:34 +msgid "China Map" +msgstr "中國地圖" + #: src/constants/errors/crypto.ts:3 msgid "Cipher text is too short" msgstr "加密文字過短" @@ -891,13 +1088,13 @@ msgstr "加密文字過短" msgid "Cleaning environment variables" msgstr "清理環境變數" -#: src/components/ChatGPT/ChatMessageInput.vue:23 -#: src/components/Notification/Notification.vue:115 +#: src/components/LLM/ChatMessageInput.vue:67 +#: src/components/Notification/Notification.vue:116 #: src/views/notification/Notification.vue:45 msgid "Clear" msgstr "清除" -#: src/components/Notification/Notification.vue:68 +#: src/components/Notification/Notification.vue:69 #: src/views/notification/Notification.vue:13 msgid "Cleared successfully" msgstr "清除成功" @@ -915,7 +1112,7 @@ msgstr "點擊或拖拽文件到此處上傳" msgid "Click or drag folders to this area to upload" msgstr "點擊或拖拽文件夾到此處上傳" -#: src/views/preference/components/AuthSettings/TOTP.vue:110 +#: src/views/preference/components/AuthSettings/TOTP.vue:112 msgid "Click to copy" msgstr "點選複製" @@ -923,10 +1120,18 @@ msgstr "點選複製" msgid "Client Body Buffer Size" msgstr "Client 請求主體緩衝區大小" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:614 +msgid "Client Certificate" +msgstr "客戶端憑證" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:117 msgid "Client Header Buffer Size" msgstr "Client 請求標頭緩衝區大小" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:619 +msgid "Client Key" +msgstr "客戶端金鑰" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:110 msgid "Client Max Body Size" msgstr "Client 最大請求主體大小" @@ -955,6 +1160,14 @@ msgstr "程式碼補全未啟用" msgid "Code Completion Model" msgstr "程式碼補全模型" +#: src/language/curd.ts:71 +msgid "Collapse" +msgstr "折疊" + +#: src/language/curd.ts:64 +msgid "Column Settings" +msgstr "列設置" + #: src/views/preference/tabs/LogrotateSettings.vue:23 msgid "Command" msgstr "命令" @@ -963,7 +1176,7 @@ msgstr "命令" msgid "Command exited with unexpected exit code: {0}, error: {1}" msgstr "命令以意外退出代碼結束:{0},錯誤:{1}" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:115 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:118 #: src/components/NgxConfigEditor/LocationEditor.vue:104 #: src/components/NgxConfigEditor/LocationEditor.vue:135 #: src/components/NgxConfigEditor/NgxServer.vue:123 @@ -986,11 +1199,34 @@ msgstr "比較所選項目" msgid "Compare with Current" msgstr "與目前設定比較" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:71 +msgid "Complete indexing with search capabilities" +msgstr "具備搜索功能的完整索引" + +#: src/views/system/Licenses.vue:144 +msgid "components" +msgstr "組件" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:270 +msgid "Compressed log file support" +msgstr "壓縮日誌文件支援" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88 msgid "Compression level, 1 is lowest, 9 is highest" msgstr "壓縮等級,1 為最低,9 為最高" -#: src/views/preference/components/ExternalNotify/columns.tsx:46 +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:54 +msgid "Computing Statistics" +msgstr "計算統計資訊" + +#: src/language/generate.ts:20 +msgid "Conf.d directory exists" +msgstr "conf.d 目錄存在" + +#: src/constants/errors/self_check.ts:23 +msgid "Conf.d directory not exists" +msgstr "Conf.d 目錄不存在" + #: src/views/preference/components/ExternalNotify/columns.tsx:58 msgid "Config" msgstr "配置" @@ -1003,22 +1239,30 @@ msgstr "配置目錄不存在" msgid "Config entry file not exist" msgstr "配置入口文件不存在" +#: src/constants/errors/user.ts:15 +msgid "Config not found" +msgstr "未找到配置" + #: src/constants/errors/backup.ts:14 msgid "Config path is empty" msgstr "設定路徑為空" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:37 +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:49 msgid "Config Template" msgstr "配置模板" -#: src/views/certificate/DNSCredential.vue:25 +#: src/views/certificate/DNSCredential.vue:52 msgid "Configuration" msgstr "配置" -#: src/views/config/InspectConfig.vue:45 +#: src/components/InspectConfig/InspectConfig.vue:62 msgid "Configuration file is test successful" msgstr "設定檔案測試成功" +#: src/components/InspectConfig/InspectConfig.vue:61 +msgid "Configuration file is test successful in isolated sandbox" +msgstr "組態檔案在隔離的沙箱中測試成功" + #: src/components/ConfigHistory/ConfigHistory.vue:147 msgid "Configuration History" msgstr "設定歷史記錄" @@ -1039,11 +1283,20 @@ msgstr "設定" msgid "Configure SSL" msgstr "設定 SSL" +#: src/language/curd.ts:66 +msgid "Confirm Delete" +msgstr "確認刪除" + #: src/views/user/UserProfile.vue:204 msgid "Confirm New Password" msgstr "確認新密碼" -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:315 +msgid "Confirmation Required" +msgstr "需要確認" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 msgid "Connected" msgstr "已連線" @@ -1051,9 +1304,9 @@ msgstr "已連線" msgid "Connection error, trying to reconnect..." msgstr "連線錯誤,正在嘗試重新連線..." -#: src/views/terminal/Terminal.vue:139 -msgid "Connection lost, please refresh the page." -msgstr "連線中斷,請重新整理此頁面。" +#: src/views/terminal/components/TerminalSessionContent.vue:38 +msgid "Connection lost for this terminal. Please refresh if needed." +msgstr "此終端連接已斷開。請根據需要重新整理。" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61 msgid "Connection timeout period" @@ -1063,14 +1316,14 @@ msgstr "連接逾時期限" msgid "Container status unknown" msgstr "容器狀態未知" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:120 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:123 #: src/components/NgxConfigEditor/LocationEditor.vue:116 #: src/components/NgxConfigEditor/LocationEditor.vue:144 msgid "Content" msgstr "內容" #: src/components/SensitiveString/SensitiveString.vue:37 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copied" msgstr "已複製" @@ -1083,14 +1336,38 @@ msgstr "已複製!" msgid "Copy" msgstr "複製" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:121 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:122 msgid "Copy Codes" msgstr "恢復碼" -#: src/views/system/Upgrade.vue:162 +#: src/views/system/Upgrade.vue:161 msgid "Core Upgrade" msgstr "核心升級" +#: src/constants/errors/docker.ts:15 +msgid "Could not find old container name" +msgstr "找不到舊容器名稱" + +#: src/constants/errors/docker.ts:16 +msgid "Could not find temp container" +msgstr "找不到暫存容器" + +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:18 +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:98 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:17 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:100 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:18 +msgid "Count" +msgstr "計數" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:174 +msgid "Country / Region" +msgstr "國家/地區" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:48 +msgid "CPU" +msgstr "CPU" + #: src/views/dashboard/ServerAnalytic.vue:308 msgid "CPU Status" msgstr "中央處理器狀態" @@ -1130,10 +1407,10 @@ msgid "" msgstr "建立系統備份,包括 Nginx 設定與 Nginx UI 設定。備份檔案將自動下載至您的電腦。" #: src/views/backup/AutoBackup/AutoBackup.vue:229 -#: src/views/environments/group/columns.ts:29 +#: src/views/namespace/columns.ts:85 #: src/views/notification/notificationColumns.tsx:51 -#: src/views/preference/components/AuthSettings/Passkey.vue:95 -#: src/views/preference/components/ExternalNotify/columns.tsx:71 +#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/views/preference/components/ExternalNotify/columns.tsx:80 #: src/views/user/userColumns.tsx:46 msgid "Created at" msgstr "建立時間" @@ -1158,11 +1435,15 @@ msgstr "認證資訊" msgid "Cron Expression" msgstr "Cron 表達式" -#: src/views/preference/components/AuthSettings/TOTP.vue:72 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:266 +msgid "Cross-file timeline correlation" +msgstr "跨文件時間線關聯" + +#: src/views/preference/components/AuthSettings/TOTP.vue:74 msgid "Current account is enabled TOTP." msgstr "目前帳戶已啟用 TOTP。" -#: src/views/preference/components/AuthSettings/TOTP.vue:70 +#: src/views/preference/components/AuthSettings/TOTP.vue:72 msgid "Current account is not enabled TOTP." msgstr "目前帳戶未啟用 TOTP。" @@ -1182,12 +1463,12 @@ msgstr "當前密碼" msgid "Current usage" msgstr "目前用量" -#: src/views/system/Upgrade.vue:182 +#: src/views/system/Upgrade.vue:181 msgid "Current Version" msgstr "目前版本" #: src/components/NgxConfigEditor/NgxConfigEditor.vue:33 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:104 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:129 msgid "Custom" msgstr "自訂" @@ -1200,14 +1481,18 @@ msgstr "自訂 cron 表達式" msgid "Custom Directory" msgstr "自訂目錄" -#: src/views/certificate/components/DNSIssueCertificate.vue:128 +#: src/views/certificate/components/DNSIssueCertificate.vue:129 msgid "Custom Domains" msgstr "自訂網域" -#: src/views/certificate/components/DNSIssueCertificate.vue:112 +#: src/views/certificate/components/DNSIssueCertificate.vue:113 msgid "Custom Domains Certificate" msgstr "自訂網域證書" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:426 +msgid "Custom Headers" +msgstr "自訂標頭" + #: src/views/preference/tabs/NodeSettings.vue:19 msgid "" "Customize the name of local node to be displayed in the environment " @@ -1218,6 +1503,10 @@ msgstr "自訂顯示在環境指示器中的本機節點名稱。" msgid "Daily" msgstr "每日" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:41 +msgid "Daily Access Trends" +msgstr "每日訪問趨勢" + #: src/views/backup/AutoBackup/AutoBackup.vue:128 msgid "Daily at %{time}" msgstr "每天 %{time}" @@ -1225,10 +1514,18 @@ msgstr "每天 %{time}" #: src/routes/modules/dashboard.ts:10 #: src/views/config/components/ConfigLeftPanel.vue:109 #: src/views/config/components/ConfigLeftPanel.vue:159 -#: src/views/config/ConfigList.vue:69 +#: src/views/config/ConfigList.vue:69 src/views/nginx_log/NginxLog.vue:93 msgid "Dashboard" msgstr "儀錶板" +#: src/views/nginx_log/dashboard/components/DailyTrendsChart.vue:71 +msgid "Date" +msgstr "日期" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:39 +msgid "Date Range" +msgstr "日期範圍" + #: src/views/backup/AutoBackup/components/CronEditor.vue:184 msgid "Day of Month" msgstr "月中的某天" @@ -1241,34 +1538,48 @@ msgstr "星期幾" msgid "Days" msgstr "天" +#: src/constants/errors/user.ts:16 +msgid "Db file not found" +msgstr "資料庫檔案未找到" + +#: src/constants/errors/geolite.ts:12 +msgid "Decompression succeeded but failed to delete compressed file: {0}" +msgstr "解壓成功但刪除壓縮檔案失敗: {0}" + #: src/constants/errors/middleware.ts:3 msgid "Decryption failed" msgstr "解密失敗" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:840 +msgid "Default range" +msgstr "預設範圍" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:149 msgid "Define shared memory zone name and size, e.g. proxy_cache:10m" msgstr "定義共享記憶體區域名稱和大小,例如 proxy_cache:10m" +#: src/components/LLM/LLMSessionTabs.vue:293 +#: src/components/LLM/LLMSessionTabs.vue:384 #: src/components/NgxConfigEditor/NgxServer.vue:110 -#: src/components/NgxConfigEditor/NgxUpstream.vue:134 src/language/curd.ts:9 -#: src/views/certificate/components/RemoveCert.vue:90 +#: src/components/NgxConfigEditor/NgxUpstream.vue:78 src/language/curd.ts:9 +#: src/views/certificate/components/RemoveCert.vue:99 #: src/views/config/components/Delete.vue:65 #: src/views/config/components/Delete.vue:97 #: src/views/config/ConfigList.vue:199 -#: src/views/site/site_list/SiteList.vue:122 -#: src/views/stream/StreamList.vue:132 +#: src/views/site/site_list/SiteList.vue:100 +#: src/views/stream/StreamList.vue:110 msgid "Delete" msgstr "刪除" #: src/components/Notification/notifications.ts:86 -msgid "Delete %{path} on %{env_name} failed" -msgstr "刪除 %{env_name} 上的 %{path} 失敗" +msgid "Delete %{path} on %{node_name} failed" +msgstr "刪除 %{node_name} 上的 %{path} 失敗" #: src/components/Notification/notifications.ts:90 -msgid "Delete %{path} on %{env_name} successfully" -msgstr "已在 %{env_name} 上成功刪除 %{path}" +msgid "Delete %{path} on %{node_name} successfully" +msgstr "在 %{node_name} 上成功刪除 %{path}" -#: src/views/certificate/components/RemoveCert.vue:95 +#: src/views/certificate/components/RemoveCert.vue:104 msgid "Delete Certificate" msgstr "刪除憑證" @@ -1288,43 +1599,44 @@ msgstr "刪除遠端配置錯誤" msgid "Delete Remote Config Success" msgstr "遠端配置刪除成功" -#: src/components/Notification/notifications.ts:93 src/language/constants.ts:50 +#: src/components/Notification/notifications.ts:97 src/language/constants.ts:50 msgid "Delete Remote Site Error" msgstr "刪除遠端網站錯誤" -#: src/components/Notification/notifications.ts:97 src/language/constants.ts:49 +#: src/components/Notification/notifications.ts:101 +#: src/language/constants.ts:49 msgid "Delete Remote Site Success" msgstr "刪除遠端網站成功" -#: src/components/Notification/notifications.ts:149 +#: src/components/Notification/notifications.ts:153 msgid "Delete Remote Stream Error" msgstr "刪除遠端串流錯誤" -#: src/components/Notification/notifications.ts:153 +#: src/components/Notification/notifications.ts:157 msgid "Delete Remote Stream Success" msgstr "刪除遠端串流成功" -#: src/components/Notification/notifications.ts:94 +#: src/components/Notification/notifications.ts:98 msgid "Delete site %{name} from %{node} failed" msgstr "從 %{node} 刪除網站 %{name} 失敗" -#: src/components/Notification/notifications.ts:98 +#: src/components/Notification/notifications.ts:102 msgid "Delete site %{name} from %{node} successfully" msgstr "成功從 %{node} 移除站點 %{name}" -#: src/views/site/site_list/SiteList.vue:48 +#: src/views/site/site_list/SiteList.vue:26 msgid "Delete site: %{site_name}" msgstr "刪除網站:%{site_name}" -#: src/components/Notification/notifications.ts:150 +#: src/components/Notification/notifications.ts:154 msgid "Delete stream %{name} from %{node} failed" msgstr "從 %{node} 刪除串流 %{name} 失敗" -#: src/components/Notification/notifications.ts:154 +#: src/components/Notification/notifications.ts:158 msgid "Delete stream %{name} from %{node} successfully" msgstr "已成功從 %{node} 刪除串流 %{name}" -#: src/views/stream/StreamList.vue:47 +#: src/views/stream/StreamList.vue:25 msgid "Delete stream: %{stream_name}" msgstr "刪除 Stream:%{stream_name}" @@ -1340,8 +1652,16 @@ msgstr "演示" msgid "Deploy" msgstr "部署" -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:74 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:98 +#: src/views/namespace/columns.ts:72 +msgid "Deploy Mode" +msgstr "部署模式" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Descending" +msgstr "降序" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:123 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:99 msgid "Description" msgstr "描述" @@ -1357,18 +1677,44 @@ msgstr "目標檔案: {0} 已存在" msgid "Details" msgstr "細節" -#: src/views/system/Upgrade.vue:216 +#: src/views/system/Upgrade.vue:215 msgid "Dev" msgstr "Dev" +#: src/views/node/BatchUpgrader.vue:171 +msgid "Development" +msgstr "開發" + #: src/views/system/About.vue:28 msgid "Development Mode" msgstr "開發模式" +#: src/views/nginx_log/structured/components/SearchFilters.vue:169 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:288 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:524 +msgid "Device" +msgstr "裝置" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:35 +msgid "Device Statistics" +msgstr "設備統計" + +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:12 +msgid "Device Type" +msgstr "設備類型" + +#: src/constants/errors/upgrader.ts:4 +msgid "Digest file content is empty" +msgstr "摘要檔案內容為空" + #: src/views/preference/components/ExternalNotify/dingtalk.ts:5 msgid "DingTalk" msgstr "釘釘" +#: src/views/upstream/SocketList.vue:30 +msgid "Direct" +msgstr "直接" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:72 msgid "Directive" msgstr "指令" @@ -1389,98 +1735,101 @@ msgstr "指令索引超出範圍" msgid "Directives" msgstr "指令" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:134 msgid "Directory Levels" msgstr "目錄層級" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:126 msgid "Directory path to store cache files" msgstr "儲存快取檔案的目錄路徑" #: src/views/site/components/SiteStatusSelect.vue:115 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "disable" msgstr "禁用" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:80 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:82 msgid "Disable auto-renewal failed for %{name}" msgstr "停用 %{name} 的自動續期失敗" -#: src/components/Notification/notifications.ts:101 +#: src/components/Notification/notifications.ts:105 #: src/language/constants.ts:52 msgid "Disable Remote Site Error" msgstr "禁用遠端站點錯誤" -#: src/components/Notification/notifications.ts:125 +#: src/components/Notification/notifications.ts:129 msgid "Disable Remote Site Maintenance Error" msgstr "禁用遠端站點維護錯誤" -#: src/components/Notification/notifications.ts:129 +#: src/components/Notification/notifications.ts:133 msgid "Disable Remote Site Maintenance Success" msgstr "遠端站點維護已成功停用" -#: src/components/Notification/notifications.ts:105 +#: src/components/Notification/notifications.ts:109 #: src/language/constants.ts:51 msgid "Disable Remote Site Success" msgstr "遠端站點停用成功" -#: src/components/Notification/notifications.ts:157 +#: src/components/Notification/notifications.ts:161 msgid "Disable Remote Stream Error" msgstr "停用遠端串流錯誤" -#: src/components/Notification/notifications.ts:161 +#: src/components/Notification/notifications.ts:165 msgid "Disable Remote Stream Success" msgstr "停用遠端串流成功" -#: src/components/Notification/notifications.ts:102 +#: src/components/Notification/notifications.ts:106 msgid "Disable site %{name} from %{node} failed" msgstr "停用 %{node} 上的網站 %{name} 失敗" -#: src/components/Notification/notifications.ts:106 +#: src/components/Notification/notifications.ts:110 msgid "Disable site %{name} from %{node} successfully" msgstr "已成功從 %{node} 停用網站 %{name}" -#: src/components/Notification/notifications.ts:126 +#: src/components/Notification/notifications.ts:130 msgid "Disable site %{name} maintenance on %{node} failed" -msgstr "在 %{node} 上停用網站%{name}的維護模式失敗" +msgstr "在 %{node} 上停用網站 %{name} 的維護模式失敗" -#: src/components/Notification/notifications.ts:130 +#: src/components/Notification/notifications.ts:134 msgid "Disable site %{name} maintenance on %{node} successfully" msgstr "網站 %{name} 在 %{node} 上的維護已成功停用" -#: src/components/Notification/notifications.ts:158 +#: src/components/Notification/notifications.ts:162 msgid "Disable stream %{name} from %{node} failed" msgstr "停用來自 %{node} 的串流 %{name} 失敗" -#: src/components/Notification/notifications.ts:162 +#: src/components/Notification/notifications.ts:166 msgid "Disable stream %{name} from %{node} successfully" msgstr "已成功從 %{node} 停用串流 %{name}" #: src/views/backup/AutoBackup/AutoBackup.vue:175 -#: src/views/environments/list/envColumns.tsx:60 -#: src/views/environments/list/envColumns.tsx:78 +#: src/views/node/nodeColumns.tsx:60 src/views/node/nodeColumns.tsx:78 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:162 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:62 -#: src/views/site/site_list/columns.tsx:139 src/views/stream/columns.tsx:106 -#: src/views/stream/components/StreamEditor.vue:32 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:75 +#: src/views/site/site_list/columns.tsx:146 src/views/stream/columns.tsx:112 +#: src/views/stream/components/StreamEditor.vue:55 #: src/views/user/userColumns.tsx:39 msgid "Disabled" msgstr "停用" #: src/views/site/components/SiteStatusSelect.vue:67 -#: src/views/stream/components/StreamStatusSelect.vue:39 +#: src/views/stream/components/StreamStatusSelect.vue:40 msgid "Disabled successfully" msgstr "成功停用" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:39 +msgid "Disconnected" +msgstr "已斷開連接" + #: src/views/dashboard/ServerAnalytic.vue:373 msgid "Disk IO" msgstr "磁碟 IO" -#: src/routes/modules/certificates.ts:56 -#: src/views/certificate/DNSCredential.vue:52 +#: src/routes/modules/certificates.ts:28 +#: src/views/certificate/DNSCredential.vue:79 msgid "DNS Credentials" msgstr "DNS 認證" @@ -1489,23 +1838,27 @@ msgstr "DNS 認證" msgid "DNS Provider" msgstr "DNS 供應商" -#: src/components/AutoCertForm/AutoCertForm.vue:73 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:600 +msgid "DNS Resolver" +msgstr "DNS 解析器" + +#: src/components/AutoCertForm/AutoCertForm.vue:228 msgid "DNS01" msgstr "DNS01" -#: src/components/AutoCertForm/AutoCertForm.vue:103 +#: src/components/AutoCertForm/AutoCertForm.vue:261 msgid "Do not enable this option unless you are sure that you need it." msgstr "除非您確定需要,否則不要啟用此選項。" #: src/views/site/components/SiteStatusSelect.vue:120 msgid "Do you want to %{action} this site?" -msgstr "您想要%{action}這個網站嗎?" +msgstr "您想要 %{action} 這個網站嗎?" -#: src/views/stream/components/StreamStatusSelect.vue:57 +#: src/views/stream/components/StreamStatusSelect.vue:58 msgid "Do you want to %{action} this stream?" -msgstr "您要%{action}此串流嗎?" +msgstr "您要 %{action} 此串流嗎?" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:139 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:141 msgid "Do you want to disable auto-cert renewal?" msgstr "您要停用自動憑證續訂嗎?" @@ -1518,7 +1871,7 @@ msgstr "您想啟用 TLS 嗎?" msgid "Do you want to remove this server?" msgstr "您要移除此伺服器嗎?" -#: src/components/NgxConfigEditor/NgxUpstream.vue:33 +#: src/components/NgxConfigEditor/NgxUpstream.vue:28 msgid "Do you want to remove this upstream?" msgstr "您要移除這個 Upstream 嗎?" @@ -1526,7 +1879,7 @@ msgstr "您要移除這個 Upstream 嗎?" msgid "Docker client not initialized" msgstr "Docker 客戶端未初始化" -#: src/language/generate.ts:18 +#: src/language/generate.ts:21 msgid "Docker socket exists" msgstr "Docker 套接字存在" @@ -1540,14 +1893,35 @@ msgid "Document" msgid_plural "Documents" msgstr[0] "檔案" -#: src/views/certificate/components/DNSIssueCertificate.vue:118 +#: src/views/nginx_log/NginxLogList.vue:292 +msgid "Document Count" +msgstr "文件數量" + +#: src/views/certificate/components/DNSIssueCertificate.vue:119 msgid "Domain" msgstr "網域" -#: src/views/certificate/CertificateEditor.vue:109 +#: src/views/certificate/components/AutoCertManagement.vue:55 msgid "Domains list is empty, try to reopen Auto Cert for %{config}" msgstr "網域列表為空,請嘗試重新開啟 %{config} 的自動憑證" +#: src/views/certificate/components/CertificateDownload.vue:94 +msgid "Download Certificate Files" +msgstr "下載證書文件" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:116 +msgid "Download complete" +msgstr "下載完成" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:105 +msgid "Download failed" +msgstr "下載失敗" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:186 +#: src/components/SelfCheck/SelfCheck.vue:83 +msgid "Download GeoLite2 Database" +msgstr "下載 GeoLite2 資料庫" + #: src/language/constants.ts:27 msgid "Download latest release error" msgstr "下載最新版本錯誤" @@ -1556,21 +1930,30 @@ msgstr "下載最新版本錯誤" msgid "Downloading latest release" msgstr "正在下載最新版本" -#: src/views/environments/list/BatchUpgrader.vue:189 -#: src/views/system/Upgrade.vue:237 +#: src/views/certificate/components/CertificateContentEditor.vue:158 +msgid "Drop certificate file here" +msgstr "將證書文件拖放到此處" + +#: src/views/certificate/components/CertificateContentEditor.vue:219 +msgid "Drop private key file here" +msgstr "將私鑰檔案拖放到此處" + +#: src/views/node/BatchUpgrader.vue:192 src/views/system/Upgrade.vue:236 msgid "Dry run mode enabled" msgstr "試運轉模式已啟用" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:106 +#: src/views/preference/components/AuthSettings/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 "基於部分瀏覽器的安全政策,您無法在未啟用 HTTPS 網站,特別是 localhost 上使用通行金鑰。" +#: src/components/LLM/LLMSessionTabs.vue:287 +#: src/components/LLM/LLMSessionTabs.vue:378 #: src/views/site/site_list/SiteDuplicate.vue:72 -#: src/views/site/site_list/SiteList.vue:108 +#: src/views/site/site_list/SiteList.vue:86 #: src/views/stream/components/StreamDuplicate.vue:64 -#: src/views/stream/StreamList.vue:118 +#: src/views/stream/StreamList.vue:96 msgid "Duplicate" msgstr "複製" @@ -1579,21 +1962,33 @@ msgstr "複製" msgid "Duplicate to local successfully" msgstr "成功複製至本機" -#: src/views/dashboard/components/ModulesTable.vue:87 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/views/dashboard/components/ModulesTable.vue:66 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Dynamic" msgstr "動態" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:238 +msgid "Dynamic shard management" +msgstr "動態分片管理" + #: src/views/backup/AutoBackup/components/CronEditor.vue:197 msgid "e.g., 0 0 * * * (daily at midnight)" msgstr "例如:0 0 * * *(每天午夜)" +#: src/views/certificate/ACMEUser.vue:100 +msgid "EAB HMAC Key" +msgstr "EAB HMAC 密鑰" + +#: src/views/certificate/ACMEUser.vue:87 +msgid "EAB Key ID" +msgstr "EAB 密鑰 ID" + #: src/language/curd.ts:8 msgid "Edit" msgstr "編輯" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 -#: src/views/stream/components/StreamEditor.vue:21 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:64 +#: src/views/stream/components/StreamEditor.vue:44 msgid "Edit %{n}" msgstr "編輯 %{n}" @@ -1610,7 +2005,7 @@ msgstr "編輯網站" msgid "Edit Stream" msgstr "編輯 Stream" -#: src/views/certificate/ACMEUser.vue:24 +#: src/views/certificate/ACMEUser.vue:26 #: src/views/preference/tabs/CertSettings.vue:12 msgid "Email" msgstr "電子郵件" @@ -1619,16 +2014,28 @@ msgstr "電子郵件" msgid "Email (*)" msgstr "電子郵件 (*)" +#: src/constants/errors/nginx_log.parser.ts:2 +msgid "Empty log line" +msgstr "空日誌行" + #: src/views/site/components/SiteStatusSelect.vue:114 -#: src/views/stream/components/StreamStatusSelect.vue:54 +#: src/views/stream/components/StreamStatusSelect.vue:55 msgid "enable" msgstr "啟用" -#: src/views/preference/components/AuthSettings/TOTP.vue:45 +#: src/views/preference/components/AuthSettings/TOTP.vue:46 msgid "Enable 2FA successfully" msgstr "啟用多因素身份驗證成功" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:73 +#: src/views/nginx_log/NginxLogList.vue:468 +msgid "Enable Advanced Indexing" +msgstr "啟用高級索引" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:98 +msgid "Enable Advanced Log Indexing" +msgstr "啟用進階日誌索引" + +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:75 msgid "Enable auto-renewal failed for %{name}" msgstr "啟用 %{name} 自動續簽失敗" @@ -1652,101 +2059,112 @@ msgstr "啟用 HTTP/3" msgid "Enable HTTPS" msgstr "啟用 HTTPS" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:100 +msgid "Enable Indexing" +msgstr "啟用索引" + +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:113 msgid "Enable Proxy Cache" msgstr "啟用 Proxy 快取" -#: src/components/Notification/notifications.ts:109 +#: src/components/Notification/notifications.ts:113 #: src/language/constants.ts:54 msgid "Enable Remote Site Error" msgstr "啟用遠端網站錯誤" -#: src/components/Notification/notifications.ts:117 +#: src/components/Notification/notifications.ts:121 msgid "Enable Remote Site Maintenance Error" msgstr "啟用遠端網站維護錯誤" -#: src/components/Notification/notifications.ts:121 +#: src/components/Notification/notifications.ts:125 msgid "Enable Remote Site Maintenance Success" msgstr "啟用遠端網站維護成功" -#: src/components/Notification/notifications.ts:113 +#: src/components/Notification/notifications.ts:117 #: src/language/constants.ts:53 msgid "Enable Remote Site Success" msgstr "啟用遠端站點成功" -#: src/components/Notification/notifications.ts:165 +#: src/components/Notification/notifications.ts:169 msgid "Enable Remote Stream Error" msgstr "啟用遠端串流錯誤" -#: src/components/Notification/notifications.ts:169 +#: src/components/Notification/notifications.ts:173 msgid "Enable Remote Stream Success" msgstr "啟用遠端串流成功" -#: src/components/Notification/notifications.ts:118 +#: src/components/Notification/notifications.ts:122 msgid "Enable site %{name} maintenance on %{node} failed" msgstr "啟用網站 %{name} 在 %{node} 上的維護模式失敗" -#: src/components/Notification/notifications.ts:122 +#: src/components/Notification/notifications.ts:126 msgid "Enable site %{name} maintenance on %{node} successfully" -msgstr "成功在 %{node} 上啟用網站%{name}的維護模式" +msgstr "成功在 %{node} 上啟用網站 %{name} 的維護模式" -#: src/components/Notification/notifications.ts:110 +#: src/components/Notification/notifications.ts:114 msgid "Enable site %{name} on %{node} failed" -msgstr "在 %{node} 上啟用網站%{name}失敗" +msgstr "在 %{node} 上啟用網站 %{name} 失敗" -#: src/components/Notification/notifications.ts:114 +#: src/components/Notification/notifications.ts:118 msgid "Enable site %{name} on %{node} successfully" msgstr "成功在 %{node} 上啟用網站%{name}" -#: src/components/Notification/notifications.ts:166 +#: src/components/Notification/notifications.ts:170 msgid "Enable stream %{name} on %{node} failed" msgstr "在 %{node} 上啟用串流 %{name} 失敗" -#: src/components/Notification/notifications.ts:170 +#: src/components/Notification/notifications.ts:174 msgid "Enable stream %{name} on %{node} successfully" msgstr "在 %{node} 上成功啟用串流 %{name}" #: src/views/dashboard/NginxDashBoard.vue:172 msgid "Enable stub_status module" -msgstr "啟用stub_status模組" +msgstr "啟用 stub_status 模組" #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:115 msgid "Enable TLS" msgstr "啟用 TLS" -#: src/views/preference/components/AuthSettings/TOTP.vue:81 +#: src/views/preference/components/AuthSettings/TOTP.vue:83 msgid "Enable TOTP" msgstr "啟用 TOTP" #: src/views/backup/AutoBackup/AutoBackup.vue:174 -#: src/views/environments/list/envColumns.tsx:69 -#: src/views/environments/list/envColumns.tsx:75 +#: src/views/node/nodeColumns.tsx:69 src/views/node/nodeColumns.tsx:75 +#: src/views/preference/components/ExternalNotify/columns.tsx:47 #: src/views/preference/tabs/HTTPSettings.vue:24 #: src/views/preference/tabs/LogrotateSettings.vue:20 #: src/views/preference/tabs/NodeSettings.vue:25 #: src/views/preference/tabs/NodeSettings.vue:30 #: src/views/site/components/SiteStatusSelect.vue:159 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:56 -#: src/views/site/site_list/columns.tsx:135 src/views/stream/columns.tsx:102 -#: src/views/stream/components/RightPanel/Basic.vue:23 -#: src/views/stream/components/StreamEditor.vue:26 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:69 +#: src/views/site/site_list/columns.tsx:142 src/views/stream/columns.tsx:108 +#: src/views/stream/components/RightPanel/Basic.vue:24 +#: src/views/stream/components/StreamEditor.vue:49 #: src/views/user/userColumns.tsx:36 msgid "Enabled" msgstr "已啟用" #: src/views/site/components/SiteStatusSelect.vue:54 #: src/views/site/site_add/SiteAdd.vue:39 -#: src/views/stream/components/StreamStatusSelect.vue:26 +#: src/views/stream/components/StreamStatusSelect.vue:27 msgid "Enabled successfully" msgstr "成功啟用" #: src/views/preference/tabs/ServerSettings.vue:52 msgid "Enables HTTP/2 support with multiplexing and server push capabilities" -msgstr "啟用HTTP/2支援,具備多路復用和伺服器推送能力" +msgstr "啟用 HTTP/2 支援,具備多路復用和伺服器推送能力" #: src/views/preference/tabs/ServerSettings.vue:56 msgid "Enables HTTP/3 support based on QUIC protocol for best performance" -msgstr "基於QUIC協議啟用HTTP/3支援以獲得最佳效能" +msgstr "基於 QUIC 協議啟用 HTTP/3 支援以獲得最佳效能" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:111 +msgid "" +"Enabling advanced log indexing will consume significant computational " +"resources including CPU and memory. Please ensure your system meets the " +"minimum requirements before proceeding." +msgstr "啟用進階日誌索引將消耗大量計算資源,包括 CPU 和記憶體。請確保您的系統滿足最低要求後再繼續。" #: src/views/site/site_edit/components/Cert/IssueCert.vue:76 msgid "Encrypt website with Let's Encrypt" @@ -1756,11 +2174,19 @@ msgstr "用 Let's Encrypt 對網站進行加密" msgid "End" msgstr "結束" -#: src/views/certificate/components/DNSIssueCertificate.vue:137 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "End Date" +msgstr "結束日期" + +#: src/views/certificate/components/DNSIssueCertificate.vue:138 msgid "Enter domain name" msgstr "輸入網域名稱" -#: src/views/certificate/components/DNSIssueCertificate.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:183 +msgid "Enter server IP address (e.g., 203.0.113.1 or 2001:db8::1)" +msgstr "輸入伺服器 IP 位址(例如:203.0.113.1 或 2001:db8::1)" + +#: src/views/certificate/components/DNSIssueCertificate.vue:123 msgid "Enter your domain" msgstr "輸入您的域名" @@ -1772,45 +2198,62 @@ msgstr "環境配置為空" msgid "Environment variables cleaned" msgstr "環境變數已清理" -#: src/routes/modules/environments.ts:11 -#: src/views/dashboard/Environments.vue:75 -#: src/views/environments/list/Environment.vue:131 -msgid "Environments" -msgstr "環境" - -#: src/constants/index.ts:22 src/views/config/InspectConfig.vue:63 +#: src/components/InspectConfig/InspectConfig.vue:80 src/constants/index.ts:23 +#: src/views/nginx_log/NginxLogList.vue:243 #: src/views/notification/notificationColumns.tsx:14 msgid "Error" msgstr "錯誤" +#: src/components/Notification/detailRender.tsx:72 +msgid "Error details" +msgstr "錯誤詳情" + #: src/components/ConfigHistory/DiffViewer.vue:138 msgid "Error initializing diff viewer" msgstr "初始化差異檢視器時發生錯誤" -#: src/views/nginx_log/NginxLogList.vue:42 +#: src/language/constants.ts:65 msgid "Error Log" msgstr "錯誤日誌" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:665 +msgid "Error Log Detected" +msgstr "檢測到錯誤日誌" + #: src/constants/errors/self_check.ts:22 msgid "Error log path not exist" msgstr "錯誤日誌路徑不存在" #: src/components/NgxConfigEditor/LogEntry.vue:98 -#: src/routes/modules/nginx_log.ts:24 +#: src/routes/modules/nginx_log.ts:24 src/views/nginx_log/NginxLogList.vue:49 msgid "Error Logs" msgstr "錯誤日誌" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:668 +msgid "" +"Error logs do not support structured analysis as they contain free-form " +"text messages." +msgstr "錯誤日誌不支援結構化分析,因為它們包含自由格式的文字訊息。" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:274 +msgid "Error pattern recognition" +msgstr "錯誤模式識別" + #: src/components/ConfigHistory/DiffViewer.vue:81 msgid "Error processing content" msgstr "內容處理錯誤" -#: src/views/system/Upgrade.vue:196 +#: src/constants/errors/upgrader.ts:5 +msgid "Executable binary file is empty" +msgstr "可執行二進位檔案為空" + +#: src/views/system/Upgrade.vue:195 msgid "Executable Path" msgstr "可執行檔路徑" #: src/views/backup/AutoBackup/components/CronEditor.vue:127 msgid "Execute on every %{day} at %{time}" -msgstr "每週%{day}的%{time}執行" +msgstr "每週 %{day} 的 %{time} 執行" #: src/views/backup/AutoBackup/components/CronEditor.vue:125 msgid "Execute on every day at %{time}" @@ -1820,6 +2263,22 @@ msgstr "每天 %{time} 執行" msgid "Execute on every month on day %{day} at %{time}" msgstr "每月 %{day} 日 %{time} 執行" +#: src/language/curd.ts:72 +msgid "Expand" +msgstr "展開" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:194 +msgid "Expected Performance" +msgstr "預期效能" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:454 +msgid "Expected Status Codes" +msgstr "預期狀態碼" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:484 +msgid "Expected Text" +msgstr "預期文本" + #: src/components/CertInfo/CertInfo.vue:31 #: src/views/certificate/CertificateList/certColumns.tsx:80 msgid "Expired" @@ -1833,12 +2292,32 @@ msgstr "過期時間:%{date}" msgid "Export Excel" msgstr "匯出 Excel" +#: src/views/certificate/ACMEUser.vue:105 +msgid "" +"External Account Binding HMAC Key (optional). Should be in Base64 URL " +"encoding format." +msgstr "外部帳戶綁定 HMAC 金鑰(可選)。應為 Base64 URL 編碼格式。" + +#: src/views/certificate/ACMEUser.vue:92 +msgid "" +"External Account Binding Key ID (optional). Required for some ACME " +"providers like ZeroSSL." +msgstr "外部帳戶綁定密鑰 ID (可選)。某些 ACME 提供商(如 ZeroSSL)需要此信息。" + #: src/views/preference/tabs/NginxSettings.vue:49 msgid "External Docker Container" msgstr "外部 Docker 容器" -#: src/views/preference/Preference.vue:58 -#: src/views/preference/tabs/ExternalNotify.vue:9 +#: src/constants/errors/notification.ts:5 +msgid "External notification configuration not found" +msgstr "未找到外部通知配置" + +#: src/components/Notification/notifications.ts:93 +msgid "External Notification Test" +msgstr "外部通知測試" + +#: src/views/preference/Preference.vue:59 +#: src/views/preference/tabs/ExternalNotify.vue:42 msgid "External Notify" msgstr "外部通知" @@ -1867,15 +2346,15 @@ msgstr "備份 Nginx UI 檔案失敗:{0}" msgid "Failed to build nginx config: {0}" msgstr "構建 nginx 配置失敗: {0}" -#: src/constants/errors/backup.ts:18 +#: src/constants/errors/backup.ts:17 msgid "Failed to calculate hash: {0}" msgstr "無法計算雜湊值:{0}" -#: src/constants/errors/backup.ts:58 +#: src/constants/errors/backup.ts:54 msgid "Failed to calculate Nginx hash: {0}" msgstr "計算 Nginx 雜湊失敗:{0}" -#: src/constants/errors/backup.ts:57 +#: src/constants/errors/backup.ts:53 msgid "Failed to calculate Nginx UI hash: {0}" msgstr "計算 Nginx UI 雜湊失敗:{0}" @@ -1888,38 +2367,35 @@ msgid "Failed to copy config file: {0}" msgstr "複製設定檔案失敗:{0}" #: src/constants/errors/backup.ts:16 -msgid "Failed to copy database directory: {0}" -msgstr "複製資料庫目錄失敗:{0}" - -#: src/constants/errors/backup.ts:17 msgid "Failed to copy database file: {0}" msgstr "無法複製資料庫檔案:{0}" -#: src/constants/errors/backup.ts:32 +#: src/constants/errors/backup.ts:31 msgid "Failed to copy file content: {0}" msgstr "複製檔案內容失敗:{0}" -#: src/constants/errors/backup.ts:20 +#: src/constants/errors/backup.ts:19 msgid "Failed to copy Nginx config directory: {0}" msgstr "複製 Nginx 設定目錄失敗:{0}" +#: src/views/certificate/components/CertificateBasicInfo.vue:33 +#: src/views/certificate/components/CertificateContentEditor.vue:34 +msgid "Failed to copy to clipboard" +msgstr "複製到剪貼簿失敗" + #: src/constants/errors/self_check.ts:10 msgid "Failed to create backup" msgstr "建立備份失敗" -#: src/constants/errors/backup.ts:65 -msgid "Failed to create backup directory: {0}" -msgstr "建立備份目錄失敗:{0}" - #: src/constants/errors/backup.ts:12 msgid "Failed to create backup file: {0}" msgstr "無法建立備份檔案:{0}" -#: src/constants/errors/backup.ts:46 +#: src/constants/errors/backup.ts:43 msgid "Failed to create directory: {0}" msgstr "無法建立目錄:{0}" -#: src/constants/errors/backup.ts:48 +#: src/constants/errors/backup.ts:45 src/constants/errors/geolite.ts:6 msgid "Failed to create file: {0}" msgstr "無法建立檔案:{0}" @@ -1927,19 +2403,19 @@ msgstr "無法建立檔案:{0}" msgid "Failed to create hash info file: {0}" msgstr "無法建立雜湊資訊檔案:{0}" -#: src/constants/errors/backup.ts:47 +#: src/constants/errors/backup.ts:44 msgid "Failed to create parent directory: {0}" msgstr "無法建立父目錄:{0}" -#: src/constants/errors/backup.ts:34 +#: src/constants/errors/backup.ts:32 msgid "Failed to create restore directory: {0}" msgstr "無法建立還原目錄:{0}" -#: src/constants/errors/backup.ts:78 +#: src/constants/errors/backup.ts:66 msgid "Failed to create storage directory {0}: {1}" msgstr "建立儲存目錄失敗 {0}:{1}" -#: src/constants/errors/backup.ts:50 +#: src/constants/errors/backup.ts:47 msgid "Failed to create symbolic link: {0}" msgstr "建立符號連結失敗:{0}" @@ -1955,48 +2431,64 @@ msgstr "無法建立臨時目錄" msgid "Failed to create temporary subdirectory" msgstr "無法建立臨時子目錄" +#: src/constants/errors/geolite.ts:9 +msgid "Failed to create xz reader: {0}" +msgstr "建立 xz 讀取器失敗: {0}" + #: src/constants/errors/backup.ts:9 msgid "Failed to create zip archive: {0}" msgstr "無法建立壓縮檔案:{0}" -#: src/constants/errors/backup.ts:29 +#: src/constants/errors/backup.ts:28 msgid "Failed to create zip entry: {0}" msgstr "無法建立壓縮項目:{0}" -#: src/constants/errors/backup.ts:28 +#: src/constants/errors/backup.ts:27 msgid "Failed to create zip file: {0}" msgstr "無法建立壓縮檔案:{0}" -#: src/constants/errors/backup.ts:31 +#: src/constants/errors/backup.ts:30 msgid "Failed to create zip header: {0}" msgstr "建立壓縮檔標頭失敗:{0}" -#: src/constants/errors/backup.ts:26 +#: src/constants/errors/geolite.ts:3 +msgid "Failed to decompress GeoLite2 database: {0}" +msgstr "解壓 GeoLite2 資料庫失敗: {0}" + +#: src/constants/errors/backup.ts:25 msgid "Failed to decrypt data: {0}" msgstr "解密資料失敗:{0}" -#: src/constants/errors/backup.ts:54 +#: src/constants/errors/backup.ts:50 msgid "Failed to decrypt file: {0}" msgstr "解密檔案失敗:{0}" -#: src/constants/errors/backup.ts:37 +#: src/constants/errors/backup.ts:35 msgid "Failed to decrypt Nginx directory: {0}" msgstr "解密 Nginx 目錄失敗:{0}" -#: src/constants/errors/backup.ts:36 +#: src/constants/errors/backup.ts:34 msgid "Failed to decrypt Nginx UI directory: {0}" msgstr "解密 Nginx UI 目錄失敗:{0}" -#: src/views/certificate/components/RemoveCert.vue:67 +#: src/constants/errors/nginx_log.ts:19 +msgid "Failed to delete all indexes" +msgstr "刪除所有索引失敗" + +#: src/views/certificate/components/RemoveCert.vue:76 msgid "Failed to delete certificate" msgstr "憑證刪除失敗" -#: src/language/generate.ts:19 +#: src/language/generate.ts:22 msgid "Failed to delete certificate from database: %{error}" msgstr "從資料庫刪除憑證失敗: %{error}" +#: src/constants/errors/nginx_log.ts:18 +msgid "Failed to delete file index" +msgstr "刪除文件索引失敗" + #: src/views/site/components/SiteStatusSelect.vue:73 -#: src/views/stream/components/StreamStatusSelect.vue:45 +#: src/views/stream/components/StreamStatusSelect.vue:46 msgid "Failed to disable %{msg}" msgstr "停用 %{msg} 失敗" @@ -2004,20 +2496,32 @@ msgstr "停用 %{msg} 失敗" msgid "Failed to disable maintenance mode %{msg}" msgstr "無法停用維護模式 %{msg}" +#: src/views/certificate/components/CertificateDownload.vue:75 +msgid "Failed to download certificate files" +msgstr "下載憑證檔案失敗" + +#: src/constants/errors/geolite.ts:2 +msgid "Failed to download GeoLite2 database: {0}" +msgstr "下載 GeoLite2 資料庫失敗: {0}" + #: src/views/site/components/SiteStatusSelect.vue:60 -#: src/views/stream/components/StreamStatusSelect.vue:32 +#: src/views/stream/components/StreamStatusSelect.vue:33 msgid "Failed to enable %{msg}" msgstr "啟用 %{msg} 失敗" +#: src/views/nginx_log/NginxLogList.vue:401 +msgid "Failed to enable advanced indexing" +msgstr "啟用高級索引失敗" + #: src/views/site/components/SiteStatusSelect.vue:86 msgid "Failed to enable maintenance mode %{msg}" msgstr "無法啟用維護模式 %{msg}" -#: src/constants/errors/backup.ts:25 +#: src/constants/errors/backup.ts:24 msgid "Failed to encrypt data: {0}" msgstr "加密資料失敗:{0}" -#: src/constants/errors/backup.ts:23 +#: src/constants/errors/backup.ts:22 msgid "Failed to encrypt file: {0}" msgstr "加密檔案失敗:{0}" @@ -2029,10 +2533,6 @@ msgstr "加密 Nginx 目錄失敗:{0}" msgid "Failed to encrypt Nginx UI directory: {0}" msgstr "加密 Nginx UI 目錄失敗:{0}" -#: src/constants/errors/backup.ts:52 -msgid "Failed to evaluate symbolic links: {0}" -msgstr "無法評估符號連結:{0}" - #: src/constants/errors/docker.ts:3 msgid "Failed to exec command: {0}" msgstr "執行命令失敗: {0}" @@ -2041,7 +2541,7 @@ msgstr "執行命令失敗: {0}" msgid "Failed to execute template: {0}" msgstr "執行模板失敗: {0}" -#: src/constants/errors/backup.ts:35 +#: src/constants/errors/backup.ts:33 msgid "Failed to extract archive: {0}" msgstr "無法提取存檔:{0}" @@ -2059,16 +2559,32 @@ msgstr "取得憑證資訊失敗" #: src/constants/errors/docker.ts:10 msgid "Failed to get container id: {0}" -msgstr "獲取容器ID失敗: {0}" +msgstr "獲取容器 ID 失敗: {0}" + +#: src/constants/errors/geolite.ts:5 +msgid "Failed to get file size: {0}" +msgstr "取得檔案大小失敗: {0}" + +#: src/constants/errors/nginx_log.ts:20 +msgid "Failed to get index status" +msgstr "獲取索引狀態失敗" #: src/views/dashboard/components/ParamsOptimization.vue:62 msgid "Failed to get Nginx performance settings" msgstr "無法取得 Nginx 效能設定" -#: src/composables/useNginxPerformance.ts:49 +#: src/constants/errors/performance.ts:9 +msgid "Failed to get nginx.conf path" +msgstr "無法獲取 nginx.conf 路徑" + +#: src/composables/useNginxPerformance.ts:50 msgid "Failed to get performance data" msgstr "無法取得效能資料" +#: src/constants/errors/nginx_log.ts:21 +msgid "Failed to get persistence stats" +msgstr "獲取持久化統計資訊失敗" + #: src/constants/errors/performance.ts:3 msgid "Failed to get stub status: {0}" msgstr "獲取存根狀態失敗: {0}" @@ -2085,15 +2601,19 @@ msgstr "檢查目前容器失敗: {0}" msgid "Failed to load history records" msgstr "無法載入歷史記錄" -#: src/constants/errors/backup.ts:30 +#: src/constants/errors/geolite.ts:8 +msgid "Failed to open file: {0}" +msgstr "開啟檔案失敗: {0}" + +#: src/constants/errors/backup.ts:29 msgid "Failed to open source file: {0}" msgstr "無法開啟來源檔案:{0}" -#: src/constants/errors/backup.ts:49 +#: src/constants/errors/backup.ts:46 msgid "Failed to open zip entry: {0}" msgstr "無法開啟壓縮檔項目:{0}" -#: src/constants/errors/backup.ts:45 +#: src/constants/errors/backup.ts:42 msgid "Failed to open zip file: {0}" msgstr "無法開啟壓縮檔:{0}" @@ -2113,15 +2633,23 @@ msgstr "解析模板失敗: {0}" msgid "Failed to pull image: {0}" msgstr "拉取映像失敗: {0}" -#: src/constants/errors/backup.ts:53 +#: src/constants/errors/geolite.ts:11 +msgid "Failed to read compressed data: {0}" +msgstr "讀取壓縮資料失敗: {0}" + +#: src/constants/errors/backup.ts:49 msgid "Failed to read encrypted file: {0}" msgstr "無法讀取加密檔案:{0}" -#: src/constants/errors/backup.ts:22 +#: src/views/certificate/components/CertificateFileUpload.vue:70 +msgid "Failed to read file" +msgstr "讀取文件失敗" + +#: src/constants/errors/backup.ts:21 msgid "Failed to read file: {0}" msgstr "讀取檔案失敗:{0}" -#: src/constants/errors/backup.ts:56 +#: src/constants/errors/backup.ts:52 msgid "Failed to read hash info file: {0}" msgstr "無法讀取雜湊資訊檔案:{0}" @@ -2137,57 +2665,97 @@ msgstr "讀取輸出失敗: {0}" msgid "Failed to read response body: {0}" msgstr "讀取響應正文失敗: {0}" -#: src/constants/errors/backup.ts:21 +#: src/constants/errors/backup.ts:20 msgid "Failed to read symlink: {0}" msgstr "讀取符號連結失敗:{0}" -#: src/constants/errors/backup.ts:39 +#: src/constants/errors/nginx_log.ts:17 +msgid "Failed to rebuild file index" +msgstr "重建文件索引失敗" + +#: src/constants/errors/nginx_log.ts:16 +msgid "Failed to rebuild index" +msgstr "重建索引失敗" + +#: src/views/dashboard/SiteNavigation.vue:101 +msgid "Failed to refresh sites" +msgstr "刷新站點失敗" + +#: src/constants/errors/backup.ts:37 msgid "Failed to restore Nginx configs: {0}" msgstr "恢復 Nginx 設定失敗:{0}" -#: src/constants/errors/backup.ts:40 -msgid "Failed to restore Nginx UI files: {0}" -msgstr "還原 Nginx UI 檔案失敗:{0}" - -#: src/views/certificate/components/RemoveCert.vue:49 +#: src/views/certificate/components/RemoveCert.vue:58 msgid "Failed to revoke certificate" msgstr "撤銷憑證失敗" -#: src/language/generate.ts:20 +#: src/language/generate.ts:23 msgid "Failed to revoke certificate: %{error}" msgstr "撤銷憑證失敗: %{error}" +#: src/views/dashboard/SiteNavigation.vue:193 +msgid "Failed to save configuration" +msgstr "儲存設定失敗" + +#: src/constants/errors/geolite.ts:7 +msgid "Failed to save downloaded file: {0}" +msgstr "儲存下載的檔案失敗: {0}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:310 +msgid "Failed to save health check configuration" +msgstr "儲存健康檢查設定失敗" + #: src/views/dashboard/components/ParamsOptimization.vue:91 msgid "Failed to save Nginx performance settings" msgstr "儲存 Nginx 效能設定失敗" +#: src/views/dashboard/SiteNavigation.vue:166 +msgid "Failed to save order" +msgstr "儲存順序失敗" + +#: src/views/preference/tabs/ExternalNotify.vue:32 +msgid "Failed to send test message" +msgstr "發送測試消息失敗" + #: src/constants/errors/docker.ts:14 msgid "Failed to start temp container: {0}" msgstr "啟動臨時容器失敗: {0}" -#: src/constants/errors/backup.ts:38 +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:30 +msgid "Failed to update status" +msgstr "更新狀態失敗" + +#: src/views/certificate/components/CertificateFileUpload.vue:104 +msgid "Failed to upload file" +msgstr "檔案上傳失敗" + +#: src/constants/errors/backup.ts:36 msgid "Failed to verify hashes: {0}" msgstr "無法驗證雜湊值:{0}" -#: src/constants/errors/backup.ts:66 +#: src/constants/errors/backup.ts:58 msgid "Failed to write backup file: {0}" msgstr "寫入備份檔案失敗: {0}" -#: src/constants/errors/backup.ts:55 +#: src/constants/errors/geolite.ts:10 +msgid "Failed to write decompressed data: {0}" +msgstr "寫入解壓縮資料失敗: {0}" + +#: src/constants/errors/backup.ts:51 msgid "Failed to write decrypted file: {0}" msgstr "寫入解密檔案失敗:{0}" -#: src/constants/errors/backup.ts:24 +#: src/constants/errors/backup.ts:23 msgid "Failed to write encrypted file: {0}" msgstr "寫入加密檔案失敗:{0}" -#: src/constants/errors/backup.ts:67 +#: src/constants/errors/backup.ts:59 msgid "Failed to write security key file: {0}" msgstr "無法寫入安全金鑰檔案:{0}" -#: src/constants/errors/backup.ts:33 -msgid "Failed to write to zip buffer: {0}" -msgstr "寫入壓縮緩衝區失敗:{0}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:228 +msgid "Features" +msgstr "功能" #: src/views/config/components/Delete.vue:116 msgid "file" @@ -2201,6 +2769,10 @@ msgstr "檔案" msgid "File exists" msgstr "檔案已存在" +#: src/views/nginx_log/indexing/IndexManagement.vue:64 +msgid "File index rebuild started successfully for %{path}" +msgstr "已成功開始為 %{path} 重建檔案索引" + #: src/views/other/Error.vue:8 msgid "File Not Found" msgstr "找不到檔案" @@ -2209,19 +2781,35 @@ msgstr "找不到檔案" msgid "File or directory not found: {0}" msgstr "找不到檔案或目錄:{0}" +#: src/constants/errors/nginx_log.ts:15 +msgid "File path is required" +msgstr "文件路徑是必需的" + +#: src/views/certificate/components/CertificateFileUpload.vue:54 +msgid "File size cannot exceed 5MB" +msgstr "檔案大小不能超過 5MB" + +#: src/views/certificate/components/CertificateFileUpload.vue:100 +msgid "File uploaded successfully" +msgstr "檔案上傳成功" + #: src/constants/errors/cert.ts:2 msgid "Filename is empty" msgstr "檔名空白" -#: src/views/nginx_log/NginxLog.vue:156 +#: src/views/nginx_log/raw/RawLogViewer.vue:298 msgid "Filter" msgstr "篩選" +#: src/views/nginx_log/raw/RawLogViewer.vue:301 +msgid "Filter log content" +msgstr "過濾日誌內容" + #: src/language/constants.ts:19 src/views/site/site_add/SiteAdd.vue:82 msgid "Finished" msgstr "完成" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "First View" msgstr "首次檢視" @@ -2233,7 +2821,11 @@ msgstr "資料夾" msgid "Folder" msgstr "資料夾" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:572 +msgid "Follow Redirects" +msgstr "跟隨重定向" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:77 msgid "" "Follow the instructions in the dialog to complete the passkey registration " "process." @@ -2248,6 +2840,26 @@ msgstr "針對中國大陸使用者" msgid "For Chinese user: https://cloud.nginxui.com/" msgstr "中國使用者:https://cloud.nginxui.com/" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:306 +msgid "For commercial or professional use, contact" +msgstr "如需商業或專業用途,請聯繫" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:670 +msgid "For error logs, please use the Raw Log Viewer for better viewing experience." +msgstr "對於錯誤日誌,請使用原始日誌檢視器以獲得更好的檢視體驗。" + +#: src/components/AutoCertForm/AutoCertForm.vue:140 +msgid "" +"For IP-based certificate configurations, only HTTP-01 challenge method is " +"supported. DNS-01 challenge is not compatible with IP-based certificates." +msgstr "對於基於 IP 的證書配置,僅支援 HTTP-01 驗證方法。DNS-01 驗證與基於 IP 的證書不相容。" + +#: src/components/AutoCertForm/AutoCertForm.vue:188 +msgid "" +"For IP-based certificates, please specify the server IP address that will " +"be included in the certificate." +msgstr "對於基於 IP 的證書,請指定將包含在證書中的伺服器 IP 地址。" + #: src/constants/errors/middleware.ts:4 msgid "Form parse failed" msgstr "表單解析失敗" @@ -2268,6 +2880,22 @@ msgstr "格式:分鐘 小時 日 月 星期" msgid "Friday" msgstr "星期五" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:837 +msgid "From indexed logs" +msgstr "來自已索引的日誌" + +#: src/views/system/Licenses.vue:119 src/views/system/Licenses.vue:222 +msgid "Frontend" +msgstr "前端" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:65 +msgid "Full Text Search" +msgstr "全文搜尋" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:258 +msgid "Full-text search support" +msgstr "全文搜索支援" + #: src/views/certificate/CertificateList/certColumns.tsx:30 msgid "General Certificate" msgstr "普通憑證" @@ -2276,16 +2904,16 @@ msgstr "普通憑證" msgid "Generate" msgstr "產生" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:138 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:139 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate New Recovery Codes" msgstr "生成新的復原代碼" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:161 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:162 msgid "Generate Recovery Codes" msgstr "生成復原代碼" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:32 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:34 msgid "Generate recovery codes successfully" msgstr "成功生成復原代碼" @@ -2293,6 +2921,37 @@ msgstr "成功生成復原代碼" msgid "Generating private key for registering account" msgstr "產生註冊帳號的私鑰" +#: src/views/preference/Preference.vue:113 +msgid "GeoLite" +msgstr "GeoLite" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:179 +#: src/views/preference/tabs/GeoLiteSettings.vue:7 +msgid "GeoLite2 Database" +msgstr "GeoLite2 資料庫" + +#: src/language/generate.ts:24 +msgid "GeoLite2 database available" +msgstr "GeoLite2 資料庫可用" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:167 +msgid "GeoLite2 Database Installed" +msgstr "GeoLite2 資料庫已安裝" + +#: src/constants/errors/geolite.ts:4 +msgid "GeoLite2 database not found at {0}" +msgstr "在 {0} 未找到 GeoLite2 資料庫" + +#: src/constants/errors/self_check.ts:24 +msgid "" +"GeoLite2 database not found at {0}. Log indexing requires GeoLite2 database " +"for geographic IP analysis" +msgstr "未在 {0} 找到 GeoLite2 資料庫。日誌索引需要 GeoLite2 資料庫進行地理 IP 分析" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:149 +msgid "GeoLite2 Database Required" +msgstr "需要 GeoLite2 資料庫" + #: src/constants/errors/cert.ts:9 msgid "Get acme user error: {0}" msgstr "獲取 ACME 用戶錯誤: {0}" @@ -2305,8 +2964,7 @@ msgstr "取得資料失敗" msgid "Get dns credential error: {0}" msgstr "獲取 DNS 憑證錯誤:{0}" -#: src/views/environments/list/BatchUpgrader.vue:178 -#: src/views/system/Upgrade.vue:188 +#: src/views/node/BatchUpgrader.vue:181 src/views/system/Upgrade.vue:187 msgid "Get release information error" msgstr "取得發佈資訊錯誤" @@ -2318,10 +2976,35 @@ msgstr "正在取得憑證,請稍候..." msgid "Github Proxy" msgstr "Github 代理" +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:47 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:202 +msgid "Global Access Map" +msgstr "全球訪問地圖" + +#: src/views/nginx_log/dashboard/components/GeoMapChart.vue:31 +msgid "Global Map" +msgstr "全球地圖" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:675 +msgid "Go to Raw Log Viewer" +msgstr "轉到原始日誌查看器" + #: src/views/preference/components/ExternalNotify/gotify.ts:5 msgid "Gotify" msgstr "Gotify" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:502 +msgid "" +"gRPC health check requires server to implement gRPC Health Check service " +"(grpc.health.v1.Health)." +msgstr "gRPC 健康檢查要求伺服器實現 gRPC 健康檢查服務(grpc.health.v1.Health)。" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:501 +msgid "" +"gRPCS uses TLS encryption. Server must implement gRPC Health Check service. " +"For testing, SSL validation is disabled by default." +msgstr "gRPCS 使用 TLS 加密。伺服器必須實作 gRPC 健康檢查服務。出於測試目的,預設情況下禁用 SSL 驗證。" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67 msgid "GZIP Compression" msgstr "GZIP 壓縮" @@ -2334,25 +3017,51 @@ msgstr "GZIP 壓縮等級" msgid "GZIP Min Length" msgstr "GZIP 最小長度" -#: src/constants/errors/backup.ts:59 -msgid "Hash verification failed: file integrity compromised" -msgstr "雜湊驗證失敗:檔案完整性受損" +#: src/views/upstream/SocketList.vue:60 +msgid "Health Check" +msgstr "健康檢查" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:365 +msgid "Health Check Configuration" +msgstr "健康檢查配置" + +#: src/views/dashboard/SiteNavigation.vue:188 +msgid "Health check configuration saved" +msgstr "健康檢查配置已保存" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:301 +msgid "Health check configuration saved successfully" +msgstr "健康檢查配置保存成功" + +#: src/views/upstream/SocketList.vue:36 +msgid "Health Status" +msgstr "健康狀態" #: src/components/SensitiveString/SensitiveString.vue:40 msgid "Hide" msgstr "隱藏" +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Hide Assistant" +msgstr "隱藏助手" + +#: src/composables/useGeoTranslation.ts:165 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "High" +msgstr "高" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:87 msgid "Higher value means better connection reuse" msgstr "數值越高表示連線重複使用率越好" #: src/views/config/components/ConfigLeftPanel.vue:254 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 -#: src/views/stream/components/StreamEditor.vue:45 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:94 +#: src/views/stream/components/StreamEditor.vue:68 msgid "History" msgstr "歷史" -#: src/routes/index.ts:48 +#: src/routes/index.ts:52 msgid "Home" msgstr "首頁" @@ -2361,10 +3070,11 @@ msgid "Host" msgstr "主機" #: src/views/backup/AutoBackup/components/CronEditor.vue:159 +#: src/views/nginx_log/dashboard/components/HourlyChart.vue:87 msgid "Hour" msgstr "小時" -#: src/views/preference/Preference.vue:70 +#: src/views/preference/Preference.vue:71 msgid "HTTP" msgstr "HTTP" @@ -2372,7 +3082,11 @@ msgstr "HTTP" msgid "HTTP Challenge Port" msgstr "HTTP 挑戰埠" -#: src/components/AutoCertForm/AutoCertForm.vue:70 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:399 +msgid "HTTP Method" +msgstr "HTTP 方法" + +#: src/components/AutoCertForm/AutoCertForm.vue:222 msgid "HTTP01" msgstr "HTTP01" @@ -2380,31 +3094,37 @@ msgstr "HTTP01" msgid "HTTPS Protocol" msgstr "HTTPS 協議" +#: src/views/nginx_log/structured/components/SearchFilters.vue:189 +msgid "https://..." +msgstr "https://..." + #: src/views/preference/tabs/NodeSettings.vue:34 msgid "ICP Number" msgstr "ICP 編號" -#: src/views/certificate/ACMEUser.vue:43 -msgid "If left blank, the default CA Dir will be used." -msgstr "如果留空,將使用預設的 CA Dir。" - -#: src/views/preference/tabs/AuthSettings.vue:113 +#: src/views/preference/tabs/AuthSettings.vue:109 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 "如果來自某個 IP 的登入失敗次數在禁止閾值分鐘內達到最大嘗試次數,該 IP 將被禁止一段時間。" -#: src/components/AutoCertForm/AutoCertForm.vue:122 +#: src/components/AutoCertForm/AutoCertForm.vue:280 msgid "" "If you want to automatically revoke the old certificate, please enable this " "option." msgstr "如果您想要自動撤銷舊憑證,請啟用此選項。" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:168 +msgid "" +"If you want to change the storage location, you can set the `IndexPath` of " +"`nginx_log` section in the Nginx UI config." +msgstr "如果要更改存儲位置,可以在 Nginx UI 配置中設置 `nginx_log` 部分的 `IndexPath`。" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:76 msgid "If your browser supports WebAuthn Passkey, a dialog box will appear." msgstr "如果您的瀏覽器支援 WebAuthn 通行金鑰,將會顯示一個對話框。" -#: src/components/AutoCertForm/AutoCertForm.vue:113 +#: src/components/AutoCertForm/AutoCertForm.vue:271 msgid "" "If your domain has CNAME records and you cannot obtain certificates, you " "need to enable this option." @@ -2414,12 +3134,12 @@ msgstr "如果您的域名有 CNAME 記錄且無法取得證書,您需要啟 msgid "Import" msgstr "匯入" -#: src/routes/modules/certificates.ts:46 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:54 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Import Certificate" msgstr "匯入憑證" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:175 msgid "Inactive Time" msgstr "閒置時間" @@ -2429,7 +3149,46 @@ msgid "" "processes" msgstr "包含 Master 行程、工作行程、快取行程,以及其他 Nginx 行程" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:254 +msgid "Incremental index scanning" +msgstr "增量索引掃描" + +#: src/views/nginx_log/indexing/IndexManagement.vue:38 +msgid "Index and statistics rebuild started successfully" +msgstr "索引和統計重建已成功啟動" + +#: src/views/nginx_log/NginxLogList.vue:202 +msgid "Index failed" +msgstr "索引失敗" + +#: src/views/nginx_log/components/LoadingState.vue:55 +msgid "Index failed, please try rebuilding" +msgstr "索引失敗,請嘗試重新構建" + +#: src/views/nginx_log/NginxLogList.vue:387 +msgid "Index rebuild initiated" +msgstr "索引重建已啟動" + +#: src/views/nginx_log/NginxLogList.vue:171 +msgid "Index Status" +msgstr "索引狀態" + +#: src/views/nginx_log/NginxLogList.vue:239 +msgid "Indexed" +msgstr "已建立索引" + +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:52 +#: src/views/nginx_log/NginxLogList.vue:235 +msgid "Indexing" +msgstr "索引中" + +#: src/views/nginx_log/components/LoadingState.vue:33 +#: src/views/nginx_log/NginxLogList.vue:457 +msgid "Indexing logs..." +msgstr "正在索引日誌..." + #: src/components/ProcessingStatus/ProcessingStatus.vue:31 +#: src/views/nginx_log/components/LoadingState.vue:71 msgid "Indexing..." msgstr "建立索引中..." @@ -2437,10 +3196,14 @@ msgstr "建立索引中..." msgid "Indicator" msgstr "指標" -#: src/constants/index.ts:24 src/views/notification/notificationColumns.tsx:28 +#: src/constants/index.ts:25 src/views/notification/notificationColumns.tsx:28 msgid "Info" msgstr "資訊" +#: src/constants/errors/user.ts:17 +msgid "Init user not exists" +msgstr "初始使用者不存在" + #: src/language/constants.ts:25 msgid "Initial core upgrader error" msgstr "初始化核心升級程式錯誤" @@ -2449,7 +3212,7 @@ msgstr "初始化核心升級程式錯誤" msgid "Initialing core upgrader" msgstr "正在初始化核心升級程式" -#: src/views/preference/components/AuthSettings/TOTP.vue:119 +#: src/views/preference/components/AuthSettings/TOTP.vue:121 msgid "Input the code from the app:" msgstr "請輸入應用程式中的代碼:" @@ -2464,7 +3227,7 @@ msgstr "不安全跳過驗證" #: src/routes/modules/auth.ts:8 #: src/views/install/components/InstallForm.vue:110 #: src/views/install/components/InstallHeader.vue:9 -#: src/views/system/Upgrade.vue:150 +#: src/views/system/Upgrade.vue:149 msgid "Install" msgstr "安裝" @@ -2490,27 +3253,36 @@ msgstr "系統啟動 10 分鐘後不允許安裝,請重新啟動 Nginx UI。" msgid "Interval" msgstr "間隔" -#: src/views/certificate/ACMEUser.vue:125 +#: src/views/certificate/ACMEUser.vue:166 msgid "Invalid" msgstr "無效" -#: src/constants/errors/backup.ts:44 +#: src/constants/errors/backup.ts:41 msgid "Invalid AES IV format: {0}" msgstr "無效的 AES IV 格式:{0}" -#: src/constants/errors/backup.ts:43 +#: src/constants/errors/backup.ts:40 msgid "Invalid AES key format: {0}" msgstr "無效的 AES 金鑰格式:{0}" +#: src/views/certificate/components/CertificateDownload.vue:54 +#: src/views/certificate/components/CertificateFileUpload.vue:88 +msgid "Invalid certificate format" +msgstr "證書格式無效" + #: src/constants/errors/user.ts:14 msgid "Invalid claims type" msgstr "無效的聲明類型" +#: src/constants/errors/version.ts:2 +msgid "Invalid commit SHA" +msgstr "無效的提交 SHA" + #: src/components/SystemRestore/SystemRestoreContent.vue:121 msgid "Invalid file object" msgstr "無效的檔案物件" -#: src/constants/errors/backup.ts:51 +#: src/constants/errors/backup.ts:48 msgid "Invalid file path: {0}" msgstr "無效的檔案路徑:{0}" @@ -2523,6 +3295,10 @@ msgstr "無效的檔案名" msgid "Invalid folder name" msgstr "無效的資料夾名稱" +#: src/constants/errors/notification.ts:4 +msgid "Invalid notification ID" +msgstr "無效的通知 ID" + #: src/constants/errors/notification.ts:3 msgid "Invalid notifier config" msgstr "無效的通知器設定" @@ -2531,7 +3307,7 @@ msgstr "無效的通知器設定" msgid "Invalid otp code" msgstr "無效的 OTP 代碼" -#: src/constants/errors/backup.ts:27 +#: src/constants/errors/backup.ts:26 msgid "Invalid padding in decrypted data" msgstr "解密資料中的填充無效" @@ -2539,10 +3315,15 @@ msgstr "解密資料中的填充無效" msgid "Invalid passcode or recovery code" msgstr "無效的密碼或恢復碼" -#: src/constants/errors/backup.ts:73 +#: src/constants/errors/backup.ts:61 msgid "Invalid path: {0}" msgstr "無效路徑: {0}" +#: src/views/certificate/components/CertificateDownload.vue:59 +#: src/views/certificate/components/CertificateFileUpload.vue:94 +msgid "Invalid private key format" +msgstr "私鑰格式無效" + #: src/constants/errors/user.ts:5 msgid "Invalid recovery code" msgstr "無效的恢復碼" @@ -2551,19 +3332,41 @@ msgstr "無效的恢復碼" msgid "Invalid request format" msgstr "無效的請求格式" -#: src/constants/errors/backup.ts:42 +#: src/constants/errors/backup.ts:39 msgid "Invalid security token format" msgstr "無效的安全令牌格式" -#: src/views/preference/tabs/AuthSettings.vue:14 +#: src/constants/errors/notification.ts:6 +msgid "Invalid Telegram Chat ID: cannot be zero" +msgstr "無效的 Telegram 聊天 ID:不能為零" + +#: src/constants/errors/nginx_log.parser.ts:5 +msgid "Invalid timestamp format" +msgstr "時間戳格式無效" + +#: src/constants/errors/nginx_log.ts:23 +msgid "Invalid websocket message type" +msgstr "無效的 WebSocket 消息類型" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:193 +#: src/views/preference/tabs/AuthSettings.vue:15 msgid "IP" msgstr "IP" +#: src/views/nginx_log/structured/components/SearchFilters.vue:77 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:517 +msgid "IP Address" +msgstr "IP 位址" + +#: src/components/AutoCertForm/AutoCertForm.vue:123 +msgid "IP Certificate Notice" +msgstr "IP 證書通知" + #: src/views/certificate/CertificateList/Certificate.vue:37 msgid "Issue certificate" msgstr "簽發證書" -#: src/views/certificate/components/DNSIssueCertificate.vue:97 +#: src/views/certificate/components/DNSIssueCertificate.vue:98 msgid "Issue Certificate" msgstr "簽發證書" @@ -2583,7 +3386,7 @@ msgstr "項" msgid "Jwt Secret" msgstr "Jwt 金鑰" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:75 msgid "" "Keep your recovery codes as safe as your password. We recommend saving them " "with a password manager." @@ -2593,12 +3396,12 @@ msgstr "請將您的復原代碼與密碼一樣妥善保管。我們建議使用 msgid "Keepalive Timeout" msgstr "Keepalive 逾時時間" -#: src/components/AutoCertForm/AutoCertForm.vue:78 +#: src/components/AutoCertForm/AutoCertForm.vue:236 #: src/views/certificate/CertificateList/certColumns.tsx:57 msgid "Key Type" msgstr "金鑰類型" -#: src/views/preference/components/ExternalNotify/columns.tsx:32 +#: src/views/preference/components/ExternalNotify/columns.tsx:33 msgid "Language" msgstr "語言" @@ -2610,6 +3413,44 @@ msgstr "Lark" msgid "Lark Custom" msgstr "Lark 自訂" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:314 +msgid "Last 12 hours" +msgstr "過去 12 小時" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:22 +msgid "Last 14 days" +msgstr "過去 14 天" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:310 +msgid "Last 15 minutes" +msgstr "過去 15 分鐘" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:315 +msgid "Last 24 hours" +msgstr "過去 24 小時" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:23 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:317 +msgid "Last 30 days" +msgstr "過去 30 天" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:311 +msgid "Last 30 minutes" +msgstr "過去 30 分鐘" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:313 +msgid "Last 4 hours" +msgstr "過去 4 小時" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:21 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:316 +msgid "Last 7 days" +msgstr "最近 7 天" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:24 +msgid "Last 90 days" +msgstr "過去 90 天" + #: src/views/backup/AutoBackup/AutoBackup.vue:190 msgid "Last Backup Status" msgstr "上次備份狀態" @@ -2618,15 +3459,35 @@ msgstr "上次備份狀態" msgid "Last Backup Time" msgstr "上次備份時間" -#: src/views/system/Upgrade.vue:198 +#: src/views/upstream/SocketList.vue:51 +msgid "Last Check" +msgstr "最後檢查" + +#: src/views/system/Upgrade.vue:197 msgid "Last checked at" msgstr "上次檢查時間" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:312 +msgid "Last hour" +msgstr "過去 1 小時" + +#: src/views/nginx_log/NginxLogList.vue:252 +msgid "Last Indexed" +msgstr "最後索引時間" + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:26 +msgid "Last month" +msgstr "上個月" + #: src/views/dashboard/NginxDashBoard.vue:138 msgid "Last update" msgstr "最後更新時間" -#: src/views/preference/components/AuthSettings/Passkey.vue:96 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:198 +msgid "Last updated:" +msgstr "最後更新:" + +#: src/views/preference/components/AuthSettings/Passkey.vue:97 msgid "Last used at" msgstr "最後使用時間" @@ -2642,12 +3503,18 @@ msgstr "預設留空:https://api.openai.com/" msgid "Leave blank if do not want to modify" msgstr "留空表示不修改" -#: src/views/certificate/ACMEUser.vue:55 +#: src/views/certificate/ACMEUser.vue:107 src/views/certificate/ACMEUser.vue:94 +msgid "Leave blank if not required by your ACME provider" +msgstr "如果您的 ACME 提供商不需要,請留空" + +#: src/views/certificate/ACMEUser.vue:70 msgid "Leave blank if you don't need this." msgstr "留空表示不需要此項目。" -#: src/views/certificate/CertificateEditor.vue:221 -#: src/views/certificate/CertificateEditor.vue:235 +#: src/views/certificate/components/CertificateContentEditor.vue:150 +#: src/views/certificate/components/CertificateContentEditor.vue:168 +#: src/views/certificate/components/CertificateContentEditor.vue:211 +#: src/views/certificate/components/CertificateContentEditor.vue:229 msgid "Leave blank will not change anything" msgstr "留空將不會改變任何內容" @@ -2655,16 +3522,24 @@ msgstr "留空將不會改變任何內容" msgid "Legacy recovery code not allowed since totp is not enabled" msgstr "不允許使用舊版恢復代碼,因為未啟用 TOTP 功能" -#: src/components/AutoCertForm/AutoCertForm.vue:110 +#: src/components/AutoCertForm/AutoCertForm.vue:268 msgid "Lego disable CNAME Support" msgstr "Lego 停用 CNAME 支援" -#: src/views/system/About.vue:83 +#: src/views/system/About.vue:75 src/views/system/Licenses.vue:21 msgid "License" msgstr "開源授權" -#: src/views/dashboard/components/NodeAnalyticItem.vue:116 -#: src/views/dashboard/components/NodeAnalyticItem.vue:99 +#: src/views/system/Licenses.vue:133 +msgid "License Distribution" +msgstr "授權分佈" + +#: src/views/system/Licenses.vue:125 +msgid "License Types" +msgstr "許可證類型" + +#: src/views/dashboard/components/NodeAnalyticItem.vue:114 +#: src/views/dashboard/components/NodeAnalyticItem.vue:97 msgid "Link" msgstr "連結" @@ -2680,32 +3555,32 @@ msgstr "監聽中" msgid "Load Average:" msgstr "負載平均值:" -#: src/views/environments/list/Environment.vue:138 +#: src/views/node/Node.vue:137 msgid "Load from settings" msgstr "從設定載入" -#: src/views/environments/list/Environment.vue:68 +#: src/views/node/Node.vue:67 msgid "Load successfully" msgstr "載入成功" -#: src/views/dashboard/components/ModulesTable.vue:100 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/dashboard/components/ModulesTable.vue:79 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Loaded" msgstr "已加載" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:312 msgid "Loader Files" msgstr "載入器檔案" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:307 msgid "Loader Settings" msgstr "載入器設定" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:322 msgid "Loader Sleep" msgstr "載入器休眠時間" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:347 msgid "Loader Threshold" msgstr "載入器門檻值" @@ -2713,9 +3588,15 @@ msgstr "載入器門檻值" msgid "Loading data..." msgstr "資料載入中…" -#: src/components/EnvIndicator/EnvIndicator.vue:39 -#: src/components/NodeSelector/NodeSelector.vue:84 -#: src/views/backup/AutoBackup/AutoBackup.vue:74 +#: src/views/nginx_log/components/LoadingState.vue:41 +#: src/views/nginx_log/components/LoadingState.vue:78 +msgid "Loading..." +msgstr "載入中..." + +#: src/components/NamespaceTabs/NamespaceTabs.vue:116 +#: src/components/NodeIndicator/NodeIndicator.vue:38 +#: src/components/NodeSelector/NodeSelector.vue:61 src/constants/index.ts:42 +#: src/constants/index.ts:48 src/views/backup/AutoBackup/AutoBackup.vue:74 #: src/views/backup/AutoBackup/AutoBackup.vue:83 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:48 #: src/views/preference/tabs/NginxSettings.vue:55 @@ -2734,11 +3615,11 @@ msgstr "Location" msgid "Locations" msgstr "Locations" -#: src/views/certificate/CertificateEditor.vue:245 +#: src/views/certificate/CertificateEditor.vue:124 msgid "Log" msgstr "日誌" -#: src/language/generate.ts:21 +#: src/language/generate.ts:25 msgid "" "Log file %{log_path} is not a regular file. If you are using nginx-ui in " "docker container, please refer to " @@ -2747,23 +3628,59 @@ msgstr "" "日誌文件 %{log_path} 不是常規文件。如果您在 docker 容器中使用 nginx-ui,請參考 " "https://nginxui.com/zh_CN/guide/config-nginx-log.html 獲取更多信息。" -#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:87 +#: src/constants/errors/nginx_log.ts:11 +msgid "Log file does not exist" +msgstr "日誌文件不存在" + +#: src/constants/errors/nginx_log.ts:22 +msgid "Log file is not a regular file" +msgstr "日誌檔案不是常規檔案" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:852 +msgid "Log file not available" +msgstr "日誌文件不可用" + +#: src/views/nginx_log/components/LoadingState.vue:62 +msgid "Log file not indexed yet" +msgstr "日誌檔案尚未建立索引" + +#: src/constants/errors/nginx_log.ts:9 +msgid "Log indexer not available" +msgstr "日誌索引器不可用" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:585 +msgid "Log indexing completed! Loading updated data..." +msgstr "日誌索引完成!正在載入更新數據..." + +#: src/constants/errors/nginx_log.parser.ts:3 +msgid "Log line exceeds maximum length" +msgstr "記錄行超過最大長度" + +#: src/routes/modules/nginx_log.ts:39 src/views/nginx_log/NginxLogList.vue:430 msgid "Log List" msgstr "日誌列表" -#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:277 +#: src/constants/errors/nginx_log.indexer.ts:2 +msgid "Log parser is not initialized; call indexer.InitLogParser() before use" +msgstr "日誌解析器未初始化;使用前請呼叫 indexer.InitLogParser()" + +#: src/constants/errors/nginx_log.ts:12 +msgid "Log path is not under whitelist" +msgstr "日誌路徑不在白名單中" + +#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:317 msgid "Login" msgstr "登入" -#: src/views/other/Login.vue:78 +#: src/views/other/Login.vue:111 msgid "Login successful" msgstr "登入成功" -#: src/layouts/HeaderLayout.vue:22 +#: src/layouts/HeaderLayout.vue:21 msgid "Logout successful" msgstr "登出成功" -#: src/views/preference/Preference.vue:106 +#: src/views/preference/Preference.vue:107 msgid "Logrotate" msgstr "Logrotate" @@ -2780,9 +3697,20 @@ msgstr "" "logrotate,因此您無需修改此頁面的參數。對於使用 Docker 容器安裝 Nginx UI 的使用者,您可以手動啟用此選項。Nginx UI " "的 crontab 任務排程器將按照您設定的分鐘間隔執行 logrotate 命令。" +#: src/composables/useGeoTranslation.ts:166 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:135 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:103 +msgid "Low" +msgstr "低" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:51 +#: src/composables/useUpstreamStatus.ts:156 +msgid "Main Node" +msgstr "主節點" + #: src/views/site/components/SiteStatusSelect.vue:165 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:68 -#: src/views/site/site_list/columns.tsx:143 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:81 +#: src/views/site/site_list/columns.tsx:150 msgid "Maintenance" msgstr "維護" @@ -2798,7 +3726,7 @@ msgstr "維護模式已成功啟用" msgid "Make certificate dir error: {0}" msgstr "建立憑證目錄錯誤:{0}" -#: src/components/AutoCertForm/AutoCertForm.vue:53 +#: src/components/AutoCertForm/AutoCertForm.vue:164 msgid "" "Make sure you have configured a reverse proxy for .well-known directory to " "HTTPChallengePort before obtaining the certificate." @@ -2811,11 +3739,11 @@ msgstr "在取得憑證前,請確保您已將 .well-known 目錄反向代理 msgid "Manage Configs" msgstr "管理設定" -#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:67 +#: src/routes/modules/sites.ts:10 src/views/site/site_list/SiteList.vue:45 msgid "Manage Sites" msgstr "管理網站" -#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:81 +#: src/routes/modules/streams.ts:10 src/views/stream/StreamList.vue:59 msgid "Manage Streams" msgstr "管理 Stream" @@ -2827,15 +3755,15 @@ msgstr "管理使用者" msgid "Managed Certificate" msgstr "受管理的憑證" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:250 msgid "Manager Files" msgstr "管理器檔案" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:260 msgid "Manager Sleep" msgstr "管理器休眠時間" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:285 msgid "Manager Threshold" msgstr "管理器門檻值" @@ -2861,7 +3789,7 @@ msgstr "主行程" msgid "Master Process" msgstr "主行程" -#: src/views/preference/tabs/AuthSettings.vue:103 +#: src/views/preference/tabs/AuthSettings.vue:99 msgid "Max Attempts" msgstr "最大嘗試次數" @@ -2869,11 +3797,15 @@ msgstr "最大嘗試次數" msgid "Max Concurrent Connections" msgstr "最大同時連線數" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:560 +msgid "Max Redirects" +msgstr "最大重定向次數" + #: src/views/dashboard/components/PerformanceStatisticsCard.vue:42 msgid "Max Requests Per Second" msgstr "每秒最大請求數" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:198 msgid "Maximum Cache Size" msgstr "快取最大容量" @@ -2890,7 +3822,7 @@ msgstr "最大同時連線數" msgid "Maximum number of connections per worker process" msgstr "每個 worker 行程最大連線數" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:200 msgid "Maximum total size of the cache" msgstr "快取總容量上限" @@ -2900,6 +3832,7 @@ msgstr "最大 worker 行程數:" #: src/views/dashboard/ServerAnalytic.vue:227 #: src/views/dashboard/ServerAnalytic.vue:228 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:54 msgid "Memory" msgstr "記憶體" @@ -2907,22 +3840,39 @@ msgstr "記憶體" msgid "Memory and Storage" msgstr "記憶體與儲存空間" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:79 +msgid "Memory Design" +msgstr "記憶體設計" + #: src/views/dashboard/components/ResourceUsageCard.vue:51 msgid "Memory Usage (RSS)" msgstr "記憶體使用量 (RSS)" +#: src/views/nginx_log/structured/components/SearchFilters.vue:92 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:518 +msgid "Method" +msgstr "方法" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:520 +msgid "Method Name" +msgstr "方法名稱" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81 msgid "Minimum file size for compression" msgstr "啟用壓縮的最小檔案大小" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:223 msgid "Minimum Free Space" msgstr "最小剩餘空間" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:225 msgid "Minimum free space in the cache directory" msgstr "快取目錄最小剩餘空間" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:143 +msgid "Minimum:" +msgstr "最低要求:" + #: src/views/backup/AutoBackup/components/CronEditor.vue:169 msgid "Minute" msgstr "分鐘" @@ -2931,21 +3881,36 @@ msgstr "分鐘" msgid "Minutes" msgstr "分鐘" +#: src/constants/index.ts:44 +msgid "Mirror" +msgstr "鏡像" + #: src/views/preference/tabs/OpenAISettings.vue:20 msgid "Model" msgstr "模型" +#: src/constants/errors/nginx_log.ts:25 +msgid "Modern analytics service not available" +msgstr "現代分析服務不可用" + +#: src/constants/errors/nginx_log.ts:26 +msgid "Modern indexer service not available" +msgstr "現代索引服務不可用" + +#: src/constants/errors/nginx_log.ts:24 +msgid "Modern searcher service not available" +msgstr "現代搜尋服務不可用" + #: src/components/ConfigHistory/ConfigHistory.vue:53 msgid "Modified At" msgstr "修改於" -#: src/components/ChatGPT/ChatMessage.vue:212 -#: src/views/config/ConfigList.vue:182 +#: src/components/LLM/ChatMessage.vue:241 src/views/config/ConfigList.vue:182 msgid "Modify" msgstr "修改" -#: src/routes/modules/certificates.ts:36 -#: src/views/certificate/CertificateEditor.vue:82 +#: src/routes/modules/certificates.ts:44 +#: src/views/certificate/CertificateEditor.vue:84 msgid "Modify Certificate" msgstr "修改憑證" @@ -2953,7 +3918,7 @@ msgstr "修改憑證" msgid "Modify Config" msgstr "修改設定" -#: src/views/dashboard/components/ModulesTable.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:49 msgid "Module" msgstr "模組" @@ -2961,6 +3926,10 @@ msgstr "模組" msgid "Modules" msgstr "模組" +#: src/views/dashboard/components/ModulesTable.vue:26 +msgid "Modules cache refreshed" +msgstr "模組快取已刷新" + #: src/views/backup/AutoBackup/components/CronEditor.vue:27 msgid "Monday" msgstr "星期一" @@ -2971,41 +3940,68 @@ msgstr "每月" #: src/views/backup/AutoBackup/AutoBackup.vue:138 msgid "Monthly on day %{day} at %{time}" -msgstr "每月%{day}日%{time}" +msgstr "每月 %{day} 日 %{time}" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:204 +msgid "Mozilla/5.0..." +msgstr "Mozilla/5.0..." + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:278 +msgid "Multi-dimensional data visualization" +msgstr "多維數據可視化" #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:51 msgid "Multi-line Directive" msgstr "多行指令" -#: src/components/NgxConfigEditor/NgxUpstream.vue:199 +#: src/components/AutoCertForm/AutoCertForm.vue:196 +msgid "Must be a public IP address accessible from the internet" +msgstr "必須是可從互聯網訪問的公共 IP 地址" + +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:38 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:56 +msgid "N/A" +msgstr "不適用" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:130 #: src/views/backup/AutoBackup/AutoBackup.vue:11 -#: src/views/certificate/ACMEUser.vue:11 -#: src/views/certificate/CertificateEditor.vue:160 +#: src/views/certificate/ACMEUser.vue:13 #: src/views/certificate/CertificateList/certColumns.tsx:9 -#: src/views/certificate/DNSCredential.vue:9 +#: src/views/certificate/components/CertificateBasicInfo.vue:44 +#: src/views/certificate/components/CertificateBasicInfo.vue:58 +#: src/views/certificate/components/CertificateBasicInfo.vue:70 +#: src/views/certificate/DNSCredential.vue:17 #: src/views/config/components/ConfigRightPanel/Basic.vue:34 #: src/views/config/components/Delete.vue:123 #: src/views/config/components/Mkdir.vue:64 -#: src/views/config/configColumns.tsx:17 -#: src/views/environments/group/columns.ts:7 -#: src/views/environments/list/envColumns.tsx:8 -#: src/views/nginx_log/NginxLogList.vue:51 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:80 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:35 -#: src/views/site/site_list/columns.tsx:29 +#: src/views/config/configColumns.tsx:17 src/views/namespace/columns.ts:9 +#: src/views/nginx_log/NginxLogList.vue:149 src/views/node/nodeColumns.tsx:8 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:81 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:36 +#: src/views/site/site_list/columns.tsx:30 #: src/views/site/site_list/SiteDuplicate.vue:79 -#: src/views/stream/columns.tsx:25 -#: src/views/stream/components/RightPanel/Basic.vue:30 +#: src/views/stream/columns.tsx:26 +#: src/views/stream/components/RightPanel/Basic.vue:31 #: src/views/stream/components/StreamDuplicate.vue:71 -#: src/views/stream/StreamList.vue:145 +#: src/views/stream/StreamList.vue:123 src/views/system/Licenses.vue:13 msgid "Name" msgstr "名稱" #: src/views/config/configColumns.tsx:10 -#: src/views/site/site_list/columns.tsx:21 src/views/stream/columns.tsx:17 +#: src/views/site/site_list/columns.tsx:22 src/views/stream/columns.tsx:18 msgid "Name or content" msgstr "名稱或內容" +#: src/views/site/site_edit/components/RightPanel/Basic.vue:42 +#: src/views/site/site_list/columns.tsx:91 src/views/stream/columns.tsx:58 +#: src/views/stream/components/RightPanel/Basic.vue:39 +msgid "Namespace" +msgstr "命名空間" + +#: src/routes/modules/namespaces.ts:10 src/views/namespace/Namespace.vue:19 +msgid "Namespaces" +msgstr "命名空間" + #: src/views/dashboard/NginxDashBoard.vue:195 msgid "Need to enable the stub_status module" msgstr "需要啟用 stub_status 模組" @@ -3018,9 +4014,13 @@ msgstr "網路" msgid "Network Statistics" msgstr "網路統計" +#: src/components/LLM/LLM.vue:58 +msgid "New Chat" +msgstr "新聊天" + #: src/constants/errors/cert.ts:15 msgid "New dns challenge provider error: {0}" -msgstr "新建DNS驗證提供程序錯誤:{0}" +msgstr "新建 DNS 驗證提供程序錯誤:{0}" #: src/views/install/components/InstallView.vue:109 msgid "New Installation" @@ -3046,18 +4046,18 @@ msgstr "新路徑" msgid "New transport error: {0}" msgstr "新建傳輸錯誤:{0}" -#: src/views/system/Upgrade.vue:230 +#: src/views/system/Upgrade.vue:229 msgid "New version released" msgstr "新版本發布" -#: src/views/certificate/components/DNSIssueCertificate.vue:183 +#: src/views/certificate/components/DNSIssueCertificate.vue:184 #: src/views/install/components/InstallView.vue:96 #: src/views/site/site_add/SiteAdd.vue:131 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:214 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:225 msgid "Next" msgstr "下一步" -#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:94 +#: src/routes/modules/dashboard.ts:27 src/views/preference/Preference.vue:95 msgid "Nginx" msgstr "Nginx" @@ -3069,7 +4069,7 @@ msgstr "Nginx -T 的輸出為空" msgid "Nginx Access Log Path" msgstr "Nginx 存取日誌路徑" -#: src/language/generate.ts:23 +#: src/language/generate.ts:27 msgid "Nginx access log path exists" msgstr "Nginx 訪問日誌路徑存在" @@ -3098,15 +4098,15 @@ msgstr "Nginx 設定檔未包含 sites-enabled" msgid "Nginx conf not include stream-enabled" msgstr "Nginx 設定檔未包含 stream-enabled" -#: src/constants/errors/backup.ts:19 +#: src/constants/errors/backup.ts:18 msgid "Nginx config directory is not set" msgstr "Nginx 設定目錄未設定" -#: src/language/generate.ts:24 +#: src/language/generate.ts:28 msgid "Nginx configuration directory exists" msgstr "Nginx 配置目錄存在" -#: src/language/generate.ts:25 +#: src/language/generate.ts:29 msgid "Nginx configuration entry file exists" msgstr "Nginx 設定入口檔案存在" @@ -3114,8 +4114,8 @@ msgstr "Nginx 設定入口檔案存在" msgid "Nginx configuration has been restored" msgstr "Nginx 設定已恢復" -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:115 -#: src/views/stream/components/StreamEditor.vue:75 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:135 +#: src/views/stream/components/StreamEditor.vue:105 msgid "Nginx Configuration Parse Error" msgstr "Nginx 設定解析錯誤" @@ -3144,7 +4144,7 @@ msgstr "Nginx CPU 使用率" msgid "Nginx Error Log Path" msgstr "Nginx 錯誤日誌路徑" -#: src/language/generate.ts:26 +#: src/language/generate.ts:30 msgid "Nginx error log path exists" msgstr "Nginx 錯誤日誌路徑存在" @@ -3153,7 +4153,7 @@ msgid "Nginx error: {0}" msgstr "Nginx 錯誤:{0}" #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15 -#: src/composables/useNginxPerformance.ts:43 +#: src/composables/useNginxPerformance.ts:44 #: src/views/dashboard/NginxDashBoard.vue:134 #: src/views/dashboard/NginxDashBoard.vue:153 #: src/views/dashboard/NginxDashBoard.vue:84 @@ -3168,7 +4168,7 @@ msgstr "Nginx 未在另一個容器中運行" msgid "Nginx is running" msgstr "Nginx 執行中" -#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:144 +#: src/routes/modules/nginx_log.ts:9 src/views/nginx_log/NginxLog.vue:76 msgid "Nginx Log" msgstr "Nginx 日誌" @@ -3176,6 +4176,10 @@ msgstr "Nginx 日誌" msgid "Nginx Log Directory Whitelist" msgstr "Nginx 日誌目錄白名單" +#: src/components/ProcessingStatus/ProcessingStatus.vue:45 +msgid "Nginx Log Indexing..." +msgstr "Nginx 日誌索引中..." + #: src/composables/usePerformanceMetrics.ts:154 #: src/views/dashboard/components/PerformanceTablesCard.vue:110 msgid "Nginx Memory usage" @@ -3185,7 +4189,7 @@ msgstr "Nginx 記憶體使用量" msgid "Nginx PID Path" msgstr "Nginx PID 路徑" -#: src/language/generate.ts:22 +#: src/language/generate.ts:26 msgid "Nginx PID path exists" msgstr "Nginx PID 路徑存在" @@ -3198,7 +4202,7 @@ msgstr "Nginx 重新載入指令" msgid "Nginx reload failed: {0}" msgstr "Nginx 重新載入失敗: {0}" -#: src/views/environments/list/Environment.vue:89 +#: src/views/node/Node.vue:88 msgid "Nginx reload operations have been dispatched to remote nodes" msgstr "Nginx 重新載入操作已分發至遠端節點" @@ -3210,7 +4214,7 @@ msgstr "Nginx 重新載入成功" msgid "Nginx Restart Command" msgstr "Nginx 重啟指令" -#: src/views/environments/list/Environment.vue:103 +#: src/views/node/Node.vue:102 msgid "Nginx restart operations have been dispatched to remote nodes" msgstr "Nginx 重啟操作已分發至遠端節點" @@ -3218,7 +4222,7 @@ msgstr "Nginx 重啟操作已分發至遠端節點" msgid "Nginx restarted successfully" msgstr "Nginx 重啟成功" -#: src/language/generate.ts:27 +#: src/language/generate.ts:31 msgid "Nginx sbin path exists" msgstr "Nginx Sbin 路徑存在" @@ -3249,41 +4253,73 @@ msgid "" "a few seconds." msgstr "Nginx UI 設定已恢復,將在幾秒後自動重新啟動。" -#: src/language/generate.ts:28 +#: src/language/generate.ts:32 msgid "Nginx.conf includes conf.d directory" msgstr "Nginx.conf 包含 conf.d 目錄" -#: src/language/generate.ts:29 +#: src/language/generate.ts:33 msgid "Nginx.conf includes sites-enabled directory" msgstr "Nginx.conf 包含 sites-enabled 目錄" -#: src/language/generate.ts:30 +#: src/language/generate.ts:34 msgid "Nginx.conf includes streams-enabled directory" msgstr "Nginx.conf 包含 streams-enabled 目錄" -#: src/components/ChatGPT/ChatMessageInput.vue:17 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:157 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:169 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:99 +#: src/components/LLM/ChatMessageInput.vue:61 +#: src/components/NamespaceTabs/NamespaceTabs.vue:136 +#: src/components/NamespaceTabs/NamespaceTabs.vue:148 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:102 #: src/components/NgxConfigEditor/LocationEditor.vue:89 -#: src/components/Notification/Notification.vue:108 src/language/curd.ts:40 +#: src/components/Notification/Notification.vue:109 src/language/curd.ts:40 #: src/views/notification/Notification.vue:38 -#: src/views/preference/tabs/AuthSettings.vue:132 +#: src/views/preference/tabs/AuthSettings.vue:128 #: src/views/preference/tabs/CertSettings.vue:73 -#: src/views/site/site_list/SiteList.vue:111 -#: src/views/stream/StreamList.vue:121 +#: src/views/site/site_list/SiteList.vue:89 src/views/stream/StreamList.vue:99 msgid "No" msgstr "取消" -#: src/views/environments/group/columns.ts:19 -#: src/views/environments/group/EnvGroup.vue:47 +#: src/components/NamespaceRender/NamespaceRender.vue:41 +#: src/constants/index.ts:37 msgid "No Action" msgstr "無行動" +#: src/constants/errors/cert.ts:25 +msgid "No certificate available" +msgstr "沒有可用的憑證" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:196 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:232 +msgid "No China geographic data available" +msgstr "無中國地理數據" + +#: src/composables/useGeoTranslation.ts:169 #: src/views/dashboard/NginxDashBoard.vue:202 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:127 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:95 msgid "No data" msgstr "無數據" +#: src/views/upstream/SocketList.vue:41 +msgid "No Data" +msgstr "無資料" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:820 +msgid "No entries in current page" +msgstr "當前頁面沒有條目" + +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:217 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:253 +msgid "No geographic data available" +msgstr "無可用地理數據" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:566 +msgid "No logs found in the selected time range." +msgstr "在選定的時間範圍內未找到日誌。" + +#: src/components/NamespaceRender/NamespaceRender.vue:55 +msgid "No nodes selected" +msgstr "未選擇節點" + #: src/components/ConfigHistory/DiffViewer.vue:47 msgid "No records selected" msgstr "未選取任何記錄" @@ -3292,24 +4328,31 @@ msgstr "未選取任何記錄" msgid "No servers configured" msgstr "未配置伺服器" -#: src/components/NgxConfigEditor/NgxUpstream.vue:172 +#: src/views/dashboard/SiteNavigation.vue:231 +msgid "No sites found" +msgstr "未找到站點" + +#: src/components/AutoCertForm/AutoCertForm.vue:136 +msgid "" +"No specific IP address found in server_name configuration. Please specify " +"the server IP address below for the certificate." +msgstr "在 server_name 設定中未找到特定 IP 位址。請在下方指定伺服器 IP 位址以取得憑證。" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:829 +msgid "No structured log data available" +msgstr "無結構化日誌數據可用" + +#: src/components/NgxConfigEditor/NgxUpstream.vue:103 msgid "No upstreams configured" msgstr "未配置上游" -#: src/views/preference/Preference.vue:64 +#: src/views/preference/Preference.vue:65 msgid "Node" msgstr "節點" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:41 -#: src/views/site/site_list/columns.tsx:88 src/views/stream/columns.tsx:56 -#: src/views/stream/components/RightPanel/Basic.vue:38 -msgid "Node Group" -msgstr "節點群組" - -#: src/routes/modules/environments.ts:33 -#: src/views/environments/group/EnvGroup.vue:19 -msgid "Node Groups" -msgstr "節點群組" +#: src/constants/errors/analytic.ts:2 +msgid "Node analytics failed: {0}" +msgstr "節點分析失敗: {0}" #: src/views/preference/tabs/NodeSettings.vue:15 msgid "Node name" @@ -3319,7 +4362,12 @@ msgstr "節點名稱" msgid "Node Secret" msgstr "節點金鑰" -#: src/routes/modules/environments.ts:25 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:24 +msgid "Node Status" +msgstr "節點狀態" + +#: src/routes/modules/nodes.ts:11 src/views/dashboard/Nodes.vue:131 +#: src/views/node/Node.vue:130 msgid "Nodes" msgstr "節點" @@ -3327,36 +4375,59 @@ msgstr "節點" msgid "Not After" msgstr "不晚於" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:489 +msgid "Not Expected Text" +msgstr "非預期文本" + #: src/routes/modules/error.ts:8 msgid "Not Found" msgstr "找不到頁面" -#: src/views/dashboard/components/ModulesTable.vue:101 -#: src/views/dashboard/components/ModulesTable.vue:105 +#: src/views/nginx_log/NginxLogList.vue:227 +msgid "Not Indexed" +msgstr "未索引" + +#: src/views/dashboard/components/ModulesTable.vue:80 +#: src/views/dashboard/components/ModulesTable.vue:84 msgid "Not Loaded" msgstr "未載入" +#: src/components/AutoCertForm/AutoCertForm.vue:230 +msgid "Not supported for IP certificates" +msgstr "不支援 IP 證書" + #: src/components/CertInfo/CertInfo.vue:41 msgid "Not Valid Before: %{date}" msgstr "此前無效:%{date}" -#: src/components/AutoCertForm/AutoCertForm.vue:39 -#: src/views/certificate/DNSCredential.vue:62 +#: src/components/AutoCertForm/AutoCertForm.vue:150 +#: src/views/certificate/DNSCredential.vue:89 msgid "Note" msgstr "備註" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:65 -#: src/views/stream/components/RightPanel/Basic.vue:60 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:66 +#: src/views/stream/components/RightPanel/Basic.vue:61 msgid "" "Note, if the configuration file include other configurations or " "certificates, please synchronize them to the remote nodes in advance." msgstr "請注意,如果設定檔包含其他設定或憑證,請提前將它們同步到遠端節點。" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:508 +msgid "" +"Note: If the server does not support gRPC Reflection, health checks may " +"fail. Please ensure your gRPC server has Reflection enabled." +msgstr "注意:如果伺服器不支援 gRPC 反射,健康檢查可能會失敗。請確保您的 gRPC 伺服器已啟用反射功能。" + +#: src/views/certificate/components/CertificateBasicInfo.vue:24 +#: src/views/certificate/components/CertificateContentEditor.vue:25 +msgid "Nothing to copy" +msgstr "無內容可複製" + #: src/views/notification/Notification.vue:28 msgid "Notification" msgstr "通知" -#: src/components/Notification/Notification.vue:106 +#: src/components/Notification/Notification.vue:107 #: src/routes/modules/notifications.ts:10 msgid "Notifications" msgstr "通知" @@ -3365,15 +4436,19 @@ msgstr "通知" msgid "Notifier not found" msgstr "找不到通知器" +#: src/views/preference/components/ExternalNotify/ntfy.ts:5 +msgid "Ntfy" +msgstr "Ntfy" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26 msgid "Number of concurrent worker processes, auto sets to CPU core count" msgstr "同時執行的 worker 行程數,自動設定為 CPU 核心數" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:314 msgid "Number of files processed by cache loader at once" msgstr "快取載入器每次處理的檔案數量" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:252 msgid "Number of files processed by cache manager at once" msgstr "快取管理器每次處理的檔案數量" @@ -3388,7 +4463,7 @@ msgstr "worker 行程數" msgid "Obtain cert error: {0}" msgstr "獲取證書錯誤:{0}" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:185 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:190 msgid "Obtain certificate" msgstr "取得憑證" @@ -3396,18 +4471,18 @@ msgstr "取得憑證" msgid "Obtaining certificate" msgstr "正在取得憑證" -#: src/components/AutoCertForm/AutoCertForm.vue:100 +#: src/components/AutoCertForm/AutoCertForm.vue:258 msgid "OCSP Must Staple" msgstr "OCSP 強制裝訂" -#: src/components/AutoCertForm/AutoCertForm.vue:104 +#: src/components/AutoCertForm/AutoCertForm.vue:262 msgid "" "OCSP Must Staple may cause errors for some users on first access using " "Firefox." msgstr "OCSP 強制裝訂可能會導致部分使用者在首次使用 Firefox 存取時發生錯誤。" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 msgid "Off" msgstr "關" @@ -3415,48 +4490,58 @@ msgstr "關" msgid "Official Document" msgstr "官方文件" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NgxConfigEditor/NgxUpstream.vue:151 -#: src/components/NodeSelector/NodeSelector.vue:107 -#: src/components/ProxyTargets/ProxyTargets.vue:29 -#: src/views/dashboard/Environments.vue:101 -#: src/views/environments/list/envColumns.tsx:55 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:84 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:159 src/views/node/nodeColumns.tsx:55 +#: src/views/upstream/SocketList.vue:45 msgid "Offline" msgstr "離線" -#: src/components/ChatGPT/ChatMessageInput.vue:18 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:250 +msgid "Offline GeoIP analysis" +msgstr "離線 GeoIP 分析" + +#: src/components/LLM/ChatMessageInput.vue:62 #: src/components/NgxConfigEditor/NgxServer.vue:60 -#: src/components/NgxConfigEditor/NgxUpstream.vue:36 -#: src/components/Notification/Notification.vue:109 src/language/curd.ts:15 +#: src/components/NgxConfigEditor/NgxUpstream.vue:31 +#: src/components/Notification/Notification.vue:110 src/language/curd.ts:15 #: src/views/backup/components/BackupCreator.vue:149 #: src/views/notification/Notification.vue:39 #: src/views/site/components/SiteStatusSelect.vue:123 #: src/views/site/site_edit/components/Cert/IssueCert.vue:39 -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:144 #: src/views/site/site_edit/components/EnableTLS/EnableTLS.vue:20 -#: src/views/site/site_list/SiteList.vue:112 -#: src/views/stream/components/StreamStatusSelect.vue:60 -#: src/views/stream/StreamList.vue:122 +#: src/views/site/site_list/SiteList.vue:90 +#: src/views/stream/components/StreamStatusSelect.vue:61 +#: src/views/stream/StreamList.vue:100 msgid "OK" msgstr "確定" #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72 -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:163 msgid "On" msgstr "開啟" -#: src/views/certificate/DNSCredential.vue:72 +#: src/views/certificate/DNSCredential.vue:99 msgid "Once the verification is complete, the records will be removed." msgstr "驗證完成後,記錄將被刪除。" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:185 -#: src/components/NodeSelector/NodeSelector.vue:101 -#: src/components/NodeSelector/NodeSelector.vue:87 -#: src/views/dashboard/Environments.vue:94 -#: src/views/environments/list/envColumns.tsx:51 +#: src/components/NamespaceTabs/NamespaceTabs.vue:164 +#: src/components/NodeCard/NodeCard.vue:51 +#: src/components/NodeSelector/NodeSelector.vue:64 +#: src/components/NodeSelector/NodeSelector.vue:78 +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:48 +#: src/views/dashboard/Nodes.vue:152 src/views/node/nodeColumns.tsx:51 +#: src/views/upstream/SocketList.vue:45 msgid "Online" msgstr "線上" +#: src/components/UpstreamDetailModal/UpstreamDetailModal.vue:32 +msgid "Online Count" +msgstr "在線數量" + #: src/components/SystemRestore/SystemRestoreContent.vue:78 msgid "Only zip files are allowed" msgstr "只允許壓縮檔" @@ -3465,23 +4550,46 @@ msgstr "只允許壓縮檔" msgid "Open" msgstr "開放" -#: src/views/preference/Preference.vue:100 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:287 +msgid "Open Source Limitation" +msgstr "開源限制" + +#: src/views/preference/Preference.vue:101 msgid "OpenAI" msgstr "OpenAI" -#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:286 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:13 +msgid "Operating System" +msgstr "作業系統" + +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:36 +msgid "Operating System Statistics" +msgstr "作業系統統計" + +#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:326 msgid "Or" msgstr "或" -#: src/views/preference/components/AuthSettings/TOTP.vue:112 +#: src/views/certificate/components/CertificateFileUpload.vue:147 +msgid "or drag file to editor below" +msgstr "或將檔案拖曳到下方編輯器" + +#: src/views/preference/components/AuthSettings/TOTP.vue:114 msgid "Or enter the secret: %{secret}" msgstr "或輸入金鑰:%{secret}" +#: src/views/dashboard/SiteNavigation.vue:156 +msgid "Order saved successfully" +msgstr "順序保存成功" + #: src/views/config/components/Rename.vue:70 msgid "Original name" msgstr "原始名稱" -#: src/views/system/Upgrade.vue:194 +#: src/views/nginx_log/structured/components/SearchFilters.vue:153 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:272 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:523 +#: src/views/system/Upgrade.vue:193 msgid "OS" msgstr "作業系統" @@ -3528,11 +4636,15 @@ msgstr "參數" msgid "Params Optimization" msgstr "參數優化" -#: src/views/preference/components/AuthSettings/Passkey.vue:59 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:74 +msgid "Parser Performance" +msgstr "解析器效能" + +#: src/views/preference/components/AuthSettings/Passkey.vue:60 msgid "Passkey" msgstr "通行金鑰" -#: src/views/preference/components/AuthSettings/Passkey.vue:62 +#: src/views/preference/components/AuthSettings/Passkey.vue:63 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 " @@ -3541,7 +4653,7 @@ msgstr "" "通行金鑰是 WebAuthn 認證,透過觸控、面部辨識、裝置密碼或 PIN 碼來驗證您的身份。它們可以用作密碼替代品或作為雙重身份驗證 (2FA) " "方法。" -#: src/views/other/Login.vue:238 src/views/user/userColumns.tsx:16 +#: src/views/other/Login.vue:278 src/views/user/userColumns.tsx:16 msgid "Password" msgstr "密碼" @@ -3570,11 +4682,13 @@ msgstr "密碼不匹配" #: src/language/curd.ts:61 #: src/views/config/components/ConfigRightPanel/Basic.vue:41 #: src/views/config/components/Delete.vue:124 -#: src/views/nginx_log/NginxLogList.vue:59 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:420 +#: src/views/nginx_log/NginxLogList.vue:158 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:519 msgid "Path" msgstr "路徑" -#: src/constants/errors/backup.ts:74 +#: src/constants/errors/backup.ts:62 msgid "Path not in granted access paths: {0}" msgstr "路徑不在授予的訪問路徑中:{0}" @@ -3586,12 +4700,28 @@ msgstr "路徑:{0} 不在 Nginx 設定目錄:{1} 下" msgid "Payload resource is nil" msgstr "有效載荷資源為空" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:42 +msgid "Peak Hour" +msgstr "高峰時段" + #: src/views/backup/AutoBackup/AutoBackup.vue:194 #: src/views/backup/AutoBackup/AutoBackup.vue:219 msgid "Pending" msgstr "待處理" -#: src/views/environments/list/BatchUpgrader.vue:242 +#: src/composables/useGeoTranslation.ts:168 +#: src/views/nginx_log/dashboard/components/BrowserStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:122 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:72 +#: src/views/nginx_log/dashboard/components/DeviceStatsTable.vue:25 +#: src/views/nginx_log/dashboard/components/OSStatsTable.vue:26 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:27 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:187 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:87 +msgid "Percentage" +msgstr "百分比" + +#: src/views/node/BatchUpgrader.vue:245 msgid "Perform" msgstr "執行" @@ -3633,17 +4763,29 @@ msgid "" "count, etc." msgstr "請啟用 stub_status 模組以取得請求統計、連線數量等資訊" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:74 +#: src/language/curd.ts:67 +msgid "Please enter" +msgstr "請輸入" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:75 msgid "" "Please enter a name for the passkey you wish to create and click the OK " "button below." msgstr "請輸入您希望建立的通行金鑰名稱,並點選下面的確定按鈕。" +#: src/components/AutoCertForm/AutoCertForm.vue:98 +msgid "Please enter a valid IPv4 address (0-255 per octet)" +msgstr "請輸入有效的 IPv4 地址(每個八位元組為 0-255)" + +#: src/components/AutoCertForm/AutoCertForm.vue:109 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "請輸入有效的 IPv4 或 IPv6 地址" + #: src/components/PortScanner/PortScannerCompact.vue:85 msgid "Please enter a valid port range" msgstr "請輸入有效的端口範圍" -#: src/views/certificate/components/DNSIssueCertificate.vue:76 +#: src/views/certificate/components/DNSIssueCertificate.vue:77 msgid "Please enter at least one domain" msgstr "請輸入至少一個域名" @@ -3660,6 +4802,10 @@ msgstr "請輸入安全令牌" msgid "Please enter the security token received during backup" msgstr "請輸入備份時收到的安全令牌" +#: src/components/AutoCertForm/AutoCertForm.vue:80 +msgid "Please enter the server IP address" +msgstr "請輸入伺服器 IP 位址" + #: src/language/curd.ts:24 msgid "Please fill all fields correctly" msgstr "請正確填寫所有欄位" @@ -3668,19 +4814,19 @@ msgstr "請正確填寫所有欄位" msgid "Please fill in required S3 configuration fields" msgstr "請填寫必填的 S3 配置欄位" -#: src/views/certificate/DNSCredential.vue:66 +#: src/views/certificate/DNSCredential.vue:93 msgid "" "Please fill in the API authentication credentials provided by your DNS " "provider." msgstr "請填寫您的 DNS 供應商提供的 API 認證憑據。" -#: src/components/AutoCertForm/AutoCertForm.vue:57 +#: src/components/AutoCertForm/AutoCertForm.vue:168 msgid "" "Please first add credentials in Certification > DNS Credentials, and then " "select one of the credentialsbelow to request the API of the DNS provider." msgstr "請先在「憑證」 > 「DNS 認證」中新增認證,然後選擇以下認證之一以請求 DNS 供應商的 API。" -#: src/components/Notification/notifications.ts:190 +#: src/components/Notification/notifications.ts:194 #: src/language/constants.ts:59 msgid "" "Please generate new recovery codes in the preferences immediately to " @@ -3712,20 +4858,20 @@ msgstr "請輸入名稱,此名稱將用作新設定的檔案名稱。" msgid "Please input your E-mail!" msgstr "請輸入您的電子郵件!" -#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:47 +#: src/views/install/components/InstallForm.vue:41 src/views/other/Login.vue:80 msgid "Please input your password!" msgstr "請輸入您的密碼!" -#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:41 +#: src/views/install/components/InstallForm.vue:31 src/views/other/Login.vue:74 msgid "Please input your username!" msgstr "請輸入您的使用者名稱!" -#: src/views/backup/components/SystemRestore.vue:8 +#: src/views/backup/components/SystemRestore.vue:9 #: src/views/install/components/InstallView.vue:48 msgid "Please log in." msgstr "請登入。" -#: src/views/certificate/DNSCredential.vue:75 +#: src/views/certificate/DNSCredential.vue:102 msgid "Please note that the unit of time configurations below are all in seconds." msgstr "請注意,以下時間設定單位均為秒。" @@ -3741,25 +4887,31 @@ msgstr "請儲存此安全令牌,您將需要它進行恢復:" msgid "Please select a backup file" msgstr "請選擇備份檔案" +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:42 +msgid "Please select a notification type" +msgstr "請選擇通知類型" + +#: src/views/certificate/components/CertificateFileUpload.vue:46 +msgid "Please select a valid %{type} file (%{extensions})" +msgstr "請選擇有效的%{type}檔案(%{extensions})" + #: src/language/curd.ts:33 msgid "Please select at least one item" msgstr "請至少選擇一項" -#: src/views/environments/list/Environment.vue:201 -#: src/views/environments/list/Environment.vue:83 +#: src/views/node/Node.vue:200 src/views/node/Node.vue:82 msgid "Please select at least one node to reload Nginx" msgstr "請至少選擇一個節點以重新載入 Nginx" -#: src/views/environments/list/Environment.vue:222 -#: src/views/environments/list/Environment.vue:97 +#: src/views/node/Node.vue:221 src/views/node/Node.vue:96 msgid "Please select at least one node to restart Nginx" msgstr "請至少選擇一個節點以重啟 Nginx" -#: src/views/environments/list/Environment.vue:180 +#: src/views/node/Node.vue:179 msgid "Please select at least one node to upgrade" msgstr "請至少選擇一個節點進行升級" -#: src/views/certificate/components/RemoveCert.vue:28 +#: src/views/certificate/components/RemoveCert.vue:37 msgid "Please type \"Revoke\" to confirm" msgstr "請輸入「撤銷」以確認" @@ -3772,23 +4924,26 @@ msgstr "請輸入確切的確認文本" msgid "Port" msgstr "監聽埠" -#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:44 -#: src/views/stream/components/RightPanel/RightPanel.vue:25 +#: src/components/AutoCertForm/AutoCertForm.vue:199 +msgid "Port 80 must be open for HTTP-01 challenge validation" +msgstr "必須開放 80 端口以進行 HTTP-01 挑戰驗證" + +#: src/views/site/site_edit/components/RightPanel/RightPanel.vue:56 +#: src/views/stream/components/RightPanel/RightPanel.vue:37 msgid "Port Scanner" msgstr "端口掃描器" -#: src/views/environments/group/columns.ts:15 -#: src/views/environments/group/EnvGroup.vue:39 +#: src/components/NamespaceRender/NamespaceRender.vue:38 +#: src/views/namespace/columns.ts:46 msgid "Post-sync Action" msgstr "同步後動作" -#: src/views/environments/list/BatchUpgrader.vue:168 -#: src/views/environments/list/BatchUpgrader.vue:221 -#: src/views/system/Upgrade.vue:213 src/views/system/Upgrade.vue:267 +#: src/views/node/BatchUpgrader.vue:168 src/views/node/BatchUpgrader.vue:224 +#: src/views/system/Upgrade.vue:212 src/views/system/Upgrade.vue:266 msgid "Pre-release" msgstr "預先發布" -#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:41 +#: src/routes/modules/preference.ts:10 src/views/preference/Preference.vue:42 msgid "Preference" msgstr "偏好設定" @@ -3796,6 +4951,19 @@ msgstr "偏好設定" msgid "Preparing lego configurations" msgstr "準備 Lego 設定" +#: src/components/AutoCertForm/AutoCertForm.vue:206 +msgid "Private CA:" +msgstr "私有 CA:" + +#: src/components/AutoCertForm/AutoCertForm.vue:202 +msgid "Private IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x) will fail" +msgstr "私有 IP (192.168.x.x、10.x.x.x、172.16-31.x.x)將失敗" + +#: src/views/certificate/components/CertificateFileUpload.vue:121 +#: src/views/certificate/components/CertificateFileUpload.vue:45 +msgid "private key" +msgstr "私鑰" + #: src/components/PortScanner/PortScannerCompact.vue:55 msgid "Process" msgstr "進程" @@ -3812,6 +4980,10 @@ msgstr "行程資訊" msgid "Processing {count}/{total}" msgstr "處理中 {count}/{total}" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:69 +msgid "Production Pipeline" +msgstr "生產流水線" + #: src/language/constants.ts:3 msgid "Prohibit changing root password in demo" msgstr "在示範模式中禁止更改 root 密碼" @@ -3828,6 +5000,10 @@ msgstr "專案團隊" msgid "Protected Directory" msgstr "受保護目錄" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:378 +msgid "Protocol" +msgstr "協定" + #: src/views/preference/tabs/ServerSettings.vue:47 msgid "" "Protocol configuration only takes effect when directly connecting. If using " @@ -3835,7 +5011,7 @@ msgid "" "proxy." msgstr "協議配置僅在直接連接時生效。如果使用反向代理,請在反向代理中單獨配置協議。" -#: src/views/certificate/DNSCredential.vue:17 +#: src/views/certificate/DNSCredential.vue:26 msgid "Provider" msgstr "供應商" @@ -3843,22 +5019,57 @@ msgstr "供應商" msgid "Provider not found: {0}" msgstr "未找到提供者:{0}" -#: src/views/certificate/ACMEUser.vue:48 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:59 +msgid "Province / Region" +msgstr "省份 / 地區" + +#: src/views/certificate/ACMEUser.vue:63 msgid "Proxy" msgstr "代理伺服器" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 msgid "Proxy Pass" msgstr "代理傳遞" -#: src/views/site/site_list/columns.tsx:76 src/views/stream/columns.tsx:44 +#: src/views/site/site_list/columns.tsx:78 src/views/stream/columns.tsx:46 msgid "Proxy Targets" msgstr "代理目標" +#: src/components/AutoCertForm/AutoCertForm.vue:192 +msgid "Public CA Requirements:" +msgstr "公共 CA 要求:" + #: src/views/preference/tabs/NodeSettings.vue:46 msgid "Public Security Number" msgstr "公安編號" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:762 +msgid "PV" +msgstr "頁面瀏覽量" + +#: src/views/nginx_log/NginxLogList.vue:208 +#: src/views/nginx_log/NginxLogList.vue:209 +#: src/views/nginx_log/NginxLogList.vue:231 +msgid "Queued" +msgstr "已排隊" + +#: src/views/nginx_log/components/LoadingState.vue:48 +msgid "Queued for indexing..." +msgstr "排隊等待索引中..." + +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:51 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:701 +msgid "Quick Select" +msgstr "快速選擇" + +#: src/views/nginx_log/NginxLog.vue:94 +msgid "Raw" +msgstr "原始" + +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:195 +msgid "Re-download Database" +msgstr "重新下載資料庫" + #: src/constants/errors/site.ts:8 src/constants/errors/stream.ts:7 msgid "Read dir failed: {0}" msgstr "讀取目錄失敗: {0}" @@ -3873,24 +5084,48 @@ msgstr "讀取請求" msgid "Reads" msgstr "讀取" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:246 +msgid "Real-time analytics dashboard" +msgstr "即時分析儀表板" + +#: src/views/nginx_log/NginxLogList.vue:495 +msgid "Rebuild" +msgstr "重建" + +#: src/views/nginx_log/indexing/IndexManagement.vue:94 +msgid "Rebuild All Index" +msgstr "重建所有索引" + +#: src/views/nginx_log/indexing/IndexManagement.vue:55 +msgid "Rebuild File Index" +msgstr "重建文件索引" + +#: src/views/nginx_log/indexing/IndexManagement.vue:29 +msgid "Rebuild Index" +msgstr "重建索引" + #: src/views/dashboard/ServerAnalytic.vue:341 #: src/views/dashboard/ServerAnalytic.vue:35 msgid "Receive" msgstr "接收" -#: src/components/SelfCheck/SelfCheck.vue:24 +#: src/components/SelfCheck/SelfCheck.vue:41 msgid "Recheck" msgstr "重新檢查" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:151 +msgid "Recommended:" +msgstr "推薦:" + #: src/components/TwoFA/Authorization.vue:79 msgid "Recovery" msgstr "恢復" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:68 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:69 msgid "Recovery Codes" msgstr "復原代碼" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:73 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:74 msgid "" "Recovery codes are used to access your account when you lose access to your " "2FA device. Each code can only be used once." @@ -3900,33 +5135,47 @@ msgstr "復原代碼在您無法使用 2FA 裝置時,用於存取您的帳戶 msgid "Recursive Nameservers" msgstr "遞迴名稱伺服器" -#: src/components/ChatGPT/ChatMessageInput.vue:30 +#: src/views/nginx_log/structured/components/SearchFilters.vue:185 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:298 +msgid "Referer" +msgstr "來源" + +#: src/language/curd.ts:70 +#: src/views/dashboard/components/SiteNavigationToolbar.vue:77 +msgid "Refresh" +msgstr "重新整理" + +#: src/views/dashboard/components/ModulesTable.vue:114 +msgid "Refresh Modules Cache" +msgstr "刷新模組快取" + +#: src/components/LLM/ChatMessageInput.vue:74 msgid "Regenerate response" msgstr "重新產生回應" -#: src/views/certificate/ACMEUser.vue:133 +#: src/views/certificate/ACMEUser.vue:174 msgid "Register" msgstr "註冊" -#: src/views/certificate/ACMEUser.vue:53 +#: src/views/certificate/ACMEUser.vue:68 msgid "" "Register a user or use this account to issue a certificate through an HTTP " "proxy." msgstr "註冊一個使用者或使用此帳戶透過 HTTP 代理發行憑證。" -#: src/views/certificate/ACMEUser.vue:101 +#: src/views/certificate/ACMEUser.vue:142 msgid "Register failed" msgstr "註冊失敗" -#: src/views/certificate/ACMEUser.vue:72 +#: src/views/certificate/ACMEUser.vue:113 msgid "Register On Startup" msgstr "啟動時註冊" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:26 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:27 msgid "Register passkey successfully" msgstr "通行金鑰註冊成功" -#: src/views/certificate/ACMEUser.vue:99 +#: src/views/certificate/ACMEUser.vue:140 msgid "Register successfully" msgstr "註冊成功" @@ -3934,28 +5183,30 @@ msgstr "註冊成功" msgid "Registering user" msgstr "註冊使用者中" -#: src/views/certificate/ACMEUser.vue:116 +#: src/views/certificate/ACMEUser.vue:157 msgid "Registration Status" msgstr "註冊狀態" -#: src/views/system/Upgrade.vue:152 +#: src/views/system/Upgrade.vue:151 msgid "Reinstall" msgstr "重新安裝" -#: src/views/system/Upgrade.vue:271 +#: src/constants/errors/version.ts:3 +msgid "Release API request failed: {0}" +msgstr "發佈 API 請求失敗: {0}" + +#: src/views/system/Upgrade.vue:270 msgid "Release Note" msgstr "發行公告" -#: src/components/ChatGPT/ChatMessage.vue:222 +#: src/components/LLM/ChatMessage.vue:251 #: src/components/NginxControl/NginxControl.vue:103 msgid "Reload" msgstr "重新載入" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162 -#: src/views/environments/group/columns.ts:22 -#: src/views/environments/group/EnvGroup.vue:50 -#: src/views/environments/list/Environment.vue:209 -#: src/views/environments/list/Environment.vue:217 +#: src/components/NamespaceRender/NamespaceRender.vue:44 +#: src/components/NamespaceTabs/NamespaceTabs.vue:141 src/constants/index.ts:38 +#: src/views/node/Node.vue:208 src/views/node/Node.vue:216 msgid "Reload Nginx" msgstr "重新載入 Nginx" @@ -3979,7 +5230,7 @@ msgstr "重新載入遠端 Nginx 錯誤" msgid "Reload Remote Nginx Success" msgstr "遠端 Nginx 重新載入成功" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:110 +#: src/components/NamespaceTabs/NamespaceTabs.vue:85 msgid "Reload request failed, please check your network connection" msgstr "重新載入請求失敗,請檢查您的網路連線" @@ -3991,22 +5242,28 @@ msgstr "重新載入中" msgid "Reloading nginx" msgstr "正在重新載入 Nginx" -#: src/views/certificate/components/DNSIssueCertificate.vue:146 -#: src/views/preference/tabs/AuthSettings.vue:137 +#: src/constants/index.ts:43 src/constants/index.ts:49 +msgid "Remote" +msgstr "遠端" + +#: src/views/certificate/components/DNSIssueCertificate.vue:147 +#: src/views/preference/tabs/AuthSettings.vue:133 msgid "Remove" msgstr "移除" -#: src/views/preference/components/AuthSettings/Passkey.vue:46 -#: src/views/preference/tabs/AuthSettings.vue:47 +#: src/views/preference/components/AuthSettings/Passkey.vue:47 +#: src/views/preference/tabs/AuthSettings.vue:48 msgid "Remove successfully" msgstr "移除成功" -#: src/components/Notification/Notification.vue:77 +#: src/components/Notification/Notification.vue:78 msgid "Removed successfully" msgstr "移除成功" -#: src/components/NgxConfigEditor/NgxUpstream.vue:131 -#: src/views/config/components/ConfigName.vue:51 +#: src/components/LLM/LLMSessionTabs.vue:283 +#: src/components/LLM/LLMSessionTabs.vue:374 +#: src/components/NgxConfigEditor/NgxUpstream.vue:75 +#: src/views/config/components/ConfigName.vue:50 #: src/views/config/components/Rename.vue:56 #: src/views/config/ConfigList.vue:190 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:44 @@ -4015,12 +5272,12 @@ msgid "Rename" msgstr "重新命名" #: src/components/Notification/notifications.ts:78 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed" -msgstr "將 %{orig_path} 重新命名為 %{new_path} 在 %{env_name} 上失敗" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} failed" +msgstr "在 %{node_name} 上將 %{orig_path} 重新命名為 %{new_path} 失敗" #: src/components/Notification/notifications.ts:82 -msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully" -msgstr "成功將 %{env_name} 上的 %{orig_path} 重新命名為 %{new_path}" +msgid "Rename %{orig_path} to %{new_path} on %{node_name} successfully" +msgstr "在 %{node_name} 上成功將 %{orig_path} 重新命名為 %{new_path}" #: src/components/Notification/notifications.ts:77 src/language/constants.ts:42 msgid "Rename Remote Config Error" @@ -4030,37 +5287,37 @@ msgstr "重新命名遠端設定錯誤" msgid "Rename Remote Config Success" msgstr "重新命名遠端設定成功" -#: src/components/Notification/notifications.ts:133 +#: src/components/Notification/notifications.ts:137 #: src/language/constants.ts:56 msgid "Rename Remote Site Error" msgstr "重新命名遠端遠端站點時發生錯誤" -#: src/components/Notification/notifications.ts:137 +#: src/components/Notification/notifications.ts:141 #: src/language/constants.ts:55 msgid "Rename Remote Site Success" msgstr "重新命名遠端站點成功" -#: src/components/Notification/notifications.ts:173 +#: src/components/Notification/notifications.ts:177 msgid "Rename Remote Stream Error" msgstr "遠端串流重新命名錯誤" -#: src/components/Notification/notifications.ts:177 +#: src/components/Notification/notifications.ts:181 msgid "Rename Remote Stream Success" msgstr "遠端串流重新命名成功" -#: src/components/Notification/notifications.ts:134 +#: src/components/Notification/notifications.ts:138 msgid "Rename site %{name} to %{new_name} on %{node} failed" msgstr "將網站 %{name} 在 %{node} 上重新命名為 %{new_name} 失敗" -#: src/components/Notification/notifications.ts:138 +#: src/components/Notification/notifications.ts:142 msgid "Rename site %{name} to %{new_name} on %{node} successfully" msgstr "將網站 %{name} 在 %{node} 上成功更名為 %{new_name}" -#: src/components/Notification/notifications.ts:174 +#: src/components/Notification/notifications.ts:178 msgid "Rename stream %{name} to %{new_name} on %{node} failed" msgstr "將節點 %{node} 上的串流 %{name} 重新命名為 %{new_name} 失敗" -#: src/components/Notification/notifications.ts:178 +#: src/components/Notification/notifications.ts:182 msgid "Rename stream %{name} to %{new_name} on %{node} successfully" msgstr "將節點 %{node} 上的串流 %{name} 重新命名為 %{new_name} 成功" @@ -4068,7 +5325,7 @@ msgstr "將節點 %{node} 上的串流 %{name} 重新命名為 %{new_name} 成 msgid "Rename successfully" msgstr "重新命名成功" -#: src/views/config/components/ConfigName.vue:30 +#: src/views/config/components/ConfigName.vue:28 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:27 #: src/views/stream/components/ConfigName.vue:27 msgid "Renamed successfully" @@ -4078,8 +5335,8 @@ msgstr "重新命名成功" msgid "Renew cert error: {0}" msgstr "續簽證書錯誤:{0}" -#: src/views/certificate/components/RenewCert.vue:48 -#: src/views/certificate/components/RenewCert.vue:55 +#: src/views/certificate/components/RenewCert.vue:51 +#: src/views/certificate/components/RenewCert.vue:58 msgid "Renew Certificate" msgstr "更換憑證" @@ -4091,11 +5348,23 @@ msgstr "更新憑證錯誤" msgid "Renew Certificate Success" msgstr "更新憑證成功" -#: src/views/certificate/components/DNSIssueCertificate.vue:86 -#: src/views/certificate/components/RenewCert.vue:30 +#: src/views/certificate/components/DNSIssueCertificate.vue:87 +#: src/views/certificate/components/RenewCert.vue:33 msgid "Renew successfully" msgstr "更新成功" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:217 +msgid "Request" +msgstr "請求" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:446 +msgid "Request Body" +msgstr "請求體" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:122 +msgid "Request Path" +msgstr "請求路徑" + #: src/views/dashboard/components/PerformanceTablesCard.vue:142 msgid "Request statistics" msgstr "請求統計" @@ -4113,13 +5382,19 @@ msgid "Requests Per Connection" msgstr "每連線請求數量" #: src/language/curd.ts:13 +#: src/views/nginx_log/structured/components/SearchFilters.vue:214 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:738 msgid "Reset" msgstr "重設" -#: src/views/preference/components/AuthSettings/TOTP.vue:93 +#: src/views/preference/components/AuthSettings/TOTP.vue:95 msgid "Reset 2FA" msgstr "重設多重因素驗證" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:844 +msgid "Reset Search" +msgstr "重置搜尋" + #: src/views/dashboard/components/ResourceUsageCard.vue:53 msgid "" "Resident Set Size: Actual memory resident in physical memory, including all " @@ -4127,6 +5402,10 @@ msgid "" "processes" msgstr "常駐集大小:實際存在於實體記憶體中的記憶體,包含所有共用函式庫記憶體,這些記憶體會在多個行程間重複計算" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:110 +msgid "Resource Usage Warning" +msgstr "資源使用警告" + #: src/composables/usePerformanceMetrics.ts:109 #: src/views/dashboard/components/PerformanceTablesCard.vue:69 msgid "Responses" @@ -4136,9 +5415,8 @@ msgstr "回應" msgid "Restart" msgstr "重新啟動" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:174 -#: src/views/environments/list/Environment.vue:230 -#: src/views/environments/list/Environment.vue:238 +#: src/components/NamespaceTabs/NamespaceTabs.vue:153 +#: src/views/node/Node.vue:229 src/views/node/Node.vue:237 msgid "Restart Nginx" msgstr "重新啟動 Nginx" @@ -4158,7 +5436,7 @@ msgstr "遠端 Nginx 重啟錯誤" msgid "Restart Remote Nginx Success" msgstr "遠端 Nginx 重啟成功" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:130 +#: src/components/NamespaceTabs/NamespaceTabs.vue:105 msgid "Restart request failed, please check your network connection" msgstr "重新啟動請求失敗,請檢查您的網路連線" @@ -4197,8 +5475,8 @@ msgstr "恢復此版本" msgid "Restored successfully" msgstr "恢復成功" -#: src/views/certificate/components/RemoveCert.vue:27 -#: src/views/certificate/components/RemoveCert.vue:98 +#: src/views/certificate/components/RemoveCert.vue:107 +#: src/views/certificate/components/RemoveCert.vue:36 msgid "Revoke" msgstr "撤銷" @@ -4206,29 +5484,29 @@ msgstr "撤銷" msgid "Revoke cert error: {0}" msgstr "吊銷證書錯誤:{0}" -#: src/components/AutoCertForm/AutoCertForm.vue:119 +#: src/components/AutoCertForm/AutoCertForm.vue:277 msgid "Revoke Old Certificate" msgstr "撤銷舊憑證" -#: src/views/certificate/components/RemoveCert.vue:112 +#: src/views/certificate/components/RemoveCert.vue:121 msgid "Revoke this certificate" msgstr "撤銷此憑證" -#: src/views/certificate/components/RemoveCert.vue:120 +#: src/views/certificate/components/RemoveCert.vue:129 msgid "" "Revoking a certificate will affect any services currently using it. This " "action cannot be undone." msgstr "撤銷憑證將會影響目前使用它的所有服務。此動作無法復原。" -#: src/views/preference/tabs/AuthSettings.vue:75 +#: src/views/preference/tabs/AuthSettings.vue:72 msgid "RP Display Name" msgstr "RP 顯示名稱" -#: src/views/preference/tabs/AuthSettings.vue:81 +#: src/views/preference/tabs/AuthSettings.vue:78 msgid "RP Origins" msgstr "RP 源站" -#: src/views/preference/tabs/AuthSettings.vue:69 +#: src/views/preference/tabs/AuthSettings.vue:66 msgid "RPID" msgstr "RPID" @@ -4248,7 +5526,7 @@ msgstr "S3" #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:83 msgid "S3 access key ID" -msgstr "S3存取金鑰ID" +msgstr "S3 存取金鑰 ID" #: src/views/backup/AutoBackup/AutoBackup.vue:249 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:77 @@ -4264,10 +5542,6 @@ msgstr "必須提供 S3 存取金鑰 ID" msgid "S3 Bucket" msgstr "S3 儲存桶" -#: src/constants/errors/backup.ts:70 -msgid "S3 bucket access denied: {0}" -msgstr "S3儲存桶存取被拒絕:{0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:101 msgid "S3 bucket is required" msgstr "必須填寫 S3 儲存桶" @@ -4276,35 +5550,23 @@ msgstr "必須填寫 S3 儲存桶" msgid "S3 bucket name" msgstr "S3 儲存貯體名稱" -#: src/constants/errors/backup.ts:63 +#: src/constants/errors/backup.ts:56 msgid "S3 configuration is incomplete: missing {0}" msgstr "S3 配置不完整:缺少 {0}" #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:34 msgid "S3 connection test failed" -msgstr "S3連接測試失敗" - -#: src/constants/errors/backup.ts:69 -msgid "S3 connection test failed: {0}" -msgstr "S3連接測試失敗: {0}" +msgstr "S3 連接測試失敗" #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:30 msgid "S3 connection test successful" -msgstr "S3連接測試成功" - -#: src/constants/errors/backup.ts:71 -msgid "S3 credentials are invalid: {0}" -msgstr "S3 憑證無效: {0}" +msgstr "S3 連接測試成功" #: src/views/backup/AutoBackup/AutoBackup.vue:243 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:66 msgid "S3 Endpoint" msgstr "S3 終端節點" -#: src/constants/errors/backup.ts:72 -msgid "S3 endpoint is invalid: {0}" -msgstr "S3終端節點無效:{0}" - #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:68 msgid "S3 endpoint is required" msgstr "必須提供 S3 端點" @@ -4338,27 +5600,29 @@ msgstr "S3 秘密存取金鑰" #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:90 msgid "S3 secret access key is required" -msgstr "必須提供S3秘密存取金鑰" +msgstr "必須提供 S3 秘密存取金鑰" -#: src/constants/errors/backup.ts:68 +#: src/constants/errors/backup.ts:60 msgid "S3 upload failed: {0}" -msgstr "S3上傳失敗:{0}" +msgstr "S3 上傳失敗:{0}" #: src/views/backup/AutoBackup/components/CronEditor.vue:32 msgid "Saturday" msgstr "星期六" -#: src/components/ChatGPT/ChatMessage.vue:215 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:129 -#: src/language/curd.ts:18 src/views/certificate/CertificateEditor.vue:264 +#: src/components/LLM/ChatMessage.vue:244 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:132 +#: src/language/curd.ts:18 +#: src/views/certificate/components/CertificateActions.vue:29 #: src/views/config/components/ConfigLeftPanel.vue:282 -#: src/views/config/components/ConfigName.vue:59 -#: src/views/preference/components/AuthSettings/Passkey.vue:130 -#: src/views/preference/Preference.vue:117 +#: src/views/config/components/ConfigName.vue:58 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:635 +#: src/views/preference/components/AuthSettings/Passkey.vue:131 +#: src/views/preference/Preference.vue:124 #: src/views/site/site_edit/components/ConfigName/ConfigName.vue:52 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:163 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:190 #: src/views/stream/components/ConfigName.vue:52 -#: src/views/stream/components/StreamEditor.vue:118 +#: src/views/stream/components/StreamEditor.vue:154 msgid "Save" msgstr "儲存" @@ -4366,41 +5630,41 @@ msgstr "儲存" msgid "Save Directive" msgstr "儲存指令" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:45 -msgid "Save error %{msg}" -msgstr "儲存錯誤 %{msg}" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:53 +msgid "Save Order" +msgstr "儲存順序" -#: src/components/Notification/notifications.ts:141 +#: src/components/Notification/notifications.ts:145 #: src/language/constants.ts:48 msgid "Save Remote Site Error" msgstr "儲存遠端站點時發生錯誤" -#: src/components/Notification/notifications.ts:145 +#: src/components/Notification/notifications.ts:149 #: src/language/constants.ts:47 msgid "Save Remote Site Success" msgstr "儲存遠端站點成功" -#: src/components/Notification/notifications.ts:181 +#: src/components/Notification/notifications.ts:185 msgid "Save Remote Stream Error" msgstr "儲存遠端串流錯誤" -#: src/components/Notification/notifications.ts:185 +#: src/components/Notification/notifications.ts:189 msgid "Save Remote Stream Success" msgstr "遠端串流儲存成功" -#: src/components/Notification/notifications.ts:142 +#: src/components/Notification/notifications.ts:146 msgid "Save site %{name} to %{node} failed" msgstr "將網站 %{name} 儲存至 %{node} 失敗" -#: src/components/Notification/notifications.ts:146 +#: src/components/Notification/notifications.ts:150 msgid "Save site %{name} to %{node} successfully" msgstr "網站 %{name} 成功儲存至 %{node}" -#: src/components/Notification/notifications.ts:182 +#: src/components/Notification/notifications.ts:186 msgid "Save stream %{name} to %{node} failed" msgstr "儲存串流 %{name} 至 %{node} 失敗" -#: src/components/Notification/notifications.ts:186 +#: src/components/Notification/notifications.ts:190 msgid "Save stream %{name} to %{node} successfully" msgstr "串流 %{name} 成功儲存至 %{node}" @@ -4408,16 +5672,17 @@ msgstr "串流 %{name} 成功儲存至 %{node}" msgid "Save successful" msgstr "儲存成功" -#: src/language/curd.ts:35 src/views/certificate/store.ts:14 -#: src/views/preference/store/index.ts:120 +#: src/language/curd.ts:35 src/views/certificate/CertificateEditor.vue:49 +#: src/views/certificate/components/RenewCert.vue:26 +#: src/views/preference/store/index.ts:124 msgid "Save successfully" msgstr "儲存成功" -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:43 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:48 #: src/language/curd.ts:28 src/views/config/components/ConfigLeftPanel.vue:198 #: src/views/site/site_add/SiteAdd.vue:36 -#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:40 -#: src/views/stream/store.ts:70 +#: src/views/site/site_edit/components/SiteEditor/SiteEditor.vue:51 +#: src/views/stream/components/StreamEditor.vue:30 msgid "Saved successfully" msgstr "儲存成功" @@ -4441,13 +5706,13 @@ msgstr "掃描端口" msgid "Scan Results" msgstr "掃描結果" -#: src/views/preference/components/AuthSettings/TOTP.vue:69 +#: src/views/preference/components/AuthSettings/TOTP.vue:71 msgid "Scan the QR code with your mobile phone to add the account to the app." msgstr "用手機掃描二維碼將賬戶新增到應用程式中。" -#: src/views/nginx_log/NginxLogList.vue:100 -msgid "Scanning logs..." -msgstr "正在掃描日誌..." +#: src/views/nginx_log/indexing/components/IndexProgressBar.vue:50 +msgid "Scanning" +msgstr "掃描中" #: src/views/backup/AutoBackup/AutoBackup.vue:113 msgid "Schedule" @@ -4462,16 +5727,37 @@ msgid "SDK" msgstr "SDK" #: src/language/constants.ts:62 src/language/curd.ts:12 -#: src/views/config/configColumns.tsx:5 src/views/site/site_list/columns.tsx:16 -#: src/views/stream/columns.tsx:12 +#: src/views/config/configColumns.tsx:5 +#: src/views/nginx_log/structured/components/SearchFilters.vue:217 +#: src/views/site/site_list/columns.tsx:17 src/views/stream/columns.tsx:13 msgid "Search" msgstr "搜尋" +#: src/views/nginx_log/structured/components/SearchFilters.vue:53 +msgid "Search Filters" +msgstr "搜尋篩選器" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:69 +msgid "Search in log content..." +msgstr "在日誌內容中搜尋..." + #: src/language/constants.ts:61 msgid "Search module name" msgstr "搜尋模組名稱" -#: src/views/preference/components/AuthSettings/TOTP.vue:109 +#: src/views/dashboard/components/ModulesTable.vue:103 +msgid "Search modules" +msgstr "搜尋模組" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:835 +msgid "Search range" +msgstr "搜尋範圍" + +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:79 +msgid "Search templates" +msgstr "搜尋模板" + +#: src/views/preference/components/AuthSettings/TOTP.vue:111 msgid "Secret has been copied" msgstr "金鑰已複製" @@ -4488,13 +5774,19 @@ msgstr "安全代碼" msgid "Security Token Information" msgstr "安全代碼資訊" +#: src/views/certificate/ACMEUser.vue:59 +msgid "" +"Select a predefined CA directory or enter a custom one. Leave blank to use " +"the default CA directory." +msgstr "選擇一個預定義的 CA 目錄或輸入自訂目錄。留空則使用預設 CA 目錄。" + #: src/language/curd.ts:31 msgid "Select all" msgstr "全選" -#: src/views/environments/group/EnvGroup.vue:42 -msgid "Select an action after sync" -msgstr "同步後選擇操作" +#: src/views/certificate/ACMEUser.vue:45 +msgid "Select or enter a CA directory URL" +msgstr "選擇或輸入 CA 目錄 URL" #: src/language/curd.ts:59 msgid "Selected {count} files" @@ -4504,7 +5796,7 @@ msgstr "已選擇 {count} 個檔案" msgid "Selector" msgstr "選擇器" -#: src/components/SelfCheck/SelfCheck.vue:16 src/routes/modules/system.ts:19 +#: src/components/SelfCheck/SelfCheck.vue:33 src/routes/modules/system.ts:19 msgid "Self Check" msgstr "自我檢查" @@ -4518,11 +5810,15 @@ msgstr "自我檢查失敗,Nginx UI 可能無法正常運作" msgid "Send" msgstr "傳送" -#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:46 +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:78 +msgid "Send test message" +msgstr "發送測試訊息" + +#: src/routes/modules/dashboard.ts:19 src/views/preference/Preference.vue:47 msgid "Server" msgstr "伺服器" -#: src/views/certificate/CertificateEditor.vue:54 +#: src/views/certificate/CertificateEditor.vue:56 msgid "Server error" msgstr "伺服器錯誤" @@ -4530,6 +5826,10 @@ msgstr "伺服器錯誤" msgid "Server Info" msgstr "伺服器資訊" +#: src/components/AutoCertForm/AutoCertForm.vue:178 +msgid "Server IP Address" +msgstr "伺服器 IP 位址" + #: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99 msgid "Server Names Hash Bucket Size" msgstr "伺服器名稱雜湊桶大小" @@ -4538,7 +5838,7 @@ msgstr "伺服器名稱雜湊桶大小" msgid "Server names hash table size" msgstr "伺服器名稱雜湊表大小" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:105 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:107 msgid "server_name not found in directives" msgstr "在指令中未找到 server_name" @@ -4546,6 +5846,10 @@ msgstr "在指令中未找到 server_name" msgid "ServerIdx out of range" msgstr "伺服器索引超出範圍" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:515 +msgid "Service Name" +msgstr "服務名稱" + #: src/constants/errors/user.ts:12 msgid "Session not found" msgstr "找不到工作階段" @@ -4580,6 +5884,10 @@ msgstr "設定環境變數中" msgid "Setting HTTP01 challenge provider" msgstr "使用 HTTP01 挑戰提供者" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:88 +msgid "Settings" +msgstr "設定" + #: src/constants/errors/nginx_log.ts:8 msgid "" "Settings.NginxLogSettings.AccessLogPath is empty, refer to " @@ -4600,7 +5908,7 @@ msgstr "" msgid "Setup your Nginx UI" msgstr "設定您的 Nginx UI" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:146 msgid "Shared Memory Zone" msgstr "共享記憶體區域" @@ -4608,10 +5916,18 @@ msgstr "共享記憶體區域" msgid "Show" msgstr "顯示" -#: src/views/other/Login.vue:295 +#: src/views/terminal/components/TerminalHeader.vue:85 +msgid "Show Assistant" +msgstr "顯示助手" + +#: src/views/other/Login.vue:335 msgid "Sign in with a passkey" msgstr "使用通行金鑰登入" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:76 +msgid "SIMD-optimized stream processing" +msgstr "SIMD 優化的流處理" + #: src/components/NgxConfigEditor/directive/DirectiveAdd.vue:48 msgid "Single Directive" msgstr "單一指令" @@ -4632,11 +5948,23 @@ msgstr "網站處於維護模式" msgid "Site Logs" msgstr "網站日誌" +#: src/views/dashboard/components/SiteNavigationToolbar.vue:29 +msgid "Site Navigation" +msgstr "站點導航" + #: src/constants/errors/site.ts:2 msgid "Site not found" msgstr "站點未找到" -#: src/language/generate.ts:31 +#: src/views/dashboard/SiteNavigation.vue:93 +msgid "Site refresh initiated" +msgstr "站點刷新已啟動" + +#: src/routes/modules/dashboard.ts:35 +msgid "Sites" +msgstr "站點" + +#: src/language/generate.ts:35 msgid "Sites directory exists" msgstr "站點目錄存在" @@ -4644,6 +5972,12 @@ msgstr "站點目錄存在" msgid "Sites List" msgstr "網站列表" +#: src/views/dashboard/SiteNavigation.vue:234 +msgid "" +"Sites will appear here once you configure nginx server blocks with valid " +"server_name directives." +msgstr "配置帶有有效 server_name 指令的 nginx 伺服器區塊後,站點將顯示在此處。" + #: src/constants/errors/self_check.ts:11 msgid "Sites-available directory not exist" msgstr "sites-available 資料夾不存在" @@ -4653,6 +5987,8 @@ msgid "Sites-enabled directory not exist" msgstr "sites-enabled 資料夾不存在" #: src/language/curd.ts:62 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:248 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:521 msgid "Size" msgstr "大小" @@ -4660,19 +5996,36 @@ msgstr "大小" msgid "Skip Installation" msgstr "跳過安裝" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:324 msgid "Sleep time between cache loader iterations" msgstr "快取載入器迭代間的休眠時間" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:262 msgid "Sleep time between cache manager iterations" msgstr "快取管理器迭代間的休眠時間" +#: src/views/upstream/SocketList.vue:18 +msgid "Socket" +msgstr "套接字" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:735 +msgid "Sorted by" +msgstr "排序方式" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:605 +msgid "Source IP" +msgstr "來源 IP" + #: src/views/system/About.vue:46 msgid "Sponsor" msgstr "贊助" -#: src/views/certificate/CertificateEditor.vue:211 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:62 +msgid "SSD storage for better I/O performance" +msgstr "SSD 儲存以獲得更好的 I/O 效能" + +#: src/views/certificate/components/CertificateContentEditor.vue:119 +#: src/views/certificate/components/CertificateContentEditor.vue:124 msgid "SSL Certificate Content" msgstr "SSL 憑證內容" @@ -4684,15 +6037,20 @@ msgstr "SSL 憑證檔案必須位於 Nginx 設定目錄下:{0}" msgid "SSL certificate file not found" msgstr "SSL 憑證檔案未找到" -#: src/views/certificate/CertificateEditor.vue:225 +#: src/views/certificate/components/CertificateContentEditor.vue:180 +#: src/views/certificate/components/CertificateContentEditor.vue:185 msgid "SSL Certificate Key Content" msgstr "SSL 憑證金鑰內容" -#: src/views/certificate/CertificateEditor.vue:190 +#: src/views/certificate/components/CertificateBasicInfo.vue:112 +#: src/views/certificate/components/CertificateBasicInfo.vue:126 +#: src/views/certificate/components/CertificateBasicInfo.vue:138 msgid "SSL Certificate Key Path" msgstr "SSL 憑證金鑰路徑" -#: src/views/certificate/CertificateEditor.vue:175 +#: src/views/certificate/components/CertificateBasicInfo.vue:104 +#: src/views/certificate/components/CertificateBasicInfo.vue:78 +#: src/views/certificate/components/CertificateBasicInfo.vue:92 #: src/views/preference/tabs/ServerSettings.vue:37 msgid "SSL Certificate Path" msgstr "SSL 憑證路徑" @@ -4717,13 +6075,12 @@ msgstr "SSL 金鑰路徑" msgid "SSL key path is required when HTTPS is enabled" msgstr "啟用 HTTPS 時必須提供 SSL 金鑰路徑" -#: src/views/other/Login.vue:252 +#: src/views/other/Login.vue:292 msgid "SSO Login" msgstr "SSO 登入" -#: src/views/environments/list/BatchUpgrader.vue:165 -#: src/views/environments/list/BatchUpgrader.vue:215 -#: src/views/system/Upgrade.vue:210 src/views/system/Upgrade.vue:261 +#: src/views/node/BatchUpgrader.vue:165 src/views/node/BatchUpgrader.vue:218 +#: src/views/system/Upgrade.vue:209 src/views/system/Upgrade.vue:260 msgid "Stable" msgstr "穩定" @@ -4731,33 +6088,49 @@ msgstr "穩定" msgid "Start" msgstr "開始" +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:57 +msgid "Start Date" +msgstr "開始日期" + #: src/components/SystemRestore/SystemRestoreContent.vue:246 #: src/components/SystemRestore/SystemRestoreContent.vue:323 msgid "Start Restore" msgstr "開始恢復" -#: src/views/dashboard/components/ModulesTable.vue:88 -#: src/views/dashboard/components/ModulesTable.vue:92 +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:56 +msgid "Starting download..." +msgstr "開始下載..." + +#: src/views/dashboard/components/ModulesTable.vue:67 +#: src/views/dashboard/components/ModulesTable.vue:71 msgid "Static" msgstr "靜態" #: src/components/PortScanner/PortScannerCompact.vue:37 #: src/views/backup/AutoBackup/AutoBackup.vue:160 -#: src/views/certificate/ACMEUser.vue:60 +#: src/views/certificate/ACMEUser.vue:75 #: src/views/certificate/CertificateList/certColumns.tsx:63 -#: src/views/dashboard/components/ModulesTable.vue:96 -#: src/views/environments/list/envColumns.tsx:43 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:28 -#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:81 +#: src/views/dashboard/components/ModulesTable.vue:75 +#: src/views/nginx_log/structured/components/SearchFilters.vue:106 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:240 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:520 +#: src/views/node/nodeColumns.tsx:43 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:29 +#: src/views/site/site_list/columns.tsx:120 src/views/stream/columns.tsx:87 msgid "Status" msgstr "狀態" +#: src/views/preference/components/ExternalNotify/EnabledSwitch.vue:24 +msgid "Status updated successfully" +msgstr "狀態更新成功" + #: src/components/NginxControl/NginxControl.vue:87 msgid "Stopped" msgstr "已停止" #: src/views/dashboard/ServerAnalytic.vue:257 #: src/views/dashboard/ServerAnalytic.vue:258 +#: src/views/nginx_log/components/IndexingSettingsModal.vue:60 msgid "Storage" msgstr "儲存空間" @@ -4781,10 +6154,6 @@ msgstr "儲存路徑" msgid "Storage path is required" msgstr "儲存路徑是必填項" -#: src/constants/errors/backup.ts:61 -msgid "Storage path not in granted access paths: {0}" -msgstr "儲存路徑不在授予的存取路徑中: {0}" - #: src/views/backup/AutoBackup/AutoBackup.vue:70 #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:45 msgid "Storage Type" @@ -4798,7 +6167,7 @@ msgstr "串流已啟用" msgid "Stream not found" msgstr "串流未找到" -#: src/language/generate.ts:32 +#: src/language/generate.ts:36 msgid "Streams directory exists" msgstr "Streams 目錄存在" @@ -4810,6 +6179,10 @@ msgstr "streams-available 資料夾不存在" msgid "Streams-enabled directory not exist" msgstr "streams-enabled 資料夾不存在" +#: src/views/nginx_log/NginxLog.vue:92 +msgid "Structured" +msgstr "結構化" + #: src/views/preference/tabs/NginxSettings.vue:10 msgid "Stub Status Port" msgstr "存根狀態端口" @@ -4818,7 +6191,7 @@ msgstr "存根狀態端口" msgid "Stub_status is not enabled" msgstr "未啟用 stub_status" -#: src/constants/index.ts:25 src/views/backup/AutoBackup/AutoBackup.vue:195 +#: src/constants/index.ts:26 src/views/backup/AutoBackup/AutoBackup.vue:195 #: src/views/backup/AutoBackup/AutoBackup.vue:220 #: src/views/notification/notificationColumns.tsx:35 msgid "Success" @@ -4829,16 +6202,6 @@ msgstr "成功" msgid "Sunday" msgstr "星期日" -#: src/components/SelfCheck/tasks/frontend/sse.ts:14 -msgid "" -"Support communication with the backend through the Server-Sent Events " -"protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " -"refer to this link to write the corresponding configuration file: " -"https://nginxui.com/guide/nginx-proxy-example.html" -msgstr "" -"支援透過 Server-Sent Events 協定與後端通訊。如果您的 Nginx UI 是透過 Nginx " -"反向代理使用的,請參考此連結編寫相應的設定檔:https://nginxui.com/guide/nginx-proxy-example.html" - #: src/components/SelfCheck/tasks/frontend/websocket.ts:13 msgid "" "Support communication with the backend through the WebSocket protocol. If " @@ -4885,12 +6248,12 @@ msgid "Sync Certificate" msgstr "同步憑證" #: src/components/Notification/notifications.ts:62 -msgid "Sync Certificate %{cert_name} to %{env_name} failed" -msgstr "同步憑證 %{cert_name} 至 %{env_name} 失敗" +msgid "Sync Certificate %{cert_name} to %{node_name} failed" +msgstr "同步證書 %{cert_name} 到 %{node_name} 失敗" #: src/components/Notification/notifications.ts:66 -msgid "Sync Certificate %{cert_name} to %{env_name} successfully" -msgstr "同步憑證 %{cert_name} 到 %{env_name} 成功" +msgid "Sync Certificate %{cert_name} to %{node_name} successfully" +msgstr "證書 %{cert_name} 已成功同步至 %{node_name}" #: src/components/Notification/notifications.ts:61 src/language/constants.ts:39 msgid "Sync Certificate Error" @@ -4901,12 +6264,12 @@ msgid "Sync Certificate Success" msgstr "同步憑證成功" #: src/components/Notification/notifications.ts:70 -msgid "Sync config %{config_name} to %{env_name} failed" -msgstr "同步設定 %{config_name} 至 %{env_name} 失敗" +msgid "Sync config %{config_name} to %{node_name} failed" +msgstr "同步配置 %{config_name} 到 %{node_name} 失敗" #: src/components/Notification/notifications.ts:74 -msgid "Sync config %{config_name} to %{env_name} successfully" -msgstr "同步設定 %{config_name} 到 %{env_name} 成功" +msgid "Sync config %{config_name} to %{node_name} successfully" +msgstr "設定 %{config_name} 已成功同步到 %{node_name}" #: src/components/Notification/notifications.ts:69 src/language/constants.ts:45 msgid "Sync Config Error" @@ -4916,24 +6279,29 @@ msgstr "同步設定錯誤" msgid "Sync Config Success" msgstr "同步設定成功" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:148 -#: src/views/environments/group/EnvGroup.vue:31 +#: src/components/NamespaceRender/NamespaceRender.vue:53 +#: src/components/NamespaceTabs/NamespaceTabs.vue:127 +#: src/views/namespace/columns.ts:17 src/views/namespace/Namespace.vue:31 msgid "Sync Nodes" msgstr "同步節點" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:58 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:71 -#: src/views/stream/components/RightPanel/Basic.vue:53 -#: src/views/stream/components/RightPanel/Basic.vue:66 +#: src/components/SyncNodesPreview/SyncNodesPreview.vue:45 +msgid "Sync Preview" +msgstr "同步預覽" + +#: src/views/site/site_edit/components/RightPanel/Basic.vue:59 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:72 +#: src/views/stream/components/RightPanel/Basic.vue:54 +#: src/views/stream/components/RightPanel/Basic.vue:67 msgid "Sync strategy" msgstr "同步策略" -#: src/views/certificate/CertificateEditor.vue:204 +#: src/views/certificate/components/CertificateBasicInfo.vue:145 msgid "Sync to" msgstr "同步到" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:56 -#: src/views/stream/components/RightPanel/Basic.vue:51 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:57 +#: src/views/stream/components/RightPanel/Basic.vue:52 msgid "Synchronization" msgstr "同步" @@ -4950,10 +6318,14 @@ msgstr "系統備份" msgid "System Check" msgstr "系統檢查" -#: src/views/certificate/components/ACMEUserSelector.vue:89 +#: src/views/certificate/components/ACMEUserSelector.vue:67 msgid "System Initial User" msgstr "系統初始使用者" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:121 +msgid "System Requirements" +msgstr "系統要求" + #: src/components/SystemRestore/SystemRestoreContent.vue:174 msgid "System Restore" msgstr "系統恢復" @@ -4974,36 +6346,74 @@ msgstr "找不到任務" msgid "Telegram" msgstr "Telegram" -#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:76 +#: src/routes/modules/terminal.ts:10 src/views/preference/Preference.vue:77 msgid "Terminal" msgstr "終端" +#: src/components/LLM/LLM.vue:60 +msgid "Terminal Assistant" +msgstr "終端助手" + #: src/views/preference/tabs/TerminalSettings.vue:10 msgid "Terminal Start Command" msgstr "終端機啟動指令" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:638 +#: src/views/preference/tabs/ExternalNotify.vue:57 +msgid "Test" +msgstr "測試" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:349 +msgid "Test failed: %{error}" +msgstr "測試失敗: %{error}" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:354 +msgid "Test failed: Unable to perform health check" +msgstr "測試失敗:無法執行健康檢查" + +#: src/views/preference/components/ExternalNotify/ExternalNotifyEditor.vue:53 +#: src/views/preference/tabs/ExternalNotify.vue:28 +msgid "Test message sent successfully" +msgstr "測試訊息發送成功" + #: src/views/backup/AutoBackup/components/StorageConfigEditor.vue:141 msgid "Test S3 Connection" msgstr "測試 S3 連接" -#: src/components/AutoCertForm/AutoCertForm.vue:49 +#: src/views/dashboard/components/SiteHealthCheckModal.vue:346 +msgid "Test successful! Response time: %{response_time}ms" +msgstr "測試成功!回應時間:%{response_time} 毫秒" + +#: src/components/AutoCertForm/AutoCertForm.vue:160 msgid "" "The certificate for the domain will be checked 30 minutes, and will be " "renewed if it has been more than 1 week or the period you set in settings " "since it was last issued." msgstr "網域憑證將在 30 分鐘內接受檢查,如果自上次簽發以來已超過 1 週或您在設定中設定的時間,憑證將會自動更新。" +#: src/components/GeoLiteDownload/GeoLiteDownload.vue:157 +msgid "" +"The GeoLite2 database is required for offline geographic IP analysis. " +"Please download it to enable this feature." +msgstr "離線地理 IP 分析需要 GeoLite2 資料庫。請下載以啟用此功能。" + +#: src/views/preference/tabs/GeoLiteSettings.vue:9 +msgid "" +"The GeoLite2 database provides geographic information for IP addresses. " +"This is used for offline geographic analysis in log analytics." +msgstr "GeoLite2 資料庫為 IP 位址提供地理資訊。這用於日誌分析中的離線地理分析。" + #: src/views/preference/tabs/NodeSettings.vue:37 msgid "" "The ICP Number should only contain letters, unicode, numbers, hyphens, " "dashes, colons, and dots." msgstr "ICP 編號僅能包含字母、Unicode 字元、數字、連字號、破折號、冒號和句點。" -#: src/views/certificate/CertificateEditor.vue:214 +#: src/views/certificate/components/CertificateContentEditor.vue:115 msgid "The input is not a SSL Certificate" msgstr "輸入的不是 SSL 憑證" -#: src/views/certificate/CertificateEditor.vue:228 +#: src/views/certificate/components/CertificateContentEditor.vue:176 msgid "The input is not a SSL Certificate Key" msgstr "輸入的不是 SSL 憑證金鑰" @@ -5034,11 +6444,11 @@ msgstr "節點名稱僅能包含字母、Unicode 字元、數字、連字號、 msgid "The parameter of server_name is required" msgstr "必須提供 server_name 參數" -#: src/views/certificate/CertificateEditor.vue:179 +#: src/views/certificate/components/CertificateBasicInfo.vue:82 msgid "The path exists, but the file is not a certificate" msgstr "路徑存在,但檔案不是憑證" -#: src/views/certificate/CertificateEditor.vue:194 +#: src/views/certificate/components/CertificateBasicInfo.vue:116 msgid "The path exists, but the file is not a private key" msgstr "路徑存在,但檔案不是金鑰" @@ -5048,14 +6458,14 @@ msgid "" "hyphens, dashes, colons, and dots." msgstr "公安編號僅能包含字母、Unicode 字元、數字、連字號、破折號、冒號和句點。" -#: src/views/dashboard/components/NodeAnalyticItem.vue:107 +#: src/views/dashboard/components/NodeAnalyticItem.vue:105 msgid "" "The remote Nginx UI version is not compatible with the local Nginx UI " "version. To avoid potential errors, please upgrade the remote Nginx UI to " "match the local version." msgstr "遠端 Nginx UI 版本與本機 Nginx UI 版本不相容。為避免潛在錯誤,請升級遠端 Nginx UI 以匹配本機版本。" -#: src/components/AutoCertForm/AutoCertForm.vue:44 +#: src/components/AutoCertForm/AutoCertForm.vue:155 msgid "" "The server_name in the current configuration must be the domain name you " "need to get the certificate, supportmultiple domains." @@ -5081,20 +6491,24 @@ msgstr "理論最大並發連接數:" #: src/views/dashboard/components/PerformanceTablesCard.vue:189 msgid "Theoretical maximum RPS (Requests Per Second):" -msgstr "理論最大 RPS(每秒請求數):" +msgstr "理論最大 RPS (每秒請求數):" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:104 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:105 msgid "" "These codes are the last resort for accessing your account in case you lose " "your password and second factors. If you cannot find these codes, you will " "lose access to your account." msgstr "這些代碼是您在遺失密碼和第二重驗證因素時,存取帳戶的最後手段。如果您找不到這些代碼,您將無法再存取您的帳戶。" -#: src/views/certificate/CertificateEditor.vue:99 +#: src/routes/modules/system.ts:45 +msgid "Third-party Components" +msgstr "第三方組件" + +#: src/views/certificate/components/AutoCertManagement.vue:45 msgid "This Auto Cert item is invalid, please remove it." msgstr "此自動憑證項目無效,請將其移除。" -#: src/views/certificate/CertificateEditor.vue:89 +#: src/views/certificate/components/AutoCertManagement.vue:35 msgid "This certificate is managed by Nginx UI" msgstr "此憑證由 Nginx UI 管理" @@ -5102,9 +6516,9 @@ msgstr "此憑證由 Nginx UI 管理" msgid "This directory is protected and cannot be deleted for system safety." msgstr "此目錄受保護,為確保系統安全無法刪除。" -#: src/views/certificate/CertificateEditor.vue:163 -#: src/views/certificate/CertificateEditor.vue:177 -#: src/views/certificate/CertificateEditor.vue:192 +#: src/views/certificate/components/CertificateBasicInfo.vue:114 +#: src/views/certificate/components/CertificateBasicInfo.vue:47 +#: src/views/certificate/components/CertificateBasicInfo.vue:80 msgid "This field is required" msgstr "此欄位為必填項" @@ -5128,7 +6542,11 @@ msgstr "此欄位僅能包含字母、Unicode 字元、數字、連字號、破 msgid "" "This field should only contain letters, unicode characters, numbers, and " "-_./:" -msgstr "此欄位應僅包含字母、Unicode字符、數字和 -_./:" +msgstr "此欄位應僅包含字母、Unicode 字符、數字和 -_./:" + +#: src/components/Notification/notifications.ts:94 +msgid "This is a test message sent at %{timestamp} from Nginx UI." +msgstr "這是一條測試消息,於 %{timestamp} 從 Nginx UI 發送。" #: src/views/dashboard/NginxDashBoard.vue:175 msgid "" @@ -5136,12 +6554,36 @@ msgid "" "After enabling it, you can view performance statistics" msgstr "此模組提供 Nginx 請求統計、連接數等數據。啟用後,您可以查看效能統計" -#: src/views/certificate/components/RemoveCert.vue:106 +#: src/views/nginx_log/dashboard/components/DateRangeSelector.vue:25 +msgid "This month" +msgstr "本月" + +#: src/views/preference/tabs/ExternalNotify.vue:16 +msgid "This notification is disabled" +msgstr "此通知已停用" + +#: src/views/certificate/components/RemoveCert.vue:115 msgid "" "This operation will only remove the certificate from the database. The " "certificate files on the file system will not be deleted." msgstr "此操作僅會從資料庫中移除憑證。檔案系統上的憑證檔案不會被刪除。" +#: src/components/AutoCertForm/AutoCertForm.vue:128 +msgid "" +"This site is configured as a default server (default_server) for HTTPS " +"(port 443). IP certificates require Certificate Authority (CA) support and " +"may not be available with all ACME providers." +msgstr "" +"此站點已配置為 HTTPS (端口 443)的預設伺服器(default_server)。IP 憑證需要憑證頒發機構(CA)的支援,且並非所有 " +"ACME 供應商都提供此類憑證。" + +#: src/components/AutoCertForm/AutoCertForm.vue:132 +msgid "" +"This site uses wildcard server name (_) which typically indicates an " +"IP-based certificate. IP certificates require Certificate Authority (CA) " +"support and may not be available with all ACME providers." +msgstr "此站點使用萬用字元伺服器名稱(_),通常表示基於 IP 的憑證。IP 憑證需要憑證授權機構(CA)的支援,並且可能並非所有 ACME 供應商都提供。" + #: src/views/backup/components/BackupCreator.vue:141 msgid "" "This token will only be shown once and cannot be retrieved later. Please " @@ -5156,6 +6598,16 @@ msgstr "此值已被使用" msgid "This will permanently delete the %{type}." msgstr "這將永久刪除%{type}。" +#: src/views/nginx_log/indexing/IndexManagement.vue:30 +msgid "" +"This will rebuild the entire log index. All existing index data will be " +"deleted and rebuilt from scratch. This may take some time. Continue?" +msgstr "這將重建整個日誌索引。所有現有索引數據將被刪除並從頭開始重建。這可能需要一些時間。是否繼續?" + +#: src/views/nginx_log/indexing/IndexManagement.vue:56 +msgid "This will rebuild the index data for this specific file: %{path}" +msgstr "這將重建此特定檔案的索引數據:%{path}" + #: src/components/SystemRestore/SystemRestoreContent.vue:227 #: src/components/SystemRestore/SystemRestoreContent.vue:304 msgid "" @@ -5170,11 +6622,11 @@ msgid "" "after the restoration is complete." msgstr "這將恢復設定檔案和資料庫。恢復完成後,Nginx UI 將重新啟動。" -#: src/views/environments/list/BatchUpgrader.vue:183 +#: src/views/node/BatchUpgrader.vue:186 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}." msgstr "這將在 %{nodeNames} 上升級或重新安裝 Nginx UI 到 %{version}。" -#: src/views/preference/tabs/AuthSettings.vue:92 +#: src/views/preference/tabs/AuthSettings.vue:89 msgid "Throttle" msgstr "節流" @@ -5182,8 +6634,21 @@ msgstr "節流" msgid "Thursday" msgstr "星期四" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:70 -#: src/views/preference/tabs/AuthSettings.vue:112 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:184 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:516 +msgid "Time" +msgstr "時間" + +#: src/views/nginx_log/NginxLogList.vue:305 +#: src/views/nginx_log/structured/StructuredLogViewer.vue:689 +msgid "Time Range" +msgstr "時間範圍" + +#: src/views/dashboard/components/SiteHealthCheckModal.vue:542 +msgid "Timeout (seconds)" +msgstr "超時時間(秒)" + +#: src/views/preference/components/AuthSettings/AddPasskey.vue:71 #: src/views/preference/tabs/LogrotateSettings.vue:12 msgid "Tips" msgstr "提示" @@ -5198,17 +6663,21 @@ msgstr "提示:您可以通過增加 worker_processes 或 worker_connections msgid "Title" msgstr "標題" -#: src/views/certificate/components/RemoveCert.vue:124 +#: src/language/curd.ts:68 src/language/curd.ts:69 +msgid "to confirm deletion" +msgstr "確認刪除" + +#: src/views/certificate/components/RemoveCert.vue:133 msgid "To confirm revocation, please type \"Revoke\" in the field below:" msgstr "若要確認撤銷,請在下方欄位中輸入「撤銷」:" -#: src/views/preference/components/AuthSettings/TOTP.vue:68 +#: src/views/preference/components/AuthSettings/TOTP.vue:70 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/AuthSettings/AddPasskey.vue:94 +#: src/views/preference/components/AuthSettings/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 " @@ -5247,15 +6716,41 @@ msgstr "令牌為空" msgid "Token is not valid" msgstr "令牌無效" +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:236 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:272 +msgid "Top 10 Countries / Regions" +msgstr "前 10 個國家/地區" + +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:215 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:251 +msgid "Top 10 Provinces / Regions" +msgstr "前十省份/地區" + +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:37 +msgid "TOP 10 URLs" +msgstr "前 10 個 URL" + #: src/language/curd.ts:5 msgid "Total" msgstr "總計" +#: src/views/upstream/SocketList.vue:149 +msgid "Total %{total} items" +msgstr "總計 %{total} 項" + +#: src/views/system/Licenses.vue:107 +msgid "Total Components" +msgstr "總元件數" + #: src/composables/usePerformanceMetrics.ts:94 #: src/views/dashboard/components/PerformanceTablesCard.vue:54 msgid "Total connections" msgstr "總連線數" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:756 +msgid "Total Entries" +msgstr "總條目數" + #: src/composables/usePerformanceMetrics.ts:89 #: src/views/dashboard/components/PerformanceTablesCard.vue:49 msgid "Total handshakes" @@ -5269,6 +6764,10 @@ msgstr "Nginx 行程總數" msgid "Total Nginx Processes" msgstr "Nginx 行程總數" +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:24 +msgid "Total PV" +msgstr "總訪問量" + #: src/views/dashboard/ServerAnalytic.vue:283 msgid "Total Receive" msgstr "總接收量" @@ -5286,35 +6785,55 @@ msgstr "總請求數 / 總連線數" msgid "Total Send" msgstr "總發送" -#: src/views/preference/components/AuthSettings/TOTP.vue:66 +#: src/views/nginx_log/dashboard/components/SummaryStats.vue:15 +msgid "Total UV" +msgstr "總 UV 數" + +#: src/views/preference/components/AuthSettings/TOTP.vue:68 msgid "TOTP" msgstr "TOTP" -#: src/views/preference/components/AuthSettings/TOTP.vue:67 +#: src/views/preference/components/AuthSettings/TOTP.vue:69 msgid "" "TOTP is a two-factor authentication method that uses a time-based one-time " "password algorithm." msgstr "TOTP 是一種使用基於時間的一次性密碼演算法的多重因素驗證方法。" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:774 +msgid "Traffic" +msgstr "流量" + +#: src/components/Notification/detailRender.tsx:65 +msgid "Translating error..." +msgstr "正在翻譯錯誤..." + #: src/language/curd.ts:20 msgid "Trash" msgstr "垃圾桶" +#: src/views/nginx_log/structured/StructuredLogViewer.vue:822 +msgid "Try adjusting your search criteria or navigate to different pages." +msgstr "嘗試調整搜索條件或導航到其他頁面。" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:832 +msgid "Try adjusting your search criteria or time range." +msgstr "嘗試調整您的搜尋條件或時間範圍。" + #: src/views/backup/AutoBackup/components/CronEditor.vue:28 msgid "Tuesday" msgstr "星期二" -#: src/components/TwoFA/use2FAModal.ts:67 +#: src/components/TwoFA/use2FAModal.ts:46 msgid "Two-factor authentication required" msgstr "需要多重因素驗證" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 #: src/views/certificate/CertificateList/certColumns.tsx:24 #: src/views/config/components/Delete.vue:122 -#: src/views/dashboard/components/ModulesTable.vue:83 -#: src/views/nginx_log/NginxLogList.vue:27 +#: src/views/dashboard/components/ModulesTable.vue:62 +#: src/views/nginx_log/NginxLogList.vue:140 #: src/views/notification/notificationColumns.tsx:8 -#: src/views/preference/components/ExternalNotify/columns.tsx:18 +#: src/views/preference/components/ExternalNotify/columns.tsx:19 msgid "Type" msgstr "類型" @@ -5322,15 +6841,47 @@ msgstr "類型" msgid "Type %{delete} to confirm" msgstr "輸入 %{delete} 以確認" +#: src/views/nginx_log/structured/components/SearchFilters.vue:142 +msgid "Type or select browser" +msgstr "輸入或選擇瀏覽器" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:174 +msgid "Type or select device" +msgstr "輸入或選擇裝置" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:158 +msgid "Type or select OS" +msgstr "輸入或選擇作業系統" + +#: src/views/nginx_log/structured/components/SearchFilters.vue:111 +msgid "Type or select status codes" +msgstr "輸入或選擇狀態碼" + +#: src/components/LLM/ChatMessageInput.vue:81 +msgid "Type your message here..." +msgstr "在此輸入您的訊息..." + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:780 +msgid "Unique Pages" +msgstr "獨立頁面" + #: src/components/PortScanner/PortScannerCompact.vue:47 -#: src/composables/useNginxPerformance.ts:18 +#: src/composables/useNginxPerformance.ts:19 msgid "Unknown" msgstr "未知" -#: src/constants/errors/backup.ts:64 +#: src/constants/errors/backup.ts:57 msgid "Unsupported backup type: {0}" msgstr "不支援的備份類型: {0}" +#: src/constants/errors/nginx_log.parser.ts:4 +msgid "Unsupported log format" +msgstr "不支援的日誌格式" + +#: src/constants/errors/upgrader.ts:6 +msgid "Update already in progress" +msgstr "更新已經在進行中" + #: src/views/user/UserProfile.vue:218 msgid "Update Password" msgstr "更新密碼" @@ -5339,32 +6890,30 @@ msgstr "更新密碼" msgid "Update Profile" msgstr "更新資料" -#: src/views/preference/components/AuthSettings/Passkey.vue:39 +#: src/views/preference/components/AuthSettings/Passkey.vue:40 msgid "Update successfully" msgstr "更新成功" #: src/views/backup/AutoBackup/AutoBackup.vue:236 -#: src/views/certificate/ACMEUser.vue:83 -#: src/views/certificate/DNSCredential.vue:38 +#: src/views/certificate/ACMEUser.vue:124 +#: src/views/certificate/DNSCredential.vue:65 #: src/views/config/components/ConfigRightPanel/Basic.vue:54 -#: src/views/config/configColumns.tsx:43 -#: src/views/environments/group/columns.ts:35 -#: src/views/environments/list/envColumns.tsx:89 -#: src/views/site/site_edit/components/RightPanel/Basic.vue:38 -#: src/views/site/site_list/columns.tsx:106 src/views/stream/columns.tsx:74 -#: src/views/stream/components/RightPanel/Basic.vue:34 +#: src/views/config/configColumns.tsx:44 src/views/namespace/columns.ts:91 +#: src/views/node/nodeColumns.tsx:89 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:39 +#: src/views/site/site_list/columns.tsx:113 src/views/stream/columns.tsx:80 +#: src/views/stream/components/RightPanel/Basic.vue:35 #: src/views/user/userColumns.tsx:52 msgid "Updated at" msgstr "更新時間" -#: src/routes/modules/system.ts:26 -#: src/views/environments/list/Environment.vue:188 -#: src/views/environments/list/Environment.vue:196 -#: src/views/system/Upgrade.vue:154 src/views/system/Upgrade.vue:159 +#: src/routes/modules/system.ts:26 src/views/node/Node.vue:187 +#: src/views/node/Node.vue:195 src/views/system/Upgrade.vue:153 +#: src/views/system/Upgrade.vue:158 msgid "Upgrade" msgstr "升級" -#: src/views/environments/list/BatchUpgrader.vue:137 +#: src/views/node/BatchUpgrader.vue:137 msgid "Upgraded Nginx UI on %{node} successfully 🎉" msgstr "成功升級 %{node} 上的 Nginx UI 🎉" @@ -5372,11 +6921,22 @@ msgstr "成功升級 %{node} 上的 Nginx UI 🎉" msgid "Upgraded successfully" msgstr "升級成功" -#: src/views/environments/list/BatchUpgrader.vue:88 -#: src/views/system/Upgrade.vue:81 +#: src/constants/errors/upgrader.ts:3 +msgid "Upgrader core digest is empty" +msgstr "升級器核心摘要為空" + +#: src/constants/errors/upgrader.ts:2 +msgid "Upgrader core downloadUrl is empty" +msgstr "升級器核心下載URL為空" + +#: src/views/node/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:80 msgid "Upgrading Nginx UI, please wait..." msgstr "正在升級 Nginx UI,請稍候..." +#: src/views/certificate/components/CertificateFileUpload.vue:122 +msgid "Upload %{type} File" +msgstr "上傳%{type}檔案" + #: src/language/curd.ts:49 msgid "Upload Files" msgstr "上傳檔案" @@ -5385,19 +6945,29 @@ msgstr "上傳檔案" msgid "Upload Folders" msgstr "上傳資料夾" -#: src/components/ProxyTargets/ProxyTargets.vue:34 +#: src/composables/useUpstreamStatus.ts:132 src/routes/modules/upstream.ts:10 +#: src/views/upstream/SocketList.vue:24 msgid "Upstream" msgstr "上游" -#: src/components/NgxConfigEditor/NgxUpstream.vue:194 +#: src/components/NgxConfigEditor/NgxUpstream.vue:125 msgid "Upstream Name" msgstr "Upstream 名稱" +#: src/views/upstream/SocketList.vue:133 +msgid "Upstream Sockets" +msgstr "上游套接字" + +#: src/views/namespace/columns.ts:59 +msgid "Upstream Test Type" +msgstr "上游測試類型" + #: src/views/dashboard/ServerAnalytic.vue:183 msgid "Uptime:" msgstr "運作時間:" -#: src/views/environments/list/envColumns.tsx:18 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:13 +#: src/views/node/nodeColumns.tsx:18 src/views/system/Licenses.vue:34 msgid "URL" msgstr "URL" @@ -5409,14 +6979,19 @@ msgstr "使用一次性密碼" msgid "Use recovery code" msgstr "使用恢復碼" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:157 msgid "Use Temporary Path" msgstr "使用臨時路徑" -#: src/components/ChatGPT/ChatMessage.vue:187 +#: src/components/LLM/ChatMessage.vue:216 msgid "User" msgstr "使用者名稱" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:553 +#: src/views/nginx_log/structured/components/SearchFilters.vue:200 +msgid "User Agent" +msgstr "使用者代理" + #: src/constants/errors/user.ts:3 msgid "User banned" msgstr "使用者被禁止" @@ -5433,7 +7008,7 @@ msgstr "使用者未啟用 OTP 作為雙重身份驗證 (2FA)" msgid "User Profile" msgstr "用戶資料" -#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:7 +#: src/views/other/Login.vue:268 src/views/user/userColumns.tsx:7 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131 msgid "Username" msgstr "使用者名稱" @@ -5444,14 +7019,22 @@ msgstr "使用者名稱 (*)" #: src/views/install/components/InstallForm.vue:35 msgid "Username length cannot exceed 255 characters" -msgstr "使用者名稱長度不能超過255個字元" +msgstr "使用者名稱長度不能超過 255 個字元" + +#: src/views/nginx_log/structured/StructuredLogViewer.vue:768 +msgid "UV" +msgstr "獨立訪客" #: src/components/CertInfo/CertInfo.vue:24 -#: src/views/certificate/ACMEUser.vue:120 +#: src/views/certificate/ACMEUser.vue:161 #: src/views/certificate/CertificateList/certColumns.tsx:76 msgid "Valid" msgstr "有效" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:580 +msgid "Validate SSL Certificate" +msgstr "驗證 SSL 憑證" + #: src/views/dashboard/components/PerformanceTablesCard.vue:22 msgid "Value" msgstr "數值" @@ -5461,45 +7044,65 @@ msgstr "數值" msgid "Verify Backup File Integrity" msgstr "驗證備份檔案完整性" +#: src/views/dashboard/components/SiteHealthCheckModal.vue:586 +msgid "Verify Hostname" +msgstr "驗證主機名稱" + #: src/views/install/components/InstallView.vue:61 msgid "Verify system requirements" msgstr "驗證系統要求" -#: src/views/environments/list/envColumns.tsx:30 +#: src/views/node/nodeColumns.tsx:30 src/views/system/Licenses.vue:28 msgid "Version" msgstr "版本" -#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:105 -#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:83 +#: src/language/curd.ts:7 src/views/nginx_log/NginxLogList.vue:484 +#: src/views/site/site_edit/components/ConfigTemplate/ConfigTemplate.vue:108 +#: src/views/system/Licenses.vue:180 src/views/system/Licenses.vue:215 +#: src/views/system/Licenses.vue:250 msgid "View" msgstr "檢視" -#: src/components/Notification/Notification.vue:178 +#: src/components/Notification/Notification.vue:179 msgid "View all notifications" msgstr "檢視所有通知" -#: src/views/environments/list/BatchUpgrader.vue:232 -#: src/views/system/Upgrade.vue:279 +#: src/views/node/BatchUpgrader.vue:235 src/views/system/Upgrade.vue:278 msgid "View on GitHub" msgstr "在 GitHub 上查看" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:134 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:135 msgid "View Recovery Codes" msgstr "檢視復原代碼" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:70 +#: src/views/system/About.vue:83 +msgid "View Third-party Components" +msgstr "查看第三方組件" + +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:71 msgid "Viewed" msgstr "已檢視" +#: src/composables/useGeoTranslation.ts:167 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:121 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:146 +#: src/views/nginx_log/dashboard/components/ChinaMapChart/ChinaMapChart.vue:64 +#: src/views/nginx_log/dashboard/components/TopUrlsTable.vue:19 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:114 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:179 +#: src/views/nginx_log/dashboard/components/WorldMapChart/WorldMapChart.vue:86 +msgid "Visits" +msgstr "訪問量" + #: src/composables/usePerformanceMetrics.ts:114 #: src/views/dashboard/components/PerformanceTablesCard.vue:74 msgid "Waiting processes" msgstr "等待過程" -#: src/constants/index.ts:23 src/views/backup/components/BackupCreator.vue:138 -#: src/views/config/InspectConfig.vue:51 +#: src/components/InspectConfig/InspectConfig.vue:68 src/constants/index.ts:24 +#: src/views/backup/components/BackupCreator.vue:138 #: src/views/notification/notificationColumns.tsx:21 -#: src/views/preference/components/AuthSettings/AddPasskey.vue:87 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:88 msgid "Warning" msgstr "警告" @@ -5511,19 +7114,32 @@ msgid "" "to restore." msgstr "警告:恢復操作將覆蓋目前設定。請確保您擁有有效的備份檔案和安全令牌,並謹慎選擇要恢復的內容。" -#: src/views/certificate/DNSCredential.vue:69 +#: src/components/AutoCertForm/AutoCertForm.vue:103 +msgid "" +"Warning: This appears to be a private IP address. Public CAs like Let's " +"Encrypt cannot issue certificates for private IPs. Use a public IP address " +"or consider using a private CA." +msgstr "" +"警告:這似乎是一個私有 IP 地址。像 Let's Encrypt 這樣的公共 CA 無法為私有 IP 頒發證書。請使用公共 IP 地址或考慮使用私有 " +"CA。" + +#: src/views/nginx_log/components/IndexingSettingsModal.vue:300 +msgid "We do not accept any feature requests" +msgstr "我們不接受任何功能請求" + +#: src/views/certificate/DNSCredential.vue:96 msgid "" "We will add one or more TXT records to the DNS records of your domain for " "ownership verification." msgstr "我們將在您的網域的 DNS 記錄中新增一個或多個 TXT 記錄以進行所有權驗證。" -#: src/views/site/site_edit/components/Cert/ObtainCert.vue:140 +#: src/views/site/site_edit/components/Cert/ObtainCert.vue:142 msgid "" "We will remove the HTTPChallenge configuration from this file and reload " "the Nginx. Are you sure you want to continue?" msgstr "我們將從該檔案中刪除 HTTPChallenge 設定並重新載入 Nginx 設定檔案。你確定你要繼續嗎?" -#: src/views/preference/tabs/AuthSettings.vue:65 +#: src/views/preference/tabs/AuthSettings.vue:62 msgid "Webauthn" msgstr "Webauthn" @@ -5531,10 +7147,18 @@ msgstr "Webauthn" msgid "WebAuthn settings are not configured" msgstr "WebAuthn 設定尚未設定" -#: src/views/certificate/components/RemoveCert.vue:55 +#: src/views/certificate/components/RemoveCert.vue:64 msgid "WebSocket connection error" msgstr "WebSocket 連接錯誤" +#: src/views/dashboard/SiteNavigation.vue:96 +msgid "WebSocket not connected, please wait for connection" +msgstr "WebSocket 未連接,請等待連接" + +#: src/views/preference/components/ExternalNotify/wecom.ts:5 +msgid "WeCom" +msgstr "企業微信" + #: src/views/backup/AutoBackup/components/CronEditor.vue:29 msgid "Wednesday" msgstr "星期三" @@ -5545,33 +7169,33 @@ msgstr "每週" #: src/views/backup/AutoBackup/AutoBackup.vue:134 msgid "Weekly on %{day} at %{time}" -msgstr "每週%{day}的%{time}" +msgstr "每週 %{day} 的 %{time}" -#: src/views/certificate/ACMEUser.vue:78 +#: src/views/certificate/ACMEUser.vue:119 msgid "" "When Enabled, Nginx UI will automatically re-register users upon startup. " "Generally, do not enable this unless you are in a dev environment and using " "Pebble as CA." msgstr "啟用後,Nginx UI 將在啟動時自動重新註冊使用者。通常,除非您處於開發環境並使用 Pebble 作為 CA,否則不建議啟用此功能。" -#: src/views/site/site_edit/components/RightPanel/Basic.vue:61 -#: src/views/stream/components/RightPanel/Basic.vue:56 +#: src/views/site/site_edit/components/RightPanel/Basic.vue:62 +#: src/views/stream/components/RightPanel/Basic.vue:57 msgid "" "When you enable/disable, delete, or save this site, the nodes set in the " -"Node Group and the nodes selected below will be synchronized." -msgstr "當您啟用/停用、刪除或儲存此網站時,在節點群組中設定的節點以及下方選擇的節點將會同步更新。" +"namespace and the nodes selected below will be synchronized." +msgstr "當您啟用/停用、刪除或儲存此站點時,命名空間中設定的節點和下方選擇的節點將被同步。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:140 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:141 msgid "" "When you generate new recovery codes, you must download or print the new " "codes." msgstr "當您產生新的復原碼時,必須下載或列印新的代碼。" -#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160 +#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:159 msgid "Whether to use a temporary path when writing temporary files" msgstr "寫入暫存檔案時是否使用暫存路徑" -#: src/views/certificate/components/DNSIssueCertificate.vue:109 +#: src/views/certificate/components/DNSIssueCertificate.vue:110 msgid "Wildcard Certificate" msgstr "萬用字元憑證" @@ -5590,8 +7214,8 @@ msgstr "worker 行程" msgid "Workers" msgstr "worker" -#: src/layouts/HeaderLayout.vue:62 src/routes/index.ts:57 -#: src/views/workspace/WorkSpace.vue:52 +#: src/layouts/HeaderLayout.vue:61 src/routes/index.ts:61 +#: src/views/workspace/WorkSpace.vue:51 msgid "Workspace" msgstr "工作區" @@ -5616,16 +7240,18 @@ msgstr "將憑證私鑰寫入磁碟" msgid "Writing certificate to disk" msgstr "將憑證寫入磁碟" -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:156 -#: src/components/EnvGroupTabs/EnvGroupTabs.vue:168 -#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:98 +#: src/components/NamespaceTabs/NamespaceTabs.vue:135 +#: src/components/NamespaceTabs/NamespaceTabs.vue:147 +#: src/components/NgxConfigEditor/directive/DirectiveEditorItem.vue:101 #: src/components/NgxConfigEditor/LocationEditor.vue:88 -#: src/views/preference/tabs/AuthSettings.vue:131 +#: src/views/nginx_log/indexing/IndexManagement.vue:31 +#: src/views/nginx_log/indexing/IndexManagement.vue:57 +#: src/views/preference/tabs/AuthSettings.vue:127 #: src/views/preference/tabs/CertSettings.vue:72 msgid "Yes" msgstr "是的" -#: src/views/terminal/Terminal.vue:132 +#: src/views/terminal/Terminal.vue:200 msgid "" "You are accessing this terminal over an insecure HTTP connection on a " "non-localhost domain. This may expose sensitive information." @@ -5635,11 +7261,11 @@ msgstr "您正在透過非本地主機域上的不安全 HTTP 連線存取此終 msgid "You are not allowed to delete a file outside of the nginx config path" msgstr "不允許刪除 nginx 設定路徑之外的檔案" -#: src/views/system/Upgrade.vue:224 +#: src/views/system/Upgrade.vue:223 msgid "You are using the latest version" msgstr "您正在使用最新版本" -#: src/views/system/Upgrade.vue:180 +#: src/views/system/Upgrade.vue:179 msgid "You can check Nginx UI upgrade at this page." msgstr "您可以在此頁面檢查 Nginx UI 的升級。" @@ -5651,35 +7277,210 @@ msgstr "您可以在 %{countdown} 秒後關閉此對話框" msgid "You can close this dialog now" msgstr "你可以關閉這個對話框了" -#: src/views/preference/components/AuthSettings/AddPasskey.vue:92 +#: src/views/preference/components/AuthSettings/AddPasskey.vue:93 msgid "" "You have not configured the settings of Webauthn, so you cannot add a " "passkey." msgstr "您尚未設定 Webauthn 設定,因此無法新增通行金鑰。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:81 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:82 msgid "You have not enabled 2FA yet. Please enable 2FA to generate recovery codes." msgstr "您尚未啟用雙重身份驗證 (2FA)。請啟用 2FA 以生成復原代碼。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:94 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:95 msgid "You have not generated recovery codes yet." msgstr "您尚未產生復原代碼。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:91 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:92 msgid "" "Your current recovery code might be outdated and insecure. Please generate " "new recovery codes at your earliest convenience to ensure security." msgstr "您目前的復原代碼可能已過時且不安全。請盡早生成新的復原代碼以確保安全。" -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:142 -#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:155 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:143 +#: src/views/preference/components/AuthSettings/RecoveryCodes.vue:156 msgid "Your old codes won't work anymore." msgstr "您的舊代碼將不再有效。" -#: src/views/preference/components/AuthSettings/Passkey.vue:75 +#: src/views/preference/components/AuthSettings/Passkey.vue:76 msgid "Your passkeys" msgstr "您的通行金鑰" +#: src/views/nginx_log/components/IndexingSettingsModal.vue:234 +msgid "Zero-allocation pipeline" +msgstr "零分配管道" + +#~ msgid "in the same directory as" +#~ msgstr "與...在同一個目錄中" + +#~ msgid "Sandbox test successful" +#~ msgstr "沙盒測試成功" + +#~ msgid "Tested in isolated sandbox mode" +#~ msgstr "已在隔離沙箱模式下測試" + +#~ msgid "All" +#~ msgstr "全部" + +#~ msgid "Based on M2 Pro (12 cores) testing" +#~ msgstr "基於 M2 Pro (12 核)測試" + +#~ msgid "CPU Utilization" +#~ msgstr "CPU 使用率" + +#~ msgid "Indexing Throughput" +#~ msgstr "索引吞吐量" + +#~ msgid "Memory Efficiency" +#~ msgstr "記憶體效率" + +#~ msgid "Performance Impact Notice" +#~ msgstr "效能影響通知" + +#~ msgid "Zero-allocation pipeline optimization" +#~ msgstr "零分配管道優化" + +#~ msgid "Ask ChatGPT for Help" +#~ msgstr "向 ChatGPT 尋求幫助" + +#~ msgid "Geographic mapping & insights" +#~ msgstr "地理映射與洞察" + +#~ msgid "No feature requests accepted." +#~ msgstr "不接受功能請求" + +#~ msgid "Time-series trend analysis" +#~ msgstr "時間序列趨勢分析" + +#~ msgid "User-Agent & browser analytics" +#~ msgstr "使用者代理與瀏覽器分析" + +#~ msgid "12+ cores (Apple M2 Pro or Intel equivalent)" +#~ msgstr "12+ 核心 (Apple M2 Pro 或同等 Intel 處理器)" + +#~ msgid "4GB+ RAM for optimal performance" +#~ msgstr "4GB+ 記憶體以獲得最佳效能" + +#~ msgid "Adaptive batch sizing" +#~ msgstr "自適應批量大小" + +#~ msgid "CPU Architecture" +#~ msgstr "CPU 架構" + +#~ msgid "GeoIP and User-Agent parsing" +#~ msgstr "GeoIP 和用戶代理解析" + +#~ msgid "Minimum 1GB RAM" +#~ msgstr "最低 1GB 記憶體" + +#~ msgid "Modern CPU (x86_64, ARM64)" +#~ msgstr "現代 CPU (x86_64, ARM64)" + +#~ msgid "Real-time performance monitoring" +#~ msgstr "即時效能監控" + +#~ msgid "Sustained performance on modern hardware" +#~ msgstr "現代硬體上的持續性能" + +#~ msgid "Backup path not in granted access paths: {0}" +#~ msgstr "備份路徑不在授予的訪問路徑中: {0}" + +#~ msgid "Build with" +#~ msgstr "建構基於" + +#~ msgid "Failed to copy database directory: {0}" +#~ msgstr "複製資料庫目錄失敗:{0}" + +#~ msgid "Failed to create backup directory: {0}" +#~ msgstr "建立備份目錄失敗:{0}" + +#~ msgid "Failed to evaluate symbolic links: {0}" +#~ msgstr "無法評估符號連結:{0}" + +#~ msgid "Failed to restore Nginx UI files: {0}" +#~ msgstr "還原 Nginx UI 檔案失敗:{0}" + +#~ msgid "Failed to write to zip buffer: {0}" +#~ msgstr "寫入壓縮緩衝區失敗:{0}" + +#~ msgid "Hash verification failed: file integrity compromised" +#~ msgstr "雜湊驗證失敗:檔案完整性受損" + +#~ msgid "S3 bucket access denied: {0}" +#~ msgstr "S3 儲存桶存取被拒絕:{0}" + +#~ msgid "S3 connection test failed: {0}" +#~ msgstr "S3 連接測試失敗: {0}" + +#~ msgid "S3 credentials are invalid: {0}" +#~ msgstr "S3 憑證無效: {0}" + +#~ msgid "S3 endpoint is invalid: {0}" +#~ msgstr "S3 終端節點無效:{0}" + +#~ msgid "Storage path not in granted access paths: {0}" +#~ msgstr "儲存路徑不在授予的存取路徑中: {0}" + +#~ msgid "files" +#~ msgstr "檔案" + +#~ msgid "Indexing logs, please wait..." +#~ msgstr "正在索引日誌,請稍候..." + +#~ msgid "Loading dashboard data..." +#~ msgstr "正在載入儀表板數據..." + +#~ msgid "Today" +#~ msgstr "今天" + +#~ msgid "Data refreshed successfully" +#~ msgstr "數據刷新成功" + +#~ msgid "Failed to refresh data" +#~ msgstr "刷新數據失敗" + +#~ msgid "Log File:" +#~ msgstr "日誌檔案:" + +#~ msgid "Log path" +#~ msgstr "日誌路徑" + +#~ msgid "Index Size" +#~ msgstr "索引大小" + +#~ msgid "Environments" +#~ msgstr "環境" + +#~ msgid "Node Group" +#~ msgstr "節點群組" + +#~ msgid "Node Groups" +#~ msgstr "節點群組" + +#~ msgid "Check if the conf.d directory exists" +#~ msgstr "檢查 conf.d 目錄是否存在" + +#~ msgid "" +#~ "Support communication with the backend through the Server-Sent Events " +#~ "protocol. If your Nginx UI is being used via an Nginx reverse proxy, please " +#~ "refer to this link to write the corresponding configuration file: " +#~ "https://nginxui.com/guide/nginx-proxy-example.html" +#~ msgstr "" +#~ "支援透過 Server-Sent Events 協定與後端通訊。如果您的 Nginx UI 是透過 Nginx " +#~ "反向代理使用的,請參考此連結編寫相應的設定檔:https://nginxui.com/guide/nginx-proxy-example.html" + +#~ msgid "If left blank, the default CA Dir will be used." +#~ msgstr "如果留空,將使用預設的 CA Dir。" + +#~ msgid "Save error %{msg}" +#~ msgstr "儲存錯誤 %{msg}" + +#~ msgid "Main" +#~ msgstr "主" + +#~ msgid "Select an action after sync" +#~ msgstr "同步後選擇操作" + #~ msgid "Link Start" #~ msgstr "連結開始" @@ -5713,9 +7514,6 @@ msgstr "您的通行金鑰" #~ msgid "Last Backup Error" #~ msgstr "最後一次備份錯誤" -#~ msgid "Apply" -#~ msgstr "應用" - #~ msgid "Apply bulk action successfully" #~ msgstr "批次操作成功應用" @@ -5743,10 +7541,6 @@ msgstr "您的通行金鑰" #~ msgid "Recovered Successfully" #~ msgstr "恢復成功" -#~ msgid "Total %{total} item" -#~ msgid_plural "Total %{total} items" -#~ msgstr[0] "總計 %{total} 項" - #~ msgid "View Details" #~ msgstr "檢視詳細資訊" @@ -5791,9 +7585,6 @@ msgstr "您的通行金鑰" #~ "directory in Nginx.LogDirWhiteList." #~ msgstr "如果日誌未被索引,請檢查日誌檔案是否位於 Nginx 的 LogDirWhiteList 目錄下。" -#~ msgid "Indexed" -#~ msgstr "已建立索引" - #, fuzzy #~ msgid "Nginx Conf Include Conf.d" #~ msgstr "Nginx 設定檔包含 Conf.d" @@ -5807,18 +7598,11 @@ msgstr "您的通行金鑰" #~ msgid "Format error %{msg}" #~ msgstr "格式錯誤 %{msg}" -#~ msgid "Failed to save, syntax error(s) was detected in the configuration." -#~ msgstr "儲存失敗,在設定中偵測到語法錯誤。" - #~ msgid "" #~ "When you enable/disable, delete, or save this stream, the nodes set in the " #~ "Node Group and the nodes selected below will be synchronized." #~ msgstr "當您啟用/停用、刪除或儲存此串流時,在節點群組中設定的節點以及下方選擇的節點將會同步更新。" -#, fuzzy -#~ msgid "Access Token" -#~ msgstr "存取日誌" - #, fuzzy #~ msgid "Bot Token" #~ msgstr "Token" @@ -5840,10 +7624,6 @@ msgstr "您的通行金鑰" #~ msgid "Site Categories" #~ msgstr "網站類別" -#, fuzzy -#~ msgid "Restart Required" -#~ msgstr "正在重新啟動" - #~ msgid "Deploy %{conf_name} to %{node_name} successfully" #~ msgstr "成功部署 %{conf_name} 至 %{node_name}" @@ -5897,9 +7677,6 @@ msgstr "您的通行金鑰" #~ "2FA." #~ msgstr "如果您遺失了手機,可以使用恢復碼重設您的多重因素驗證驗證。" -#~ msgid "Recovery Code:" -#~ msgstr "恢復碼:" - #~ msgid "The recovery code is only displayed once, please save it in a safe place." #~ msgstr "恢復碼僅顯示一次,請將其儲存在安全的地方。" @@ -5914,9 +7691,6 @@ msgstr "您的通行金鑰" #~ "the remote Nginx UI to the latest version" #~ msgstr "將 %{orig_path} 重新命名為 %{new_path} 在 %{env_name} 失敗,請將遠端 Nginx UI 升級到最新版本" -#~ msgid "Server Name" -#~ msgstr "伺服器名稱" - #~ msgid "Enable 2FA" #~ msgstr "啟用多因素身份驗證" @@ -6078,6 +7852,3 @@ msgstr "您的通行金鑰" #~ msgid "Used: %{used} / Total: %{total}" #~ msgstr "已使用:%{used} / 總共:%{total}" - -#~ msgid "CPU" -#~ msgstr "CPU" diff --git a/app/src/layouts/BaseLayout.vue b/app/src/layouts/BaseLayout.vue index 3c6a257c1..0ee1ad479 100644 --- a/app/src/layouts/BaseLayout.vue +++ b/app/src/layouts/BaseLayout.vue @@ -3,7 +3,9 @@ import { throttle } from 'lodash' import { storeToRefs } from 'pinia' import settings from '@/api/settings' import PageHeader from '@/components/PageHeader' -import { useProxyAvailabilityStore, useSettingsStore } from '@/pinia' +import { useSettingsStore } from '@/pinia' +import { useNodeAvailabilityStore } from '@/pinia/moudule/nodeAvailability' +import { useProxyAvailabilityStore } from '@/pinia/moudule/proxyAvailability' import FooterLayout from './FooterLayout.vue' import HeaderLayout from './HeaderLayout.vue' import SideBar from './SideBar.vue' @@ -35,8 +37,9 @@ settings.get_server_name().then(r => { server_name.value = r.name }) -// Initialize proxy availability monitoring after user is logged in and layout is mounted +// Initialize stores monitoring after user is logged in and layout is mounted const proxyAvailabilityStore = useProxyAvailabilityStore() +const nodeAvailabilityStore = useNodeAvailabilityStore() onMounted(() => { // Initialize layout @@ -44,6 +47,9 @@ onMounted(() => { // Start monitoring for upstream availability proxyAvailabilityStore.startMonitoring() + + // Start monitoring for node availability + nodeAvailabilityStore.startMonitoring() }) onUnmounted(() => { @@ -52,6 +58,7 @@ onUnmounted(() => { // Stop monitoring when layout is unmounted proxyAvailabilityStore.stopMonitoring() + nodeAvailabilityStore.stopMonitoring() }) const breadList = ref([]) diff --git a/app/src/layouts/HeaderLayout.vue b/app/src/layouts/HeaderLayout.vue index 11454f8db..46cbaf19b 100644 --- a/app/src/layouts/HeaderLayout.vue +++ b/app/src/layouts/HeaderLayout.vue @@ -1,8 +1,6 @@ @@ -277,4 +147,40 @@ const isManaged = computed(() => { font-size: 12px; line-height: 2; } + +.code-editor-container { + position: relative; + + .drag-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(24, 144, 255, 0.1); + border: 2px dashed #1890ff; + border-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + z-index: 10; + + .drag-content { + text-align: center; + color: #1890ff; + + .drag-icon { + font-size: 48px; + margin-bottom: 16px; + display: block; + } + + p { + font-size: 16px; + margin: 0; + font-weight: 500; + } + } + } +} diff --git a/app/src/views/certificate/CertificateList/Certificate.vue b/app/src/views/certificate/CertificateList/Certificate.vue index ffafcf04d..9f32e19f5 100644 --- a/app/src/views/certificate/CertificateList/Certificate.vue +++ b/app/src/views/certificate/CertificateList/Certificate.vue @@ -50,6 +50,7 @@ const { processingStatus } = storeToRefs(globalStore)