Compare commits

...

44 Commits

Author SHA1 Message Date
Owen
6fd6c77ce6 Further revert 2025-10-21 11:29:27 -07:00
Owen
e447549de1 revert changes around sites assigned to exit nodes 2025-10-21 11:12:27 -07:00
Owen
e77909d498 Change runs on 2025-10-20 21:45:40 -07:00
Owen
d10830f892 Fix exitNodeId col 2025-10-20 21:34:10 -07:00
Owen
18d8f72da2 Change runner back 2025-10-20 21:01:45 -07:00
Owen
4a59823e58 Actually run the migrations; update exit nodes
Fix #1718
Fix #1720
2025-10-20 20:55:47 -07:00
Owen
60379a7b4e Merge branch 'dev' 2025-10-20 17:17:02 -07:00
dependabot[bot]
605b3cccee Bump @types/node from 24.7.2 to 24.8.1 in the dev-minor-updates group
Bumps the dev-minor-updates group with 1 update: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).


Updates `@types/node` from 24.7.2 to 24.8.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.8.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-20 17:16:40 -07:00
dependabot[bot]
843799f4f6 Bump the dev-patch-updates group with 2 updates
Bumps the dev-patch-updates group with 2 updates: [@react-email/preview-server](https://github.com/resend/react-email/tree/HEAD/packages/preview-server) and [react-email](https://github.com/resend/react-email/tree/HEAD/packages/react-email).


Updates `@react-email/preview-server` from 4.3.0 to 4.3.1
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/preview-server/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/preview-server@4.3.1/packages/preview-server)

Updates `react-email` from 4.3.0 to 4.3.1
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/react-email/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/react-email@4.3.1/packages/react-email)

---
updated-dependencies:
- dependency-name: "@react-email/preview-server"
  dependency-version: 4.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: react-email
  dependency-version: 4.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-20 17:16:40 -07:00
Marc Schäfer
a69cda5c13 ci(actions): add GHCR mirroring and cosign signing for Docker images
- mirror images from Docker Hub to GHCR using skopeo (preserves multi-arch manifests)
- login to GHCR via docker/login-action for signing/pushing
- install cosign and perform dual signing: keyless (OIDC) + key-based; verify signatures
- add required permissions for id-token/packages and reference necessary secrets
2025-10-20 17:16:40 -07:00
Marc Schäfer
dbaa3dbd52 ci(actions): add permissions section to workflows 2025-10-20 17:16:40 -07:00
Marc Schäfer
58197c6fb2 ci(actions): change runner from ubuntu-latest to amd64-runner 2025-10-20 17:16:40 -07:00
Marc Schäfer
7813093452 ci(actions): pin action versions to commit SHAs for security
- Pin actions/checkout to SHA for v5.0.0
- Pin docker/setup-qemu-action to SHA for v3.6.0
- Pin docker/setup-buildx-action to SHA for v3.11.1
- Pin docker/login-action to SHA for v3.6.0
- Pin actions/setup-go to SHA for v6.0.0
- Pin actions/upload-artifact to SHA for v4.6.2
- Pin actions/setup-node to SHA for v6.0.0
- Pin actions/stale to SHA for v10.1.0
2025-10-20 17:16:40 -07:00
Marc Schäfer
3f2c3dc987 feat(actions): Sync Images from Docker to GHCR 2025-10-20 17:16:40 -07:00
miloschwartz
08ddba25d0 hide method selector on raw resources 2025-10-20 17:15:45 -07:00
Owen Schwartz
d47fa7e64f Merge pull request #1715 from marcschaeferger/gh-action
Adding GHCR to CI/CD Release Workflow & further improvements
2025-10-20 17:12:05 -07:00
Marc Schäfer
c87aa2e537 Merge branch 'fosrl:main' into gh-action 2025-10-21 02:09:04 +02:00
Marc Schäfer
bc430546bc ci(actions): add GHCR mirroring and cosign signing for Docker images
- mirror images from Docker Hub to GHCR using skopeo (preserves multi-arch manifests)
- login to GHCR via docker/login-action for signing/pushing
- install cosign and perform dual signing: keyless (OIDC) + key-based; verify signatures
- add required permissions for id-token/packages and reference necessary secrets
2025-10-21 02:07:26 +02:00
Owen Schwartz
9428e065eb Merge pull request #1707 from fosrl/dependabot/npm_and_yarn/dev-minor-updates-be6156b6cb
Bump @types/node from 24.7.2 to 24.8.1 in the dev-minor-updates group
2025-10-20 17:06:20 -07:00
Owen Schwartz
10408c5717 Merge pull request #1706 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-b03f25c1b7
Bump the dev-patch-updates group with 2 updates
2025-10-20 17:06:13 -07:00
Owen Schwartz
ae902da913 Merge pull request #1714 from fosrl/crowdin_dev
New Crowdin updates
2025-10-20 17:06:00 -07:00
Owen Schwartz
0be5a91eff New translations en-us.json (Spanish) 2025-10-20 17:05:44 -07:00
Owen Schwartz
7dcf46ce98 New translations en-us.json (Norwegian Bokmal) 2025-10-20 17:05:42 -07:00
Owen Schwartz
33e6e4b411 New translations en-us.json (Chinese Simplified) 2025-10-20 17:05:41 -07:00
Owen Schwartz
bab6e4eb0d New translations en-us.json (Turkish) 2025-10-20 17:05:39 -07:00
Owen Schwartz
6a7c7521d8 New translations en-us.json (Russian) 2025-10-20 17:05:38 -07:00
Owen Schwartz
d070244ea7 New translations en-us.json (Portuguese) 2025-10-20 17:05:37 -07:00
Owen Schwartz
9219bb7d6e New translations en-us.json (Polish) 2025-10-20 17:05:35 -07:00
Owen Schwartz
54e83f35e5 New translations en-us.json (Dutch) 2025-10-20 17:05:34 -07:00
Owen Schwartz
eb138d6526 New translations en-us.json (Korean) 2025-10-20 17:05:33 -07:00
Owen Schwartz
edd0c3099b New translations en-us.json (Italian) 2025-10-20 17:05:31 -07:00
Owen Schwartz
04455d40cf New translations en-us.json (German) 2025-10-20 17:05:30 -07:00
Owen Schwartz
221af94d15 New translations en-us.json (Czech) 2025-10-20 17:05:29 -07:00
Owen Schwartz
48ac3bb7af New translations en-us.json (Bulgarian) 2025-10-20 17:05:27 -07:00
Owen Schwartz
07273b8b7f New translations en-us.json (French) 2025-10-20 17:05:26 -07:00
Marc Schäfer
bfb5b2864d ci(actions): add permissions section to workflows 2025-10-21 01:59:52 +02:00
Marc Schäfer
07330e84fb ci(actions): change runner from ubuntu-latest to amd64-runner 2025-10-21 01:54:23 +02:00
Marc Schäfer
0e39704b3a ci(actions): pin action versions to commit SHAs for security
- Pin actions/checkout to SHA for v5.0.0
- Pin docker/setup-qemu-action to SHA for v3.6.0
- Pin docker/setup-buildx-action to SHA for v3.11.1
- Pin docker/login-action to SHA for v3.6.0
- Pin actions/setup-go to SHA for v6.0.0
- Pin actions/upload-artifact to SHA for v4.6.2
- Pin actions/setup-node to SHA for v6.0.0
- Pin actions/stale to SHA for v10.1.0
2025-10-21 01:53:20 +02:00
miloschwartz
f25e794e7c add checks to prevent fk failure in ensureActions 2025-10-20 16:01:40 -07:00
Owen Schwartz
df46ce8bdc Merge pull request #1712 from marcschaeferger/ghcr
feat(actions): Sync Images from Docker to GHCR
2025-10-20 13:07:34 -07:00
Marc Schäfer
4d83f537dc feat(actions): Sync Images from Docker to GHCR 2025-10-20 22:06:36 +02:00
dependabot[bot]
0819df0910 Bump @types/node from 24.7.2 to 24.8.1 in the dev-minor-updates group
Bumps the dev-minor-updates group with 1 update: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).


Updates `@types/node` from 24.7.2 to 24.8.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.8.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-20 01:35:01 +00:00
dependabot[bot]
663787c15b Bump the dev-patch-updates group with 2 updates
Bumps the dev-patch-updates group with 2 updates: [@react-email/preview-server](https://github.com/resend/react-email/tree/HEAD/packages/preview-server) and [react-email](https://github.com/resend/react-email/tree/HEAD/packages/react-email).


Updates `@react-email/preview-server` from 4.3.0 to 4.3.1
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/preview-server/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/preview-server@4.3.1/packages/preview-server)

Updates `react-email` from 4.3.0 to 4.3.1
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/react-email/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/react-email@4.3.1/packages/react-email)

---
updated-dependencies:
- dependency-name: "@react-email/preview-server"
  dependency-version: 4.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: react-email
  dependency-version: 4.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-20 01:32:52 +00:00
Owen
2c39d07261 Add missing headers 2025-10-19 17:59:40 -07:00
43 changed files with 2238 additions and 1925 deletions

View File

@@ -1,34 +1,61 @@
name: CI/CD Pipeline
# CI/CD workflow for building, publishing, mirroring, signing container images and building release binaries.
# Actions are pinned to specific SHAs to reduce supply-chain risk. This workflow triggers on tag push events.
permissions:
contents: read
packages: write # for GHCR push
id-token: write # for Cosign Keyless (OIDC) Signing
# Required secrets:
# - DOCKER_HUB_USERNAME / DOCKER_HUB_ACCESS_TOKEN: push to Docker Hub
# - GITHUB_TOKEN: used for GHCR login and OIDC keyless signing
# - COSIGN_PRIVATE_KEY / COSIGN_PASSWORD / COSIGN_PUBLIC_KEY: for key-based signing
on:
push:
tags:
- "[0-9]+.[0-9]+.[0-9]+"
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
release:
name: Build and Release
runs-on: amd64-runner
runs-on: [self-hosted, linux, x64]
# Job-level timeout to avoid runaway or stuck runs
timeout-minutes: 120
env:
# Target images
DOCKERHUB_IMAGE: docker.io/${{ secrets.DOCKER_HUB_USERNAME }}/${{ github.event.repository.name }}
GHCR_IMAGE: ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Set up QEMU
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
- name: Log in to Docker Hub
uses: docker/login-action@v3
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
registry: docker.io
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Extract tag name
id: get-tag
run: echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
shell: bash
- name: Install Go
uses: actions/setup-go@v6
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
with:
go-version: 1.24
@@ -37,18 +64,21 @@ jobs:
TAG=${{ env.TAG }}
sed -i "s/export const APP_VERSION = \".*\";/export const APP_VERSION = \"$TAG\";/" server/lib/consts.ts
cat server/lib/consts.ts
shell: bash
- name: Pull latest Gerbil version
id: get-gerbil-tag
run: |
LATEST_TAG=$(curl -s https://api.github.com/repos/fosrl/gerbil/tags | jq -r '.[0].name')
echo "LATEST_GERBIL_TAG=$LATEST_TAG" >> $GITHUB_ENV
shell: bash
- name: Pull latest Badger version
id: get-badger-tag
run: |
LATEST_TAG=$(curl -s https://api.github.com/repos/fosrl/badger/tags | jq -r '.[0].name')
echo "LATEST_BADGER_TAG=$LATEST_TAG" >> $GITHUB_ENV
shell: bash
- name: Update install/main.go
run: |
@@ -60,6 +90,7 @@ jobs:
sed -i "s/config.BadgerVersion = \".*\"/config.BadgerVersion = \"$BADGER_VERSION\"/" install/main.go
echo "Updated install/main.go with Pangolin version $PANGOLIN_VERSION, Gerbil version $GERBIL_VERSION, and Badger version $BADGER_VERSION"
cat install/main.go
shell: bash
- name: Build installer
working-directory: install
@@ -67,12 +98,84 @@ jobs:
make go-build-release
- name: Upload artifacts from /install/bin
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: install-bin
path: install/bin/
- name: Build and push Docker images
- name: Build and push Docker images (Docker Hub)
run: |
TAG=${{ env.TAG }}
make build-release tag=$TAG
echo "Built & pushed to: ${{ env.DOCKERHUB_IMAGE }}:${TAG}"
shell: bash
- name: Login in to GHCR
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Install skopeo + jq
# skopeo: copy/inspect images between registries
# jq: JSON parsing tool used to extract digest values
run: |
sudo apt-get update -y
sudo apt-get install -y skopeo jq
skopeo --version
shell: bash
- name: Copy tag from Docker Hub to GHCR
# Mirror the already-built image (all architectures) to GHCR so we can sign it
run: |
set -euo pipefail
TAG=${{ env.TAG }}
echo "Copying ${{ env.DOCKERHUB_IMAGE }}:${TAG} -> ${{ env.GHCR_IMAGE }}:${TAG}"
skopeo copy --all --retry-times 3 \
docker://$DOCKERHUB_IMAGE:$TAG \
docker://$GHCR_IMAGE:$TAG
shell: bash
- name: Install cosign
# cosign is used to sign and verify container images (key and keyless)
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
- name: Dual-sign and verify (GHCR & Docker Hub)
# Sign each image by digest using keyless (OIDC) and key-based signing,
# then verify both the public key signature and the keyless OIDC signature.
env:
TAG: ${{ env.TAG }}
COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
COSIGN_PUBLIC_KEY: ${{ secrets.COSIGN_PUBLIC_KEY }}
COSIGN_YES: "true"
run: |
set -euo pipefail
issuer="https://token.actions.githubusercontent.com"
id_regex="^https://github.com/${{ github.repository }}/.+" # accept this repo (all workflows/refs)
for IMAGE in "${GHCR_IMAGE}" "${DOCKERHUB_IMAGE}"; do
echo "Processing ${IMAGE}:${TAG}"
DIGEST="$(skopeo inspect --retry-times 3 docker://${IMAGE}:${TAG} | jq -r '.Digest')"
REF="${IMAGE}@${DIGEST}"
echo "Resolved digest: ${REF}"
echo "==> cosign sign (keyless) --recursive ${REF}"
cosign sign --recursive "${REF}"
echo "==> cosign sign (key) --recursive ${REF}"
cosign sign --key env://COSIGN_PRIVATE_KEY --recursive "${REF}"
echo "==> cosign verify (public key) ${REF}"
cosign verify --key env://COSIGN_PUBLIC_KEY "${REF}" -o text
echo "==> cosign verify (keyless policy) ${REF}"
cosign verify \
--certificate-oidc-issuer "${issuer}" \
--certificate-identity-regexp "${id_regex}" \
"${REF}" -o text
done
shell: bash

View File

@@ -1,5 +1,8 @@
name: ESLint
permissions:
contents: read
on:
pull_request:
paths:
@@ -18,10 +21,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Set up Node.js
uses: actions/setup-node@v5
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '22'
@@ -32,4 +35,4 @@ jobs:
run: npm run set:oss
- name: Run ESLint
run: npx eslint . --ext .js,.jsx,.ts,.tsx
run: npx eslint . --ext .js,.jsx,.ts,.tsx

132
.github/workflows/mirror.yaml vendored Normal file
View File

@@ -0,0 +1,132 @@
name: Mirror & Sign (Docker Hub to GHCR)
on:
workflow_dispatch: {}
permissions:
contents: read
packages: write
id-token: write # for keyless OIDC
env:
SOURCE_IMAGE: docker.io/fosrl/pangolin
DEST_IMAGE: ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}
jobs:
mirror-and-dual-sign:
runs-on: amd64-runner
steps:
- name: Install skopeo + jq
run: |
sudo apt-get update -y
sudo apt-get install -y skopeo jq
skopeo --version
- name: Install cosign
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
- name: Input check
run: |
test -n "${SOURCE_IMAGE}" || (echo "SOURCE_IMAGE is empty" && exit 1)
echo "Source : ${SOURCE_IMAGE}"
echo "Target : ${DEST_IMAGE}"
# Auth for skopeo (containers-auth)
- name: Skopeo login to GHCR
run: |
skopeo login ghcr.io -u "${{ github.actor }}" -p "${{ secrets.GITHUB_TOKEN }}"
# Auth for cosign (docker-config)
- name: Docker login to GHCR (for cosign)
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
- name: List source tags
run: |
set -euo pipefail
skopeo list-tags --retry-times 3 docker://"${SOURCE_IMAGE}" \
| jq -r '.Tags[]' | sort -u > src-tags.txt
echo "Found source tags: $(wc -l < src-tags.txt)"
head -n 20 src-tags.txt || true
- name: List destination tags (skip existing)
run: |
set -euo pipefail
if skopeo list-tags --retry-times 3 docker://"${DEST_IMAGE}" >/tmp/dst.json 2>/dev/null; then
jq -r '.Tags[]' /tmp/dst.json | sort -u > dst-tags.txt
else
: > dst-tags.txt
fi
echo "Existing destination tags: $(wc -l < dst-tags.txt)"
- name: Mirror, dual-sign, and verify
env:
# keyless
COSIGN_YES: "true"
# key-based
COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
# verify
COSIGN_PUBLIC_KEY: ${{ secrets.COSIGN_PUBLIC_KEY }}
run: |
set -euo pipefail
copied=0; skipped=0; v_ok=0; errs=0
issuer="https://token.actions.githubusercontent.com"
id_regex="^https://github.com/${{ github.repository }}/.+"
while read -r tag; do
[ -z "$tag" ] && continue
if grep -Fxq "$tag" dst-tags.txt; then
echo "::notice ::Skip (exists) ${DEST_IMAGE}:${tag}"
skipped=$((skipped+1))
continue
fi
echo "==> Copy ${SOURCE_IMAGE}:${tag} → ${DEST_IMAGE}:${tag}"
if ! skopeo copy --all --retry-times 3 \
docker://"${SOURCE_IMAGE}:${tag}" docker://"${DEST_IMAGE}:${tag}"; then
echo "::warning title=Copy failed::${SOURCE_IMAGE}:${tag}"
errs=$((errs+1)); continue
fi
copied=$((copied+1))
digest="$(skopeo inspect --retry-times 3 docker://"${DEST_IMAGE}:${tag}" | jq -r '.Digest')"
ref="${DEST_IMAGE}@${digest}"
echo "==> cosign sign (keyless) --recursive ${ref}"
if ! cosign sign --recursive "${ref}"; then
echo "::warning title=Keyless sign failed::${ref}"
errs=$((errs+1))
fi
echo "==> cosign sign (key) --recursive ${ref}"
if ! cosign sign --key env://COSIGN_PRIVATE_KEY --recursive "${ref}"; then
echo "::warning title=Key sign failed::${ref}"
errs=$((errs+1))
fi
echo "==> cosign verify (public key) ${ref}"
if ! cosign verify --key env://COSIGN_PUBLIC_KEY "${ref}" -o text; then
echo "::warning title=Verify(pubkey) failed::${ref}"
errs=$((errs+1))
fi
echo "==> cosign verify (keyless policy) ${ref}"
if ! cosign verify \
--certificate-oidc-issuer "${issuer}" \
--certificate-identity-regexp "${id_regex}" \
"${ref}" -o text; then
echo "::warning title=Verify(keyless) failed::${ref}"
errs=$((errs+1))
else
v_ok=$((v_ok+1))
fi
done < src-tags.txt
echo "---- Summary ----"
echo "Copied : $copied"
echo "Skipped : $skipped"
echo "Verified OK : $v_ok"
echo "Errors : $errs"

View File

@@ -14,7 +14,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v10
- uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0
with:
days-before-stale: 14
days-before-close: 14
@@ -34,4 +34,4 @@ jobs:
operations-per-run: 100
remove-stale-when-updated: true
delete-branch: false
enable-statistics: true
enable-statistics: true

View File

@@ -1,5 +1,8 @@
name: Run Tests
permissions:
contents: read
on:
pull_request:
branches:
@@ -11,9 +14,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: actions/setup-node@v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '22'

View File

@@ -47,9 +47,8 @@
"edit": "Редактиране",
"siteConfirmDelete": "Потвърждение на изтриване на сайта",
"siteDelete": "Изтриване на сайта",
"siteMessageRemove": "След изтриване, сайтът няма повече да бъде достъпен. Всички ресурси и цели, свързани със сайта, също ще бъдат премахнати.",
"siteMessageConfirm": "За потвърждение, моля, напишете името на сайта по-долу.",
"siteQuestionRemove": "Сигурни ли сте, че искате да премахнете сайта {selectedSite} от организацията?",
"siteMessageRemove": "След премахване, сайтът вече няма да бъде достъпен. Всички цели, свързани със сайта, също ще бъдат премахнати.",
"siteQuestionRemove": "Сигурни ли сте, че искате да премахнете сайта от организацията?",
"siteManageSites": "Управление на сайтове",
"siteDescription": "Позволете свързване към вашата мрежа чрез сигурни тунели",
"siteCreate": "Създайте сайт",
@@ -96,7 +95,7 @@
"siteWgDescription": "Use any WireGuard client to establish a tunnel. Manual NAT setup required. ONLY WORKS ON SELF HOSTED NODES",
"siteWgDescriptionSaas": "Използвайте всеки WireGuard клиент за установяване на тунел. Ръчно нат задаване е необходимо. РАБОТИ САМО НА СОБСТВЕНИ УЗЛИ.",
"siteLocalDescription": "Local resources only. No tunneling. ONLY WORKS ON SELF HOSTED NODES",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Само локални ресурси. Без тунелиране. Достъпно само на отдалечени възли.",
"siteSeeAll": "Вижте всички сайтове",
"siteTunnelDescription": "Определете как искате да се свържете с вашия сайт",
"siteNewtCredentials": "Newt Удостоверения",
@@ -154,8 +153,7 @@
"protected": "Защита",
"notProtected": "Не защитен",
"resourceMessageRemove": "След като се премахне, ресурсът няма повече да бъде достъпен. Всички цели, свързани с ресурса, също ще бъдат премахнати.",
"resourceMessageConfirm": "За потвърждение, моля, напишете името на ресурса по-долу.",
"resourceQuestionRemove": "Сигурни ли сте, че искате да премахнете ресурса {selectedResource} от организацията?",
"resourceQuestionRemove": "Сигурни ли сте, че искате да премахнете ресурса от организацията?",
"resourceHTTP": "HTTPS ресурс",
"resourceHTTPDescription": "Прокси заявки към вашето приложение през HTTPS с помощта на субдомейн или базов домейн.",
"resourceRaw": "Суров TCP/UDP ресурс",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Потвърдете изтриване на организация",
"orgMessageRemove": "Това действие е необратимо и ще изтрие всички свързани данни.",
"orgMessageConfirm": "За потвърждение, моля, напишете името на организацията по-долу.",
"orgQuestionRemove": "Сигурни ли сте, че искате да премахнете организацията {selectedOrg}?",
"orgQuestionRemove": "Сигурни ли сте, че искате да премахнете организацията?",
"orgUpdated": "Организацията е актуализирана",
"orgUpdatedDescription": "Организацията е обновена.",
"orgErrorUpdate": "Неуспешно актуализиране на организацията",
@@ -287,9 +285,8 @@
"apiKeysAdd": "Генерирайте API ключ",
"apiKeysErrorDelete": "Грешка при изтриване на API ключ",
"apiKeysErrorDeleteMessage": "Грешка при изтриване на API ключ",
"apiKeysQuestionRemove": "Сигурни ли сте, че искате да премахнете API ключа {selectedApiKey} от организацията?",
"apiKeysQuestionRemove": "Сигурни ли сте, че искате да премахнете API ключа от организацията?",
"apiKeysMessageRemove": "След като бъде премахнат, API ключът няма вече да може да се използва.",
"apiKeysMessageConfirm": "За потвърждение, моля, напишете името на API ключа по-долу.",
"apiKeysDeleteConfirm": "Потвърдете изтриване на API ключ",
"apiKeysDelete": "Изтрийте API ключа",
"apiKeysManage": "Управление на API ключове",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Потвърдете изтриването на потребител",
"userDeleteServer": "Изтрийте потребителя от сървъра",
"userMessageRemove": "Потребителят ще бъде премахнат от всички организации и напълно заличен от сървъра.",
"userMessageConfirm": "За да потвърдите, въведете името на потребителя по-долу.",
"userQuestionRemove": "Сигурни ли сте, че искате да изтриете завинаги {selectedUser} от сървъра?",
"userQuestionRemove": "Сигурни ли сте, че искате да изтриете потребител от сървъра?",
"licenseKey": "Ключ за лиценз",
"valid": "Валиден",
"numberOfSites": "Брой сайтове",
@@ -339,7 +335,7 @@
"fossorialLicense": "Преглед на търговски условия и абонамент за Fossorial",
"licenseMessageRemove": "Това ще премахне лицензионния ключ и всички свързани права, предоставени от него.",
"licenseMessageConfirm": "За да потвърдите, въведете лицензионния ключ по-долу.",
"licenseQuestionRemove": "Сигурни ли сте, че искате да изтриете лицензионния ключ {selectedKey}?",
"licenseQuestionRemove": "Сигурни ли сте, че искате да премахнете лицензионния ключ?",
"licenseKeyDelete": "Изтриване на лицензионен ключ",
"licenseKeyDeleteConfirm": "Потвърдете изтриването на лицензионен ключ",
"licenseTitle": "Управление на лицензионния статус",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Възникна грешка при премахване на поканата.",
"inviteRemoved": "Поканата е премахната",
"inviteRemovedDescription": "Поканата за {имейл} е премахната.",
"inviteQuestionRemove": "Сигурни ли сте, че искате да премахнете поканата {email}?",
"inviteQuestionRemove": "Сигурни ли сте, че искате да премахнете поканата?",
"inviteMessageRemove": "След като бъде премахната, тази покана няма да е валидна. Винаги можете да поканите потребителя отново по-късно.",
"inviteMessageConfirm": "За да потвърдите, въведете имейл адреса на поканата по-долу.",
"inviteQuestionRegenerate": "Сигурни ли сте, че искате да регенерирате поканата за {email}? Това ще отмени предишната покана.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Възникна грешка при премахване на потребителя.",
"userOrgRemoved": "Потребителят е премахнат",
"userOrgRemovedDescription": "Потребителят {email} беше премахнат от организацията.",
"userQuestionOrgRemove": "Сигурни ли сте, че искате да премахнете {email} от организацията?",
"userQuestionOrgRemove": "Сигурни ли сте, че искате да премахнете този потребител от организацията?",
"userMessageOrgRemove": "След като бъде премахнат, този потребител няма да има достъп до организацията. Винаги можете да го поканите отново по-късно, но той ще трябва да приеме отново поканата.",
"userMessageOrgConfirm": "За да потвърдите, въведете името на потребителя по-долу.",
"userRemoveOrgConfirm": "Потвърдете премахването на потребителя",
"userRemoveOrg": "Премахване на потребителя от организацията",
"users": "Потребители",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Администратор на сървър - Панголин",
"licenseTierProfessional": "Професионален лиценз",
"licenseTierEnterprise": "Предприятие лиценз",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Персонален лиценз",
"licensed": "Лицензиран",
"yes": "Да",
"no": "Не",
@@ -742,7 +737,7 @@
"idpManageDescription": "Прегледайте и управлявайте доставчици на идентичност в системата",
"idpDeletedDescription": "Доставчик на идентичност успешно изтрит",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Сигурни ли сте, че искате да изтриете трайно доставчика на идентичност {name}",
"idpQuestionRemove": "Сигурни ли сте, че искате да изтриете доставчика за идентичност?",
"idpMessageRemove": "Това ще премахне доставчика на идентичност и всички свързани конфигурации. Потребителите, които се удостоверяват през този доставчик, вече няма да могат да влязат.",
"idpMessageConfirm": "За потвърждение, моля въведете името на доставчика на идентичност по-долу.",
"idpConfirmDelete": "Потвърдите изтриването на доставчик на идентичност",
@@ -765,7 +760,7 @@
"idpDisplayName": "Име за показване за този доставчик на идентичност",
"idpAutoProvisionUsers": "Автоматично потребителско създаване",
"idpAutoProvisionUsersDescription": "Когато е активирано, потребителите ще бъдат автоматично създадени в системата при първо влизане с възможност за свързване на потребителите с роли и организации.",
"licenseBadge": "EE",
"licenseBadge": "ЕЕ",
"idpType": "Тип доставчик",
"idpTypeDescription": "Изберете типа доставчик на идентичност, който искате да конфигурирате",
"idpOidcConfigure": "Конфигурация на OAuth2/OIDC",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Всички потребители",
"sidebarIdentityProviders": "Идентификационни доставчици",
"sidebarLicense": "Лиценз",
"sidebarClients": "Clients",
"sidebarClients": "Клиенти",
"sidebarDomains": "Домейни",
"enableDockerSocket": "Активиране на Docker Чернова",
"enableDockerSocketDescription": "Активиране на Docker Socket маркировка за изтегляне на етикети на чернова. Пътят на гнездото трябва да бъде предоставен на Newt.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Създаване на домейн",
"domainCreatedDescription": "Домейнът е създаден успешно",
"domainDeletedDescription": "Домейнът е изтрит успешно",
"domainQuestionRemove": "Сигурни ли сте, че искате да премахнете домейна {domain} от вашия профил?",
"domainQuestionRemove": "Сигурни ли сте, че искате да премахнете домейна от вашия профил?",
"domainMessageRemove": "След премахването, домейнът вече няма да бъде свързан с вашия профил.",
"domainMessageConfirm": "За потвърждение, моля въведете името на домейна по-долу.",
"domainConfirmDelete": "Потвърдете изтриването на домейн",
"domainDelete": "Изтриване на домейн",
"domain": "Домейн",
@@ -1280,7 +1274,7 @@
"billingFreeTier": "Безплатен план",
"billingWarningOverLimit": "Предупреждение: Превишили сте една или повече лимити за използване. Вашите сайтове няма да се свържат, докато не промените абонамента си или не коригирате използването.",
"billingUsageLimitsOverview": "Преглед на лимитите за използване",
"billingMonitorUsage": "Следете използването спрямо конфигурираните лимити. Ако ви е необходимо увеличаване на лимитите, моля, свържете се с нас на support@pangolin.net.",
"billingMonitorUsage": "Следете своята употреба спрямо конфигурираните лимити. Ако имате нужда от увеличаване на лимитите, моля свържете се с нас support@pangolin.net.",
"billingDataUsage": "Използване на данни",
"billingOnlineTime": "Време на работа на сайта",
"billingUsers": "Активни потребители",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Не е получен URL за пренасочване от доставчика на идентификационни данни.",
"autoLoginErrorGeneratingUrl": "Неуспешно генериране на URL за удостоверяване.",
"remoteExitNodeManageRemoteExitNodes": "Отдалечени възли",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Самостоятелно хоствайте един или повече отдалечени възли, за да разширите своята мрежова връзка и намалите зависимостта от облака.",
"remoteExitNodes": "Възли",
"searchRemoteExitNodes": "Търсене на възли...",
"remoteExitNodeAdd": "Добавяне на възел",
"remoteExitNodeErrorDelete": "Грешка при изтриване на възел",
"remoteExitNodeQuestionRemove": "Сигурни ли сте, че искате да премахнете възела {selectedNode} от организацията?",
"remoteExitNodeQuestionRemove": "Сигурни ли сте, че искате да премахнете възела от организацията?",
"remoteExitNodeMessageRemove": "След премахване, възелът вече няма да бъде достъпен.",
"remoteExitNodeMessageConfirm": "За потвърждение, моля въведете името на възела по-долу.",
"remoteExitNodeConfirmDelete": "Потвърдете изтриването на възела (\"Confirm Delete Site\" match)",
"remoteExitNodeDelete": "Изтрийте възела (\"Delete Site\" match)",
"sidebarRemoteExitNodes": "Отдалечени възли",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Автентикацията в заглавката беше премахната успешно.",
"resourceErrorHeaderAuthRemove": "Неуспешно премахване на автентикация в заглавката",
"resourceErrorHeaderAuthRemoveDescription": "Не беше възможно премахването на автентикацията в заглавката за ресурса.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Активирано удостоверяване чрез заглавие",
"resourceHeaderAuthProtectionDisabled": "Деактивирано удостоверяване чрез заглавие",
"headerAuthRemove": "Премахни удостоверяване чрез заглавие",
"headerAuthAdd": "Добави удостоверяване чрез заглавие",
"resourceErrorHeaderAuthSetup": "Неуспешно задаване на автентикация в заглавката",
"resourceErrorHeaderAuthSetupDescription": "Не беше възможно задаването на автентикация в заглавката за ресурса.",
"resourceHeaderAuthSetup": "Автентикацията в заглавката беше зададена успешно",
"resourceHeaderAuthSetupDescription": "Автентикацията в заглавката беше успешно зададена.",
"resourceHeaderAuthSetupTitle": "Задаване на автентикация в заглавката",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Задайте базови идентификационни данни (потребителско име и парола), за да защитите този ресурс чрез HTTP удостоверяване чрез заглавие. Достъпете до него, използвайки формата https://потребител:парола@ресурс.example.com",
"resourceHeaderAuthSubmit": "Задаване на автентикация в заглавката",
"actionSetResourceHeaderAuth": "Задаване на автентикация в заглавката",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"enterpriseEdition": "Корпоративно издание",
"unlicensed": "Без лиценз",
"beta": "Бета",
"manageClients": "Управление на клиенти",
"manageClientsDescription": "Клиентите са устройства, които могат да се свързват към вашите сайтове",
"licenseTableValidUntil": "Валиден до",
"saasLicenseKeysSettingsTitle": "Корпоративни лицензи",
"saasLicenseKeysSettingsDescription": "Генериране и управление на корпоративни лицензионни ключове за самостоятелно хоствани инстанции на Pangolin",
"sidebarEnterpriseLicenses": "Лицензи",
"generateLicenseKey": "Генерация на лицензионен ключ",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Моля въведете валиден имейл адрес",
"useCaseTypeRequired": "Моля изберете тип на употреба",
"firstNameRequired": "Името е задължително",
"lastNameRequired": "Фамилията е задължителна",
"primaryUseRequired": "Моля опишете основната си употреба",
"jobTitleRequiredBusiness": "Позицията е задължителна за бизнес изполване",
"industryRequiredBusiness": "Индустрията е задължителна за бизнес изполване",
"stateProvinceRegionRequired": "Държава/Област/Регион е задължително",
"postalZipCodeRequired": "Пощенски/ЗИП Код е задължителен",
"companyNameRequiredBusiness": "Фирменото име е задължително за бизнес изполване",
"countryOfResidenceRequiredBusiness": "Държавата на пребиваване е задължителна за бизнес изполване",
"countryRequiredPersonal": "Държавата е задължителна за лична употреба",
"agreeToTermsRequired": "Трябва да се съгласите с условията",
"complianceConfirmationRequired": "Трябва да потвърдите съответствието с Fossorial Commercial License"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Лична употреба",
"description": "За индивидуална, некомерсиална употреба като учене, лични проекти или експериментиране."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Бизнес употреба",
"description": "За вътрешно използване във фирми, компании или комерсиални или доходоносни дейности."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "Имейл и тип лиценз",
"description": "Въведете своя имейл и изберете вид на лиценза"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Лична информация",
"description": "Разкажете ни за себе си"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Контактна информация",
"description": "Вашите контактни данни"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Условия и генериране",
"description": "Прегледайте и приемете условията, за да генерирате своя лиценз"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Разкриване на употреба",
"description": "Изберете лицензионен клас, който точно отразява вашата целена употреба. Персоналният лиценз позволява безплатно ползване на софтуера за индивидуална, некомерсиална или маломащабна комерсиална дейност с годишен брутен приход под 100,000 USD. Всяко ползване извън тези граници — включително ползване във фирма, организация или друга доходоносна среда — изисква валиден корпоративен лиценз и плащане на съответната лицензионна такса. Всички потребители, независимо дали са лични или корпоративни, трябва да спазват Условията на Fossorial Commercial License."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Информация за пробен период",
"description": "Този лицензионен ключ предоставя функции на Enterprise за 7-дневен пробен период. За продължен достъп до платени функции след изтичането на пробния период е необходима активация под валиден персонален или корпоративен лиценз. За корпоративно лицензиране се свържете с sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "Използвате ли Pangolin за лична или бизнес употреба?",
"firstName": "Име",
"lastName": "Фамилия",
"jobTitle": "Позиция",
"primaryUseQuestion": "Каква е основната ви цел да използвате Pangolin?",
"industryQuestion": "Какъв е вашият отрасъл?",
"prospectiveUsersQuestion": "Колко потенциални потребители очаквате да имате?",
"prospectiveSitesQuestion": "Колко потенциални сайтове (тунели) очаквате да имате?",
"companyName": "Фирмено име",
"countryOfResidence": "Държава на пребиваване",
"stateProvinceRegion": "Държава / Област / Регион",
"postalZipCode": "Пощенски / ЗИП код",
"companyWebsite": "Фирмен уебсайт",
"companyPhoneNumber": "Фирмен телефонен номер",
"country": "Държава",
"phoneNumberOptional": "Телефонен номер (по избор)",
"complianceConfirmation": "Потвърждавам, че предоставената от мен информация е точна и че съм в съответствие с търговския лиценз Fossorial. Съобщаването на неточна информация или неправилното идентифициране на използването на продукта е нарушение на лиценза и може да доведе до анулиране на вашия ключ."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Затвори",
"previous": "Предишен",
"next": "Следващ",
"generateLicenseKey": "Генериране на лицензионен ключ"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Лицензионният ключ е успешно генериран",
"description": "Вашият лицензионен ключ е генериран и готов за употреба."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Грешка при генериране на лицензионен ключ",
"description": "Възникна грешка при генериране на лицензионния ключ."
}
}
},
"priority": "Приоритет",
"priorityDescription": "По-високите приоритетни маршрути се оценяват първи. Приоритет = 100 означава автоматично подреждане (системата решава). Използвайте друго число, за да наложите ръчен приоритет.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"instanceName": "Име на инстанция",
"pathMatchModalTitle": "Конфигурация на съвпадение по пътека",
"pathMatchModalDescription": "Настройте как трябва да бъдат съвпадани входящите заявки въз основа на техния път.",
"pathMatchType": "Вид на съвпадението",
"pathMatchPrefix": "Префикс",
"pathMatchExact": "Точно",
"pathMatchRegex": "Регекс",
"pathMatchValue": "Стойност на пътя",
"clear": "Изчисти",
"saveChanges": "Запиши промените",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathMatchDefaultPlaceholder": "/път",
"pathMatchPrefixHelp": "Пример: /api съвпада /api, /api/потребители и т.н.",
"pathMatchExactHelp": "Пример: /api съвпада само с /api",
"pathMatchRegexHelp": "Пример: ^/api/.* съвпада с /api/всичко",
"pathRewriteModalTitle": "Конфигурация на пренаписване на пътя",
"pathRewriteModalDescription": "Преобразуване на съвпаднатия път преди препращане към целта.",
"pathRewriteType": "Вид на пренаписването",
"pathRewritePrefixOption": "Префикс - Подмяна на префикса",
"pathRewriteExactOption": "Точно - Замяна на целия път",
"pathRewriteRegexOption": "Регекс - Смяна на модела",
"pathRewriteStripPrefixOption": "Премахване на префикса",
"pathRewriteValue": "Стойност на пренаписването",
"pathRewriteRegexPlaceholder": "/нов/$1",
"pathRewriteDefaultPlaceholder": "/нов-пътека",
"pathRewritePrefixHelp": "Заменете съвпаднатия префикс с тази стойност",
"pathRewriteExactHelp": "Заменете целия път с тази стойност, когато пътят съвпада точно",
"pathRewriteRegexHelp": "Използвайте групи за улавяне като $1, $2 за заместване",
"pathRewriteStripPrefixHelp": "Оставете празно, за да премахнете префикса или предоставете нов префикс",
"pathRewritePrefix": "Префикс",
"pathRewriteExact": "Точно",
"pathRewriteRegex": "Регекс",
"pathRewriteStrip": "Премахване",
"pathRewriteStripLabel": "премахване",
"sidebarEnableEnterpriseLicense": "Активиране на корпоративен лиценз",
"cannotbeUndone": "Това не може да се отмени.",
"toConfirm": "за потвърждение",
"deleteClientQuestion": "Сигурни ли сте, че искате да премахнете клиента от сайта и организацията?",
"clientMessageRemove": "След като клиентът бъде премахнат, той вече няма да може да се свързва с сайта."
}

View File

@@ -47,9 +47,8 @@
"edit": "Upravit",
"siteConfirmDelete": "Potvrdit odstranění lokality",
"siteDelete": "Odstranění lokality",
"siteMessageRemove": "Jakmile lokalitu odstraníte, nebude dostupná. Všechny související služby a cíle budou také odstraněny.",
"siteMessageConfirm": "Pro potvrzení zadejte prosím název lokality.",
"siteQuestionRemove": "Opravdu chcete odstranit lokalitu {selectedSite} z organizace?",
"siteMessageRemove": "Po odstranění webu již nebude přístupný. Všechny cíle spojené s webem budou také odstraněny.",
"siteQuestionRemove": "Jste si jisti, že chcete odstranit tuto stránku z organizace?",
"siteManageSites": "Správa lokalit",
"siteDescription": "Umožní připojení k vaší síti prostřednictvím zabezpečených tunelů",
"siteCreate": "Vytvořit lokalitu",
@@ -96,7 +95,7 @@
"siteWgDescription": "Použijte jakéhokoli klienta WireGuard abyste sestavili tunel. Vyžaduje se ruční nastavení NAT.",
"siteWgDescriptionSaas": "Použijte jakéhokoli klienta WireGuard abyste sestavili tunel. Vyžaduje se ruční nastavení NAT. FUNGUJE POUZE NA SELF-HOSTED SERVERECH",
"siteLocalDescription": "Pouze lokální zdroje. Žádný tunel.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Pouze místní zdroje. Žádný tunel. Dostupné pouze na vzdálených uzlech.",
"siteSeeAll": "Zobrazit všechny lokality",
"siteTunnelDescription": "Určete jak se chcete připojit k vaší lokalitě",
"siteNewtCredentials": "Přihlašovací údaje Newt",
@@ -154,8 +153,7 @@
"protected": "Chráněno",
"notProtected": "Nechráněno",
"resourceMessageRemove": "Jakmile zdroj odstraníte, nebude dostupný. Všechny související služby a cíle budou také odstraněny.",
"resourceMessageConfirm": "Pro potvrzení zadejte prosím název zdroje.",
"resourceQuestionRemove": "Opravdu chcete odstranit zdroj {selectedResource} z organizace?",
"resourceQuestionRemove": "Jste si jisti, že chcete odstranit zdroj z organizace?",
"resourceHTTP": "Zdroj HTTPS",
"resourceHTTPDescription": "Požadavky na proxy pro vaši aplikaci přes HTTPS pomocí subdomény nebo základní domény.",
"resourceRaw": "Surový TCP/UDP zdroj",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Potvrdit odstranění organizace",
"orgMessageRemove": "Tato akce je nevratná a odstraní všechna související data.",
"orgMessageConfirm": "Pro potvrzení zadejte níže uvedený název organizace.",
"orgQuestionRemove": "Opravdu chcete odstranit organizaci {selectedOrg}?",
"orgQuestionRemove": "Jste si jisti, že chcete odstranit organizaci?",
"orgUpdated": "Organizace byla aktualizována",
"orgUpdatedDescription": "Organizace byla aktualizována.",
"orgErrorUpdate": "Aktualizace organizace se nezdařila",
@@ -287,9 +285,8 @@
"apiKeysAdd": "Generovat API klíč",
"apiKeysErrorDelete": "Chyba při odstraňování API klíče",
"apiKeysErrorDeleteMessage": "Chyba při odstraňování API klíče",
"apiKeysQuestionRemove": "Opravdu chcete odstranit API klíč {selectedApiKey} z organizace?",
"apiKeysQuestionRemove": "Jste si jisti, že chcete odstranit klíč API z organizace?",
"apiKeysMessageRemove": "Po odstranění klíče API již nebude možné použít.",
"apiKeysMessageConfirm": "Pro potvrzení zadejte název klíče API.",
"apiKeysDeleteConfirm": "Potvrdit odstranění API klíče",
"apiKeysDelete": "Odstranit klíč API",
"apiKeysManage": "Správa API klíčů",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Potvrdit odstranění uživatele",
"userDeleteServer": "Odstranit uživatele ze serveru",
"userMessageRemove": "Uživatel bude odstraněn ze všech organizací a bude zcela odstraněn ze serveru.",
"userMessageConfirm": "Pro potvrzení zadejte níže uvedené jméno uživatele.",
"userQuestionRemove": "Opravdu chcete trvale odstranit {selectedUser} ze serveru?",
"userQuestionRemove": "Jste si jisti, že chcete trvale odstranit uživatele ze serveru?",
"licenseKey": "Licenční klíč",
"valid": "Valid",
"numberOfSites": "Počet stránek",
@@ -339,7 +335,7 @@
"fossorialLicense": "Zobrazit Fossorial Commercial License & Subscription terms",
"licenseMessageRemove": "Tímto odstraníte licenční klíč a všechna s ním spojená oprávnění, která mu byla udělena.",
"licenseMessageConfirm": "Pro potvrzení zadejte licenční klíč níže.",
"licenseQuestionRemove": "Jste si jisti, že chcete odstranit licenční klíč {selectedKey}?",
"licenseQuestionRemove": "Jste si jisti, že chcete odstranit licenční klíč?",
"licenseKeyDelete": "Odstranit licenční klíč",
"licenseKeyDeleteConfirm": "Potvrdit odstranění licenčního klíče",
"licenseTitle": "Správa stavu licence",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Došlo k chybě při odstraňování pozvánky.",
"inviteRemoved": "Pozvánka odstraněna",
"inviteRemovedDescription": "Pozvánka pro {email} byla odstraněna.",
"inviteQuestionRemove": "Jste si jisti, že chcete odstranit pozvánku {email}?",
"inviteQuestionRemove": "Jste si jisti, že chcete odstranit pozvánku?",
"inviteMessageRemove": "Po odstranění, tato pozvánka již nebude platná. Později můžete uživatele znovu pozvat.",
"inviteMessageConfirm": "Pro potvrzení zadejte prosím níže uvedenou e-mailovou adresu.",
"inviteQuestionRegenerate": "Jste si jisti, že chcete obnovit pozvánku pro {email}? Tato akce zruší předchozí pozvánku.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Došlo k chybě při odebírání uživatele.",
"userOrgRemoved": "Uživatel odstraněn",
"userOrgRemovedDescription": "Uživatel {email} byl odebrán z organizace.",
"userQuestionOrgRemove": "Jste si jisti, že chcete odstranit {email} z organizace?",
"userQuestionOrgRemove": "Jste si jisti, že chcete odstranit tohoto uživatele z organizace?",
"userMessageOrgRemove": "Po odstranění tohoto uživatele již nebude mít přístup k organizaci. Vždy je můžete znovu pozvat později, ale budou muset pozvání znovu přijmout.",
"userMessageOrgConfirm": "Pro potvrzení, zadejte prosím jméno uživatele níže.",
"userRemoveOrgConfirm": "Potvrdit odebrání uživatele",
"userRemoveOrg": "Odebrat uživatele z organizace",
"users": "Uživatelé",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Správce serveru - Pangolin",
"licenseTierProfessional": "Profesionální licence",
"licenseTierEnterprise": "Podniková licence",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Osobní licence",
"licensed": "Licencováno",
"yes": "Ano",
"no": "Ne",
@@ -742,7 +737,7 @@
"idpManageDescription": "Zobrazit a spravovat poskytovatele identity v systému",
"idpDeletedDescription": "Poskytovatel identity byl úspěšně odstraněn",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Jste si jisti, že chcete trvale odstranit poskytovatele identity {name}?",
"idpQuestionRemove": "Jste si jisti, že chcete trvale odstranit poskytovatele identity?",
"idpMessageRemove": "Tímto odstraníte poskytovatele identity a všechny přidružené konfigurace. Uživatelé, kteří se autentizují prostřednictvím tohoto poskytovatele, se již nebudou moci přihlásit.",
"idpMessageConfirm": "Pro potvrzení zadejte níže uvedené jméno poskytovatele identity.",
"idpConfirmDelete": "Potvrdit odstranění poskytovatele identity",
@@ -765,7 +760,7 @@
"idpDisplayName": "Zobrazované jméno tohoto poskytovatele identity",
"idpAutoProvisionUsers": "Automatická úprava uživatelů",
"idpAutoProvisionUsersDescription": "Pokud je povoleno, uživatelé budou automaticky vytvářeni v systému při prvním přihlášení, s možností namapovat uživatele na role a organizace.",
"licenseBadge": "EE",
"licenseBadge": "PE",
"idpType": "Typ poskytovatele",
"idpTypeDescription": "Vyberte typ poskytovatele identity, který chcete nakonfigurovat",
"idpOidcConfigure": "Nastavení OAuth2/OIDC",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Všichni uživatelé",
"sidebarIdentityProviders": "Poskytovatelé identity",
"sidebarLicense": "Licence",
"sidebarClients": "Clients",
"sidebarClients": "Klienti",
"sidebarDomains": "Domény",
"enableDockerSocket": "Povolit Docker plán",
"enableDockerSocketDescription": "Povolte seškrábání štítků na Docker Socket pro popisky plánů. Nová cesta musí být k dispozici.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Vytvořit doménu",
"domainCreatedDescription": "Doména byla úspěšně vytvořena",
"domainDeletedDescription": "Doména byla úspěšně odstraněna",
"domainQuestionRemove": "Opravdu chcete odstranit doménu {domain} z vašeho účtu?",
"domainQuestionRemove": "Opravdu chcete odstranit doménu z vašeho účtu?",
"domainMessageRemove": "Po odstranění domény již nebude přiřazena k vašemu účtu.",
"domainMessageConfirm": "Pro potvrzení zadejte název domény níže.",
"domainConfirmDelete": "Potvrdit odstranění domény",
"domainDelete": "Odstranit doménu",
"domain": "Doména",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Od poskytovatele identity nebyla obdržena žádná adresa URL.",
"autoLoginErrorGeneratingUrl": "Nepodařilo se vygenerovat ověřovací URL.",
"remoteExitNodeManageRemoteExitNodes": "Vzdálené uzly",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Hostujte jeden nebo více vlastních vzdálených uzlů, abyste rozšířili síťová připojení a snížili závislost na cloudu",
"remoteExitNodes": "Uzly",
"searchRemoteExitNodes": "Hledat uzly...",
"remoteExitNodeAdd": "Přidat uzel",
"remoteExitNodeErrorDelete": "Chyba při odstraňování uzlu",
"remoteExitNodeQuestionRemove": "Jste si jisti, že chcete odstranit uzel {selectedNode} z organizace?",
"remoteExitNodeQuestionRemove": "Jste si jisti, že chcete odstranit uzel z organizace?",
"remoteExitNodeMessageRemove": "Po odstranění uzel již nebude přístupný.",
"remoteExitNodeMessageConfirm": "Pro potvrzení zadejte název uzlu níže.",
"remoteExitNodeConfirmDelete": "Potvrdit odstranění uzlu",
"remoteExitNodeDelete": "Odstranit uzel",
"sidebarRemoteExitNodes": "Vzdálené uzly",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Úspěšně odstraněna autentizace záhlaví.",
"resourceErrorHeaderAuthRemove": "Nepodařilo se odstranit Autentizaci Záhlaví",
"resourceErrorHeaderAuthRemoveDescription": "Nepodařilo se odstranit autentizaci záhlaví ze zdroje.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Ověřování pomocí hlaviček zapnuto",
"resourceHeaderAuthProtectionDisabled": "Ověřování pomocí hlaviček vypnuto",
"headerAuthRemove": "Odstranit ověřování pomocí hlaviček",
"headerAuthAdd": "Přidat ověřování pomocí hlaviček",
"resourceErrorHeaderAuthSetup": "Nepodařilo se nastavit Autentizaci Záhlaví",
"resourceErrorHeaderAuthSetupDescription": "Nepodařilo se nastavit autentizaci záhlaví ze zdroje.",
"resourceHeaderAuthSetup": "Úspěšně nastavena Autentizace Záhlaví",
"resourceHeaderAuthSetupDescription": "Autentizace záhlaví byla úspěšně nastavena.",
"resourceHeaderAuthSetupTitle": "Nastavit Autentizaci Záhlaví",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Nastavte přihlašovací údaje basic auth (uživatelské jméno a heslo) abyste tento zdroj chránili ověřováním pomocí HTTP hlaviček. Pro přístup použijte adresu ve formátu https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Nastavit Autentizaci Záhlaví",
"actionSetResourceHeaderAuth": "Nastavit Autentizaci Záhlaví",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"enterpriseEdition": "Podniková edice",
"unlicensed": "Nelicencováno",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"manageClients": "Spravovat klienty",
"manageClientsDescription": "Klienti jsou zařízení, která se mohou připojit k vašim lokalitám",
"licenseTableValidUntil": "Platná do",
"saasLicenseKeysSettingsTitle": "Podniková licence",
"saasLicenseKeysSettingsDescription": "Vygenerovat a spravovat podnikové licence pro instance Pangolin na vlastním hostingu",
"sidebarEnterpriseLicenses": "Licence",
"generateLicenseKey": "Vygenerovat licenční klíč",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Prosím zadejte platnou emailovou adresu",
"useCaseTypeRequired": "Vyberte prosím typ použití",
"firstNameRequired": "Zadejte křestní jméno",
"lastNameRequired": "Zadejte příjmení",
"primaryUseRequired": "Popište prosím účel použití",
"jobTitleRequiredBusiness": "Pro komerční využití zadejte název pracovní pozice",
"industryRequiredBusiness": "Pro komerční využití zadejte odvětví společnosti",
"stateProvinceRegionRequired": "Zadejte stát/provincii/oblast",
"postalZipCodeRequired": "Zadejte PSČ",
"companyNameRequiredBusiness": "Pro komerční využití zadejte název společnosti",
"countryOfResidenceRequiredBusiness": "Pro komerční využití zadejte zemi sídla společnosti",
"countryRequiredPersonal": "Pro osobní využití zadejte zemi",
"agreeToTermsRequired": "Musíte souhlasit s podmínkami",
"complianceConfirmationRequired": "Musíte potvrdit dodržování Fossorial Commercial Licence"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Osobní využití",
"description": "Pro osobní nekomerční využití jako je vzdělávání, osobní projekty nebo experimentování."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Podnikové využití",
"description": "Pro použití v organizacích, společnostech nebo při činnostech generujících zisk."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "Email a typ licence",
"description": "Zadejte svůj email a vyberte typ licence"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Osobní údaje",
"description": "Povězte nám něco o sobě"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Kontaktní údaje",
"description": "Vaše kontaktní údaje"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Podmínky a vygenerovat",
"description": "Zkontrolujte a přijměte podmínky pro vygenerování vaší licence"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Poskytnutí využití",
"description": "Vyberte si typ licence který odráží způsob využití. Osobní licence dovoluje používat aplikaci pro osobní využití, nekomerční využití nebo v malých organizacích do ročního obratu pod 100 000 USD. Jakékoliv jiné využití včetně využití pro podnikání, organizace nebo jiná prostředí generující zisk vyžaduje platnou podnikovou licenci a platbu licenčních poplatků. Všichni uživatelé, ať už osobních nebo podnikových licencí, musí souhlasit s Fossorial Commercial License Terms."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Informace o zkušební době",
"description": "Tento licenční klíč umožňuje používat podnikové funkce po dobu sedmidenní zkušební doby. Abyste zachovali přístup k placeným funkcím po skončení zkušební doby, musíte aktivovat platnou osobní nebo podnikovou licenci. Pro podnikové licence kontaktujte sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "Používáte Pangolin pro osobní nebo obchodní účely?",
"firstName": "Křestní jméno",
"lastName": "Příjmení",
"jobTitle": "Pracovní pozice",
"primaryUseQuestion": "Na co budete především používat Pangolin?",
"industryQuestion": "Jaké je vaše odvětví?",
"prospectiveUsersQuestion": "Kolik potenciálních uživatelů předpokládáte?",
"prospectiveSitesQuestion": "Kolik předpokládáte lokalit (tunelů)?",
"companyName": "Název společnosti",
"countryOfResidence": "Země sídla společnosti",
"stateProvinceRegion": "Stát / kraj / oblast",
"postalZipCode": "P",
"companyWebsite": "Stránky společnosti",
"companyPhoneNumber": "Telefonní číslo společnosti",
"country": "Země",
"phoneNumberOptional": "Telefonní číslo (nepovinné)",
"complianceConfirmation": "Potvrzuji, že informace které jsem poskytl jsou přesné a že jsem v souladu s licencí Fossorial Commercial License. Poskutnutí nepřesných informací nebo nesprávné určení použití produktu je porušením licence a může vést ke zrušení platnosti klíče."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Zavřít",
"previous": "Předchozí",
"next": "Následující",
"generateLicenseKey": "Vygenerovat licenční klíč"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Licenční klíč byl úspěšně vytvořen",
"description": "Váš licenční klíč byl vytvořen a je připraven k použití."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Nepodařilo se vytvořit licenční klíč",
"description": "Při generování licenčního klíče došlo k chybě."
}
}
},
"priority": "Priorita",
"priorityDescription": "Vyšší priorita je vyhodnocena jako první. Priorita = 100 znamená automatické řazení (rozhodnutí systému). Pro vynucení manuální priority použijte jiné číslo.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"instanceName": "Název instance",
"pathMatchModalTitle": "Nastavit porovnávání cest",
"pathMatchModalDescription": "Nastavte jak se bude ověřovat, ze cesty příchozích požadavků se shodují.",
"pathMatchType": "Typ shody",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"pathMatchExact": "Přesná",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"pathMatchValue": "Hodnota cesty",
"clear": "Smazat",
"saveChanges": "Uložit změny",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathMatchDefaultPlaceholder": "/cesta",
"pathMatchPrefixHelp": "Příklad: /api se shoduje s cestami /api, /api/users atd.",
"pathMatchExactHelp": "Příklad: /api se shoduje pouze s cestou /api",
"pathMatchRegexHelp": "Příklad: ^/api/.* se shoduje s /api/cokoliv",
"pathRewriteModalTitle": "Nastavit přepis cesty",
"pathRewriteModalDescription": "Upravit shodující se cestu před odesláním požadavku do cíle.",
"pathRewriteType": "Typ přepisu",
"pathRewritePrefixOption": "Prefix - Nahradí prefix",
"pathRewriteExactOption": "Přesný - Nahradí celou cestu",
"pathRewriteRegexOption": "Regex - Nahrazení pomocí vzorů",
"pathRewriteStripPrefixOption": "Odstranit prefix - Odstraní prefix",
"pathRewriteValue": "Přepisovaná hodnota",
"pathRewriteRegexPlaceholder": "/nová/$1",
"pathRewriteDefaultPlaceholder": "/nová-cesta",
"pathRewritePrefixHelp": "Nahradit odpovídající prefix touto hodnotou",
"pathRewriteExactHelp": "Nahradit celou cestu touto hodnotou, pokud cesta přesně odpovídá",
"pathRewriteRegexHelp": "K nahrazení použít capture groups jako $1, $2",
"pathRewriteStripPrefixHelp": "Ponechte prázdné pro odstranění prefixu nebo zadejte nový prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewriteExact": "Přesný",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Odstranit",
"pathRewriteStripLabel": "odstranit",
"sidebarEnableEnterpriseLicense": "Použít podnikovou licenci",
"cannotbeUndone": "To nelze vrátit zpět.",
"toConfirm": "Potvrdit",
"deleteClientQuestion": "Jste si jisti, že chcete odstranit klienta z webu a organizace?",
"clientMessageRemove": "Po odstranění se klient již nebude moci připojit k webu."
}

View File

@@ -47,9 +47,8 @@
"edit": "Bearbeiten",
"siteConfirmDelete": "Standort löschen bestätigen",
"siteDelete": "Standort löschen",
"siteMessageRemove": "Sobald dieser Standort entfernt ist, wird er nicht mehr zugänglich sein. Alle Ressourcen und Ziele, die mit diesem Standort verbunden sind, werden ebenfalls entfernt.",
"siteMessageConfirm": "Um zu bestätigen, gib den Namen des Standortes unten ein.",
"siteQuestionRemove": "Bist du sicher, dass der Standort {selectedSite} aus der Organisation entfernt werden soll?",
"siteMessageRemove": "Sobald die Site entfernt ist, wird sie nicht mehr zugänglich sein. Alle mit der Site verbundenen Ziele werden ebenfalls entfernt.",
"siteQuestionRemove": "Sind Sie sicher, dass Sie die Site aus der Organisation entfernen möchten?",
"siteManageSites": "Standorte verwalten",
"siteDescription": "Verbindung zum Netzwerk durch sichere Tunnel erlauben",
"siteCreate": "Standort erstellen",
@@ -96,7 +95,7 @@
"siteWgDescription": "Verwende jeden WireGuard-Client, um einen Tunnel einzurichten. Manuelles NAT-Setup erforderlich.",
"siteWgDescriptionSaas": "Verwenden Sie jeden WireGuard-Client, um einen Tunnel zu erstellen. Manuelles NAT-Setup erforderlich. FUNKTIONIERT NUR BEI SELBSTGEHOSTETEN KNOTEN",
"siteLocalDescription": "Nur lokale Ressourcen. Kein Tunneling.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Nur lokale Ressourcen. Kein Tunneling. Nur für entfernte Knoten verfügbar.",
"siteSeeAll": "Alle Standorte anzeigen",
"siteTunnelDescription": "Lege fest, wie du dich mit deinem Standort verbinden möchtest",
"siteNewtCredentials": "Neue Newt Zugangsdaten",
@@ -154,8 +153,7 @@
"protected": "Geschützt",
"notProtected": "Nicht geschützt",
"resourceMessageRemove": "Einmal entfernt, wird die Ressource nicht mehr zugänglich sein. Alle mit der Ressource verbundenen Ziele werden ebenfalls entfernt.",
"resourceMessageConfirm": "Um zu bestätigen, geben Sie bitte den Namen der Ressource unten ein.",
"resourceQuestionRemove": "Sind Sie sicher, dass Sie die Ressource {selectedResource} aus der Organisation entfernen möchten?",
"resourceQuestionRemove": "Sind Sie sicher, dass Sie die Ressource aus der Organisation entfernen möchten?",
"resourceHTTP": "HTTPS-Ressource",
"resourceHTTPDescription": "Proxy-Anfragen an Ihre App über HTTPS unter Verwendung einer Subdomain oder einer Basis-Domain.",
"resourceRaw": "Rohe TCP/UDP Ressource",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Organisation löschen bestätigen",
"orgMessageRemove": "Diese Aktion ist unwiderruflich und löscht alle zugehörigen Daten.",
"orgMessageConfirm": "Um zu bestätigen, geben Sie bitte den Namen der Organisation unten ein.",
"orgQuestionRemove": "Sind Sie sicher, dass Sie die Organisation {selectedOrg} entfernen möchten?",
"orgQuestionRemove": "Sind Sie sicher, dass Sie die Organisation entfernen möchten?",
"orgUpdated": "Organisation aktualisiert",
"orgUpdatedDescription": "Die Organisation wurde aktualisiert.",
"orgErrorUpdate": "Fehler beim Aktualisieren der Organisation",
@@ -287,9 +285,8 @@
"apiKeysAdd": "API-Schlüssel generieren",
"apiKeysErrorDelete": "Fehler beim Löschen des API-Schlüssels",
"apiKeysErrorDeleteMessage": "Fehler beim Löschen des API-Schlüssels",
"apiKeysQuestionRemove": "Sind Sie sicher, dass Sie den API-Schlüssel {selectedApiKey} aus der Organisation entfernen möchten?",
"apiKeysQuestionRemove": "Sind Sie sicher, dass Sie den API-Schlüssel aus der Organisation entfernen möchten?",
"apiKeysMessageRemove": "Einmal entfernt, kann der API-Schlüssel nicht mehr verwendet werden.",
"apiKeysMessageConfirm": "Zur Bestätigung geben Sie bitte den Namen des API-Schlüssels unten ein.",
"apiKeysDeleteConfirm": "Löschen des API-Schlüssels bestätigen",
"apiKeysDelete": "API-Schlüssel löschen",
"apiKeysManage": "API-Schlüssel verwalten",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Benutzer löschen bestätigen",
"userDeleteServer": "Benutzer vom Server löschen",
"userMessageRemove": "Der Benutzer wird von allen Organisationen entfernt und vollständig vom Server entfernt.",
"userMessageConfirm": "Um zu bestätigen, geben Sie bitte den Namen des Benutzers unten ein.",
"userQuestionRemove": "Sind Sie sicher, dass Sie {selectedUser} dauerhaft vom Server löschen möchten?",
"userQuestionRemove": "Sind Sie sicher, dass Sie den Benutzer dauerhaft vom Server löschen möchten?",
"licenseKey": "Lizenzschlüssel",
"valid": "Gültig",
"numberOfSites": "Anzahl der Standorte",
@@ -339,7 +335,7 @@
"fossorialLicense": "Fossorial Gewerbelizenz & Abonnementbedingungen anzeigen",
"licenseMessageRemove": "Dadurch werden der Lizenzschlüssel und alle zugehörigen Berechtigungen entfernt.",
"licenseMessageConfirm": "Um zu bestätigen, geben Sie bitte den Lizenzschlüssel unten ein.",
"licenseQuestionRemove": "Sind Sie sicher, dass Sie den Lizenzschlüssel {selectedKey} löschen möchten?",
"licenseQuestionRemove": "Sind Sie sicher, dass Sie den Lizenzschlüssel löschen möchten?",
"licenseKeyDelete": "Lizenzschlüssel löschen",
"licenseKeyDeleteConfirm": "Lizenzschlüssel löschen bestätigen",
"licenseTitle": "Lizenzstatus verwalten",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Beim Entfernen der Einladung ist ein Fehler aufgetreten.",
"inviteRemoved": "Einladung entfernt",
"inviteRemovedDescription": "Die Einladung für {email} wurde entfernt.",
"inviteQuestionRemove": "Sind Sie sicher, dass Sie die Einladung {email} entfernen möchten?",
"inviteQuestionRemove": "Sind Sie sicher, dass Sie die Einladung entfernen möchten?",
"inviteMessageRemove": "Sobald entfernt, wird diese Einladung nicht mehr gültig sein. Sie können den Benutzer später jederzeit erneut einladen.",
"inviteMessageConfirm": "Bitte geben Sie zur Bestätigung die E-Mail-Adresse der Einladung unten ein.",
"inviteQuestionRegenerate": "Sind Sie sicher, dass Sie die Einladung {email} neu generieren möchten? Dies wird die vorherige Einladung widerrufen.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Beim Entfernen des Benutzers ist ein Fehler aufgetreten.",
"userOrgRemoved": "Benutzer entfernt",
"userOrgRemovedDescription": "Der Benutzer {email} wurde aus der Organisation entfernt.",
"userQuestionOrgRemove": "Sind Sie sicher, dass Sie {email} aus der Organisation entfernen möchten?",
"userQuestionOrgRemove": "Sind Sie sicher, dass Sie diesen Benutzer aus der Organisation entfernen möchten?",
"userMessageOrgRemove": "Nach dem Entfernen hat dieser Benutzer keinen Zugriff mehr auf die Organisation. Sie können ihn später jederzeit wieder einladen, aber er muss die Einladung erneut annehmen.",
"userMessageOrgConfirm": "Geben Sie zur Bestätigung den Namen des Benutzers unten ein.",
"userRemoveOrgConfirm": "Entfernen des Benutzers bestätigen",
"userRemoveOrg": "Benutzer aus der Organisation entfernen",
"users": "Benutzer",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Server-Admin - Pangolin",
"licenseTierProfessional": "Professional Lizenz",
"licenseTierEnterprise": "Enterprise Lizenz",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Persönliche Lizenz",
"licensed": "Lizenziert",
"yes": "Ja",
"no": "Nein",
@@ -742,7 +737,7 @@
"idpManageDescription": "Identitätsanbieter im System anzeigen und verwalten",
"idpDeletedDescription": "Identitätsanbieter erfolgreich gelöscht",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Sind Sie sicher, dass Sie den Identitätsanbieter {name} dauerhaft löschen möchten?",
"idpQuestionRemove": "Sind Sie sicher, dass Sie den Identitätsanbieter dauerhaft löschen möchten?",
"idpMessageRemove": "Dies wird den Identitätsanbieter und alle zugehörigen Konfigurationen entfernen. Benutzer, die sich über diesen Anbieter authentifizieren, können sich nicht mehr anmelden.",
"idpMessageConfirm": "Bitte geben Sie zur Bestätigung den Namen des Identitätsanbieters unten ein.",
"idpConfirmDelete": "Löschen des Identitätsanbieters bestätigen",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Alle Benutzer",
"sidebarIdentityProviders": "Identitätsanbieter",
"sidebarLicense": "Lizenz",
"sidebarClients": "Clients",
"sidebarClients": "Kunden",
"sidebarDomains": "Domänen",
"enableDockerSocket": "Docker Blaupause aktivieren",
"enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blaupausenbeschriftungen. Der Socket-Pfad muss neu angegeben werden.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Domain erstellen",
"domainCreatedDescription": "Domain erfolgreich erstellt",
"domainDeletedDescription": "Domain erfolgreich gelöscht",
"domainQuestionRemove": "Möchten Sie die Domain {domain} wirklich aus Ihrem Konto entfernen?",
"domainQuestionRemove": "Sind Sie sicher, dass Sie die Domain von Ihrem Konto entfernen möchten?",
"domainMessageRemove": "Nach dem Entfernen wird die Domain nicht mehr mit Ihrem Konto verknüpft.",
"domainMessageConfirm": "Um zu bestätigen, geben Sie bitte den Domainnamen unten ein.",
"domainConfirmDelete": "Domain-Löschung bestätigen",
"domainDelete": "Domain löschen",
"domain": "Domäne",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Keine Weiterleitungs-URL vom Identitätsanbieter erhalten.",
"autoLoginErrorGeneratingUrl": "Fehler beim Generieren der Authentifizierungs-URL.",
"remoteExitNodeManageRemoteExitNodes": "Entfernte Knoten",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Self-Hoster einen oder mehrere entfernte Knoten, um Ihre Netzwerkverbindung zu erweitern und die Abhängigkeit von der Cloud zu verringern",
"remoteExitNodes": "Knoten",
"searchRemoteExitNodes": "Knoten suchen...",
"remoteExitNodeAdd": "Knoten hinzufügen",
"remoteExitNodeErrorDelete": "Fehler beim Löschen des Knotens",
"remoteExitNodeQuestionRemove": "Sind Sie sicher, dass Sie den Knoten {selectedNode} aus der Organisation entfernen möchten?",
"remoteExitNodeQuestionRemove": "Sind Sie sicher, dass Sie den Knoten aus der Organisation entfernen möchten?",
"remoteExitNodeMessageRemove": "Einmal entfernt, wird der Knoten nicht mehr zugänglich sein.",
"remoteExitNodeMessageConfirm": "Um zu bestätigen, geben Sie bitte den Namen des Knotens unten ein.",
"remoteExitNodeConfirmDelete": "Löschknoten bestätigen",
"remoteExitNodeDelete": "Knoten löschen",
"sidebarRemoteExitNodes": "Entfernte Knoten",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Header-Authentifizierung erfolgreich entfernt.",
"resourceErrorHeaderAuthRemove": "Fehler beim Entfernen der Header-Authentifizierung",
"resourceErrorHeaderAuthRemoveDescription": "Die Headerauthentifizierung für die Ressource konnte nicht entfernt werden.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Header-Authentifizierung aktiviert",
"resourceHeaderAuthProtectionDisabled": "Header-Authentifizierung deaktiviert",
"headerAuthRemove": "Header-Auth entfernen",
"headerAuthAdd": "Header-Auth hinzufügen",
"resourceErrorHeaderAuthSetup": "Fehler beim Setzen der Header-Authentifizierung",
"resourceErrorHeaderAuthSetupDescription": "Konnte Header-Authentifizierung für die Ressource nicht festlegen.",
"resourceHeaderAuthSetup": "Header-Authentifizierung erfolgreich festgelegt",
"resourceHeaderAuthSetupDescription": "Header-Authentifizierung wurde erfolgreich festgelegt.",
"resourceHeaderAuthSetupTitle": "Header-Authentifizierung festlegen",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Legen Sie die grundlegenden Authentifizierungsdaten (Benutzername und Passwort) fest, um diese Ressource mit HTTP-Header-Authentifizierung zu schützen. Greifen Sie auf sie mit dem Format https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Header-Authentifizierung festlegen",
"actionSetResourceHeaderAuth": "Header-Authentifizierung festlegen",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"unlicensed": "Nicht lizenziert",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"manageClients": "Kunden verwalten",
"manageClientsDescription": "Clients sind Geräte, die sich mit Ihren Websites verbinden können",
"licenseTableValidUntil": "Gültig bis",
"saasLicenseKeysSettingsTitle": "Enterprise-Lizenzen",
"saasLicenseKeysSettingsDescription": "Erstelle und verwalte Enterprise-Lizenzschlüssel für selbst gehostete Pangolin-Instanzen",
"sidebarEnterpriseLicenses": "Lizenzen",
"generateLicenseKey": "Lizenzschlüssel generieren",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Bitte geben Sie eine gültige E-Mail-Adresse ein",
"useCaseTypeRequired": "Bitte wählen Sie einen Anwendungsfall",
"firstNameRequired": "Vorname ist erforderlich",
"lastNameRequired": "Nachname ist erforderlich",
"primaryUseRequired": "Bitte beschreiben Sie Ihre primäre Verwendung",
"jobTitleRequiredBusiness": "Job-Titel ist für die geschäftliche Nutzung erforderlich",
"industryRequiredBusiness": "Industrie ist für die geschäftliche Nutzung erforderlich",
"stateProvinceRegionRequired": "Bundesland/Provinz/Region ist erforderlich",
"postalZipCodeRequired": "Postleitzahl ist erforderlich",
"companyNameRequiredBusiness": "Firmenname ist erforderlich für den geschäftlichen Gebrauch",
"countryOfResidenceRequiredBusiness": "Land des Wohnsitzes ist für die geschäftliche Nutzung erforderlich",
"countryRequiredPersonal": "Land ist für den persönlichen Gebrauch erforderlich",
"agreeToTermsRequired": "Sie müssen den Bedingungen zustimmen",
"complianceConfirmationRequired": "Sie müssen die Einhaltung der Fossorial Commercial License bestätigen"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Persönliche Nutzung",
"description": "Für den individuellen, nicht-kommerziellen Gebrauch wie Lernen, persönliche Projekte oder Experimente."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Business-Nutzung",
"description": "Für den Einsatz innerhalb von Organisationen, Unternehmen oder kommerziellen oder einkommensfördernden Aktivitäten."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "E-Mail & Lizenztyp",
"description": "Geben Sie Ihre E-Mail ein und wählen Sie Ihren Lizenztyp"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Persönliche Informationen",
"description": "Erzählen Sie uns über sich selbst"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Kontaktinformationen",
"description": "Ihre Kontaktdaten"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Begriffe & Generieren",
"description": "Bedingungen überprüfen und akzeptieren, um Ihre Lizenz zu generieren"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Verwendungsanzeige",
"description": "Wählen Sie die Lizenz-Ebene, die Ihre beabsichtigte Nutzung genau widerspiegelt. Die Persönliche Lizenz erlaubt die freie Nutzung der Software für individuelle, nicht-kommerzielle oder kleine kommerzielle Aktivitäten mit jährlichen Brutto-Einnahmen von 100.000 USD. Über diese Grenzen hinausgehende Verwendungszwecke einschließlich der Verwendung innerhalb eines Unternehmens, einer Organisation, oder eine andere umsatzgenerierende Umgebung — erfordert eine gültige Enterprise-Lizenz und die Zahlung der Lizenzgebühr. Alle Benutzer, ob Personal oder Enterprise, müssen die Fossorial Commercial License Bedingungen einhalten."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Testperiode Information",
"description": "Dieser Lizenzschlüssel ermöglicht Enterprise-Funktionen für einen 7-tägigen Bewertungszeitraum. Der fortgesetzte Zugriff auf kostenpflichtige Funktionen über den Bewertungszeitraum hinaus erfordert die Aktivierung unter einer gültigen Personen- oder Enterprise-Lizenz. Für die Enterprise-Lizenzierung wenden Sie sich bitte an sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "Benutzen Sie Pangolin für den persönlichen oder geschäftlichen Gebrauch?",
"firstName": "Vorname",
"lastName": "Nachname",
"jobTitle": "Job Titel",
"primaryUseQuestion": "Wofür planen Sie in erster Linie Pangolin zu benutzen?",
"industryQuestion": "Was ist Ihre Branche?",
"prospectiveUsersQuestion": "Wie viele Interessenten erwarten Sie?",
"prospectiveSitesQuestion": "Wie viele potentielle Standorte (Tunnel) erwarten Sie?",
"companyName": "Firmenname",
"countryOfResidence": "Land des Wohnsitzes",
"stateProvinceRegion": "Bundesland / Provinz / Region",
"postalZipCode": "Postleitzahl",
"companyWebsite": "Firmen-Webseite",
"companyPhoneNumber": "Firmennummer",
"country": "Land",
"phoneNumberOptional": "Telefonnummer (optional)",
"complianceConfirmation": "Ich bestätige, dass die von mir übermittelten Informationen korrekt sind und dass ich im Einklang mit der Fossorial Commercial License bin. Die Meldung ungenauer Informationen oder die falsche Identifizierung der Nutzung des Produkts stellt eine Verletzung der Lizenz dar und kann dazu führen, dass Ihr Schlüssel widerrufen wird."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Schließen",
"previous": "Vorherige",
"next": "Nächste",
"generateLicenseKey": "Lizenzschlüssel generieren"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Lizenzschlüssel erfolgreich erstellt",
"description": "Ihr Lizenzschlüssel wurde generiert und kann verwendet werden."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Fehler beim Generieren des Lizenzschlüssels",
"description": "Beim Generieren des Lizenzschlüssels ist ein Fehler aufgetreten."
}
}
},
"priority": "Priorität",
"priorityDescription": "Die Routen mit höherer Priorität werden zuerst ausgewertet. Priorität = 100 bedeutet automatische Bestellung (Systementscheidung). Verwenden Sie eine andere Nummer, um manuelle Priorität zu erzwingen.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"instanceName": "Instanzname",
"pathMatchModalTitle": "Pfad anpassen konfigurieren",
"pathMatchModalDescription": "Legen Sie fest, wie eingehende Anfragen basierend auf ihrem Pfad übereinstimmen sollen.",
"pathMatchType": "Übereinstimmungstyp",
"pathMatchPrefix": "Präfix",
"pathMatchExact": "Exakt",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"pathMatchValue": "Pfadwert",
"clear": "Leeren",
"saveChanges": "Änderungen speichern",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathMatchDefaultPlaceholder": "/Pfad",
"pathMatchPrefixHelp": "Beispiel: /api trifft /api, /api/users etc.",
"pathMatchExactHelp": "Beispiel: /api passt nur auf /api",
"pathMatchRegexHelp": "Beispiel: ^/api/.* entspricht /api/anything",
"pathRewriteModalTitle": "Pfad Rewriting konfigurieren",
"pathRewriteModalDescription": "Transformieren Sie den übereinstimmenden Pfad bevor Sie zum Ziel weiterleiten.",
"pathRewriteType": "Rewrite Typ",
"pathRewritePrefixOption": "Präfix - Präfix ersetzen",
"pathRewriteExactOption": "Exakt - Gesamten Pfad ersetzen",
"pathRewriteRegexOption": "Regex - Musterersetzung",
"pathRewriteStripPrefixOption": "Präfix entfernen - Präfix entfernen",
"pathRewriteValue": "Wert umschreiben",
"pathRewriteRegexPlaceholder": "/neu/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewritePrefixHelp": "Ersetze das passende Präfix mit diesem Wert",
"pathRewriteExactHelp": "Ersetze den gesamten Pfad mit diesem Wert, wenn der Pfad genau zutrifft",
"pathRewriteRegexHelp": "Capture-Gruppen wie $1, $2 zum Ersetzen verwenden",
"pathRewriteStripPrefixHelp": "Leer lassen, um Präfix zu entfernen oder neues Präfix anzugeben",
"pathRewritePrefix": "Präfix",
"pathRewriteExact": "Exakt",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Streifen",
"pathRewriteStripLabel": "streifen",
"sidebarEnableEnterpriseLicense": "Enterprise-Lizenz aktivieren",
"cannotbeUndone": "Dies kann nicht rückgängig gemacht werden.",
"toConfirm": "bestätigen",
"deleteClientQuestion": "Sind Sie sicher, dass Sie den Client von der Website und der Organisation entfernen möchten?",
"clientMessageRemove": "Nach dem Entfernen kann sich der Client nicht mehr mit der Website verbinden."
}

View File

@@ -47,9 +47,8 @@
"edit": "Editar",
"siteConfirmDelete": "Confirmar Borrar Sitio",
"siteDelete": "Eliminar sitio",
"siteMessageRemove": "Una vez eliminado, el sitio ya no será accesible. Todos los recursos y objetivos asociados con el sitio también serán eliminados.",
"siteMessageConfirm": "Para confirmar, por favor escriba el nombre del sitio a continuación.",
"siteQuestionRemove": "¿Está seguro de que desea eliminar el sitio {selectedSite} de la organización?",
"siteMessageRemove": "Una vez eliminado, el sitio ya no será accesible. Todos los objetivos asociados con el sitio también serán eliminados.",
"siteQuestionRemove": "¿Está seguro que desea eliminar el sitio de la organización?",
"siteManageSites": "Administrar Sitios",
"siteDescription": "Permitir conectividad a tu red a través de túneles seguros",
"siteCreate": "Crear sitio",
@@ -96,7 +95,7 @@
"siteWgDescription": "Utilice cualquier cliente Wirex Guard para establecer un túnel. Se requiere una configuración manual de NAT.",
"siteWgDescriptionSaas": "Utilice cualquier cliente de WireGuard para establecer un túnel. Se requiere configuración manual de NAT. SOLO FUNCIONA EN NODOS AUTOGESTIONADOS",
"siteLocalDescription": "Solo recursos locales. Sin túneles.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Solo recursos locales. No hay túneles. Sólo disponible en nodos remotos.",
"siteSeeAll": "Ver todos los sitios",
"siteTunnelDescription": "Determina cómo quieres conectarte a tu sitio",
"siteNewtCredentials": "Credenciales nuevas",
@@ -154,8 +153,7 @@
"protected": "Protegido",
"notProtected": "No protegido",
"resourceMessageRemove": "Una vez eliminado, el recurso ya no será accesible. Todos los objetivos asociados con el recurso también serán eliminados.",
"resourceMessageConfirm": "Para confirmar, por favor escriba el nombre del recurso a continuación.",
"resourceQuestionRemove": "¿Está seguro de que desea eliminar el recurso {selectedResource} de la organización?",
"resourceQuestionRemove": "¿Está seguro que desea eliminar el recurso de la organización?",
"resourceHTTP": "HTTPS Recurso",
"resourceHTTPDescription": "Solicitudes de proxy a tu aplicación sobre HTTPS usando un subdominio o dominio base.",
"resourceRaw": "Recurso TCP/UDP sin procesar",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Confirmar eliminación de organización",
"orgMessageRemove": "Esta acción es irreversible y eliminará todos los datos asociados.",
"orgMessageConfirm": "Para confirmar, por favor escriba el nombre de la organización a continuación.",
"orgQuestionRemove": "¿Está seguro que desea eliminar la organización {selectedOrg}?",
"orgQuestionRemove": "¿Está seguro que desea eliminar la organización?",
"orgUpdated": "Organización actualizada",
"orgUpdatedDescription": "La organización ha sido actualizada.",
"orgErrorUpdate": "Error al actualizar la organización",
@@ -287,9 +285,8 @@
"apiKeysAdd": "Generar clave API",
"apiKeysErrorDelete": "Error al eliminar la clave API",
"apiKeysErrorDeleteMessage": "Error al eliminar la clave API",
"apiKeysQuestionRemove": "¿Está seguro de que desea eliminar la clave de API {selectedApiKey} de la organización?",
"apiKeysQuestionRemove": "¿Está seguro que desea eliminar la clave API de la organización?",
"apiKeysMessageRemove": "Una vez eliminada, la clave API ya no podrá ser utilizada.",
"apiKeysMessageConfirm": "Para confirmar, por favor escriba el nombre de la clave API a continuación.",
"apiKeysDeleteConfirm": "Confirmar Borrar Clave API",
"apiKeysDelete": "Borrar Clave API",
"apiKeysManage": "Administrar claves API",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Confirmar Borrar Usuario",
"userDeleteServer": "Eliminar usuario del servidor",
"userMessageRemove": "El usuario será eliminado de todas las organizaciones y será eliminado completamente del servidor.",
"userMessageConfirm": "Para confirmar, por favor escriba el nombre del usuario a continuación.",
"userQuestionRemove": "¿Está seguro que desea eliminar permanentemente {selectedUser} del servidor?",
"userQuestionRemove": "¿Está seguro que desea eliminar permanentemente al usuario del servidor?",
"licenseKey": "Clave de licencia",
"valid": "Válido",
"numberOfSites": "Número de sitios",
@@ -339,7 +335,7 @@
"fossorialLicense": "Ver Términos de suscripción y licencia comercial",
"licenseMessageRemove": "Esto eliminará la clave de licencia y todos los permisos asociados otorgados por ella.",
"licenseMessageConfirm": "Para confirmar, por favor escriba la clave de licencia a continuación.",
"licenseQuestionRemove": "¿Está seguro que desea eliminar la clave de licencia {selectedKey}?",
"licenseQuestionRemove": "¿Está seguro que desea eliminar la clave de licencia?",
"licenseKeyDelete": "Eliminar clave de licencia",
"licenseKeyDeleteConfirm": "Confirmar eliminar clave de licencia",
"licenseTitle": "Administrar estado de licencia",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Ocurrió un error mientras se eliminaba la invitación.",
"inviteRemoved": "Invitación eliminada",
"inviteRemovedDescription": "La invitación para {email} ha sido eliminada.",
"inviteQuestionRemove": "¿Está seguro de que desea eliminar la invitación {email}?",
"inviteQuestionRemove": "¿Está seguro de que desea eliminar la invitación?",
"inviteMessageRemove": "Una vez eliminada, esta invitación ya no será válida. Siempre puede volver a invitar al usuario más tarde.",
"inviteMessageConfirm": "Para confirmar, por favor escriba la dirección de correo electrónico de la invitación a continuación.",
"inviteQuestionRegenerate": "¿Estás seguro de que quieres regenerar la invitación para {email}? Esto revocará la invitación anterior.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Ocurrió un error mientras se eliminaba el usuario.",
"userOrgRemoved": "Usuario eliminado",
"userOrgRemovedDescription": "El usuario {email} ha sido eliminado de la organización.",
"userQuestionOrgRemove": "¿Estás seguro de que quieres eliminar {email} de la organización?",
"userQuestionOrgRemove": "¿Está seguro que desea eliminar este usuario de la organización?",
"userMessageOrgRemove": "Una vez eliminado, este usuario ya no tendrá acceso a la organización. Siempre puede volver a invitarlos más tarde, pero tendrán que aceptar la invitación de nuevo.",
"userMessageOrgConfirm": "Para confirmar, por favor escriba el nombre del usuario a continuación.",
"userRemoveOrgConfirm": "Confirmar eliminar usuario",
"userRemoveOrg": "Eliminar usuario de la organización",
"users": "Usuarios",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Admin Servidor - Pangolin",
"licenseTierProfessional": "Licencia profesional",
"licenseTierEnterprise": "Licencia Enterprise",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Licencia personal",
"licensed": "Licenciado",
"yes": "Sí",
"no": "Nu",
@@ -742,7 +737,7 @@
"idpManageDescription": "Ver y administrar proveedores de identidad en el sistema",
"idpDeletedDescription": "Proveedor de identidad eliminado correctamente",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "¿Está seguro que desea eliminar permanentemente el proveedor de identidad {name}?",
"idpQuestionRemove": "¿Está seguro que desea eliminar permanentemente el proveedor de identidad?",
"idpMessageRemove": "Esto eliminará el proveedor de identidad y todas las configuraciones asociadas. Los usuarios que se autentifiquen a través de este proveedor ya no podrán iniciar sesión.",
"idpMessageConfirm": "Para confirmar, por favor escriba el nombre del proveedor de identidad a continuación.",
"idpConfirmDelete": "Confirmar eliminar proveedor de identidad",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Todos los usuarios",
"sidebarIdentityProviders": "Proveedores de identidad",
"sidebarLicense": "Licencia",
"sidebarClients": "Clients",
"sidebarClients": "Clientes",
"sidebarDomains": "Dominios",
"enableDockerSocket": "Habilitar Plano Docker",
"enableDockerSocketDescription": "Activar el raspado de etiquetas de Socket Docker para etiquetas de planos. La ruta del Socket debe proporcionarse a Newt.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Crear dominio",
"domainCreatedDescription": "Dominio creado con éxito",
"domainDeletedDescription": "Dominio eliminado exitosamente",
"domainQuestionRemove": "¿Está seguro de que desea eliminar el dominio {domain} de su cuenta?",
"domainQuestionRemove": "¿Está seguro que desea eliminar el dominio de su cuenta?",
"domainMessageRemove": "Una vez eliminado, el dominio ya no estará asociado con su cuenta.",
"domainMessageConfirm": "Para confirmar, por favor escriba el nombre del dominio abajo.",
"domainConfirmDelete": "Confirmar eliminación del dominio",
"domainDelete": "Eliminar dominio",
"domain": "Dominio",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "No se recibió URL de redirección del proveedor de identidad.",
"autoLoginErrorGeneratingUrl": "Error al generar URL de autenticación.",
"remoteExitNodeManageRemoteExitNodes": "Nodos remotos",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Autoalojar uno o más nodos remotos para extender la conectividad de red y reducir la dependencia de la nube",
"remoteExitNodes": "Nodos",
"searchRemoteExitNodes": "Buscar nodos...",
"remoteExitNodeAdd": "Añadir Nodo",
"remoteExitNodeErrorDelete": "Error al eliminar el nodo",
"remoteExitNodeQuestionRemove": "¿Está seguro de que desea eliminar el nodo {selectedNode} de la organización?",
"remoteExitNodeQuestionRemove": "¿Está seguro que desea eliminar el nodo de la organización?",
"remoteExitNodeMessageRemove": "Una vez eliminado, el nodo ya no será accesible.",
"remoteExitNodeMessageConfirm": "Para confirmar, por favor escriba el nombre del nodo a continuación.",
"remoteExitNodeConfirmDelete": "Confirmar eliminar nodo",
"remoteExitNodeDelete": "Eliminar Nodo",
"sidebarRemoteExitNodes": "Nodos remotos",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Autenticación de cabecera eliminada correctamente.",
"resourceErrorHeaderAuthRemove": "Error al eliminar autenticación de cabecera",
"resourceErrorHeaderAuthRemoveDescription": "No se pudo eliminar la autenticación de cabecera del recurso.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Autenticación de cabecera habilitada",
"resourceHeaderAuthProtectionDisabled": "Autenticación de cabecera desactivada",
"headerAuthRemove": "Eliminar Auth del Encabezado",
"headerAuthAdd": "Añadir autenticación de cabecera",
"resourceErrorHeaderAuthSetup": "Error al establecer autenticación de cabecera",
"resourceErrorHeaderAuthSetupDescription": "No se pudo establecer autenticación de cabecera para el recurso.",
"resourceHeaderAuthSetup": "Autenticación de cabecera establecida correctamente",
"resourceHeaderAuthSetupDescription": "La autenticación de cabecera se ha establecido correctamente.",
"resourceHeaderAuthSetupTitle": "Establecer autenticación de cabecera",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Establezca las credenciales básicas de autenticación (nombre de usuario y contraseña) para proteger este recurso con autenticación de HTTP Header. Acceda a él usando el formato https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Establecer autenticación de cabecera",
"actionSetResourceHeaderAuth": "Establecer autenticación de cabecera",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"enterpriseEdition": "Edición corporativa",
"unlicensed": "Sin licencia",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"manageClients": "Administrar clientes",
"manageClientsDescription": "Los clientes son dispositivos que pueden conectarse a sus sitios",
"licenseTableValidUntil": "Válido hasta",
"saasLicenseKeysSettingsTitle": "Licencias empresariales",
"saasLicenseKeysSettingsDescription": "Generar y administrar claves de licencia Enterprise para instancias Pangolin autoalojadas",
"sidebarEnterpriseLicenses": "Licencias",
"generateLicenseKey": "Generar clave de licencia",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Por favor, introduzca una dirección de correo válida",
"useCaseTypeRequired": "Por favor, seleccione un tipo de caso de uso",
"firstNameRequired": "El nombre es obligatorio",
"lastNameRequired": "Se requiere apellido",
"primaryUseRequired": "Por favor describa su uso principal",
"jobTitleRequiredBusiness": "El título de la tarea es obligatorio para uso empresarial",
"industryRequiredBusiness": "La industria es necesaria para uso comercial",
"stateProvinceRegionRequired": "Se requiere estado/Province/región",
"postalZipCodeRequired": "Código Postal/ZIP es requerido",
"companyNameRequiredBusiness": "El nombre de la empresa es obligatorio para uso comercial",
"countryOfResidenceRequiredBusiness": "El país de residencia es obligatorio para uso de negocios",
"countryRequiredPersonal": "El país es obligatorio para uso personal",
"agreeToTermsRequired": "Debe aceptar los términos",
"complianceConfirmationRequired": "Debe confirmar el cumplimiento de la Licencia Comercial Fossorial"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Uso personal",
"description": "Para uso individual y no comercial, tales como aprendizaje, proyectos personales o experimentación."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Uso de Negocio",
"description": "Para uso dentro de organizaciones, empresas o actividades comerciales o generadoras de ingresos."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "Email y tipo de licencia",
"description": "Introduzca su correo electrónico y elija su tipo de licencia"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Información Personal",
"description": "Cuéntanos acerca de ti"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Información de contacto",
"description": "Sus datos de contacto"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Términos y Generar",
"description": "Revisar y aceptar términos para generar su licencia"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Divulgación de uso",
"description": "Seleccione el nivel de licencia que refleje con precisión su uso previsto. La Licencia Personal permite el uso libre del Software para actividades comerciales individuales, no comerciales o de pequeña escala con ingresos brutos anuales inferiores a $100,000 USD. Cualquier uso más allá de estos límites — incluyendo el uso dentro de una empresa, organización, u otro entorno de generación de ingresos — requiere una Licencia Empresarial válida y el pago de la cuota de licencia aplicable. Todos los usuarios, ya sean personales o empresariales, deben cumplir con las Condiciones de Licencia Comercial Fossorial."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Información del período de prueba",
"description": "Esta Clave de Licencia permite las funciones de la Empresa durante un período de evaluación de 7 días. El acceso continuado a las características de pago más allá del período de evaluación requiere una activación bajo una Licencia Personal o Empresarial válida. Para licencias de la Empresa, póngase en contacto con sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "¿Estás usando Pangolin para uso personal o de negocios?",
"firstName": "Nombre",
"lastName": "Apellido",
"jobTitle": "Trabajo",
"primaryUseQuestion": "¿Para qué planeas usar principalmente Pangolin?",
"industryQuestion": "¿Cuál es su industria?",
"prospectiveUsersQuestion": "¿Cuántos usuarios potenciales esperas tener?",
"prospectiveSitesQuestion": "¿Cuántos sitios potenciales (túneles) esperas tener?",
"companyName": "Nombre de la empresa",
"countryOfResidence": "País de residencia",
"stateProvinceRegion": "Estado / Province / Región",
"postalZipCode": "Código postal",
"companyWebsite": "Sitio web de la empresa",
"companyPhoneNumber": "Número de teléfono de la empresa",
"country": "País",
"phoneNumberOptional": "Número de teléfono (opcional)",
"complianceConfirmation": "Confirmo que la información que he proporcionado es exacta y que estoy en conformidad con la Licencia Comercial Fossorial. Informar de información inexacta o identificar mal el uso del producto es una violación de la licencia y puede resultar en que su clave sea revocada."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Cerrar",
"previous": "Anterior",
"next": "Siguiente",
"generateLicenseKey": "Generar clave de licencia"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Clave de licencia generada con éxito",
"description": "Su clave de licencia ha sido generada y está lista para usar."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Error al generar la clave de licencia",
"description": "Se ha producido un error al generar la clave de licencia."
}
}
},
"priority": "Prioridad",
"priorityDescription": "Las rutas de prioridad más alta son evaluadas primero. Prioridad = 100 significa orden automático (decisiones del sistema). Utilice otro número para hacer cumplir la prioridad manual.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"instanceName": "Nombre de instancia",
"pathMatchModalTitle": "Configurar ruta coincidente",
"pathMatchModalDescription": "Configurar cómo deben coincidir las peticiones entrantes en función de su ruta.",
"pathMatchType": "Tipo de partida",
"pathMatchPrefix": "Prefijo",
"pathMatchExact": "Exacto",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"pathMatchValue": "Valor de ruta",
"clear": "Claro",
"saveChanges": "Guardar Cambios",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathMatchDefaultPlaceholder": "/ruta",
"pathMatchPrefixHelp": "Ejemplo: /api coincide con /api, /api/users, etc.",
"pathMatchExactHelp": "Ejemplo: /api coincide sólo con /api",
"pathMatchRegexHelp": "Ejemplo: ^/api/.* coincide con /api/anything",
"pathRewriteModalTitle": "Configurar ruta de reescritura",
"pathRewriteModalDescription": "Transforma la ruta coincidente antes de reenviarla al objetivo.",
"pathRewriteType": "Tipo de reescritura",
"pathRewritePrefixOption": "Prefijo - Reemplazar prefijo",
"pathRewriteExactOption": "Exacto - Reemplazar toda la ruta",
"pathRewriteRegexOption": "Regex - Reemplazo de patrón",
"pathRewriteStripPrefixOption": "Prefijo de clip - Quitar prefijo",
"pathRewriteValue": "Reescribir valor",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewritePrefixHelp": "Reemplazar el prefijo coincidente con este valor",
"pathRewriteExactHelp": "Reemplaza toda la ruta con este valor cuando la ruta coincida exactamente",
"pathRewriteRegexHelp": "Usar grupos de captura como $1, $2 para reemplazar",
"pathRewriteStripPrefixHelp": "Dejar en blanco para el prefijo strip o proporcionar un nuevo prefijo",
"pathRewritePrefix": "Prefijo",
"pathRewriteExact": "Exacto",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Clip",
"pathRewriteStripLabel": "clip",
"sidebarEnableEnterpriseLicense": "Activar licencia corporativa",
"cannotbeUndone": "Esto no se puede deshacer.",
"toConfirm": "confirmar",
"deleteClientQuestion": "¿Está seguro que desea eliminar el cliente del sitio y la organización?",
"clientMessageRemove": "Una vez eliminado, el cliente ya no podrá conectarse al sitio."
}

View File

@@ -6,50 +6,49 @@
"setupOrgName": "Nom de l'organisation",
"orgDisplayName": "Ceci est le nom d'affichage de votre organisation.",
"orgId": "ID de l'organisation",
"setupIdentifierMessage": "Ceci est l'identifiant de votre organisation. Il est différent du nom affiché.",
"setupErrorIdentifier": "Cet identifiant est déjà pris. Veuillez en choisir un autre.",
"setupIdentifierMessage": "Ceci est l'identifiant unique pour votre organisation. Il est séparé du nom affiché.",
"setupErrorIdentifier": "L'ID de l'organisation est déjà pris. Veuillez en choisir un autre.",
"componentsErrorNoMemberCreate": "Vous n'êtes actuellement membre d'aucune organisation. Créez une organisation pour commencer.",
"componentsErrorNoMember": "Vous n'êtes actuellement membre d'aucune organisation.",
"welcome": "Bienvenue sur Pangolin",
"welcome": "Bienvenue à Pangolin",
"welcomeTo": "Bienvenue chez",
"componentsCreateOrg": "Créer une organisation",
"componentsMember": "Vous {count, plural, =0 {n'} other {}}êtes membre {count, plural, =0 {d'aucune organisation} one {d'une organisation} other {de # organisations}}.",
"componentsMember": "Vous êtes membre de {count, plural, =0 {aucune organisation} one {une organisation} other {# organisations}}.",
"componentsInvalidKey": "Clés de licence invalides ou expirées détectées. Suivez les conditions de licence pour continuer à utiliser toutes les fonctionnalités.",
"dismiss": "Refuser",
"componentsLicenseViolation": "Violation de licence : Ce serveur utilise des sites {usedSites} qui dépassent la limite autorisée des sites {maxSites} . Suivez les conditions de licence pour continuer à utiliser toutes les fonctionnalités.",
"componentsSupporterMessage": "Merci de soutenir Pangolin en tant que {tier}!",
"inviteErrorNotValid": "Nous sommes désolés, mais il semble que l'invitation via laquelle vous essayez d'accéder n'ait pas été acceptée ou n'est plus valide.",
"inviteErrorUser": "Nous sommes désolés, mais il semble que l'invitation via laquelle vous essayez d'accéder ne soit pas pour cet utilisateur.",
"inviteLoginUser": "Assurez-vous d'etre bien connecté au bon compte.",
"inviteErrorNoUser": "Nous sommes désolés, mais il semble que l'invitation via laquelle vous essayez d'accéder ne soit pas pour un utilisateur qui existe.",
"inviteCreateUser": "Vous n'avez aucun compte, veuillez en créer un.",
"goHome": "Retour à l'accueil",
"inviteErrorNotValid": "Nous sommes désolés, mais il semble que l'invitation que vous essayez d'accéder n'ait pas été acceptée ou n'est plus valide.",
"inviteErrorUser": "Nous sommes désolés, mais il semble que l'invitation que vous essayez d'accéder ne soit pas pour cet utilisateur.",
"inviteLoginUser": "Assurez-vous que vous êtes bien connecté en tant qu'utilisateur correct.",
"inviteErrorNoUser": "Nous sommes désolés, mais il semble que l'invitation que vous essayez d'accéder ne soit pas pour un utilisateur qui existe.",
"inviteCreateUser": "Veuillez d'abord créer un compte.",
"goHome": "Retour à la maison",
"inviteLogInOtherUser": "Se connecter en tant qu'utilisateur différent",
"createAnAccount": "Créer un compte",
"inviteNotAccepted": "Invitation non acceptée",
"authCreateAccount": "Créez un compte pour commencer",
"authNoAccount": "Vous n'avez pas de compte ?",
"email": "Adresse email",
"email": "Courriel",
"password": "Mot de passe",
"confirmPassword": "Confirmer le mot de passe",
"createAccount": "Créer un compte",
"viewSettings": "Afficher les paramètres",
"delete": "Supprimer",
"delete": "Supprimez",
"name": "Nom",
"online": "En ligne",
"offline": "Hors ligne",
"site": "Site",
"dataIn": "Données reçues",
"dataOut": "Données émises",
"dataIn": "Données dans",
"dataOut": "Données épuisées",
"connectionType": "Type de connexion",
"tunnelType": "Type de tunnel",
"local": "Locale",
"edit": "Modifier",
"edit": "Editer",
"siteConfirmDelete": "Confirmer la suppression du site",
"siteDelete": "Supprimer le site",
"siteMessageRemove": "Une fois supprimé, le site ne sera plus accessible. Toutes les ressources et cibles associées au site seront également supprimées.",
"siteMessageConfirm": "Pour confirmer, veuillez saisir le nom du site ci-dessous.",
"siteQuestionRemove": "Êtes-vous sûr de vouloir supprimer le site {selectedSite} de l'organisation ?",
"siteMessageRemove": "Une fois supprimé, le site ne sera plus accessible. Toutes les cibles associées au site seront également supprimées.",
"siteQuestionRemove": "Êtes-vous sûr de vouloir supprimer le site de l'organisation ?",
"siteManageSites": "Gérer les sites",
"siteDescription": "Autoriser la connectivité à votre réseau via des tunnels sécurisés",
"siteCreate": "Créer un site",
@@ -64,11 +63,11 @@
"siteLearnNewt": "Apprenez à installer Newt sur votre système",
"siteSeeConfigOnce": "Vous ne pourrez voir la configuration qu'une seule fois.",
"siteLoadWGConfig": "Chargement de la configuration WireGuard...",
"siteDocker": "Afficher les détails du déploiement Docker",
"siteDocker": "Développer les détails du déploiement Docker",
"toggle": "Activer/désactiver",
"dockerCompose": "Docker Compose",
"dockerRun": "Docker Run",
"siteLearnLocal": "Les sites locaux ne permettent pas d'utiliser les tunnel, en savoir plus",
"dockerCompose": "Composition Docker",
"dockerRun": "Exécution Docker",
"siteLearnLocal": "Les sites locaux ne tunnel, en savoir plus",
"siteConfirmCopy": "J'ai copié la configuration",
"searchSitesProgress": "Rechercher des sites...",
"siteAdd": "Ajouter un site",
@@ -79,9 +78,9 @@
"operatingSystem": "Système d'exploitation",
"commands": "Commandes",
"recommended": "Recommandé",
"siteNewtDescription": "Pour une meilleure expérience d'utilisateur, utilisez Newt. Newt se base sur WireGuard et vous permet d'adresser vos ressources privées par leur adresse LAN sur votre réseau privé à partir du tableau de bord Pangolin.",
"siteRunsInDocker": "S'exécute dans Docker",
"siteRunsInShell": "S'exécute en shell sur macOS, Linux et Windows",
"siteNewtDescription": "Pour une meilleure expérience d'utilisateur, utilisez Newt. Il utilise WireGuard sous le capot et vous permet d'adresser vos ressources privées par leur adresse LAN sur votre réseau privé à partir du tableau de bord Pangolin.",
"siteRunsInDocker": "Exécute dans Docker",
"siteRunsInShell": "Exécute en shell sur macOS, Linux et Windows",
"siteErrorDelete": "Erreur lors de la suppression du site",
"siteErrorUpdate": "Impossible de mettre à jour le site",
"siteErrorUpdateDescription": "Une erreur s'est produite lors de la mise à jour du site.",
@@ -89,18 +88,18 @@
"siteUpdatedDescription": "Le site a été mis à jour.",
"siteGeneralDescription": "Configurer les paramètres généraux de ce site",
"siteSettingDescription": "Configurer les paramètres de votre site",
"siteSetting": "Réglages de {siteName}",
"siteSetting": "Réglages {siteName}",
"siteNewtTunnel": "Tunnel Newt (Recommandé)",
"siteNewtTunnelDescription": "La façon la plus simple de créer un point d'entrée dans votre réseau. Pas de configuration supplémentaire.",
"siteWg": "WireGuard basique",
"siteWgDescription": "Utilisez n'importe quel client WireGuard pour établir un tunnel. Configuration NAT manuelle requise.",
"siteWgDescriptionSaas": "Utilisez n'importe quel client WireGuard pour établir un tunnel. Configuration NAT manuelle requise. FONCTIONNE UNIQUEMENT SUR DES NŒUDS AUTONOMES",
"siteLocalDescription": "Ressources locales seulement. Pas de tunneling.",
"siteLocalDescriptionSaas": "Ressources locales seulement. Pas de tunneling. Seulement disponible sur les noeuds distants",
"siteLocalDescriptionSaas": "Ressources locales uniquement. Pas de tunneling. Disponible uniquement sur les nœuds distants.",
"siteSeeAll": "Voir tous les sites",
"siteTunnelDescription": "Déterminez comment vous voulez vous connecter à votre site",
"siteNewtCredentials": "Identifiants Newt",
"siteNewtCredentialsDescription": "C'est comme cela que Newt s'authentifiera avec le serveur",
"siteNewtCredentialsDescription": "C'est ainsi que Newt s'authentifiera avec le serveur",
"siteCredentialsSave": "Enregistrez vos identifiants",
"siteCredentialsSaveDescription": "Vous ne pourrez voir cela qu'une seule fois. Assurez-vous de le copier dans un endroit sécurisé.",
"siteInfo": "Informations sur le site",
@@ -112,7 +111,7 @@
"shareErrorDelete": "Impossible de supprimer le lien",
"shareErrorDeleteMessage": "Une erreur s'est produite lors de la suppression du lien",
"shareDeleted": "Lien supprimé",
"shareDeletedDescription": "Le lien de partage a été supprimé",
"shareDeletedDescription": "Le lien a été supprimé",
"shareTokenDescription": "Votre jeton d'accès peut être passé de deux façons : en tant que paramètre de requête ou dans les en-têtes de la requête. Elles doivent être transmises par le client à chaque demande d'accès authentifié.",
"accessToken": "Jeton d'accès",
"usageExamples": "Exemples d'utilisation",
@@ -134,7 +133,7 @@
"shareExpireDescription": "Le temps d'expiration est combien de temps le lien sera utilisable et fournira un accès à la ressource. Après cette période, le lien ne fonctionnera plus et les utilisateurs qui ont utilisé ce lien perdront l'accès à la ressource.",
"shareSeeOnce": "Vous ne pourrez voir ce lien. Assurez-vous de le copier.",
"shareAccessHint": "N'importe qui avec ce lien peut accéder à la ressource. Partagez-le avec soin.",
"shareTokenUsage": "Voir l'utilisation du jeton d'accès",
"shareTokenUsage": "Voir Utilisation du jeton d'accès",
"createLink": "Créer un lien",
"resourcesNotFound": "Aucune ressource trouvée",
"resourceSearch": "Rechercher des ressources",
@@ -154,8 +153,7 @@
"protected": "Protégé",
"notProtected": "Non Protégé",
"resourceMessageRemove": "Une fois supprimée, la ressource ne sera plus accessible. Toutes les cibles associées à la ressource seront également supprimées.",
"resourceMessageConfirm": "Pour confirmer, veuillez saisir le nom de la ressource ci-dessous.",
"resourceQuestionRemove": "Êtes-vous sûr de vouloir supprimer la ressource {selectedResource} de l'organisation ?",
"resourceQuestionRemove": "Êtes-vous sûr de vouloir supprimer la ressource de l'organisation ?",
"resourceHTTP": "Ressource HTTPS",
"resourceHTTPDescription": "Requêtes de proxy à votre application via HTTPS en utilisant un sous-domaine ou un domaine de base.",
"resourceRaw": "Ressource TCP/UDP brute",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Confirmer la suppression de l'organisation",
"orgMessageRemove": "Cette action est irréversible et supprimera toutes les données associées.",
"orgMessageConfirm": "Pour confirmer, veuillez saisir le nom de l'organisation ci-dessous.",
"orgQuestionRemove": "Êtes-vous sûr de vouloir supprimer l'organisation {selectedOrg}?",
"orgQuestionRemove": "Êtes-vous sûr de vouloir supprimer l'organisation ?",
"orgUpdated": "Organisation mise à jour",
"orgUpdatedDescription": "L'organisation a été mise à jour.",
"orgErrorUpdate": "Échec de la mise à jour de l'organisation",
@@ -287,9 +285,8 @@
"apiKeysAdd": "Générer une clé API",
"apiKeysErrorDelete": "Erreur lors de la suppression de la clé API",
"apiKeysErrorDeleteMessage": "Erreur lors de la suppression de la clé API",
"apiKeysQuestionRemove": "Êtes-vous sûr de vouloir supprimer la clé API {selectedApiKey} de l'organisation ?",
"apiKeysQuestionRemove": "Êtes-vous sûr de vouloir supprimer la clé API de l'organisation ?",
"apiKeysMessageRemove": "Une fois supprimée, la clé API ne pourra plus être utilisée.",
"apiKeysMessageConfirm": "Pour confirmer, veuillez saisir le nom de la clé API ci-dessous.",
"apiKeysDeleteConfirm": "Confirmer la suppression de la clé API",
"apiKeysDelete": "Supprimer la clé API",
"apiKeysManage": "Gérer les clés API",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Confirmer la suppression de l'utilisateur",
"userDeleteServer": "Supprimer l'utilisateur du serveur",
"userMessageRemove": "L'utilisateur sera retiré de toutes les organisations et sera complètement retiré du serveur.",
"userMessageConfirm": "Pour confirmer, veuillez saisir le nom de l'utilisateur ci-dessous.",
"userQuestionRemove": "Êtes-vous sûr de vouloir supprimer définitivement {selectedUser} du serveur?",
"userQuestionRemove": "Êtes-vous sûr de vouloir supprimer définitivement l'utilisateur du serveur?",
"licenseKey": "Clé de licence",
"valid": "Valide",
"numberOfSites": "Nombre de sites",
@@ -339,7 +335,7 @@
"fossorialLicense": "Voir les conditions de licence commerciale et d'abonnement Fossorial",
"licenseMessageRemove": "Cela supprimera la clé de licence et toutes les autorisations qui lui sont associées.",
"licenseMessageConfirm": "Pour confirmer, veuillez saisir la clé de licence ci-dessous.",
"licenseQuestionRemove": "Êtes-vous sûr de vouloir supprimer la clé de licence {selectedKey}?",
"licenseQuestionRemove": "Êtes-vous sûr de vouloir supprimer la clé de licence ?",
"licenseKeyDelete": "Supprimer la clé de licence",
"licenseKeyDeleteConfirm": "Confirmer la suppression de la clé de licence",
"licenseTitle": "Gérer le statut de la licence",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Une erreur s'est produite lors de la suppression de l'invitation.",
"inviteRemoved": "Invitation supprimée",
"inviteRemovedDescription": "L'invitation pour {email} a été supprimée.",
"inviteQuestionRemove": "Êtes-vous sûr de vouloir supprimer l'invitation {email}?",
"inviteQuestionRemove": "Êtes-vous sûr de vouloir supprimer l'invitation?",
"inviteMessageRemove": "Une fois supprimée, cette invitation ne sera plus valide. Vous pourrez toujours réinviter l'utilisateur plus tard.",
"inviteMessageConfirm": "Pour confirmer, veuillez saisir l'adresse e-mail de l'invitation ci-dessous.",
"inviteQuestionRegenerate": "Êtes-vous sûr de vouloir régénérer l'invitation {email}? Cela révoquera l'invitation précédente.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Une erreur s'est produite lors de la suppression de l'utilisateur.",
"userOrgRemoved": "Utilisateur supprimé",
"userOrgRemovedDescription": "L'utilisateur {email} a été retiré de l'organisation.",
"userQuestionOrgRemove": "Êtes-vous sûr de vouloir retirer {email} de l'organisation ?",
"userQuestionOrgRemove": "Êtes-vous sûr de vouloir supprimer cet utilisateur de l'organisation ?",
"userMessageOrgRemove": "Une fois retiré, cet utilisateur n'aura plus accès à l'organisation. Vous pouvez toujours le réinviter plus tard, mais il devra accepter l'invitation à nouveau.",
"userMessageOrgConfirm": "Pour confirmer, veuillez saisir le nom de l'utilisateur ci-dessous.",
"userRemoveOrgConfirm": "Confirmer la suppression de l'utilisateur",
"userRemoveOrg": "Retirer l'utilisateur de l'organisation",
"users": "Utilisateurs",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Admin Serveur - Pangolin",
"licenseTierProfessional": "Licence Professionnelle",
"licenseTierEnterprise": "Licence Entreprise",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Licence personnelle",
"licensed": "Sous licence",
"yes": "Oui",
"no": "Non",
@@ -742,7 +737,7 @@
"idpManageDescription": "Voir et gérer les fournisseurs d'identité dans le système",
"idpDeletedDescription": "Fournisseur d'identité supprimé avec succès",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Êtes-vous sûr de vouloir supprimer définitivement le fournisseur d'identité {name}?",
"idpQuestionRemove": "Êtes-vous sûr de vouloir supprimer définitivement le fournisseur d'identité?",
"idpMessageRemove": "Cela supprimera le fournisseur d'identité et toutes les configurations associées. Les utilisateurs qui s'authentifient via ce fournisseur ne pourront plus se connecter.",
"idpMessageConfirm": "Pour confirmer, veuillez saisir le nom du fournisseur d'identité ci-dessous.",
"idpConfirmDelete": "Confirmer la suppression du fournisseur d'identité",
@@ -1211,9 +1206,8 @@
"domainCreate": "Créer un domaine",
"domainCreatedDescription": "Domaine créé avec succès",
"domainDeletedDescription": "Domaine supprimé avec succès",
"domainQuestionRemove": "Êtes-vous sûr de vouloir supprimer le domaine {domain} de votre compte ?",
"domainQuestionRemove": "Êtes-vous sûr de vouloir supprimer le domaine de votre compte ?",
"domainMessageRemove": "Une fois supprimé, le domaine ne sera plus associé à votre compte.",
"domainMessageConfirm": "Pour confirmer, veuillez taper le nom du domaine ci-dessous.",
"domainConfirmDelete": "Confirmer la suppression du domaine",
"domainDelete": "Supprimer le domaine",
"domain": "Domaine",
@@ -1234,7 +1228,7 @@
"billing": "Facturation",
"orgBillingDescription": "Gérez vos informations de facturation et vos abonnements",
"github": "GitHub",
"pangolinHosted": "Hebergé par Pangolin",
"pangolinHosted": "Pangolin Hébergement",
"fossorial": "Fossorial",
"completeAccountSetup": "Complétez la configuration du compte",
"completeAccountSetupDescription": "Définissez votre mot de passe pour commencer",
@@ -1316,7 +1310,7 @@
"billingRemoteExitNodesInfo": "Vous êtes facturé pour chaque nœud géré dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de nœuds gérés actifs dans votre organisation.",
"domainNotFound": "Domaine introuvable",
"domainNotFoundDescription": "Cette ressource est désactivée car le domaine n'existe plus dans notre système. Veuillez définir un nouveau domaine pour cette ressource.",
"failed": "Erreur",
"failed": "Échec",
"createNewOrgDescription": "Créer une nouvelle organisation",
"organization": "Organisation",
"port": "Port",
@@ -1370,7 +1364,7 @@
"createDomainARecords": "Enregistrements A",
"createDomainRecordNumber": "Enregistrement {number}",
"createDomainTxtRecords": "Enregistrements TXT",
"createDomainSaveTheseRecords": "Sauvegardez ces enregistrements",
"createDomainSaveTheseRecords": "Enregistrez ces enregistrements",
"createDomainSaveTheseRecordsDescription": "Assurez-vous de sauvegarder ces enregistrements DNS car vous ne les reverrez pas.",
"createDomainDnsPropagation": "Propagation DNS",
"createDomainDnsPropagationDescription": "Les modifications DNS peuvent mettre du temps à se propager sur internet. Cela peut prendre de quelques minutes à 48 heures selon votre fournisseur DNS et les réglages TTL.",
@@ -1445,7 +1439,7 @@
"IntervalSeconds": "Intervalle sain",
"timeoutSeconds": "Délai",
"timeIsInSeconds": "Le temps est exprimé en secondes",
"retryAttempts": "Tentatives",
"retryAttempts": "Tentatives de réessai",
"expectedResponseCodes": "Codes de réponse attendus",
"expectedResponseCodesDescription": "Code de statut HTTP indiquant un état de santé satisfaisant. Si non renseigné, 200-300 est considéré comme satisfaisant.",
"customHeaders": "En-têtes personnalisés",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Aucune URL de redirection reçue du fournisseur d'identité.",
"autoLoginErrorGeneratingUrl": "Échec de la génération de l'URL d'authentification.",
"remoteExitNodeManageRemoteExitNodes": "Nœuds distants",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Héberger un ou plusieurs nœuds distants pour étendre votre connectivité réseau et réduire la dépendance sur le cloud",
"remoteExitNodes": "Nœuds",
"searchRemoteExitNodes": "Rechercher des nœuds...",
"remoteExitNodeAdd": "Ajouter un noeud",
"remoteExitNodeErrorDelete": "Erreur lors de la suppression du noeud",
"remoteExitNodeQuestionRemove": "Êtes-vous sûr de vouloir supprimer le noeud {selectedNode} de l'organisation ?",
"remoteExitNodeQuestionRemove": "Êtes-vous sûr de vouloir supprimer le noeud de l'organisation ?",
"remoteExitNodeMessageRemove": "Une fois supprimé, le noeud ne sera plus accessible.",
"remoteExitNodeMessageConfirm": "Pour confirmer, veuillez saisir le nom du noeud ci-dessous.",
"remoteExitNodeConfirmDelete": "Confirmer la suppression du noeud",
"remoteExitNodeDelete": "Supprimer le noeud",
"sidebarRemoteExitNodes": "Nœuds distants",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Authentification de l'en-tête supprimée avec succès.",
"resourceErrorHeaderAuthRemove": "Échec de la suppression de l'authentification de l'en-tête",
"resourceErrorHeaderAuthRemoveDescription": "Impossible de supprimer l'authentification de l'en-tête de la ressource.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Authentification de l'en-tête activée",
"resourceHeaderAuthProtectionDisabled": "L'authentification de l'en-tête est désactivée",
"headerAuthRemove": "Supprimer l'authentification de l'en-tête",
"headerAuthAdd": "Ajouter l'authentification de l'en-tête",
"resourceErrorHeaderAuthSetup": "Impossible de définir l'authentification de l'en-tête",
"resourceErrorHeaderAuthSetupDescription": "Impossible de définir l'authentification de l'en-tête pour la ressource.",
"resourceHeaderAuthSetup": "Authentification de l'en-tête définie avec succès",
"resourceHeaderAuthSetupDescription": "L'authentification de l'en-tête a été définie avec succès.",
"resourceHeaderAuthSetupTitle": "Authentification de l'en-tête",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Définissez les identifiants d'authentification de base (nom d'utilisateur et mot de passe) pour protéger cette ressource avec l'authentification de l'en-tête HTTP. Accédez-y en utilisant le format https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Authentification de l'en-tête",
"actionSetResourceHeaderAuth": "Authentification de l'en-tête",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"beta": "Beta",
"enterpriseEdition": "Édition Entreprise",
"unlicensed": "Sans licence",
"beta": "Bêta",
"manageClients": "Gérer les clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valide jusqu'au",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"manageClientsDescription": "Les clients sont des appareils qui peuvent se connecter à vos sites",
"licenseTableValidUntil": "Valable jusqu'au",
"saasLicenseKeysSettingsTitle": "Licences Entreprise",
"saasLicenseKeysSettingsDescription": "Générer et gérer les clés de licence Entreprise pour les instances Pangolin auto-hébergées",
"sidebarEnterpriseLicenses": "Licences",
"generateLicenseKey": "Générer une clé de licence",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"emailRequired": "Veuillez entrer une adresse e-mail valide",
"useCaseTypeRequired": "Veuillez sélectionner un type de cas d'utilisation",
"firstNameRequired": "Le prénom est requis",
"lastNameRequired": "Le nom est requis",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"primaryUseRequired": "Veuillez décrire votre utilisation principale",
"jobTitleRequiredBusiness": "Le titre du poste est requis pour un usage professionnel",
"industryRequiredBusiness": "L'industrie est requise pour une utilisation commerciale",
"stateProvinceRegionRequired": "État/Province/Région est obligatoire",
"postalZipCodeRequired": "Le code postal est requis",
"companyNameRequiredBusiness": "Le nom de la société est requis pour une utilisation commerciale",
"countryOfResidenceRequiredBusiness": "Le pays de résidence est requis pour un usage professionnel",
"countryRequiredPersonal": "Le pays est requis pour un usage personnel",
"agreeToTermsRequired": "Vous devez accepter les conditions",
"complianceConfirmationRequired": "Vous devez confirmer le respect de la licence commerciale Fossorial"
},
"useCaseOptions": {
"personal": {
"title": "Utilisation personelle",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Utilisation personnelle",
"description": "Pour une utilisation individuelle et non commerciale telle que l'apprentissage, les projets personnels ou l'expérimentation."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Utilisation de l'entreprise",
"description": "Pour utilisation au sein dorganisations, dentreprises ou dactivités commerciales ou génératrices de revenus."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "Email & Type de licence",
"description": "Entrez votre adresse e-mail et choisissez votre type de licence"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Informations personnelles",
"description": "Parlez-nous de vous-même"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Coordonnées",
"description": "Vos coordonnées"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Termes & Générer",
"description": "Examinez et acceptez les conditions pour générer votre licence"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Divulgation d'utilisation",
"description": "Sélectionnez le niveau de licence qui correspond exactement à votre utilisation prévue. La Licence Personnelle autorise l'utilisation libre du Logiciel pour des activités commerciales individuelles, non commerciales ou à petite échelle avec un revenu annuel brut inférieur à 100 000 USD. Toute utilisation au-delà de ces limites — y compris l'utilisation au sein d'une entreprise, d'une organisation, ou tout autre environnement générateur de revenus — nécessite une licence dentreprise valide et le paiement des droits de licence applicables. Tous les utilisateurs, qu'ils soient personnels ou d'entreprise, doivent se conformer aux conditions de licence commerciale Fossorial."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Informations sur la période d'essai",
"description": "Cette clé de licence permet aux entreprises de bénéficier de fonctionnalités pour une période d'évaluation de 7 jours. L'accès continu aux fonctionnalités payantes au-delà de la période d'évaluation nécessite une activation sous une licence personnelle ou d'entreprise valide. Pour une licence d'entreprise, contactez sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"useCaseQuestion": "Utilisez-vous Pangolin à des fins personnelles ou professionnelles?",
"firstName": "Prénom",
"lastName": "Nom",
"jobTitle": "profession",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Entreprise",
"lastName": "Nom de famille",
"jobTitle": "Titre du poste",
"primaryUseQuestion": "À quoi comptez-vous avant tout utiliser le Pangolin ?",
"industryQuestion": "Quelle est votre industrie?",
"prospectiveUsersQuestion": "Combien d'utilisateurs vous attendez-vous à avoir ?",
"prospectiveSitesQuestion": "Combien de sites potentiels (tunnels) voulez-vous avoir?",
"companyName": "Nom de la société",
"countryOfResidence": "Pays de résidence",
"stateProvinceRegion": "État / Province / Région",
"postalZipCode": "Code postal",
"companyWebsite": "Site de l'entreprise",
"companyPhoneNumber": "Numéro de téléphone professionnel",
"stateProvinceRegion": "Etat / Province / Région",
"postalZipCode": "Code postal / ZIP",
"companyWebsite": "Site web de l'entreprise",
"companyPhoneNumber": "Numéro de téléphone de la société",
"country": "Pays",
"phoneNumberOptional": "Numéro de téléphone (optionnel)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"phoneNumberOptional": "Numéro de téléphone (facultatif)",
"complianceConfirmation": "Je confirme que les renseignements que j'ai fournis sont exacts et que je suis en conformité avec la licence commerciale Fossorial. Signaler des informations inexactes ou une mauvaise identification de l'utilisation du produit constitue une violation de la licence et peut entraîner la révocation de votre clé."
},
"buttons": {
"close": "Fermer",
"previous": "Précédent",
"next": "Suivant",
"generateLicenseKey": "Generate License Key"
"generateLicenseKey": "Générer une clé de licence"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Clé de licence générée avec succès",
"description": "Votre clé de licence a été générée et est prête à l'emploi."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Impossible de générer la clé de licence",
"description": "Une erreur s'est produite lors de la génération de la clé de licence."
}
}
},
"priority": "Priorité",
"priorityDescription": "Les routes de haute priorité sont évaluées en premier. La priorité = 100 signifie l'ordre automatique (décision du système). Utilisez un autre nombre pour imposer la priorité manuelle.",
"instanceName": "Nom de l'instance",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Préfix",
"pathMatchExact": "Exact",
"pathMatchModalTitle": "Configurer le chemin correspondant",
"pathMatchModalDescription": "Définissez comment les requêtes entrantes doivent être trouvées en fonction de leur chemin.",
"pathMatchType": "Type de correspondance",
"pathMatchPrefix": "Préfixe",
"pathMatchExact": "Exactement",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Sauvegarder",
"pathMatchValue": "Valeur du chemin",
"clear": "Nettoyer",
"saveChanges": "Enregistrer les modifications",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Préfix",
"pathRewriteExact": "Exact",
"pathMatchDefaultPlaceholder": "/chemin d'accès",
"pathMatchPrefixHelp": "Exemple: /api correspond à /api, /api/users, etc.",
"pathMatchExactHelp": "Exemple: /api ne correspond qu'à /api",
"pathMatchRegexHelp": "Exemple: ^/api/.* correspond à /api/anything",
"pathRewriteModalTitle": "Configurer la réécriture du chemin",
"pathRewriteModalDescription": "Transformez le chemin correspondant avant de l'envoyer à la cible.",
"pathRewriteType": "Type de réécriture",
"pathRewritePrefixOption": "Préfixe - Remplacer le préfixe",
"pathRewriteExactOption": "Exactement - Remplacer le chemin entier",
"pathRewriteRegexOption": "Regex - Remplacement de patron",
"pathRewriteStripPrefixOption": "Retirer le préfixe - Supprimer le préfixe",
"pathRewriteValue": "Réécrire la valeur",
"pathRewriteRegexPlaceholder": "/fr/new/$1",
"pathRewriteDefaultPlaceholder": "/fr/new-path",
"pathRewritePrefixHelp": "Remplacer le préfixe correspondant par cette valeur",
"pathRewriteExactHelp": "Remplacer le chemin entier par cette valeur lorsque le chemin correspond exactement",
"pathRewriteRegexHelp": "Utiliser des groupes de capture comme $1, $2 pour le remplacement",
"pathRewriteStripPrefixHelp": "Laisser vide pour supprimer le préfixe ou fournir un nouveau préfixe",
"pathRewritePrefix": "Préfixe",
"pathRewriteExact": "Exactement",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Retirer",
"pathRewriteStripLabel": "bande",
"sidebarEnableEnterpriseLicense": "Activer la licence Entreprise",
"cannotbeUndone": "Cela ne peut pas être annulé.",
"toConfirm": "pour confirmer",
"deleteClientQuestion": "Êtes-vous sûr de vouloir supprimer le client du site et de l'organisation ?",
"clientMessageRemove": "Une fois supprimé, le client ne pourra plus se connecter au site."
}

View File

@@ -47,9 +47,8 @@
"edit": "Modifica",
"siteConfirmDelete": "Conferma Eliminazione Sito",
"siteDelete": "Elimina Sito",
"siteMessageRemove": "Una volta rimosso, il sito non sarà più accessibile. Anche tutte le risorse e gli obiettivi associati al sito saranno rimossi.",
"siteMessageConfirm": "Per confermare, digita il nome del sito qui sotto.",
"siteQuestionRemove": "Sei sicuro di voler rimuovere il sito {selectedSite} dall'organizzazione?",
"siteMessageRemove": "Una volta rimosso il sito non sarà più accessibile. Tutti gli obiettivi associati al sito verranno rimossi.",
"siteQuestionRemove": "Sei sicuro di voler rimuovere il sito dall'organizzazione?",
"siteManageSites": "Gestisci Siti",
"siteDescription": "Consenti la connettività alla rete attraverso tunnel sicuri",
"siteCreate": "Crea Sito",
@@ -96,7 +95,7 @@
"siteWgDescription": "Usa qualsiasi client WireGuard per stabilire un tunnel. Impostazione NAT manuale richiesta.",
"siteWgDescriptionSaas": "Usa qualsiasi client WireGuard per stabilire un tunnel. Impostazione NAT manuale richiesta. FUNZIONA SOLO SU NODI AUTO-OSPITATI",
"siteLocalDescription": "Solo risorse locali. Nessun tunneling.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Solo risorse locali. Nessun tunneling. Disponibile solo su nodi remoti.",
"siteSeeAll": "Vedi Tutti I Siti",
"siteTunnelDescription": "Determina come vuoi connetterti al tuo sito",
"siteNewtCredentials": "Credenziali Newt",
@@ -154,8 +153,7 @@
"protected": "Protetto",
"notProtected": "Non Protetto",
"resourceMessageRemove": "Una volta rimossa, la risorsa non sarà più accessibile. Tutti gli obiettivi associati alla risorsa saranno rimossi.",
"resourceMessageConfirm": "Per confermare, digita il nome della risorsa qui sotto.",
"resourceQuestionRemove": "Sei sicuro di voler rimuovere la risorsa {selectedResource} dall'organizzazione?",
"resourceQuestionRemove": "Sei sicuro di voler rimuovere la risorsa dall'organizzazione?",
"resourceHTTP": "Risorsa HTTPS",
"resourceHTTPDescription": "Richieste proxy alla tua app tramite HTTPS utilizzando un sottodominio o un dominio di base.",
"resourceRaw": "Risorsa Raw TCP/UDP",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Conferma Elimina Organizzazione",
"orgMessageRemove": "Questa azione è irreversibile e cancellerà tutti i dati associati.",
"orgMessageConfirm": "Per confermare, digita il nome dell'organizzazione qui sotto.",
"orgQuestionRemove": "Sei sicuro di voler rimuovere l'organizzazione {selectedOrg}?",
"orgQuestionRemove": "Sei sicuro di voler rimuovere l'organizzazione?",
"orgUpdated": "Organizzazione aggiornata",
"orgUpdatedDescription": "L'organizzazione è stata aggiornata.",
"orgErrorUpdate": "Impossibile aggiornare l'organizzazione",
@@ -287,9 +285,8 @@
"apiKeysAdd": "Genera Chiave API",
"apiKeysErrorDelete": "Errore nell'eliminazione della chiave API",
"apiKeysErrorDeleteMessage": "Errore nell'eliminazione della chiave API",
"apiKeysQuestionRemove": "Sei sicuro di voler rimuovere la chiave API {selectedApiKey} dall'organizzazione?",
"apiKeysQuestionRemove": "Sei sicuro di voler rimuovere la chiave API dall'organizzazione?",
"apiKeysMessageRemove": "Una volta rimossa, la chiave API non potrà più essere utilizzata.",
"apiKeysMessageConfirm": "Per confermare, digita il nome della chiave API qui sotto.",
"apiKeysDeleteConfirm": "Conferma Eliminazione Chiave API",
"apiKeysDelete": "Elimina Chiave API",
"apiKeysManage": "Gestisci Chiavi API",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Conferma Eliminazione Utente",
"userDeleteServer": "Elimina utente dal server",
"userMessageRemove": "L'utente verrà rimosso da tutte le organizzazioni ed essere completamente rimosso dal server.",
"userMessageConfirm": "Per confermare, digita il nome dell'utente qui sotto.",
"userQuestionRemove": "Sei sicuro di voler eliminare definitivamente {selectedUser} dal server?",
"userQuestionRemove": "Sei sicuro di voler eliminare definitivamente l'utente dal server?",
"licenseKey": "Chiave Di Licenza",
"valid": "Valido",
"numberOfSites": "Numero di siti",
@@ -339,7 +335,7 @@
"fossorialLicense": "Visualizza I Termini Di Licenza Commerciale Fossorial E Abbonamento",
"licenseMessageRemove": "Questo rimuoverà la chiave di licenza e tutti i permessi associati da essa concessi.",
"licenseMessageConfirm": "Per confermare, digitare la chiave di licenza qui sotto.",
"licenseQuestionRemove": "Sei sicuro di voler eliminare la chiave di licenza {selectedKey}?",
"licenseQuestionRemove": "Sei sicuro di voler eliminare la chiave di licenza?",
"licenseKeyDelete": "Elimina Chiave Di Licenza",
"licenseKeyDeleteConfirm": "Conferma Elimina Chiave Di Licenza",
"licenseTitle": "Gestisci Stato Licenza",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Si è verificato un errore durante la rimozione dell'invito.",
"inviteRemoved": "Invito rimosso",
"inviteRemovedDescription": "L'invito per {email} è stato rimosso.",
"inviteQuestionRemove": "Sei sicuro di voler rimuovere l'invito {email}?",
"inviteQuestionRemove": "Sei sicuro di voler rimuovere l'invito?",
"inviteMessageRemove": "Una volta rimosso, questo invito non sarà più valido. Puoi sempre reinvitare l'utente in seguito.",
"inviteMessageConfirm": "Per confermare, digita l'indirizzo email dell'invito qui sotto.",
"inviteQuestionRegenerate": "Sei sicuro di voler rigenerare l'invito {email}? Questo revocherà l'invito precedente.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Si è verificato un errore durante la rimozione dell'utente.",
"userOrgRemoved": "Utente rimosso",
"userOrgRemovedDescription": "L'utente {email} è stato rimosso dall'organizzazione.",
"userQuestionOrgRemove": "Sei sicuro di voler rimuovere {email} dall'organizzazione?",
"userQuestionOrgRemove": "Sei sicuro di voler rimuovere questo utente dall'organizzazione?",
"userMessageOrgRemove": "Una volta rimosso, questo utente non avrà più accesso all'organizzazione. Puoi sempre reinvitarlo in seguito, ma dovrà accettare nuovamente l'invito.",
"userMessageOrgConfirm": "Per confermare, digita il nome dell'utente qui sotto.",
"userRemoveOrgConfirm": "Conferma Rimozione Utente",
"userRemoveOrg": "Rimuovi Utente dall'Organizzazione",
"users": "Utenti",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Server Admin - Pangolina",
"licenseTierProfessional": "Licenza Professional",
"licenseTierEnterprise": "Licenza Enterprise",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Licenza Personale",
"licensed": "Con Licenza",
"yes": "Sì",
"no": "No",
@@ -742,7 +737,7 @@
"idpManageDescription": "Visualizza e gestisci i provider di identità nel sistema",
"idpDeletedDescription": "Provider di identità eliminato con successo",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Sei sicuro di voler eliminare definitivamente il provider di identità {name}?",
"idpQuestionRemove": "Sei sicuro di voler eliminare definitivamente il provider di identità?",
"idpMessageRemove": "Questo rimuoverà il provider di identità e tutte le configurazioni associate. Gli utenti che si autenticano tramite questo provider non potranno più accedere.",
"idpMessageConfirm": "Per confermare, digita il nome del provider di identità qui sotto.",
"idpConfirmDelete": "Conferma Eliminazione Provider di Identità",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Tutti Gli Utenti",
"sidebarIdentityProviders": "Fornitori Di Identità",
"sidebarLicense": "Licenza",
"sidebarClients": "Clients",
"sidebarClients": "Client",
"sidebarDomains": "Domini",
"enableDockerSocket": "Abilita Progetto Docker",
"enableDockerSocketDescription": "Abilita la raschiatura dell'etichetta Docker Socket per le etichette dei progetti. Il percorso del socket deve essere fornito a Newt.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Crea Dominio",
"domainCreatedDescription": "Dominio creato con successo",
"domainDeletedDescription": "Dominio eliminato con successo",
"domainQuestionRemove": "Sei sicuro di voler rimuovere il dominio {domain} dal tuo account?",
"domainQuestionRemove": "Sei sicuro di voler rimuovere il dominio dal tuo account?",
"domainMessageRemove": "Una volta rimosso, il dominio non sarà più associato al tuo account.",
"domainMessageConfirm": "Per confermare, digita il nome del dominio qui sotto.",
"domainConfirmDelete": "Conferma Eliminazione Dominio",
"domainDelete": "Elimina Dominio",
"domain": "Dominio",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Nessun URL di reindirizzamento ricevuto dal provider di identità.",
"autoLoginErrorGeneratingUrl": "Impossibile generare l'URL di autenticazione.",
"remoteExitNodeManageRemoteExitNodes": "Nodi Remoti",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Self-host uno o più nodi remoti per estendere la connettività di rete e ridurre la dipendenza dal cloud",
"remoteExitNodes": "Nodi",
"searchRemoteExitNodes": "Cerca nodi...",
"remoteExitNodeAdd": "Aggiungi Nodo",
"remoteExitNodeErrorDelete": "Errore nell'eliminare il nodo",
"remoteExitNodeQuestionRemove": "Sei sicuro di voler rimuovere il nodo {selectedNode} dall'organizzazione?",
"remoteExitNodeQuestionRemove": "Sei sicuro di voler rimuovere il nodo dall'organizzazione?",
"remoteExitNodeMessageRemove": "Una volta rimosso, il nodo non sarà più accessibile.",
"remoteExitNodeMessageConfirm": "Per confermare, digita il nome del nodo qui sotto.",
"remoteExitNodeConfirmDelete": "Conferma Eliminazione Nodo",
"remoteExitNodeDelete": "Elimina Nodo",
"sidebarRemoteExitNodes": "Nodi Remoti",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Autenticazione intestazione rimossa con successo.",
"resourceErrorHeaderAuthRemove": "Impossibile rimuovere l'autenticazione dell'intestazione",
"resourceErrorHeaderAuthRemoveDescription": "Impossibile rimuovere l'autenticazione dell'intestazione per la risorsa.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Autenticazione Intestazione Abilitata",
"resourceHeaderAuthProtectionDisabled": "Autenticazione Intestazione Disabilitata",
"headerAuthRemove": "Rimuovi Autenticazione Intestazione",
"headerAuthAdd": "Aggiungi Autenticazione Intestazione",
"resourceErrorHeaderAuthSetup": "Impossibile impostare l'autenticazione dell'intestazione",
"resourceErrorHeaderAuthSetupDescription": "Impossibile impostare l'autenticazione dell'intestazione per la risorsa.",
"resourceHeaderAuthSetup": "Autenticazione intestazione impostata con successo",
"resourceHeaderAuthSetupDescription": "L'autenticazione dell'intestazione è stata impostata correttamente.",
"resourceHeaderAuthSetupTitle": "Imposta Autenticazione Intestazione",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Imposta le credenziali di autenticazione di base (nome utente e password) per proteggere questa risorsa con Autenticazione intestazione HTTP. Accedi usando il formato https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Imposta Autenticazione Intestazione",
"actionSetResourceHeaderAuth": "Imposta Autenticazione Intestazione",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"unlicensed": "Senza Licenza",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"manageClients": "Gestisci Clienti",
"manageClientsDescription": "I client sono dispositivi che possono connettersi ai tuoi siti",
"licenseTableValidUntil": "Valido Fino A",
"saasLicenseKeysSettingsTitle": "Licenze Enterprise",
"saasLicenseKeysSettingsDescription": "Genera e gestisci le chiavi di licenza Enterprise per le istanze di Pangolin self-hosted",
"sidebarEnterpriseLicenses": "Licenze",
"generateLicenseKey": "Genera Chiave Di Licenza",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Inserisci un indirizzo email valido",
"useCaseTypeRequired": "Si prega di selezionare un tipo di caso di utilizzo",
"firstNameRequired": "Il nome è obbligatorio",
"lastNameRequired": "Il cognome è obbligatorio",
"primaryUseRequired": "Descrivi il tuo uso primario",
"jobTitleRequiredBusiness": "Il titolo di lavoro è richiesto per l'uso aziendale",
"industryRequiredBusiness": "L'industria è richiesta per l'uso commerciale",
"stateProvinceRegionRequired": "Stato/Provincia/Regione è richiesta",
"postalZipCodeRequired": "Codice postale/CAP obbligatorio",
"companyNameRequiredBusiness": "Il nome dell'azienda è richiesto per l'uso aziendale",
"countryOfResidenceRequiredBusiness": "Paese di residenza è richiesto per uso professionale",
"countryRequiredPersonal": "Il paese è richiesto per uso personale",
"agreeToTermsRequired": "Devi accettare i termini",
"complianceConfirmationRequired": "È necessario confermare la conformità alla licenza commerciale Fossorial"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Uso Personale",
"description": "Per uso individuale, non commerciale, come l'apprendimento, progetti personali o sperimentazione."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Uso Aziendale",
"description": "Da utilizzare all'interno di organizzazioni, aziende o attività commerciali o generatrici di entrate."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "Email & Tipo Di Licenza",
"description": "Inserisci la tua email e scegli il tipo di licenza"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Informazioni Personali",
"description": "Raccontaci di te"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Informazioni Di Contatto",
"description": "I tuoi dati di contatto"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Termini E Genera",
"description": "Controlla e accetta i termini per generare la tua licenza"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limitsincluding use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Trasparenza Di Utilizzo",
"description": "Seleziona il livello di licenza che rispecchia accuratamente il tuo utilizzo previsto. La Licenza Personale consente l'uso gratuito del Software per le attività commerciali individuali, non commerciali o su piccola scala con entrate lorde annue inferiori a $100.000 USD. Qualsiasi uso oltre questi limiticompreso l'uso all'interno di un'azienda, organizzazione, o altro ambiente generatore di entrate — richiede una licenza Enterprise valida e il pagamento della tassa di licenza applicabile. Tutti gli utenti, siano essi personali o aziendali, devono rispettare i termini di licenza commerciale Fossorial."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Informazioni Periodo Di Prova",
"description": "Questa chiave di licenza abilita le funzionalità Enterprise per un periodo di valutazione di 7 giorni. L'accesso continuo alle funzionalità a pagamento oltre il periodo di valutazione richiede l'attivazione con una licenza personale o Enterprise valida. Per la licenza Enterprise contatta sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "Stai usando Pangolin per uso personale o di affari?",
"firstName": "Nome",
"lastName": "Cognome",
"jobTitle": "Titolo Del Lavoro",
"primaryUseQuestion": "Per che cosa hai in primo luogo intenzione di usare Pangolin?",
"industryQuestion": "Qual è la sua industria?",
"prospectiveUsersQuestion": "Quanti potenziali utenti si aspettano di avere?",
"prospectiveSitesQuestion": "Quanti siti potenziali (gallerie) ci si aspetta di avere?",
"companyName": "Nome della società",
"countryOfResidence": "Paese di residenza",
"stateProvinceRegion": "Stato / Provincia / Regione",
"postalZipCode": "Codice Postale / Zip",
"companyWebsite": "Sito web dell'azienda",
"companyPhoneNumber": "Numero di telefono dell'azienda",
"country": "Paese",
"phoneNumberOptional": "Numero di telefono (facoltativo)",
"complianceConfirmation": "Confermo che le informazioni che ho fornito sono accurate e che sono in conformità con la Fossorial Commercial License. La segnalazione di informazioni inesatte o l'uso errato del prodotto è una violazione della licenza e può portare alla revoca della chiave."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Chiudi",
"previous": "Precedente",
"next": "Successivo",
"generateLicenseKey": "Genera Chiave Di Licenza"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Chiave di licenza generata con successo",
"description": "La chiave di licenza è stata generata ed è pronta per l'uso."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Impossibile generare la chiave di licenza",
"description": "Si è verificato un errore nella generazione della chiave di licenza."
}
}
},
"priority": "Priorità",
"priorityDescription": "I percorsi prioritari più alti sono valutati prima. Priorità = 100 significa ordinamento automatico (decidi di sistema). Usa un altro numero per applicare la priorità manuale.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"instanceName": "Nome Istanza",
"pathMatchModalTitle": "Configura Corrispondenza Percorso",
"pathMatchModalDescription": "Impostare come le richieste in arrivo devono essere abbinate in base al loro percorso.",
"pathMatchType": "Tipo di Corrispondenza",
"pathMatchPrefix": "Prefisso",
"pathMatchExact": "Esatto",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"pathMatchValue": "Valore Percorso",
"clear": "Pulisci",
"saveChanges": "Salva Modifiche",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathMatchPrefixHelp": "Esempio: /api corrisponde /api, /api/users etc.",
"pathMatchExactHelp": "Esempio: /api corrisponde solo /api",
"pathMatchRegexHelp": "Esempio: ^/api/.* corrisponde /api/anything",
"pathRewriteModalTitle": "Configura La Riscrittura Percorso",
"pathRewriteModalDescription": "Trasforma il percorso corrispondente prima di inoltrarlo al bersaglio.",
"pathRewriteType": "Tipo Di Riscrittura",
"pathRewritePrefixOption": "Prefisso - Sostituisci prefisso",
"pathRewriteExactOption": "Esatto - Sostituisci l'intero percorso",
"pathRewriteRegexOption": "Regex - Sostituzione modello",
"pathRewriteStripPrefixOption": "Prefisso striscia - Rimuovi prefisso",
"pathRewriteValue": "Riscrittura Valore",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewriteDefaultPlaceholder": "/nuovo-percorso",
"pathRewritePrefixHelp": "Sostituisci il prefisso abbinato con questo valore",
"pathRewriteExactHelp": "Sostituisci l'intero percorso con questo valore quando il percorso corrisponde esattamente",
"pathRewriteRegexHelp": "Usa gruppi di acquisizione come $1, $2 per la sostituzione",
"pathRewriteStripPrefixHelp": "Lasciare vuoto per strisciare il prefisso o fornire un nuovo prefisso",
"pathRewritePrefix": "Prefisso",
"pathRewriteExact": "Esatto",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Striscia",
"pathRewriteStripLabel": "striscia",
"sidebarEnableEnterpriseLicense": "Abilita Licenza Enterprise",
"cannotbeUndone": "Questo non può essere annullato.",
"toConfirm": "per confermare",
"deleteClientQuestion": "Sei sicuro di voler rimuovere il client dal sito e dall'organizzazione?",
"clientMessageRemove": "Una volta rimosso, il client non sarà più in grado di connettersi al sito."
}

View File

@@ -47,9 +47,8 @@
"edit": "편집",
"siteConfirmDelete": "사이트 삭제 확인",
"siteDelete": "사이트 삭제",
"siteMessageRemove": "제되면 사이트에 더 이상 접근할 수 없습니다. 사이트와 관련된 모든 리소스와 대상도 제됩니다.",
"siteMessageConfirm": "확인을 위해 아래에 사이트 이름을 입력해 주세요.",
"siteQuestionRemove": "조직에서 사이트 {selectedSite}를 제거하시겠습니까?",
"siteMessageRemove": "제되면 사이트에 더 이상 액세스할 수 없습니다. 사이트와 연결된 모든 대상도 제됩니다.",
"siteQuestionRemove": "조직에서 사이트를 제거하시겠습니까?",
"siteManageSites": "사이트 관리",
"siteDescription": "안전한 터널을 통해 네트워크에 연결할 수 있도록 허용",
"siteCreate": "사이트 생성",
@@ -96,7 +95,7 @@
"siteWgDescription": "모든 WireGuard 클라이언트를 사용하여 터널을 설정하세요. 수동 NAT 설정이 필요합니다.",
"siteWgDescriptionSaas": "모든 WireGuard 클라이언트를 사용하여 터널을 설정하세요. 수동 NAT 설정이 필요합니다. 자체 호스팅 노드에서만 작동합니다.",
"siteLocalDescription": "로컬 리소스만 사용 가능합니다. 터널링이 없습니다.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "로컬 리소스 전용. 터널링 금지. 원격 노드에서만 사용 가능합니다.",
"siteSeeAll": "모든 사이트 보기",
"siteTunnelDescription": "사이트에 연결하는 방법을 결정하세요",
"siteNewtCredentials": "Newt 자격 증명",
@@ -154,8 +153,7 @@
"protected": "보호됨",
"notProtected": "보호되지 않음",
"resourceMessageRemove": "제거되면 리소스에 더 이상 접근할 수 없습니다. 리소스와 연결된 모든 대상도 제거됩니다.",
"resourceMessageConfirm": "확인을 위해 아래에 리소스의 이름을 입력하세요.",
"resourceQuestionRemove": "조직에서 리소스 {selectedResource}를 제거하시겠습니까?",
"resourceQuestionRemove": "조직에서 리소스를 제거하시겠습니까?",
"resourceHTTP": "HTTPS 리소스",
"resourceHTTPDescription": "서브도메인 또는 기본 도메인을 사용하여 HTTPS를 통해 앱에 대한 요청을 프록시합니다.",
"resourceRaw": "원시 TCP/UDP 리소스",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "조직 삭제 확인",
"orgMessageRemove": "이 작업은 되돌릴 수 없으며 모든 관련 데이터를 삭제합니다.",
"orgMessageConfirm": "확인을 위해 아래에 조직 이름을 입력하십시오.",
"orgQuestionRemove": "조직 {selectedOrg}을(를) 제거하시겠습니까?",
"orgQuestionRemove": "조직을 삭제하시겠습니까?",
"orgUpdated": "조직이 업데이트되었습니다.",
"orgUpdatedDescription": "조직이 업데이트되었습니다.",
"orgErrorUpdate": "조직 업데이트에 실패했습니다.",
@@ -287,9 +285,8 @@
"apiKeysAdd": "API 키 생성",
"apiKeysErrorDelete": "API 키 삭제 오류",
"apiKeysErrorDeleteMessage": "API 키 삭제 오류",
"apiKeysQuestionRemove": "조직에서 API 키 {selectedApiKey}를 제거하시겠습니까?",
"apiKeysQuestionRemove": "조직에서 API 키를 제거하시겠습니까?",
"apiKeysMessageRemove": "삭제되면 API 키를 더 이상 사용할 수 없습니다.",
"apiKeysMessageConfirm": "확인을 위해 아래에 API 키의 이름을 입력해 주세요.",
"apiKeysDeleteConfirm": "API 키 삭제 확인",
"apiKeysDelete": "API 키 삭제",
"apiKeysManage": "API 키 관리",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "사용자 삭제 확인",
"userDeleteServer": "서버에서 사용자 삭제",
"userMessageRemove": "사용자가 모든 조직에서 제거되며 서버에서 완전히 삭제됩니다.",
"userMessageConfirm": "확인을 위해 아래에 사용자 이름을 입력하십시오.",
"userQuestionRemove": "정말로 {selectedUser}를 서버에서 영구적으로 삭제하시겠습니까?",
"userQuestionRemove": "서버에서 사용자를 영구적으로 삭제하시겠습니까?",
"licenseKey": "라이센스 키",
"valid": "유효",
"numberOfSites": "사이트 수",
@@ -339,7 +335,7 @@
"fossorialLicense": "Fossorial 상업 라이선스 및 구독 약관 보기",
"licenseMessageRemove": "이 작업은 라이센스 키와 그에 의해 부여된 모든 관련 권한을 제거합니다.",
"licenseMessageConfirm": "확인을 위해 아래에 라이센스 키를 입력하세요.",
"licenseQuestionRemove": "라이스 키 {selectedKey}를 삭제하시겠습니까?",
"licenseQuestionRemove": "라이스 키를 삭제하시겠습니까?",
"licenseKeyDelete": "라이센스 키 삭제",
"licenseKeyDeleteConfirm": "라이센스 키 삭제 확인",
"licenseTitle": "라이선스 상태 관리",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "초대를 제거하는 동안 오류가 발생했습니다.",
"inviteRemoved": "초대가 제거되었습니다.",
"inviteRemovedDescription": "{email}에 대한 초대가 삭제되었습니다.",
"inviteQuestionRemove": "초대 {email}를 제거하시겠습니까?",
"inviteQuestionRemove": "초대를 제거하시겠습니까?",
"inviteMessageRemove": "한 번 제거되면 이 초대는 더 이상 유효하지 않습니다. 나중에 사용자를 다시 초대할 수 있습니다.",
"inviteMessageConfirm": "확인을 위해 아래 초대의 이메일 주소를 입력해 주세요.",
"inviteQuestionRegenerate": "{email}에 대한 초대장을 다시 생성하시겠습니까? 이전 초대장은 취소됩니다.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "사용자를 제거하는 동안 오류가 발생했습니다.",
"userOrgRemoved": "사용자가 제거되었습니다.",
"userOrgRemovedDescription": "사용자 {email}가 조직에서 제거되었습니다.",
"userQuestionOrgRemove": "{email}을 조직에서 제거하시겠습니까?",
"userQuestionOrgRemove": "조직에서 이 사용자를 제거하시겠습니까?",
"userMessageOrgRemove": "이 사용자가 제거되면 더 이상 조직에 접근할 수 없습니다. 나중에 다시 초대할 수 있지만, 초대를 다시 수락해야 합니다.",
"userMessageOrgConfirm": "확인을 위해 아래에 사용자 이름을 입력하세요.",
"userRemoveOrgConfirm": "사용자 제거 확인",
"userRemoveOrg": "조직에서 사용자 제거",
"users": "사용자",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "서버 관리자 - 판골린",
"licenseTierProfessional": "전문 라이센스",
"licenseTierEnterprise": "기업 라이선스",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "개인 라이선스",
"licensed": "라이센스",
"yes": "예",
"no": "아니요",
@@ -742,7 +737,7 @@
"idpManageDescription": "시스템에서 ID 제공자를 보고 관리합니다",
"idpDeletedDescription": "신원 공급자가 성공적으로 삭제되었습니다",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "정말로 아이덴티티 공급자 {name}를 영구적으로 삭제하시겠습니까?",
"idpQuestionRemove": "아이덴티티 공급자를 영구적으로 삭제하시겠습니까?",
"idpMessageRemove": "이 작업은 아이덴티티 공급자와 모든 관련 구성을 제거합니다. 이 공급자를 통해 인증하는 사용자는 더 이상 로그인할 수 없습니다.",
"idpMessageConfirm": "확인을 위해 아래에 아이덴티티 제공자의 이름을 입력하세요.",
"idpConfirmDelete": "신원 제공자 삭제 확인",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "모든 사용자",
"sidebarIdentityProviders": "신원 공급자",
"sidebarLicense": "라이선스",
"sidebarClients": "Clients",
"sidebarClients": "클라이언트",
"sidebarDomains": "도메인",
"enableDockerSocket": "Docker 청사진 활성화",
"enableDockerSocketDescription": "블루프린트 레이블을 위한 Docker 소켓 레이블 수집을 활성화합니다. 소켓 경로는 Newt에 제공되어야 합니다.",
@@ -1211,9 +1206,8 @@
"domainCreate": "도메인 생성",
"domainCreatedDescription": "도메인이 성공적으로 생성되었습니다",
"domainDeletedDescription": "도메인이 성공적으로 삭제되었습니다",
"domainQuestionRemove": "도메인 {domain}을(를) 계정에서 제거하시겠습니까?",
"domainQuestionRemove": "계정에서 도메인을 제거하시겠습니까?",
"domainMessageRemove": "제거되면 도메인이 더 이상 계정과 연관되지 않습니다.",
"domainMessageConfirm": "확인하려면 아래에 도메인명을 입력하세요.",
"domainConfirmDelete": "도메인 삭제 확인",
"domainDelete": "도메인 삭제",
"domain": "도메인",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "ID 공급자로부터 리디렉션 URL을 받지 못했습니다.",
"autoLoginErrorGeneratingUrl": "인증 URL 생성 실패.",
"remoteExitNodeManageRemoteExitNodes": "원격 노드",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "네트워크 연결성을 확장하고 클라우드 의존도를 줄이기 위해 하나 이상의 원격 노드를 자체 호스트하십시오.",
"remoteExitNodes": "노드",
"searchRemoteExitNodes": "노드 검색...",
"remoteExitNodeAdd": "노드 추가",
"remoteExitNodeErrorDelete": "노드 삭제 오류",
"remoteExitNodeQuestionRemove": "조직에서 노드 {selectedNode}를 제거하시겠습니까?",
"remoteExitNodeQuestionRemove": "조직에서 노드를 제거하시겠습니까?",
"remoteExitNodeMessageRemove": "한 번 제거되면 더 이상 노드에 접근할 수 없습니다.",
"remoteExitNodeMessageConfirm": "확인을 위해 아래에 노드 이름을 입력해 주세요.",
"remoteExitNodeConfirmDelete": "노드 삭제 확인",
"remoteExitNodeDelete": "노드 삭제",
"sidebarRemoteExitNodes": "원격 노드",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "헤더 인증이 성공적으로 제거되었습니다.",
"resourceErrorHeaderAuthRemove": "헤더 인증 제거 실패",
"resourceErrorHeaderAuthRemoveDescription": "리소스의 헤더 인증을 제거할 수 없습니다.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "헤더 인증 활성화됨",
"resourceHeaderAuthProtectionDisabled": "헤더 인증 비활성화됨",
"headerAuthRemove": "헤더 인증 삭제",
"headerAuthAdd": "헤더 인증 추가",
"resourceErrorHeaderAuthSetup": "헤더 인증 설정 실패",
"resourceErrorHeaderAuthSetupDescription": "리소스의 헤더 인증을 설정할 수 없습니다.",
"resourceHeaderAuthSetup": "헤더 인증이 성공적으로 설정되었습니다.",
"resourceHeaderAuthSetupDescription": "헤더 인증이 성공적으로 설정되었습니다.",
"resourceHeaderAuthSetupTitle": "헤더 인증 설정",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "이 리소스를 HTTP 헤더 인증으로 보호하기 위해 기본 인증 자격 증명(사용자이름 및 비밀번호)을 설정합니다. 다음과 같은 형식으로 액세스하세요 https://사용자이름:비밀번호@resource.example.com",
"resourceHeaderAuthSubmit": "헤더 인증 설정",
"actionSetResourceHeaderAuth": "헤더 인증 설정",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"enterpriseEdition": "엔터프라이즈 에디션",
"unlicensed": "라이선스 없음",
"beta": "베타",
"manageClients": "클라이언트 관리",
"manageClientsDescription": "클라이언트는 당신의 사이트에 연결할 수 있는 디바이스입니다.",
"licenseTableValidUntil": "유효 기한",
"saasLicenseKeysSettingsTitle": "엔터프라이즈 라이선스",
"saasLicenseKeysSettingsDescription": "자체 호스팅된 Pangolin 인스턴스를 위한 엔터프라이즈 라이선스 키를 생성하고 관리합니다.",
"sidebarEnterpriseLicenses": "라이선스",
"generateLicenseKey": "라이선스 키 생성",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "유효한 이메일 주소를 입력하세요",
"useCaseTypeRequired": "사용 사례 유형을 선택하세요",
"firstNameRequired": "이름은 필수입니다.",
"lastNameRequired": "성은 필수입니다.",
"primaryUseRequired": "주요 용도를 설명하세요",
"jobTitleRequiredBusiness": "사업용 직책은 필수입니다.",
"industryRequiredBusiness": "사업용 산업은 필수입니다.",
"stateProvinceRegionRequired": "주/도/지역이 필수입니다.",
"postalZipCodeRequired": "우편번호/ZIP 코드가 필수입니다.",
"companyNameRequiredBusiness": "사업용 회사 이름은 필수입니다.",
"countryOfResidenceRequiredBusiness": "사업용 거주 국가는 필수입니다.",
"countryRequiredPersonal": "개인용 국가가 필수입니다.",
"agreeToTermsRequired": "약관에 동의해야 합니다.",
"complianceConfirmationRequired": "Fossorial 상용 라이선스를 준수함을 확인해야 합니다."
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "개인 용도",
"description": "학습, 개인 프로젝트 또는 실험과 같은 개인, 비상업적 용도로 사용합니다."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "사업 용도",
"description": "조직, 회사 또는 수익 창출 활동 내에서 사용됩니다."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "이메일 및 라이선스 유형",
"description": "이메일을 입력하고 라이선스 유형을 선택하세요"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "개인 정보",
"description": "자기소개를 해주세요"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "연락처 정보",
"description": "당신의 연락처 정보"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "약관 및 생성",
"description": "라이선스를 생성하기 위해 약관을 검토하고 수락하세요"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "사용 공개",
"description": "당신의 의도된 사용에 정확히 맞는 라이선스 등급을 선택하세요. 개인 라이선스는 연간 총 수익 100,000 USD 이하의 개인, 비상업적 또는 소규모 상업 활동을 위한 소프트웨어의 무료 사용을 허용합니다. 이러한 제한을 넘는 모든 사용 — 비즈니스, 조직 또는 기타 수익 창출 환경 내에서의 사용 — 은 유효한 엔터프라이즈 라이선스 및 해당 라이선스 수수료의 지불이 필요합니다. 개인 또는 기업 사용자는 모두 Fossorial 상용 라이선스 조건을 준수해야 합니다."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "시험 기간 정보",
"description": "이 라이선스 키는 엔터프라이즈 기능을 평가판 기간 동안 7일 동안 활성화합니다. 평가 기간 이후 유료 기능에 대한 계속된 액세스는 유효한 개인 또는 엔터프라이즈 라이선스 하에서 활성화가 필요합니다. 엔터프라이즈 라이선스에 대한 정보는 sales@pangolin.net에 문의하세요."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "개인 또는 사업용으로 Pangolin을 사용하시나요?",
"firstName": "이름",
"lastName": "",
"jobTitle": "직책",
"primaryUseQuestion": "Pangolin을 주로 무엇에 사용하려고 계획하시나요?",
"industryQuestion": "당신의 산업은 무엇입니까?",
"prospectiveUsersQuestion": "예상하는 잠재적 사용자는 몇 명입니까?",
"prospectiveSitesQuestion": "예상하는 잠재적 사이트(터널)는 몇 개입니까?",
"companyName": "회사 이름",
"countryOfResidence": "거주 국가",
"stateProvinceRegion": "주 / 도 / 지역",
"postalZipCode": "우편번호 / ZIP 코드",
"companyWebsite": "회사 웹사이트",
"companyPhoneNumber": "회사 전화번호",
"country": "국가",
"phoneNumberOptional": "전화번호 (선택 항목)",
"complianceConfirmation": "제가 제공한 정보가 정확하고 Fossorial 상용 라이선스를 준수하는지 확인합니다. 부정확한 정보를 보고하거나 제품 사용을 실수로 식별하는 것은 라이선스 위반이며, 키가 취소될 수 있습니다."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "닫기",
"previous": "이전",
"next": "다음",
"generateLicenseKey": "라이선스 키 생성"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "라이선스 키가 성공적으로 생성되었습니다",
"description": "당신의 라이선스 키가 생성되었으며 사용 준비가 되었습니다."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "라이선스 키 생성에 실패했습니다",
"description": "라이선스 키를 생성하는 동안 오류가 발생했습니다."
}
}
},
"priority": "우선순위",
"priorityDescription": "우선 순위가 높은 경로가 먼저 평가됩니다. 우선 순위 = 100은 자동 정렬(시스템 결정)이 의미합니다. 수동 우선 순위를 적용하려면 다른 숫자를 사용하세요.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"instanceName": "인스턴스 이름",
"pathMatchModalTitle": "경로 매칭 설정",
"pathMatchModalDescription": "경로별로 들어오는 요청을 어떻게 매칭할지 설정합니다.",
"pathMatchType": "일치 유형",
"pathMatchPrefix": "접두사",
"pathMatchExact": "정확하게",
"pathMatchRegex": "정규 표현식",
"pathMatchValue": "경로 값",
"clear": "지우기",
"saveChanges": "변경 사항 저장",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathMatchDefaultPlaceholder": "/경로",
"pathMatchPrefixHelp": "예: /api 는 /api, /api/users 등을 매칭합니다.",
"pathMatchExactHelp": "예: /api 는 /api 만 매칭합니다.",
"pathMatchRegexHelp": ": ^/api/.* /api/anything를 매칭합니다",
"pathRewriteModalTitle": "경로 재작성 설정",
"pathRewriteModalDescription": "대상으로 전달하기 전에 매칭된 경로를 변환합니다.",
"pathRewriteType": "재작성 유형",
"pathRewritePrefixOption": "접두사 - 접두사 대체",
"pathRewriteExactOption": "정확 - 전체 경로 대체",
"pathRewriteRegexOption": "정규 표현식 - 패턴 대체",
"pathRewriteStripPrefixOption": "접두사 제거 - 접두사 삭제",
"pathRewriteValue": "재작성 값",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteDefaultPlaceholder": "/새-경로",
"pathRewritePrefixHelp": "일치하는 접두사를 이 값으로 대체합니다",
"pathRewriteExactHelp": "경로가 정확히 일치할 때 전체 경로를 이 값으로 대체합니다",
"pathRewriteRegexHelp": "$1, $2와 같은 캡처 그룹을 사용하여 대체",
"pathRewriteStripPrefixHelp": "접두사를 제거하거나 새 접두사를 제공하려면 비워 둡니다",
"pathRewritePrefix": "접두사",
"pathRewriteExact": "정확하게",
"pathRewriteRegex": "정규 표현식",
"pathRewriteStrip": "제거",
"pathRewriteStripLabel": "제거",
"sidebarEnableEnterpriseLicense": "엔터프라이즈 라이선스 활성화",
"cannotbeUndone": "이 작업은 되돌릴 수 없습니다.",
"toConfirm": "확인하려면",
"deleteClientQuestion": "고객을 사이트와 조직에서 제거하시겠습니까?",
"clientMessageRemove": "제거되면 클라이언트는 사이트에 더 이상 연결할 수 없습니다."
}

View File

@@ -47,9 +47,8 @@
"edit": "Rediger",
"siteConfirmDelete": "Bekreft Sletting av Område",
"siteDelete": "Slett Område",
"siteMessageRemove": "Når området slettes, vil det ikke lenger være tilgjengelig. Alle ressurser og mål assosiert med området vil også bli slettet.",
"siteMessageConfirm": "For å bekrefte, vennligst skriv inn navnet i området nedenfor.",
"siteQuestionRemove": "Er du sikker på at du vil slette området {selectedSite} fra organisasjonen?",
"siteMessageRemove": "Når nettstedet er fjernet, vil det ikke lenger være tilgjengelig. Alle målene for nettstedet vil også bli fjernet.",
"siteQuestionRemove": "Er du sikker på at du vil fjerne nettstedet fra organisasjonen?",
"siteManageSites": "Administrer Områder",
"siteDescription": "Tillat tilkobling til nettverket ditt gjennom sikre tunneler",
"siteCreate": "Opprett område",
@@ -96,7 +95,7 @@
"siteWgDescription": "Bruk hvilken som helst WireGuard-klient for å etablere en tunnel. Manuell NAT-oppsett kreves.",
"siteWgDescriptionSaas": "Bruk hvilken som helst WireGuard-klient for å etablere en tunnel. Manuell NAT-oppsett er nødvendig. FUNGERER KUN PÅ SELVHOSTEDE NODER",
"siteLocalDescription": "Kun lokale ressurser. Ingen tunnelering.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Lokale ressurser. Ingen tunnelering. Bare tilgjengelig på eksterne noder.",
"siteSeeAll": "Se alle områder",
"siteTunnelDescription": "Bestem hvordan du vil koble deg til ditt område",
"siteNewtCredentials": "Newt påloggingsinformasjon",
@@ -154,8 +153,7 @@
"protected": "Beskyttet",
"notProtected": "Ikke beskyttet",
"resourceMessageRemove": "Når den er fjernet, vil ressursen ikke lenger være tilgjengelig. Alle mål knyttet til ressursen vil også bli fjernet.",
"resourceMessageConfirm": "For å bekrefte, skriv inn navnet på ressursen nedenfor.",
"resourceQuestionRemove": "Er du sikker på at du vil fjerne ressursen {selectedResource} fra organisasjonen?",
"resourceQuestionRemove": "Er du sikker på at du vil fjerne ressursen fra organisasjonen?",
"resourceHTTP": "HTTPS-ressurs",
"resourceHTTPDescription": "Proxy-forespørsler til appen din over HTTPS ved bruk av et underdomene eller grunndomene.",
"resourceRaw": "Rå TCP/UDP-ressurs",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Bekreft Sletting av Organisasjon",
"orgMessageRemove": "Denne handlingen er irreversibel og vil slette alle tilknyttede data.",
"orgMessageConfirm": "For å bekrefte, vennligst skriv inn navnet på organisasjonen nedenfor.",
"orgQuestionRemove": "Er du sikker på at du vil fjerne organisasjonen {selectedOrg}?",
"orgQuestionRemove": "Er du sikker på at du vil fjerne organisasjonen?",
"orgUpdated": "Organisasjon oppdatert",
"orgUpdatedDescription": "Organisasjonen har blitt oppdatert.",
"orgErrorUpdate": "Kunne ikke oppdatere organisasjonen",
@@ -287,9 +285,8 @@
"apiKeysAdd": "Generer API-nøkkel",
"apiKeysErrorDelete": "Feil under sletting av API-nøkkel",
"apiKeysErrorDeleteMessage": "Feil ved sletting av API-nøkkel",
"apiKeysQuestionRemove": "Er du sikker på at du vil fjerne API-nøkkelen {selectedApiKey} fra organisasjonen?",
"apiKeysQuestionRemove": "Er du sikker på at du vil fjerne API-nøkkelen fra organisasjonen?",
"apiKeysMessageRemove": "Når den er fjernet, vil API-nøkkelen ikke lenger kunne brukes.",
"apiKeysMessageConfirm": "For å bekrefte, vennligst skriv inn navnet på API-nøkkelen nedenfor.",
"apiKeysDeleteConfirm": "Bekreft sletting av API-nøkkel",
"apiKeysDelete": "Slett API-nøkkel",
"apiKeysManage": "Administrer API-nøkler",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Bekreft sletting av bruker",
"userDeleteServer": "Slett bruker fra server",
"userMessageRemove": "Brukeren vil bli fjernet fra alle organisasjoner og vil bli fullstendig fjernet fra serveren.",
"userMessageConfirm": "For å bekrefte, vennligst skriv inn navnet på brukeren nedenfor.",
"userQuestionRemove": "Er du sikker på at du vil slette {selectedUser} permanent fra serveren?",
"userQuestionRemove": "Er du sikker på at du vil slette brukeren permanent fra serveren?",
"licenseKey": "Lisensnøkkel",
"valid": "Gyldig",
"numberOfSites": "Antall områder",
@@ -339,7 +335,7 @@
"fossorialLicense": "Vis Fossorial kommersiell lisens og abonnementsvilkår",
"licenseMessageRemove": "Dette vil fjerne lisensnøkkelen og alle tilknyttede tillatelser gitt av den.",
"licenseMessageConfirm": "For å bekrefte, vennligst skriv inn lisensnøkkelen nedenfor.",
"licenseQuestionRemove": "Er du sikker på at du vil slette lisensnøkkelen {selectedKey} ?",
"licenseQuestionRemove": "Er du sikker på at du vil slette lisensnøkkelen?",
"licenseKeyDelete": "Slett Lisensnøkkel",
"licenseKeyDeleteConfirm": "Bekreft sletting av lisensnøkkel",
"licenseTitle": "Behandle lisensstatus",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Det oppstod en feil under fjerning av invitasjonen.",
"inviteRemoved": "Invitasjon fjernet",
"inviteRemovedDescription": "Invitasjonen for {email} er fjernet.",
"inviteQuestionRemove": "Er du sikker på at du vil fjerne invitasjonen {email}?",
"inviteQuestionRemove": "Er du sikker på at du vil fjerne invitasjonen?",
"inviteMessageRemove": "Når fjernet, vil denne invitasjonen ikke lenger være gyldig. Du kan alltid invitere brukeren på nytt senere.",
"inviteMessageConfirm": "For å bekrefte, vennligst tast inn invitasjonens e-postadresse nedenfor.",
"inviteQuestionRegenerate": "Er du sikker på at du vil generere invitasjonen på nytt for {email}? Dette vil ugyldiggjøre den forrige invitasjonen.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Det oppstod en feil under fjerning av brukeren.",
"userOrgRemoved": "Bruker fjernet",
"userOrgRemovedDescription": "Brukeren {email} er fjernet fra organisasjonen.",
"userQuestionOrgRemove": "Er du sikker på at du vil fjerne {email} fra organisasjonen?",
"userQuestionOrgRemove": "Er du sikker på at du vil fjerne denne brukeren fra organisasjonen?",
"userMessageOrgRemove": "Når denne brukeren er fjernet, vil de ikke lenger ha tilgang til organisasjonen. Du kan alltid invitere dem på nytt senere, men de vil måtte godta invitasjonen på nytt.",
"userMessageOrgConfirm": "For å bekrefte, vennligst skriv inn navnet på brukeren nedenfor.",
"userRemoveOrgConfirm": "Bekreft fjerning av bruker",
"userRemoveOrg": "Fjern bruker fra organisasjon",
"users": "Brukere",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Server Admin - Pangolin",
"licenseTierProfessional": "Profesjonell lisens",
"licenseTierEnterprise": "Bedriftslisens",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Personlig lisens",
"licensed": "Lisensiert",
"yes": "Ja",
"no": "Nei",
@@ -742,7 +737,7 @@
"idpManageDescription": "Vis og administrer identitetsleverandører i systemet",
"idpDeletedDescription": "Identitetsleverandør slettet vellykket",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Er du sikker på at du vil slette identitetsleverandøren {name} permanent?",
"idpQuestionRemove": "Er du sikker på at du vil slette identitetsleverandøren permanent?",
"idpMessageRemove": "Dette vil fjerne identitetsleverandøren og alle tilhørende konfigurasjoner. Brukere som autentiserer seg via denne leverandøren vil ikke lenger kunne logge inn.",
"idpMessageConfirm": "For å bekrefte, vennligst skriv inn navnet på identitetsleverandøren nedenfor.",
"idpConfirmDelete": "Bekreft Sletting av Identitetsleverandør",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Alle brukere",
"sidebarIdentityProviders": "Identitetsleverandører",
"sidebarLicense": "Lisens",
"sidebarClients": "Clients",
"sidebarClients": "Klienter",
"sidebarDomains": "Domener",
"enableDockerSocket": "Aktiver Docker blåkopi",
"enableDockerSocketDescription": "Aktiver skraping av Docker Socket for blueprint Etiketter. Socket bane må brukes for nye.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Opprett domene",
"domainCreatedDescription": "Domene ble opprettet",
"domainDeletedDescription": "Domene ble slettet",
"domainQuestionRemove": "Er du sikker på at du vil fjerne domenet {domain} fra kontoen din?",
"domainQuestionRemove": "Er du sikker på at du vil fjerne domenet fra kontoen din?",
"domainMessageRemove": "Når domenet er fjernet, vil det ikke lenger være knyttet til kontoen din.",
"domainMessageConfirm": "For å bekrefte, vennligst skriv inn domenenavnet nedenfor.",
"domainConfirmDelete": "Bekreft sletting av domene",
"domainDelete": "Slett domene",
"domain": "Domene",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Ingen omdirigerings-URL mottatt fra identitetsleverandøren.",
"autoLoginErrorGeneratingUrl": "Kunne ikke generere autentiserings-URL.",
"remoteExitNodeManageRemoteExitNodes": "Eksterne Noder",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Selvbetjent én eller flere eksterne noder for å utvide nettverkstilkoblingen din og redusere avhengighet på skyen",
"remoteExitNodes": "Noder",
"searchRemoteExitNodes": "Søk noder...",
"remoteExitNodeAdd": "Legg til Node",
"remoteExitNodeErrorDelete": "Feil ved sletting av node",
"remoteExitNodeQuestionRemove": "Er du sikker på at du vil fjerne noden {selectedNode} fra organisasjonen?",
"remoteExitNodeQuestionRemove": "Er du sikker på at du vil fjerne noden fra organisasjonen?",
"remoteExitNodeMessageRemove": "Når noden er fjernet, vil ikke lenger være tilgjengelig.",
"remoteExitNodeMessageConfirm": "For å bekrefte, skriv inn navnet på noden nedenfor.",
"remoteExitNodeConfirmDelete": "Bekreft sletting av Node",
"remoteExitNodeDelete": "Slett Node",
"sidebarRemoteExitNodes": "Eksterne Noder",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Topplinje autentisering fjernet.",
"resourceErrorHeaderAuthRemove": "Kunne ikke fjerne topptekst autentisering",
"resourceErrorHeaderAuthRemoveDescription": "Kunne ikke fjerne topptekst autentisering for ressursen.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Topplinje autentisering aktivert",
"resourceHeaderAuthProtectionDisabled": "Topplinje autentisering deaktivert",
"headerAuthRemove": "Fjern topptekst Auth",
"headerAuthAdd": "Legg til topptekst godkjenning",
"resourceErrorHeaderAuthSetup": "Kunne ikke sette topptekst autentisering",
"resourceErrorHeaderAuthSetupDescription": "Kunne ikke sette topplinje autentisering for ressursen.",
"resourceHeaderAuthSetup": "Header godkjenningssett var vellykket",
"resourceHeaderAuthSetupDescription": "Topplinje autentisering har blitt lagret.",
"resourceHeaderAuthSetupTitle": "Angi topptekst godkjenning",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Angi grunnleggende auth legitimasjon (brukernavn og passord) for å beskytte denne ressursen med HTTP Header autentisering. Tilgang til det ved hjelp av formatet https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Angi topptekst godkjenning",
"actionSetResourceHeaderAuth": "Angi topptekst godkjenning",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"unlicensed": "Ikke lisensiert",
"beta": "beta",
"manageClients": "Administrer klienter",
"manageClientsDescription": "Klienter er enheter som kan koble seg til nettstedet ditt",
"licenseTableValidUntil": "Gyldig til",
"saasLicenseKeysSettingsTitle": "Bedriftstillatelse Lisenser",
"saasLicenseKeysSettingsDescription": "Generer og administrer Enterprise lisensnøkler for selvbetjente Pangolin forekomster",
"sidebarEnterpriseLicenses": "Lisenser",
"generateLicenseKey": "Generer lisensnøkkel",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Vennligst skriv inn en gyldig e-postadresse",
"useCaseTypeRequired": "Vennligst velg en bruk sakstype",
"firstNameRequired": "Fornavn er påkrevd",
"lastNameRequired": "Etternavn er påkrevd",
"primaryUseRequired": "Beskriv din primære bruk",
"jobTitleRequiredBusiness": "Jobbtittel er påkrevd for forretningsbruk",
"industryRequiredBusiness": "Næringslivet må til forretningsbruk",
"stateProvinceRegionRequired": "Stat/provins/region kreves",
"postalZipCodeRequired": "Postnummer er påkrevd",
"companyNameRequiredBusiness": "Firmanavn er påkrevd for bedriftens bruk",
"countryOfResidenceRequiredBusiness": "Land som skal oppholde seg er nødvendig for bruk til forretningsdrift",
"countryRequiredPersonal": "Land er påkrevd for personlig bruk",
"agreeToTermsRequired": "Du må godta vilkårene",
"complianceConfirmationRequired": "Du må bekrefte at du overholder Fossorial Kommersiell lisens"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Personlig bruk",
"description": "For enkeltpersoner, ikke-kommersiell bruk som læring, personlige prosjekter eller eksperimentering."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Forretningsmessig bruk",
"description": "Til bruk innenfor organisasjoner eller virksomheter eller forretningsmessige inntekter eller aktiviteter."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "E-post & lisenstype",
"description": "Skriv inn e-postadressen din og velg lisenstypen din"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Personlig Informasjon",
"description": "Fortell oss om deg selv"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Kontakt Informasjon",
"description": "Dine kontaktopplysninger"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Vilkår og generere",
"description": "Se gjennom og godta vilkårene for å generere lisensen"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Bruk utlevering",
"description": "Velg lisensnivået som reflekterer nøyaktig din tiltenkte bruk. Personlige lisenser tillater fri bruk av programvare for enkelte, ikke-kommersielle eller småskala kommersielle aktiviteter, med en årlig brutto inntekt på under 100 000 amerikanske dollar. All bruk ut over disse grensene inkludert bruk innenfor en virksomhet, organisasjon eller andre inntekter miljø - krever en gyldig Enterprise lisens og betaling av gjeldende lisensavgift. Alle brukere, enten personlig eller Enterprise, må overholde de kommersielle tillatelsene på Fossorial."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Informasjon om prøveperiode",
"description": "Denne lisensnøkkelen tillater funksjoner i Enterprise for en 7-dagers evalueringsperiode. Fortsatt tilgang til betalt funksjoner utenfor evalueringsperioden krever aktivering under en gyldig Personlig eller Enterprise License. For Enterprise licensing, kontakt sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "Bruker du Pangolin for personlig eller forretningsbruk?",
"firstName": "Fornavn",
"lastName": "Etternavn (Automatic Translation)",
"jobTitle": "Jobb tittel",
"primaryUseQuestion": "Hva planlegger du først og fremst å bruke Pangolin for?",
"industryQuestion": "Hva er din industri?",
"prospectiveUsersQuestion": "Hvor mange prospektive brukere forventer du å ha?",
"prospectiveSitesQuestion": "Hvor mange prospektive nettsteder (tunnels) forventer du å ha?",
"companyName": "Navn på bedrift",
"countryOfResidence": "Oppholdsland",
"stateProvinceRegion": "Fylke / Region",
"postalZipCode": "Postnummer / postnummer",
"companyWebsite": "Firmaets hjemmeside",
"companyPhoneNumber": "Firmaets telefonnummer",
"country": "Land",
"phoneNumberOptional": "Telefonnummer (valgfritt)",
"complianceConfirmation": "Jeg bekrefter at opplysningene jeg oppga er korrekte og at jeg er i samsvar med Fossorial Kommersiell Lisens. Rapportering av unøyaktig informasjon eller feilidentifisering av bruk av produktet bryter lisensen, og kan føre til at nøkkelen din blir opphevet."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Lukk",
"previous": "Forrige",
"next": "Neste",
"generateLicenseKey": "Generer lisensnøkkel"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Lisensnøkkel ble generert",
"description": "Din lisensnøkkel har blitt generert og er klar til bruk."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Kan ikke generere lisensnøkkel",
"description": "Det oppstod en feil ved generering av lisensnøkkelen."
}
}
},
"priority": "Prioritet",
"priorityDescription": "Høyere prioriterte ruter evalueres først. Prioritet = 100 betyr automatisk bestilling (systembeslutninger). Bruk et annet nummer til å håndheve manuell prioritet.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"instanceName": "Forekomst navn",
"pathMatchModalTitle": "Konfigurere matching av sti",
"pathMatchModalDescription": "Sett opp hvordan innkommende forespørsler skal matches basert på deres bane.",
"pathMatchType": "Trefftype",
"pathMatchPrefix": "Prefiks",
"pathMatchExact": "Nøyaktig",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"pathMatchValue": "Verdi for sti",
"clear": "Tøm",
"saveChanges": "Lagre endringer",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathMatchDefaultPlaceholder": "/sti",
"pathMatchPrefixHelp": "Eksempel: /api matcher /api, /api/users, etc.",
"pathMatchExactHelp": "Eksempel: /api passer bare /api",
"pathMatchRegexHelp": "Eksempel: ^/api/.* matcher /api/alt",
"pathRewriteModalTitle": "Konfigurer ferdigskriving av sti",
"pathRewriteModalDescription": "Overfør banen som passet før den videresendes til målet.",
"pathRewriteType": "Omskriv type",
"pathRewritePrefixOption": "Prefiks - erstatt prefiks",
"pathRewriteExactOption": "Eksakt - Erstatt hele banen",
"pathRewriteRegexOption": "Regex - Ekkobilde",
"pathRewriteStripPrefixOption": "Ta bort prefiks - fjern prefiks",
"pathRewriteValue": "Omskriv verdi",
"pathRewriteRegexPlaceholder": "/ny/$1",
"pathRewriteDefaultPlaceholder": "/ny sti",
"pathRewritePrefixHelp": "Erstatt det samsvarende prefikset med denne verdien",
"pathRewriteExactHelp": "Erstatt hele banen med denne verdien når stien samsvarer nøyaktig",
"pathRewriteRegexHelp": "Bruk opptaksgrupper som $1, $2 for erstatning",
"pathRewriteStripPrefixHelp": "La stå tomt for å ta opp prefiks eller legge til nytt prefiks",
"pathRewritePrefix": "Prefiks",
"pathRewriteExact": "Nøyaktig",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Stripe",
"pathRewriteStripLabel": "stripe",
"sidebarEnableEnterpriseLicense": "Aktiver Enterprise lisens",
"cannotbeUndone": "Dette kan ikke angres.",
"toConfirm": "å bekrefte",
"deleteClientQuestion": "Er du sikker på at du vil fjerne klienten fra nettstedet og organisasjonen?",
"clientMessageRemove": "Når klienten er fjernet, kan den ikke lenger koble seg til nettstedet."
}

View File

@@ -47,9 +47,8 @@
"edit": "Bewerken",
"siteConfirmDelete": "Verwijderen van site bevestigen",
"siteDelete": "Site verwijderen",
"siteMessageRemove": "Eenmaal verwijderd, zal de site niet langer toegankelijk zijn. Alle bronnen en doelen die aan de site zijn gekoppeld, zullen ook worden verwijderd.",
"siteMessageConfirm": "Typ ter bevestiging de naam van de site hieronder.",
"siteQuestionRemove": "Weet u zeker dat u de site {selectedSite} uit de organisatie wilt verwijderen?",
"siteMessageRemove": "Eenmaal verwijderd zal de site niet langer toegankelijk zijn. Alle aan de site gekoppelde doelen zullen ook worden verwijderd.",
"siteQuestionRemove": "Weet u zeker dat u de site wilt verwijderen uit de organisatie?",
"siteManageSites": "Sites beheren",
"siteDescription": "Verbindt met uw netwerk via beveiligde tunnels",
"siteCreate": "Site maken",
@@ -96,7 +95,7 @@
"siteWgDescription": "Gebruik een WireGuard client om een tunnel te bouwen. Handmatige NAT installatie vereist.",
"siteWgDescriptionSaas": "Gebruik elke WireGuard-client om een tunnel op te zetten. Handmatige NAT-instelling vereist. WERKT ALLEEN OP SELF HOSTED NODES",
"siteLocalDescription": "Alleen lokale bronnen. Geen tunneling.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Enkel lokale bronnen. Geen tunneling. Alleen beschikbaar op externe knooppunten.",
"siteSeeAll": "Alle sites bekijken",
"siteTunnelDescription": "Bepaal hoe u verbinding wilt maken met uw site",
"siteNewtCredentials": "Nieuwste aanmeldgegevens",
@@ -154,8 +153,7 @@
"protected": "Beschermd",
"notProtected": "Niet beveiligd",
"resourceMessageRemove": "Eenmaal verwijderd, zal het bestand niet langer toegankelijk zijn. Alle doelen die gekoppeld zijn aan het hulpbron, zullen ook verwijderd worden.",
"resourceMessageConfirm": "Om te bevestigen, typ de naam van de bron hieronder.",
"resourceQuestionRemove": "Weet u zeker dat u de resource {selectedResource} uit de organisatie wilt verwijderen?",
"resourceQuestionRemove": "Weet u zeker dat u het document van de organisatie wilt verwijderen?",
"resourceHTTP": "HTTPS bron",
"resourceHTTPDescription": "Proxy verzoeken aan uw app via HTTPS via een subdomein of basisdomein.",
"resourceRaw": "TCP/UDP bron",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Bevestig Verwijderen Organisatie",
"orgMessageRemove": "Deze actie is onomkeerbaar en zal alle bijbehorende gegevens verwijderen.",
"orgMessageConfirm": "Om te bevestigen, typ de naam van de onderstaande organisatie in.",
"orgQuestionRemove": "Weet u zeker dat u de organisatie {selectedOrg} wilt verwijderen?",
"orgQuestionRemove": "Weet u zeker dat u de organisatie wilt verwijderen?",
"orgUpdated": "Organisatie bijgewerkt",
"orgUpdatedDescription": "De organisatie is bijgewerkt.",
"orgErrorUpdate": "Bijwerken organisatie mislukt",
@@ -287,9 +285,8 @@
"apiKeysAdd": "API-sleutel genereren",
"apiKeysErrorDelete": "Fout bij verwijderen API-sleutel",
"apiKeysErrorDeleteMessage": "Fout bij verwijderen API-sleutel",
"apiKeysQuestionRemove": "Weet u zeker dat u de API-sleutel {selectedApiKey} van de organisatie wilt verwijderen?",
"apiKeysQuestionRemove": "Weet u zeker dat u de API-sleutel van de organisatie wilt verwijderen?",
"apiKeysMessageRemove": "Eenmaal verwijderd, kan de API-sleutel niet meer worden gebruikt.",
"apiKeysMessageConfirm": "Om dit te bevestigen, typt u de naam van de API-sleutel hieronder.",
"apiKeysDeleteConfirm": "Bevestig Verwijderen API-sleutel",
"apiKeysDelete": "API-sleutel verwijderen",
"apiKeysManage": "API-sleutels beheren",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Bevestig verwijderen gebruiker",
"userDeleteServer": "Gebruiker verwijderen van de server",
"userMessageRemove": "De gebruiker zal uit alle organisaties verwijderd worden en volledig verwijderd worden van de server.",
"userMessageConfirm": "Typ de naam van de gebruiker hieronder om te bevestigen.",
"userQuestionRemove": "Weet je zeker dat je {selectedUser} permanent van de server wilt verwijderen?",
"userQuestionRemove": "Weet u zeker dat u de gebruiker permanent van de server wilt verwijderen?",
"licenseKey": "Licentie sleutel",
"valid": "Geldig",
"numberOfSites": "Aantal sites",
@@ -339,7 +335,7 @@
"fossorialLicense": "Fossorial Commerciële licentie- en abonnementsvoorwaarden bekijken",
"licenseMessageRemove": "Dit zal de licentiesleutel en alle bijbehorende machtigingen verwijderen die hierdoor zijn verleend.",
"licenseMessageConfirm": "Typ de licentiesleutel hieronder om te bevestigen.",
"licenseQuestionRemove": "Weet u zeker dat u de licentiesleutel {selectedKey} wilt verwijderen?",
"licenseQuestionRemove": "Weet u zeker dat u de licentiesleutel wilt verwijderen?",
"licenseKeyDelete": "Licentiesleutel verwijderen",
"licenseKeyDeleteConfirm": "Bevestig verwijderen licentiesleutel",
"licenseTitle": "Licentiestatus beheren",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Er is een fout opgetreden tijdens het verwijderen van de uitnodiging.",
"inviteRemoved": "Uitnodiging verwijderd",
"inviteRemovedDescription": "De uitnodiging voor {email} is verwijderd.",
"inviteQuestionRemove": "Weet u zeker dat u de uitnodiging {email} wilt verwijderen?",
"inviteQuestionRemove": "Weet je zeker dat je de uitnodiging wilt verwijderen?",
"inviteMessageRemove": "Eenmaal verwijderd, zal deze uitnodiging niet meer geldig zijn. U kunt de gebruiker later altijd opnieuw uitnodigen.",
"inviteMessageConfirm": "Om dit te bevestigen, typ dan het e-mailadres van onderstaande uitnodiging.",
"inviteQuestionRegenerate": "Weet u zeker dat u de uitnodiging voor {email}opnieuw wilt genereren? Dit zal de vorige uitnodiging intrekken.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Er is een fout opgetreden tijdens het verwijderen van de gebruiker.",
"userOrgRemoved": "Gebruiker verwijderd",
"userOrgRemovedDescription": "De gebruiker {email} is verwijderd uit de organisatie.",
"userQuestionOrgRemove": "Weet u zeker dat u {email} wilt verwijderen uit de organisatie?",
"userQuestionOrgRemove": "Weet u zeker dat u deze gebruiker wilt verwijderen uit de organisatie?",
"userMessageOrgRemove": "Eenmaal verwijderd, heeft deze gebruiker geen toegang meer tot de organisatie. Je kunt ze later altijd opnieuw uitnodigen, maar ze zullen de uitnodiging opnieuw moeten accepteren.",
"userMessageOrgConfirm": "Typ om te bevestigen de naam van de gebruiker hieronder.",
"userRemoveOrgConfirm": "Bevestig verwijderen gebruiker",
"userRemoveOrg": "Gebruiker uit organisatie verwijderen",
"users": "Gebruikers",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Serverbeheer - Pangolin",
"licenseTierProfessional": "Professionele licentie",
"licenseTierEnterprise": "Enterprise Licentie",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Persoonlijke licentie",
"licensed": "Gelicentieerd",
"yes": "ja",
"no": "Neen",
@@ -742,7 +737,7 @@
"idpManageDescription": "Identiteitsaanbieders in het systeem bekijken en beheren",
"idpDeletedDescription": "Identity provider succesvol verwijderd",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Weet u zeker dat u de identiteitsprovider {name} permanent wilt verwijderen?",
"idpQuestionRemove": "Weet u zeker dat u de identiteitsprovider permanent wilt verwijderen?",
"idpMessageRemove": "Dit zal de identiteitsprovider en alle bijbehorende configuraties verwijderen. Gebruikers die via deze provider authenticeren, kunnen niet langer inloggen.",
"idpMessageConfirm": "Om dit te bevestigen, typt u de naam van onderstaande identiteitsprovider.",
"idpConfirmDelete": "Bevestig verwijderen identiteit provider",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Alle gebruikers",
"sidebarIdentityProviders": "Identiteit aanbieders",
"sidebarLicense": "Licentie",
"sidebarClients": "Clients",
"sidebarClients": "Clienten",
"sidebarDomains": "Domeinen",
"enableDockerSocket": "Schakel Docker Blauwdruk in",
"enableDockerSocketDescription": "Schakel Docker Socket label in voor blauwdruk labels. Pad naar Nieuw.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Domein aanmaken",
"domainCreatedDescription": "Domein succesvol aangemaakt",
"domainDeletedDescription": "Domein succesvol verwijderd",
"domainQuestionRemove": "Weet je zeker dat je het domein {domain} uit je account wilt verwijderen?",
"domainQuestionRemove": "Weet u zeker dat u het domein uit uw account wilt verwijderen?",
"domainMessageRemove": "Na verwijdering zal het domein niet langer aan je account gekoppeld zijn.",
"domainMessageConfirm": "Om te bevestigen, typ hieronder de domeinnaam.",
"domainConfirmDelete": "Bevestig verwijdering van domein",
"domainDelete": "Domein verwijderen",
"domain": "Domein",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Geen redirect URL ontvangen van de identity provider.",
"autoLoginErrorGeneratingUrl": "Genereren van authenticatie-URL mislukt.",
"remoteExitNodeManageRemoteExitNodes": "Externe knooppunten",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Zorgt voor één of meer externe knooppunten om de netwerkverbinding uit te breiden en het vertrouwen in de cloud te verminderen",
"remoteExitNodes": "Nodes",
"searchRemoteExitNodes": "Knooppunten zoeken...",
"remoteExitNodeAdd": "Voeg node toe",
"remoteExitNodeErrorDelete": "Fout bij verwijderen node",
"remoteExitNodeQuestionRemove": "Weet u zeker dat u het node {selectedNode} uit de organisatie wilt verwijderen?",
"remoteExitNodeQuestionRemove": "Weet u zeker dat u het knooppunt uit de organisatie wilt verwijderen?",
"remoteExitNodeMessageRemove": "Eenmaal verwijderd, zal het knooppunt niet langer toegankelijk zijn.",
"remoteExitNodeMessageConfirm": "Om te bevestigen, typ de naam van het knooppunt hieronder.",
"remoteExitNodeConfirmDelete": "Bevestig verwijderen node",
"remoteExitNodeDelete": "Knoop verwijderen",
"sidebarRemoteExitNodes": "Externe knooppunten",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Koptekst authenticatie succesvol verwijderd.",
"resourceErrorHeaderAuthRemove": "Kan Header-authenticatie niet verwijderen",
"resourceErrorHeaderAuthRemoveDescription": "Kon header authenticatie niet verwijderen voor de bron.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Koptekst authenticatie ingeschakeld",
"resourceHeaderAuthProtectionDisabled": "Header authenticatie uitgeschakeld",
"headerAuthRemove": "Auth koptekst verwijderen",
"headerAuthAdd": "Kopsauth toevoegen",
"resourceErrorHeaderAuthSetup": "Kan Header Authenticatie niet instellen",
"resourceErrorHeaderAuthSetupDescription": "Kan geen header authenticatie instellen voor de bron.",
"resourceHeaderAuthSetup": "Header Authenticatie set succesvol",
"resourceHeaderAuthSetupDescription": "Header authenticatie is met succes ingesteld.",
"resourceHeaderAuthSetupTitle": "Header Authenticatie instellen",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Stel de basis authenticatiegegevens (gebruikersnaam en wachtwoord) in om deze bron te beschermen met HTTP Header Authenticatie. Gebruik het formaat https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Header Authenticatie instellen",
"actionSetResourceHeaderAuth": "Header Authenticatie instellen",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"unlicensed": "Ongelicentieerd",
"beta": "Bèta",
"manageClients": "Beheer Cliënten",
"manageClientsDescription": "Klanten zijn apparaten die verbinding kunnen maken met uw sites",
"licenseTableValidUntil": "Geldig tot",
"saasLicenseKeysSettingsTitle": "Enterprise Licenties",
"saasLicenseKeysSettingsDescription": "Genereer en beheer de Enterprise licentiesleutels voor zelfgehoste Pangolin instanties",
"sidebarEnterpriseLicenses": "Licenties",
"generateLicenseKey": "Licentiesleutel genereren",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Voer een geldig e-mailadres in",
"useCaseTypeRequired": "Selecteer een type voor gebruik",
"firstNameRequired": "Voornaam is vereist",
"lastNameRequired": "Achternaam is vereist",
"primaryUseRequired": "Beschrijf uw primaire gebruik",
"jobTitleRequiredBusiness": "Functitel is vereist voor business gebruik",
"industryRequiredBusiness": "Industrie is vereist voor zakelijk gebruik",
"stateProvinceRegionRequired": "Provincie/Regio is vereist",
"postalZipCodeRequired": "Postcode is vereist",
"companyNameRequiredBusiness": "Bedrijfsnaam is vereist voor zakelijk gebruik",
"countryOfResidenceRequiredBusiness": "Land van verblijf is vereist voor zakelijk gebruik",
"countryRequiredPersonal": "Land is vereist voor persoonlijk gebruik",
"agreeToTermsRequired": "U moet akkoord gaan met de voorwaarden",
"complianceConfirmationRequired": "U moet de naleving van de Fossorial Commerciële licentie bevestigen"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Persoonlijk gebruik",
"description": "Voor individueel, niet-commercieel gebruik, zoals leren, persoonlijke projecten of experimenten."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Zakelijk gebruik",
"description": "Voor gebruik binnen organisaties, bedrijven, commerciële of inkomstengenererende activiteiten."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "E-mail & Licentie Type",
"description": "Voer uw e-mailadres in en kies uw licentietype"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Persoonlijke informatie",
"description": "Vertel ons over jezelf"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Contact informatie",
"description": "Uw contactgegevens"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Voorwaarden & Genereer",
"description": "Controleer en accepteer termen om uw licentie te genereren"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Disclosure voor gebruik",
"description": "Selecteer de licentielift die precies overeenkomt met het beoogde gebruik. De Persoonlijke Licentie staat het gratis gebruik van de software toe voor individuele, niet-commerciële of kleinschalige commerciële activiteiten met jaarlijkse bruto inkomsten van minder dan $100.000 USD. Elk gebruik buiten deze grenzen - inclusief gebruik binnen een bedrijf, organisatie, of andere inkomstengenererende omgeving - vereist een geldige Enterprise-licentie en betaling van de toepasselijke licentiekosten. Alle gebruikers, Persoonlijk of Enterprise, moeten voldoen aan de Fossorial Commerciële Licentievoorwaarden."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Informatie proefperiode",
"description": "Deze licentiesleutel maakt bedrijfsfuncties mogelijk voor een evaluatieperiode van 7 dagen. Continue toegang tot betaalde functies na de evaluatieperiode vereist activering onder een geldige Persoonlijke of Enterprise License. Voor een Enterprise licentie, neem contact op met sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "Gebruikt u Pangolin voor persoonlijk of zakelijk gebruik?",
"firstName": "Voornaam is vereist.",
"lastName": "Achternaam is vereist",
"jobTitle": "Job titel",
"primaryUseQuestion": "Waar bent u primair van plan Pangolin voor te gebruiken?",
"industryQuestion": "Wat is uw industrie?",
"prospectiveUsersQuestion": "Hoeveel potentiële gebruikers verwacht je te hebben?",
"prospectiveSitesQuestion": "Hoeveel potentiële sites (tunnels) verwacht je te hebben?",
"companyName": "Naam bedrijf",
"countryOfResidence": "Land van verblijf",
"stateProvinceRegion": "Staat / Provincie / Regio",
"postalZipCode": "Postcode / postcode",
"companyWebsite": "Bedrijfs website",
"companyPhoneNumber": "Bedrijfs telefoonnummer",
"country": "Land",
"phoneNumberOptional": "Telefoonnummer (optioneel)",
"complianceConfirmation": "Ik bevestig dat de door mij verstrekte informatie juist is en dat ik mij aan de Fossorial Commerciële licentie houd. Het melden van onjuiste informatie of het verkeerd identificeren van het gebruik van het product is een schending van de licentie en kan leiden tot het intrekken van uw sleutel."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Sluiten",
"previous": "named@@0",
"next": "Volgende",
"generateLicenseKey": "Licentiesleutel genereren"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Licentiesleutel succesvol gegenereerd",
"description": "Uw licentiesleutel is gegenereerd en is klaar voor gebruik."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Kan licentiesleutel niet genereren",
"description": "Fout opgetreden tijdens het genereren van de licentiesleutel."
}
}
},
"priority": "Prioriteit",
"priorityDescription": "routes met hogere prioriteit worden eerst geëvalueerd. Prioriteit = 100 betekent automatisch bestellen (systeem beslist de). Gebruik een ander nummer om handmatige prioriteit af te dwingen.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"instanceName": "Naam instantie",
"pathMatchModalTitle": "Configureren van overeenkomende pad",
"pathMatchModalDescription": "Stel in hoe inkomende verzoeken moeten worden gekoppeld aan hun pad.",
"pathMatchType": "Wedstrijd Type",
"pathMatchPrefix": "Voorvoegsel",
"pathMatchExact": "Exacte",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"pathMatchValue": "Pad waarde",
"clear": "Verwijderen",
"saveChanges": "Wijzigingen opslaan",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathMatchDefaultPlaceholder": "/Pad",
"pathMatchPrefixHelp": "Voorbeeld: /api komt overeen met /api, /api/gebruikers, etc.",
"pathMatchExactHelp": "Voorbeeld: /api matcht alleen /api",
"pathMatchRegexHelp": "Voorbeeld: ^/api/.* komt overeen met /api/any",
"pathRewriteModalTitle": "Configureer pad herschrijven",
"pathRewriteModalDescription": "Verander het overeenstemmende pad voor het doorsturen naar het doel.",
"pathRewriteType": "Herschrijf Type",
"pathRewritePrefixOption": "Voorvoegsel - prefix vervangen",
"pathRewriteExactOption": "Exacte - Vervang het gehele pad",
"pathRewriteRegexOption": "Regex - Patroon vervanging",
"pathRewriteStripPrefixOption": "Voorvoegsel verwijderen - Verwijder voorvoegsel",
"pathRewriteValue": "Herschrijf Waarde",
"pathRewriteRegexPlaceholder": "/nieuw/$1",
"pathRewriteDefaultPlaceholder": "/nieuwe-pad",
"pathRewritePrefixHelp": "Vervang de overeenkomstige prefix door deze waarde",
"pathRewriteExactHelp": "Vervang het hele pad met deze waarde wanneer het pad precies overeenkomt",
"pathRewriteRegexHelp": "Gebruik capturegroepen zoals $1, $2 voor vervanging",
"pathRewriteStripPrefixHelp": "Laat leeg om de voorvoegsel te strippen of geef een nieuw voorvoegsel",
"pathRewritePrefix": "Voorvoegsel",
"pathRewriteExact": "Exacte",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Verwijder",
"pathRewriteStripLabel": "strip",
"sidebarEnableEnterpriseLicense": "Activeer Enterprise Licentie",
"cannotbeUndone": "Dit kan niet ongedaan worden gemaakt.",
"toConfirm": "om te bevestigen",
"deleteClientQuestion": "Weet u zeker dat u de client van de site en organisatie wilt verwijderen?",
"clientMessageRemove": "Eenmaal verwijderd, kan de client geen verbinding meer maken met de site."
}

View File

@@ -47,9 +47,8 @@
"edit": "Edytuj",
"siteConfirmDelete": "Potwierdź usunięcie witryny",
"siteDelete": "Usuń witrynę",
"siteMessageRemove": "Po usunięciu, witryna nie będzie już dostępna. Wszystkie zasoby i cele związane z witryną zostaną również usunięte.",
"siteMessageConfirm": "Aby potwierdzić, wpisz nazwę witryny poniżej.",
"siteQuestionRemove": "Czy na pewno chcesz usunąć stronę {selectedSite} z organizacji?",
"siteMessageRemove": "Po usunięciu witryna nie będzie już dostępna. Wszystkie cele związane z witryną zostaną również usunięte.",
"siteQuestionRemove": "Czy na pewno chcesz usunąć witrynę z organizacji?",
"siteManageSites": "Zarządzaj stronami",
"siteDescription": "Zezwalaj na połączenie z siecią przez bezpieczne tunele",
"siteCreate": "Utwórz witrynę",
@@ -96,7 +95,7 @@
"siteWgDescription": "Użyj dowolnego klienta WireGuard do utworzenia tunelu. Wymagana jest ręczna konfiguracja NAT.",
"siteWgDescriptionSaas": "Użyj dowolnego klienta WireGuard do utworzenia tunelu. Wymagana ręczna konfiguracja NAT. DZIAŁA TYLKO NA SAMODZIELNIE HOSTOWANYCH WĘZŁACH",
"siteLocalDescription": "Tylko lokalne zasoby. Brak tunelu.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Tylko zasoby lokalne. Brak tunelu. Dostępne tylko w węzłach zdalnych.",
"siteSeeAll": "Zobacz wszystkie witryny",
"siteTunnelDescription": "Określ jak chcesz połączyć się ze swoją stroną",
"siteNewtCredentials": "Aktualne dane logowania",
@@ -154,8 +153,7 @@
"protected": "Chronione",
"notProtected": "Niechronione",
"resourceMessageRemove": "Po usunięciu, zasób nie będzie już dostępny. Wszystkie cele związane z zasobem zostaną również usunięte.",
"resourceMessageConfirm": "Aby potwierdzić, wpisz nazwę zasobu poniżej.",
"resourceQuestionRemove": "Czy na pewno chcesz usunąć zasób {selectedResource} z organizacji?",
"resourceQuestionRemove": "Czy na pewno chcesz usunąć zasób z organizacji?",
"resourceHTTP": "Zasób HTTPS",
"resourceHTTPDescription": "Proxy do Twojej aplikacji przez HTTPS, przy użyciu poddomeny lub domeny bazowej.",
"resourceRaw": "Surowy zasób TCP/UDP",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Potwierdź usunięcie organizacji",
"orgMessageRemove": "Ta akcja jest nieodwracalna i usunie wszystkie powiązane dane.",
"orgMessageConfirm": "Aby potwierdzić, wpisz nazwę organizacji poniżej.",
"orgQuestionRemove": "Czy na pewno chcesz usunąć organizację {selectedOrg}?",
"orgQuestionRemove": "Czy na pewno chcesz usunąć organizację?",
"orgUpdated": "Organizacja zaktualizowana",
"orgUpdatedDescription": "Organizacja została zaktualizowana.",
"orgErrorUpdate": "Nie udało się zaktualizować organizacji",
@@ -287,9 +285,8 @@
"apiKeysAdd": "Generuj klucz API",
"apiKeysErrorDelete": "Błąd podczas usuwania klucza API",
"apiKeysErrorDeleteMessage": "Błąd podczas usuwania klucza API",
"apiKeysQuestionRemove": "Czy na pewno chcesz usunąć klucz API {selectedApiKey} z organizacji?",
"apiKeysQuestionRemove": "Czy na pewno chcesz usunąć klucz API z organizacji?",
"apiKeysMessageRemove": "Po usunięciu klucz API nie będzie już mógł być używany.",
"apiKeysMessageConfirm": "Aby potwierdzić, wpisz nazwę klucza API poniżej.",
"apiKeysDeleteConfirm": "Potwierdź usunięcie klucza API",
"apiKeysDelete": "Usuń klucz API",
"apiKeysManage": "Zarządzaj kluczami API",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Potwierdź usunięcie użytkownika",
"userDeleteServer": "Usuń użytkownika z serwera",
"userMessageRemove": "Użytkownik zostanie usunięty ze wszystkich organizacji i całkowicie usunięty z serwera.",
"userMessageConfirm": "Aby potwierdzić, wpisz nazwę użytkownika poniżej.",
"userQuestionRemove": "Czy na pewno chcesz trwale usunąć {selectedUser} z serwera?",
"userQuestionRemove": "Czy na pewno chcesz trwale usunąć użytkownika z serwera?",
"licenseKey": "Klucz licencyjny",
"valid": "Prawidłowy",
"numberOfSites": "Liczba witryn",
@@ -339,7 +335,7 @@
"fossorialLicense": "Zobacz Fossorial Commercial License & Subskrypcja",
"licenseMessageRemove": "Spowoduje to usunięcie klucza licencyjnego i wszystkich przypisanych przez niego uprawnień.",
"licenseMessageConfirm": "Aby potwierdzić, wpisz klucz licencyjny poniżej.",
"licenseQuestionRemove": "Czy na pewno chcesz usunąć klucz licencyjny {selectedKey}?",
"licenseQuestionRemove": "Czy na pewno chcesz usunąć klucz licencyjny?",
"licenseKeyDelete": "Usuń klucz licencyjny",
"licenseKeyDeleteConfirm": "Potwierdź usunięcie klucza licencyjnego",
"licenseTitle": "Zarządzaj statusem licencji",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Wystąpił błąd podczas usuwania zaproszenia.",
"inviteRemoved": "Zaproszenie usunięte",
"inviteRemovedDescription": "Zaproszenie dla {email} zostało usunięte.",
"inviteQuestionRemove": "Czy na pewno chcesz usunąć zaproszenie {email}?",
"inviteQuestionRemove": "Czy na pewno chcesz usunąć zaproszenie?",
"inviteMessageRemove": "Po usunięciu to zaproszenie nie będzie już ważne. Zawsze możesz ponownie zaprosić użytkownika później.",
"inviteMessageConfirm": "Aby potwierdzić, wpisz poniżej adres email zaproszenia.",
"inviteQuestionRegenerate": "Czy na pewno chcesz ponownie wygenerować zaproszenie {email}? Spowoduje to unieważnienie poprzedniego zaproszenia.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Wystąpił błąd podczas usuwania użytkownika.",
"userOrgRemoved": "Użytkownik usunięty",
"userOrgRemovedDescription": "Użytkownik {email} został usunięty z organizacji.",
"userQuestionOrgRemove": "Czy na pewno chcesz usunąć {email} z organizacji?",
"userQuestionOrgRemove": "Czy na pewno chcesz usunąć tego użytkownika z organizacji?",
"userMessageOrgRemove": "Po usunięciu ten użytkownik nie będzie miał już dostępu do organizacji. Zawsze możesz ponownie go zaprosić później, ale będzie musiał ponownie zaakceptować zaproszenie.",
"userMessageOrgConfirm": "Aby potwierdzić, wpisz nazwę użytkownika poniżej.",
"userRemoveOrgConfirm": "Potwierdź usunięcie użytkownika",
"userRemoveOrg": "Usuń użytkownika z organizacji",
"users": "Użytkownicy",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Administrator serwera - Pangolin",
"licenseTierProfessional": "Licencja Professional",
"licenseTierEnterprise": "Licencja Enterprise",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Licencja osobista",
"licensed": "Licencjonowany",
"yes": "Tak",
"no": "Nie",
@@ -742,7 +737,7 @@
"idpManageDescription": "Wyświetl i zarządzaj dostawcami tożsamości w systemie",
"idpDeletedDescription": "Dostawca tożsamości został pomyślnie usunięty",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Czy na pewno chcesz trwale usunąć dostawcę tożsamości {name}?",
"idpQuestionRemove": "Czy na pewno chcesz trwale usunąć dostawcę tożsamości?",
"idpMessageRemove": "Spowoduje to usunięcie dostawcy tożsamości i wszystkich powiązanych konfiguracji. Użytkownicy uwierzytelniający się przez tego dostawcę nie będą mogli się już zalogować.",
"idpMessageConfirm": "Aby potwierdzić, wpisz nazwę dostawcy tożsamości poniżej.",
"idpConfirmDelete": "Potwierdź usunięcie dostawcy tożsamości",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Wszyscy użytkownicy",
"sidebarIdentityProviders": "Dostawcy tożsamości",
"sidebarLicense": "Licencja",
"sidebarClients": "Clients",
"sidebarClients": "Klientami",
"sidebarDomains": "Domeny",
"enableDockerSocket": "Włącz schemat dokera",
"enableDockerSocketDescription": "Włącz etykietowanie kieszeni dokującej dla etykiet schematów. Ścieżka do gniazda musi być dostarczona do Newt.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Utwórz domenę",
"domainCreatedDescription": "Domena utworzona pomyślnie",
"domainDeletedDescription": "Domena usunięta pomyślnie",
"domainQuestionRemove": "Czy na pewno chcesz usunąć domenę {domain} ze swojego konta?",
"domainQuestionRemove": "Czy na pewno chcesz usunąć domenę ze swojego konta?",
"domainMessageRemove": "Po usunięciu domena nie będzie już powiązana z twoim kontem.",
"domainMessageConfirm": "Aby potwierdzić, wpisz nazwę domeny poniżej.",
"domainConfirmDelete": "Potwierdź usunięcie domeny",
"domainDelete": "Usuń domenę",
"domain": "Domena",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Nie otrzymano URL przekierowania od dostawcy tożsamości.",
"autoLoginErrorGeneratingUrl": "Nie udało się wygenerować URL uwierzytelniania.",
"remoteExitNodeManageRemoteExitNodes": "Zdalne węzły",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Samodzielny host jeden lub więcej węzłów zdalnych, aby rozszerzyć łączność z siecią i zmniejszyć zależność od chmury",
"remoteExitNodes": "Węzły",
"searchRemoteExitNodes": "Szukaj węzłów...",
"remoteExitNodeAdd": "Dodaj węzeł",
"remoteExitNodeErrorDelete": "Błąd podczas usuwania węzła",
"remoteExitNodeQuestionRemove": "Czy na pewno chcesz usunąć węzeł {selectedNode} z organizacji?",
"remoteExitNodeQuestionRemove": "Czy na pewno chcesz usunąć węzeł z organizacji?",
"remoteExitNodeMessageRemove": "Po usunięciu, węzeł nie będzie już dostępny.",
"remoteExitNodeMessageConfirm": "Aby potwierdzić, wpisz nazwę węzła poniżej.",
"remoteExitNodeConfirmDelete": "Potwierdź usunięcie węzła",
"remoteExitNodeDelete": "Usuń węzeł",
"sidebarRemoteExitNodes": "Zdalne węzły",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Uwierzytelnianie nagłówka zostało pomyślnie usunięte.",
"resourceErrorHeaderAuthRemove": "Nie udało się usunąć uwierzytelniania nagłówka",
"resourceErrorHeaderAuthRemoveDescription": "Nie można usunąć uwierzytelniania nagłówka zasobu.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Uwierzytelnianie nagłówka włączone",
"resourceHeaderAuthProtectionDisabled": "Uwierzytelnianie nagłówka wyłączone",
"headerAuthRemove": "Usuń autoryzację nagłówka",
"headerAuthAdd": "Dodaj Autoryzacja nagłówka",
"resourceErrorHeaderAuthSetup": "Nie udało się ustawić uwierzytelniania nagłówka",
"resourceErrorHeaderAuthSetupDescription": "Nie można ustawić uwierzytelniania nagłówka dla zasobu.",
"resourceHeaderAuthSetup": "Uwierzytelnianie nagłówka ustawione pomyślnie",
"resourceHeaderAuthSetupDescription": "Uwierzytelnianie nagłówka zostało ustawione.",
"resourceHeaderAuthSetupTitle": "Ustaw uwierzytelnianie nagłówka",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Ustaw podstawowe dane uwierzytelniające (nazwa użytkownika i hasło), aby chronić ten zasób za pomocą uwierzytelniania nagłówka HTTP. Uzyskaj dostęp za pomocą formatu https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Ustaw uwierzytelnianie nagłówka",
"actionSetResourceHeaderAuth": "Ustaw uwierzytelnianie nagłówka",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"enterpriseEdition": "Edycja Enterprise",
"unlicensed": "Nielicencjonowane",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"manageClients": "Zarządzaj klientami",
"manageClientsDescription": "Klienci to urządzenia, które mogą łączyć się z Twoimi witrynami",
"licenseTableValidUntil": "Ważny do",
"saasLicenseKeysSettingsTitle": "Licencje przedsiębiorstwa",
"saasLicenseKeysSettingsDescription": "Generuj i zarządzaj kluczami licencyjnymi Enterprise dla samodzielnych instancji Pangolin",
"sidebarEnterpriseLicenses": "Licencje",
"generateLicenseKey": "Generuj klucz licencyjny",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Wprowadź poprawny adres e-mail",
"useCaseTypeRequired": "Proszę wybrać typ litery",
"firstNameRequired": "Imię jest wymagane",
"lastNameRequired": "Nazwisko jest wymagane",
"primaryUseRequired": "Opisz swoje podstawowe użycie",
"jobTitleRequiredBusiness": "Tytuł pracy jest wymagany do użytku służbowego",
"industryRequiredBusiness": "Przemysł jest wymagany do celów biznesowych.",
"stateProvinceRegionRequired": "Wymagany jest stan/województwo/region",
"postalZipCodeRequired": "Kod pocztowy jest wymagany",
"companyNameRequiredBusiness": "Nazwa firmy jest wymagana do użytku służbowego",
"countryOfResidenceRequiredBusiness": "Kraj zamieszkania jest wymagany do celów służbowych",
"countryRequiredPersonal": "Kraj jest wymagany do użytku osobistego",
"agreeToTermsRequired": "Musisz zaakceptować regulamin",
"complianceConfirmationRequired": "Musisz potwierdzić zgodność z Fossorial Commercial License"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Użytkowanie osobiste",
"description": "Dla celów indywidualnych, niekomercyjnych, takich jak nauka, projekty osobiste lub eksperymenty."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Wykorzystanie służbowe",
"description": "Do użytku w ramach organizacji, przedsiębiorstw lub działalności komercyjnej lub generującej dochody."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "Typ adresu e-mail i licencji",
"description": "Wprowadź swój adres e-mail i wybierz rodzaj licencji"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Informacje osobiste",
"description": "Powiedz nam o sobie"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Informacje kontaktowe",
"description": "Twoje dane kontaktowe"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Reguły i generuj",
"description": "Przejrzyj i zaakceptuj warunki generowania licencji"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Ujawnienie użycia",
"description": "Wybierz poziom licencji, który dokładnie odzwierciedla zamierzone użycie. Licencja osobista pozwala na bezpłatne wykorzystanie oprogramowania do działalności komercyjnej, o charakterze indywidualnym, niekomercyjnym lub na małą skalę, o rocznym dochodzie brutto poniżej 100 000 USD. Wszelkie zastosowania wykraczające poza te ograniczenia w tym wykorzystanie w przedsiębiorstwie, organizacja, lub inne środowisko generujące dochód wymaga ważnej licencji przedsiębiorstwa i uiszczenia stosownej opłaty licencyjnej. Wszyscy użytkownicy, niezależnie od tego, czy są prywatni czy przedsiębiorcy, muszą przestrzegać warunków licencji Fossorial Commercial License."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Informacje o okresie próbnym",
"description": "Ten klucz licencyjny umożliwia przedsiębiorstwom funkcje na 7-dniowy okres oceny. Ciągły dostęp do płatnych funkcji po zakończeniu okresu oceny wymaga aktywacji na podstawie ważnej licencji osobistej lub prywatnej. W celu uzyskania licencji przedsiębiorstwa skontaktuj się z sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "Używasz Pangolin do użytku osobistego lub biznesowego?",
"firstName": "Imię",
"lastName": "Nazwisko",
"jobTitle": "Tytuł zadania",
"primaryUseQuestion": "Na co planujesz przede wszystkim stosować lek Pangolin?",
"industryQuestion": "Jaki jest twój przemysł?",
"prospectiveUsersQuestion": "Ilu potencjalnych użytkowników oczekujesz?",
"prospectiveSitesQuestion": "Ile potencjalnych stron (tuneli) oczekujesz?",
"companyName": "Nazwa firmy",
"countryOfResidence": "Kraj zamieszkania",
"stateProvinceRegion": "Województwo / Region",
"postalZipCode": "Kod pocztowy",
"companyWebsite": "Strona internetowa firmy",
"companyPhoneNumber": "Numer telefonu firmy",
"country": "Kraj",
"phoneNumberOptional": "Numer telefonu (opcjonalnie)",
"complianceConfirmation": "Potwierdzam, że podane przeze mnie informacje są dokładne i że jestem zgodny z Fossorial Commercial License. Zgłaszanie nieprawidłowych informacji lub błędne oznaczanie użycia produktu jest naruszeniem licencji i może skutkować cofnięciem klucza."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Zamknij",
"previous": "Poprzedni",
"next": "Następny",
"generateLicenseKey": "Generuj klucz licencyjny"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Klucz licencyjny wygenerowany pomyślnie",
"description": "Twój klucz licencyjny został wygenerowany i jest gotowy do użycia."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Nie udało się wygenerować klucza licencyjnego",
"description": "Wystąpił błąd podczas generowania klucza licencji."
}
}
},
"priority": "Priorytet",
"priorityDescription": "Najpierw oceniane są trasy priorytetowe. Priorytet = 100 oznacza automatyczne zamawianie (decyzje systemowe). Użyj innego numeru, aby wyegzekwować ręczny priorytet.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"instanceName": "Nazwa instancji",
"pathMatchModalTitle": "Skonfiguruj dopasowanie ścieżki",
"pathMatchModalDescription": "Skonfiguruj sposób dopasowania przychodzących żądań na podstawie ich ścieżki.",
"pathMatchType": "Typ dopasowania",
"pathMatchPrefix": "Prefiks",
"pathMatchExact": "Dokładny",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"pathMatchValue": "Wartość ścieżki",
"clear": "Wyczyść",
"saveChanges": "Zapisz zmiany",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathMatchDefaultPlaceholder": "/ścieżka",
"pathMatchPrefixHelp": "Przykład: /api pasuje do /api, /api/users itp.",
"pathMatchExactHelp": "Przykład: /api pasuje tylko /api",
"pathMatchRegexHelp": "Przykład: ^/api/.* pasuje do /api/cokolwiek",
"pathRewriteModalTitle": "Konfiguruj Przepisywanie Ścieżki",
"pathRewriteModalDescription": "Przekształć dopasowaną ścieżkę przed przekierowaniem do celu.",
"pathRewriteType": "Typ przekierowania",
"pathRewritePrefixOption": "Prefiks - Zamień prefiks",
"pathRewriteExactOption": "Dokładny - Zamień całą ścieżkę",
"pathRewriteRegexOption": "Regex - zamiennik wzoru",
"pathRewriteStripPrefixOption": "Prefiks paska - Usuń prefiks",
"pathRewriteValue": "Przepisz wartość",
"pathRewriteRegexPlaceholder": "/nowy/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewritePrefixHelp": "Zastąp dopasowany prefiks tą wartością",
"pathRewriteExactHelp": "Zastąp całą ścieżkę tą wartością, gdy ścieżka dokładnie pasuje do siebie",
"pathRewriteRegexHelp": "Użyj grup przechwytywania takich jak $1, $2 do zamiany",
"pathRewriteStripPrefixHelp": "Pozostaw puste, aby usunąć prefiks lub podać nowy prefiks",
"pathRewritePrefix": "Prefiks",
"pathRewriteExact": "Dokładny",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Pasek",
"pathRewriteStripLabel": "pasek",
"sidebarEnableEnterpriseLicense": "Włącz licencję przedsiębiorstwa",
"cannotbeUndone": "Tej operacji nie można cofnąć.",
"toConfirm": "potwierdzić",
"deleteClientQuestion": "Czy na pewno chcesz usunąć klienta z witryny i organizacji?",
"clientMessageRemove": "Po usunięciu, klient nie będzie już mógł połączyć się z witryną."
}

View File

@@ -47,9 +47,8 @@
"edit": "Alterar",
"siteConfirmDelete": "Confirmar que pretende apagar o site",
"siteDelete": "Excluir site",
"siteMessageRemove": "Uma vez removido, o site não estará mais acessível. Todos os recursos e alvos associados ao site também serão removidos.",
"siteMessageConfirm": "Para confirmar, por favor, digite o nome do site abaixo.",
"siteQuestionRemove": "Você tem certeza que deseja remover o site {selectedSite} da organização?",
"siteMessageRemove": "Uma vez removido, o site não estará mais acessível. Todas as metas associadas ao site também serão removidas.",
"siteQuestionRemove": "Você tem certeza que deseja remover este site da organização?",
"siteManageSites": "Gerir sites",
"siteDescription": "Permitir conectividade à sua rede através de túneis seguros",
"siteCreate": "Criar site",
@@ -96,7 +95,7 @@
"siteWgDescription": "Use qualquer cliente do WireGuard para estabelecer um túnel. Configuração manual NAT é necessária.",
"siteWgDescriptionSaas": "Use qualquer cliente WireGuard para estabelecer um túnel. Configuração manual NAT necessária. SOMENTE FUNCIONA EM NODES AUTO-HOSPEDADOS",
"siteLocalDescription": "Recursos locais apenas. Sem túneis.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Apenas recursos locais. Sem túneis. Apenas disponível em nós remotos.",
"siteSeeAll": "Ver todos os sites",
"siteTunnelDescription": "Determine como você deseja se conectar ao seu site",
"siteNewtCredentials": "Credenciais Novas",
@@ -154,8 +153,7 @@
"protected": "Protegido",
"notProtected": "Não Protegido",
"resourceMessageRemove": "Uma vez removido, o recurso não estará mais acessível. Todos os alvos associados ao recurso também serão removidos.",
"resourceMessageConfirm": "Para confirmar, por favor, digite o nome do recurso abaixo.",
"resourceQuestionRemove": "Tem certeza que deseja remover o recurso {selectedResource} da organização?",
"resourceQuestionRemove": "Você tem certeza que deseja remover o recurso da organização?",
"resourceHTTP": "Recurso HTTPS",
"resourceHTTPDescription": "O proxy solicita ao seu aplicativo via HTTPS usando um subdomínio ou domínio base.",
"resourceRaw": "Recurso TCP/UDP bruto",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Confirmar que pretende apagar a organização",
"orgMessageRemove": "Esta ação é irreversível e apagará todos os dados associados.",
"orgMessageConfirm": "Para confirmar, digite o nome da organização abaixo.",
"orgQuestionRemove": "Tem certeza que deseja remover a organização {selectedOrg}?",
"orgQuestionRemove": "Você tem certeza que deseja remover esta organização?",
"orgUpdated": "Organização atualizada",
"orgUpdatedDescription": "A organização foi atualizada.",
"orgErrorUpdate": "Falha ao atualizar organização",
@@ -287,9 +285,8 @@
"apiKeysAdd": "Gerar Chave API",
"apiKeysErrorDelete": "Erro ao apagar chave API",
"apiKeysErrorDeleteMessage": "Erro ao apagar chave API",
"apiKeysQuestionRemove": "Tem certeza que deseja remover a chave API {selectedApiKey} da organização?",
"apiKeysQuestionRemove": "Tem certeza que deseja remover a chave de API da organização?",
"apiKeysMessageRemove": "Uma vez removida, a chave API não poderá mais ser utilizada.",
"apiKeysMessageConfirm": "Para confirmar, por favor digite o nome da chave API abaixo.",
"apiKeysDeleteConfirm": "Confirmar Exclusão da Chave API",
"apiKeysDelete": "Excluir Chave API",
"apiKeysManage": "Gerir Chaves API",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Confirmar Exclusão do Usuário",
"userDeleteServer": "Excluir utilizador do servidor",
"userMessageRemove": "O utilizador será removido de todas as organizações e será completamente removido do servidor.",
"userMessageConfirm": "Para confirmar, por favor digite o nome do utilizador abaixo.",
"userQuestionRemove": "Tem certeza que deseja apagar o {selectedUser} permanentemente do servidor?",
"userQuestionRemove": "Tem certeza que deseja excluir permanentemente o usuário do servidor?",
"licenseKey": "Chave de Licença",
"valid": "Válido",
"numberOfSites": "Número de sites",
@@ -339,7 +335,7 @@
"fossorialLicense": "Ver Termos e Condições de Assinatura e Licença Fossorial",
"licenseMessageRemove": "Isto irá remover a chave da licença e todas as permissões associadas concedidas por ela.",
"licenseMessageConfirm": "Para confirmar, por favor, digite a chave de licença abaixo.",
"licenseQuestionRemove": "Tem certeza que deseja apagar a chave de licença {selectedKey}?",
"licenseQuestionRemove": "Tem certeza que deseja excluir a chave de licença?",
"licenseKeyDelete": "Excluir Chave de Licença",
"licenseKeyDeleteConfirm": "Confirmar que pretende apagar a chave de licença",
"licenseTitle": "Gerir Status da Licença",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Ocorreu um erro ao remover o convite.",
"inviteRemoved": "Convite removido",
"inviteRemovedDescription": "O convite para {email} foi removido.",
"inviteQuestionRemove": "Tem certeza de que deseja remover o convite {email}?",
"inviteQuestionRemove": "Tem certeza de que deseja remover o convite?",
"inviteMessageRemove": "Uma vez removido, este convite não será mais válido. Você sempre pode convidar o utilizador novamente mais tarde.",
"inviteMessageConfirm": "Para confirmar, digite o endereço de e-mail do convite abaixo.",
"inviteQuestionRegenerate": "Tem certeza que deseja regenerar o convite{email, plural, ='' {}, other { para #}}? Isso irá revogar o convite anterior.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Ocorreu um erro ao remover o utilizador.",
"userOrgRemoved": "Usuário removido",
"userOrgRemovedDescription": "O utilizador {email} foi removido da organização.",
"userQuestionOrgRemove": "Tem certeza que deseja remover {email} da organização?",
"userQuestionOrgRemove": "Você tem certeza que deseja remover este usuário da organização?",
"userMessageOrgRemove": "Uma vez removido, este utilizador não terá mais acesso à organização. Você sempre pode reconvidá-lo depois, mas eles precisarão aceitar o convite novamente.",
"userMessageOrgConfirm": "Para confirmar, digite o nome do utilizador abaixo.",
"userRemoveOrgConfirm": "Confirmar Remoção do Usuário",
"userRemoveOrg": "Remover Usuário da Organização",
"users": "Utilizadores",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Administrador do Servidor - Pangolin",
"licenseTierProfessional": "Licença Profissional",
"licenseTierEnterprise": "Licença Empresarial",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Licença Pessoal",
"licensed": "Licenciado",
"yes": "Sim",
"no": "Não",
@@ -742,7 +737,7 @@
"idpManageDescription": "Visualizar e gerir provedores de identidade no sistema",
"idpDeletedDescription": "Provedor de identidade eliminado com sucesso",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Tem certeza que deseja eliminar permanentemente o provedor de identidade {name}?",
"idpQuestionRemove": "Tem certeza que deseja eliminar permanentemente o provedor de identidade?",
"idpMessageRemove": "Isto irá remover o provedor de identidade e todas as configurações associadas. Os utilizadores que se autenticam através deste provedor não poderão mais fazer login.",
"idpMessageConfirm": "Para confirmar, por favor digite o nome do provedor de identidade abaixo.",
"idpConfirmDelete": "Confirmar Eliminação do Provedor de Identidade",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Todos os utilizadores",
"sidebarIdentityProviders": "Provedores de identidade",
"sidebarLicense": "Tipo:",
"sidebarClients": "Clients",
"sidebarClients": "Clientes",
"sidebarDomains": "Domínios",
"enableDockerSocket": "Habilitar o Diagrama Docker",
"enableDockerSocketDescription": "Ativar a scraping de rótulo Docker para rótulos de diagramas. Caminho de Socket deve ser fornecido para Newt.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Criar Domínio",
"domainCreatedDescription": "Domínio criado com sucesso",
"domainDeletedDescription": "Domínio deletado com sucesso",
"domainQuestionRemove": "Tem certeza de que deseja remover o domínio {domain} da sua conta?",
"domainQuestionRemove": "Tem certeza de que deseja remover o domínio da sua conta?",
"domainMessageRemove": "Uma vez removido, o domínio não estará mais associado à sua conta.",
"domainMessageConfirm": "Para confirmar, digite o nome do domínio abaixo.",
"domainConfirmDelete": "Confirmar Exclusão de Domínio",
"domainDelete": "Excluir Domínio",
"domain": "Domínio",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Nenhum URL de redirecionamento recebido do provedor de identidade.",
"autoLoginErrorGeneratingUrl": "Falha ao gerar URL de autenticação.",
"remoteExitNodeManageRemoteExitNodes": "Nós remotos",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Auto-hospedar um ou mais nós remotos para estender sua conectividade de rede e reduzir a dependência da nuvem",
"remoteExitNodes": "Nós",
"searchRemoteExitNodes": "Buscar nós...",
"remoteExitNodeAdd": "Adicionar node",
"remoteExitNodeErrorDelete": "Erro ao excluir nó",
"remoteExitNodeQuestionRemove": "Tem certeza que deseja remover o nó {selectedNode} da organização?",
"remoteExitNodeQuestionRemove": "Tem certeza de que deseja remover o nó da organização?",
"remoteExitNodeMessageRemove": "Uma vez removido, o nó não estará mais acessível.",
"remoteExitNodeMessageConfirm": "Para confirmar, por favor, digite o nome do nó abaixo.",
"remoteExitNodeConfirmDelete": "Confirmar exclusão do nó",
"remoteExitNodeDelete": "Excluir nó",
"sidebarRemoteExitNodes": "Nós remotos",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Autenticação de cabeçalho removida com sucesso.",
"resourceErrorHeaderAuthRemove": "Falha ao remover autenticação de cabeçalho",
"resourceErrorHeaderAuthRemoveDescription": "Não foi possível remover a autenticação do cabeçalho para o recurso.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Autenticação de Cabeçalho Habilitada",
"resourceHeaderAuthProtectionDisabled": "Autenticação de Cabeçalho Desativada",
"headerAuthRemove": "Remover autenticação de cabeçalho",
"headerAuthAdd": "Adicionar Autenticação do Cabeçalho",
"resourceErrorHeaderAuthSetup": "Falha ao definir autenticação de cabeçalho",
"resourceErrorHeaderAuthSetupDescription": "Não foi possível definir a autenticação do cabeçalho para o recurso.",
"resourceHeaderAuthSetup": "Autenticação de Cabeçalho definida com sucesso",
"resourceHeaderAuthSetupDescription": "Autenticação de cabeçalho foi definida com sucesso.",
"resourceHeaderAuthSetupTitle": "Definir autenticação de cabeçalho",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Defina as credenciais de autenticação básica (nome de usuário e senha) para proteger este recurso com a Autenticação de Cabeçalho HTTP. Acessá-lo usando o formato https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Definir autenticação de cabeçalho",
"actionSetResourceHeaderAuth": "Definir autenticação de cabeçalho",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"enterpriseEdition": "Edição Enterprise",
"unlicensed": "Sem licença",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"manageClients": "Gerenciar Clientes",
"manageClientsDescription": "Clientes são dispositivos que podem se conectar aos seus sites",
"licenseTableValidUntil": "Válido até",
"saasLicenseKeysSettingsTitle": "Licenças empresariais",
"saasLicenseKeysSettingsDescription": "Gerar e gerenciar chaves de licença Enterprise para instâncias Pangolin auto-hospedadas",
"sidebarEnterpriseLicenses": "Licenças",
"generateLicenseKey": "Gerar Chave de Licença",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Por favor, insira um endereço de e-mail válido",
"useCaseTypeRequired": "Por favor, selecione um tipo de caso de uso",
"firstNameRequired": "O primeiro nome é obrigatório",
"lastNameRequired": "Último nome é obrigatório",
"primaryUseRequired": "Descreva seu uso primário",
"jobTitleRequiredBusiness": "O título do trabalho é necessário para o uso de negócios",
"industryRequiredBusiness": "Indústria é necessária para uso de negócios",
"stateProvinceRegionRequired": "Estado/Província/Região é necessário",
"postalZipCodeRequired": "Código postal/CEP é obrigatório",
"companyNameRequiredBusiness": "O nome da empresa é necessário para uso empresarial",
"countryOfResidenceRequiredBusiness": "O país de residência é necessário para a utilização da empresa",
"countryRequiredPersonal": "País é necessário para uso pessoal",
"agreeToTermsRequired": "Você deve concordar com os termos",
"complianceConfirmationRequired": "Você deve confirmar o cumprimento da Licença Fossorial Comercial"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Uso pessoal",
"description": "Para uso individual, não comercial, como aprendizagem, projetos pessoais ou experimentação."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Uso de Negócios",
"description": "Para uso em organizações, empresas ou atividades comerciais ou geradoras de receitas."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "Tipo de Email e Licença",
"description": "Digite seu e-mail e escolha seu tipo de licença"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Informações Pessoais",
"description": "Conte-nos sobre você"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Informação do Contato",
"description": "Suas informações de contato"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Termos & Gerar",
"description": "Revise e aceite os termos para gerar a sua licença"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Divulgação de uso",
"description": "Selecione o nível de licença que reflete corretamente seu uso pretendido. A Licença Pessoal permite o uso livre do Software para atividades comerciais individuais, não comerciais ou em pequena escala com rendimento bruto anual inferior a 100.000 USD. Qualquer uso além destes limites — incluindo uso dentro de um negócio, organização, ou outro ambiente gerador de receitas — requer uma Licença Enterprise válida e o pagamento da taxa aplicável de licenciamento. Todos os usuários, pessoais ou empresariais, devem cumprir os Termos da Licença Comercial Fossorial."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Informações do Período de Avaliação",
"description": "Esta Chave de Licença permite recursos da Empresa para um período de avaliação de 7 dias. O acesso contínuo a Recursos Pagos além do período de avaliação requer ativação sob uma Licença Pessoal ou Empresarial válida. Para licenciamento Empresarial, entre em contato com sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "Você está usando o Pangolin para uso pessoal ou empresarial?",
"firstName": "Primeiro nome",
"lastName": "Último Nome",
"jobTitle": "Título do Cargo",
"primaryUseQuestion": "Para que você pretende usar o Pangolin em primeiro lugar?",
"industryQuestion": "O que é a sua indústria?",
"prospectiveUsersQuestion": "Quantos usuários potenciais você espera?",
"prospectiveSitesQuestion": "Quantos sites (túneis) você espera ter?",
"companyName": "Nome Empresa",
"countryOfResidence": "País de residência",
"stateProvinceRegion": "Estado / Província / Região",
"postalZipCode": "Código Postal / Postal",
"companyWebsite": "Site da empresa",
"companyPhoneNumber": "Número de telefone empresa",
"country": "País",
"phoneNumberOptional": "Número de telefone (opcional)",
"complianceConfirmation": "Confirmo que a informação que forneci é correcta e que estou em conformidade com a Licença Comercial Fossorial. Reportar informações imprecisas ou identificar mal o uso do produto é uma violação da licença e pode resultar em sua chave ser revogada."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Fechar",
"previous": "Anterior",
"next": "Próximo",
"generateLicenseKey": "Gerar Chave de Licença"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Chave de licença gerada com sucesso",
"description": "Sua chave de licença foi gerada e está pronta para ser usada."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Falha ao gerar chave de licença",
"description": "Ocorreu um erro ao gerar a chave da licença."
}
}
},
"priority": "Prioridade",
"priorityDescription": "Rotas de alta prioridade são avaliadas primeiro. Prioridade = 100 significa ordem automática (decisões do sistema). Use outro número para aplicar prioridade manual.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"instanceName": "Nome da Instância",
"pathMatchModalTitle": "Configurar Correspondência de Caminho",
"pathMatchModalDescription": "Configure como as solicitações de entrada devem ser correspondidas com base no caminho.",
"pathMatchType": "Tipo de Correspondência",
"pathMatchPrefix": "Prefixo",
"pathMatchExact": "Exato",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"pathMatchValue": "Valor do caminho",
"clear": "Limpar",
"saveChanges": "Salvar as alterações",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathMatchDefaultPlaceholder": "/caminho",
"pathMatchPrefixHelp": "Exemplo: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Exemplo: /api match only /api",
"pathMatchRegexHelp": "Exemplo: ^/api/.* Corresponde /api/anything",
"pathRewriteModalTitle": "Configurar Caminho de Reescrita",
"pathRewriteModalDescription": "Transforme o caminho correspondente antes de encaminhar para o alvo.",
"pathRewriteType": "Reescrever o tipo",
"pathRewritePrefixOption": "Prefixo - substituir prefixo",
"pathRewriteExactOption": "Exato - Substituir o caminho inteiro",
"pathRewriteRegexOption": "Regex - Substituição de padrão",
"pathRewriteStripPrefixOption": "Prefixo do Strip - Remover prefixo",
"pathRewriteValue": "Reescrever Valor",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewriteDefaultPlaceholder": "/novo-caminho",
"pathRewritePrefixHelp": "Substituir o prefixo correspondente por este valor",
"pathRewriteExactHelp": "Substitua o caminho inteiro por este valor quando o caminho corresponder exatamente",
"pathRewriteRegexHelp": "Usar grupos de captura como $1, $2 para substituição",
"pathRewriteStripPrefixHelp": "Deixe em branco para remover prefixo ou fornecer novo prefixo",
"pathRewritePrefix": "Prefixo",
"pathRewriteExact": "Exato",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Tirar",
"pathRewriteStripLabel": "faixa",
"sidebarEnableEnterpriseLicense": "Habilitar Licença Empresarial",
"cannotbeUndone": "Isso não pode ser desfeito.",
"toConfirm": "para confirmar",
"deleteClientQuestion": "Você tem certeza que deseja remover o cliente do site e da organização?",
"clientMessageRemove": "Depois de removido, o cliente não poderá mais se conectar ao site."
}

View File

@@ -47,9 +47,8 @@
"edit": "Редактировать",
"siteConfirmDelete": "Подтвердить удаление сайта",
"siteDelete": "Удалить сайт",
"siteMessageRemove": "После удаления сайт больше не будет доступен. Все ресурсы и целевые узлы, связанные с сайтом, также будут удалены.",
"siteMessageConfirm": "Для подтверждения введите название сайта ниже.",
"siteQuestionRemove": "Вы уверены, что хотите удалить сайт {selectedSite} из организации?",
"siteMessageRemove": "После удаления сайт больше не будет доступен. Все цели, связанные с сайтом, также будут удалены.",
"siteQuestionRemove": "Вы уверены, что хотите удалить сайт из организации?",
"siteManageSites": "Управление сайтами",
"siteDescription": "Обеспечьте подключение к вашей сети через защищённые туннели",
"siteCreate": "Создать сайт",
@@ -96,7 +95,7 @@
"siteWgDescription": "Используйте любой клиент WireGuard для открытия туннеля. Требуется ручная настройка NAT.",
"siteWgDescriptionSaas": "Используйте любой клиент WireGuard для создания туннеля. Требуется ручная настройка NAT. РАБОТАЕТ ТОЛЬКО НА САМОСТОЯТЕЛЬНО РАЗМЕЩЕННЫХ УЗЛАХ",
"siteLocalDescription": "Только локальные ресурсы. Без туннелирования.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Только локальные ресурсы. Нет туннелей. Только для удаленных узлов.",
"siteSeeAll": "Просмотреть все сайты",
"siteTunnelDescription": "Выберите способ подключения к вашему сайту",
"siteNewtCredentials": "Учётные данные Newt",
@@ -154,8 +153,7 @@
"protected": "Защищён",
"notProtected": "Не защищён",
"resourceMessageRemove": "После удаления ресурс больше не будет доступен. Все целевые узлы, связанные с ресурсом, также будут удалены.",
"resourceMessageConfirm": "Для подтверждения введите название ресурса ниже.",
"resourceQuestionRemove": "Вы действительно хотите удалить ресурс {selectedResource} из организации?",
"resourceQuestionRemove": "Вы уверены, что хотите удалить ресурс из организации?",
"resourceHTTP": "HTTPS-ресурс",
"resourceHTTPDescription": "Проксирование запросов к вашему приложению через HTTPS с использованием поддомена или базового домена.",
"resourceRaw": "Сырой TCP/UDP-ресурс",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Подтвердить удаление",
"orgMessageRemove": "Это действие необратимо и удалит все связанные данные.",
"orgMessageConfirm": "Для подтверждения введите название организации ниже.",
"orgQuestionRemove": "Вы действительно хотите удалить организацию {selectedOrg}?",
"orgQuestionRemove": "Вы уверены, что хотите удалить организацию?",
"orgUpdated": "Организация обновлена",
"orgUpdatedDescription": "Организация была успешно обновлена.",
"orgErrorUpdate": "Не удалось обновить организацию",
@@ -287,9 +285,8 @@
"apiKeysAdd": "Сгенерировать ключ API",
"apiKeysErrorDelete": "Ошибка при удалении ключа API",
"apiKeysErrorDeleteMessage": "Не удалось удалить ключ API",
"apiKeysQuestionRemove": "Вы действительно хотите удалить ключ API {selectedApiKey} из организации?",
"apiKeysQuestionRemove": "Вы уверены, что хотите удалить API ключ из организации?",
"apiKeysMessageRemove": "После удаления ключ API больше сможет быть использован.",
"apiKeysMessageConfirm": "Для подтверждения введите название ключа API ниже.",
"apiKeysDeleteConfirm": "Подтвердить удаление",
"apiKeysDelete": "Удаление ключа API",
"apiKeysManage": "Управление ключами API",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Подтвердить удаление",
"userDeleteServer": "Удаление пользователя с сервера",
"userMessageRemove": "Пользователь будет удалён из всех организаций и полностью удалён с сервера.",
"userMessageConfirm": "Для подтверждения введите имя пользователя ниже.",
"userQuestionRemove": "Вы действительно хотите навсегда удалить {selectedUser} с сервера?",
"userQuestionRemove": "Вы уверены, что хотите навсегда удалить пользователя с сервера?",
"licenseKey": "Лицензионный ключ",
"valid": "Действителен",
"numberOfSites": "Количество сайтов",
@@ -339,7 +335,7 @@
"fossorialLicense": "Просмотреть коммерческую лицензию Fossorial и условия подписки",
"licenseMessageRemove": "Это удалит лицензионный ключ и все связанные с ним разрешения.",
"licenseMessageConfirm": "Для подтверждения введите лицензионный ключ ниже.",
"licenseQuestionRemove": "Вы уверены, что хотите удалить лицензионный ключ {selectedKey}?",
"licenseQuestionRemove": "Вы уверены, что хотите удалить лицензионный ключ?",
"licenseKeyDelete": "Удалить лицензионный ключ",
"licenseKeyDeleteConfirm": "Подтвердить удаление лицензионного ключа",
"licenseTitle": "Управление статусом лицензии",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Произошла ошибка при удалении приглашения.",
"inviteRemoved": "Приглашение удалено",
"inviteRemovedDescription": "Приглашение для {email} было удалено.",
"inviteQuestionRemove": "Вы уверены, что хотите удалить приглашение {email}?",
"inviteQuestionRemove": "Вы уверены, что хотите удалить приглашение?",
"inviteMessageRemove": "После удаления это приглашение больше не будет действительным. Вы всегда можете пригласить пользователя заново.",
"inviteMessageConfirm": "Для подтверждения введите email адрес приглашения ниже.",
"inviteQuestionRegenerate": "Вы уверены, что хотите пересоздать приглашение для {email}? Это отзовёт предыдущее приглашение.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Произошла ошибка при удалении пользователя.",
"userOrgRemoved": "Пользователь удалён",
"userOrgRemovedDescription": "Пользователь {email} был удалён из организации.",
"userQuestionOrgRemove": "Вы уверены, что хотите удалить {email} из организации?",
"userQuestionOrgRemove": "Вы уверены, что хотите удалить этого пользователя из организации?",
"userMessageOrgRemove": "После удаления этот пользователь больше не будет иметь доступ к организации. Вы всегда можете пригласить его заново, но ему нужно будет снова принять приглашение.",
"userMessageOrgConfirm": "Для подтверждения введите имя пользователя ниже.",
"userRemoveOrgConfirm": "Подтвердить удаление пользователя",
"userRemoveOrg": "Удалить пользователя из организации",
"users": "Пользователи",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Администратор сервера - Pangolin",
"licenseTierProfessional": "Профессиональная лицензия",
"licenseTierEnterprise": "Корпоративная лицензия",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Личная лицензия",
"licensed": "Лицензировано",
"yes": "Да",
"no": "Нет",
@@ -742,7 +737,7 @@
"idpManageDescription": "Просмотр и управление поставщиками удостоверений в системе",
"idpDeletedDescription": "Поставщик удостоверений успешно удалён",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Вы уверены, что хотите навсегда удалить поставщика удостоверений {name}?",
"idpQuestionRemove": "Вы уверены, что хотите навсегда удалить поставщика удостоверений?",
"idpMessageRemove": "Это удалит поставщика удостоверений и все связанные конфигурации. Пользователи, которые аутентифицируются через этого поставщика, больше не смогут войти.",
"idpMessageConfirm": "Для подтверждения введите имя поставщика удостоверений ниже.",
"idpConfirmDelete": "Подтвердить удаление поставщика удостоверений",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Все пользователи",
"sidebarIdentityProviders": "Поставщики удостоверений",
"sidebarLicense": "Лицензия",
"sidebarClients": "Clients",
"sidebarClients": "Клиенты",
"sidebarDomains": "Домены",
"enableDockerSocket": "Включить чертёж Docker",
"enableDockerSocketDescription": "Включить scraping ярлыка Docker Socket для ярлыков чертежей. Путь к сокету должен быть предоставлен в Newt.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Создать Домен",
"domainCreatedDescription": "Домен успешно создан",
"domainDeletedDescription": "Домен успешно удален",
"domainQuestionRemove": "Вы уверены, что хотите удалить домен {domain} из вашего аккаунта?",
"domainQuestionRemove": "Вы уверены, что хотите удалить домен из вашей учетной записи?",
"domainMessageRemove": "После удаления домен больше не будет связан с вашей учетной записью.",
"domainMessageConfirm": "Для подтверждения введите ниже имя домена.",
"domainConfirmDelete": "Подтвердить удаление домена",
"domainDelete": "Удалить Домен",
"domain": "Домен",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "URL-адрес перенаправления не получен от провайдера удостоверения.",
"autoLoginErrorGeneratingUrl": "Не удалось сгенерировать URL-адрес аутентификации.",
"remoteExitNodeManageRemoteExitNodes": "Удаленные узлы",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Самохост-один или несколько удаленных узлов для расширения сетевого подключения и уменьшения зависимости от облака",
"remoteExitNodes": "Узлы",
"searchRemoteExitNodes": "Поиск узлов...",
"remoteExitNodeAdd": "Добавить узел",
"remoteExitNodeErrorDelete": "Ошибка удаления узла",
"remoteExitNodeQuestionRemove": "Вы уверены, что хотите удалить узел {selectedNode} из организации?",
"remoteExitNodeQuestionRemove": "Вы уверены, что хотите удалить узел из организации?",
"remoteExitNodeMessageRemove": "После удаления узел больше не будет доступен.",
"remoteExitNodeMessageConfirm": "Для подтверждения введите имя узла ниже.",
"remoteExitNodeConfirmDelete": "Подтвердите удаление узла",
"remoteExitNodeDelete": "Удалить узел",
"sidebarRemoteExitNodes": "Удаленные узлы",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Проверка подлинности заголовка успешно удалена.",
"resourceErrorHeaderAuthRemove": "Не удалось удалить аутентификацию заголовка",
"resourceErrorHeaderAuthRemoveDescription": "Не удалось удалить проверку подлинности заголовка ресурса.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Заголовок аутентификации включен",
"resourceHeaderAuthProtectionDisabled": "Проверка подлинности заголовка отключена",
"headerAuthRemove": "Удалить проверку подлинности заголовка",
"headerAuthAdd": "Добавить заголовок аутентификации",
"resourceErrorHeaderAuthSetup": "Не удалось установить аутентификацию заголовка",
"resourceErrorHeaderAuthSetupDescription": "Не удалось установить проверку подлинности заголовка ресурса.",
"resourceHeaderAuthSetup": "Проверка подлинности заголовка успешно установлена",
"resourceHeaderAuthSetupDescription": "Проверка подлинности заголовка успешно установлена.",
"resourceHeaderAuthSetupTitle": "Установить проверку подлинности заголовка",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Установите основные учетные данные авторизации (имя пользователя и пароль), чтобы защитить этот ресурс с помощью заголовка HTTP. Получите доступ к нему с помощью формата https://username:password@resource.example.com",
"resourceHeaderAuthSubmit": "Установить проверку подлинности заголовка",
"actionSetResourceHeaderAuth": "Установить проверку подлинности заголовка",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"enterpriseEdition": "Корпоративная версия",
"unlicensed": "Нелицензированный",
"beta": "Бета",
"manageClients": "Управление клиентами",
"manageClientsDescription": "Клиенты - это устройства, которые могут подключаться к вашим сайтам",
"licenseTableValidUntil": "Действителен до",
"saasLicenseKeysSettingsTitle": "Корпоративные лицензии",
"saasLicenseKeysSettingsDescription": "Генерировать и управлять лицензионными ключами Enterprise для копий Pangolin",
"sidebarEnterpriseLicenses": "Лицензии",
"generateLicenseKey": "Сгенерировать лицензионный ключ",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Пожалуйста, введите действительный адрес электронной почты",
"useCaseTypeRequired": "Пожалуйста, выберите тип варианта использования",
"firstNameRequired": "Требуется имя",
"lastNameRequired": "Требуется фамилия",
"primaryUseRequired": "Пожалуйста, опишите ваше основное использование",
"jobTitleRequiredBusiness": "Должность требуется для коммерческого использования",
"industryRequiredBusiness": "Промышленность необходима для коммерческого использования",
"stateProvinceRegionRequired": "Регион/Область обязательно",
"postalZipCodeRequired": "Почтовый индекс требуется",
"companyNameRequiredBusiness": "Название компании обязательно для бизнес-использования",
"countryOfResidenceRequiredBusiness": "Страна проживания необходима для коммерческого использования",
"countryRequiredPersonal": "Страна необходима для личного использования",
"agreeToTermsRequired": "Вы должны принять условия",
"complianceConfirmationRequired": "Вы должны подтвердить соответствие с Fossorial Commercial License"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Личное использование",
"description": "Для индивидуального, некоммерческого использования, например, обучения, личных проектов или экспериментов."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "Бизнес-использование",
"description": "Для использования в организациях, компаниях или коммерческих или приносящих доход видах деятельности."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "Email и тип лицензии",
"description": "Введите адрес электронной почты и выберите тип лицензии"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Личная информация",
"description": "Расскажите нам о себе"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "Контактная информация",
"description": "Ваши контактные данные"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Условия и Сгенерировать",
"description": "Просмотрите и примите условия для создания вашей лицензии"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Раскрытие",
"description": "Выберите уровень лицензии, который точно отражает ваше предполагаемое использование. Личная Лицензия разрешает свободное использование Программного Обеспечения для частной, некоммерческой или малой коммерческой деятельности с годовым валовым доходом до $100 000 USD. Любое использование сверх этих пределов — включая использование в бизнесе, организацию, или другой приносящей доход среде — требует действительной лицензии предприятия и уплаты соответствующей лицензионной платы. Все пользователи, будь то Личные или Предприятия, обязаны соблюдать условия коммерческой лицензии Fossoral."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Информация о пробном периоде",
"description": "Этот лицензионный ключ позволяет корпоративным функциям на 7-дневный период оценки. Для продолжения доступа к платным функциям за пределами ознакомительного периода требуется активация в рамках действующей лицензии Личного или Предприятия. Для получения лицензии свяжитесь с sales@pangolin.net."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"useCaseQuestion": "Вы используете Pangolin для личного или делового использования?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"lastName": "Фамилия",
"jobTitle": "Заголовок",
"primaryUseQuestion": "Что вы планируете использовать Панголин в первую очередь?",
"industryQuestion": "Какая у вас отрасль?",
"prospectiveUsersQuestion": "Сколько у вас потенциальных пользователей?",
"prospectiveSitesQuestion": "Сколько потенциальных сайтов (туннелей) вы ожидаете?",
"companyName": "Название компании",
"countryOfResidence": "Страна проживания",
"stateProvinceRegion": "Область / регион",
"postalZipCode": "Почтовый индекс",
"companyWebsite": "Веб-сайт компании",
"companyPhoneNumber": "Телефон компании",
"country": "Страна",
"phoneNumberOptional": "Номер телефона (необязательно)",
"complianceConfirmation": "Я подтверждаю, что информация, которую я предоставляю, является точной и что я в соответствии с коммерческой лицензии Fossorial. Сообщение о неточной информации или неправильно идентифицирующем использовании продукта является нарушением лицензии и может привести к аннулированию вашего ключа."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Закрыть",
"previous": "Предыдущий",
"next": "Следующий",
"generateLicenseKey": "Сгенерировать лицензионный ключ"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Лицензионный ключ успешно создан",
"description": "Ваш лицензионный ключ сгенерирован и готов к использованию."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Не удалось сгенерировать лицензионный ключ",
"description": "Произошла ошибка при генерации лицензионного ключа."
}
}
},
"priority": "Приоритет",
"priorityDescription": "Маршруты с более высоким приоритетом оцениваются первым. Приоритет = 100 означает автоматическое упорядочение (решение системы). Используйте другой номер для обеспечения ручного приоритета.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"instanceName": "Имя экземпляра",
"pathMatchModalTitle": "Настроить соответствие пути",
"pathMatchModalDescription": "Настройка соответствия входящих запросов на основе их пути.",
"pathMatchType": "Тип совпадения",
"pathMatchPrefix": "Префикс",
"pathMatchExact": "Точно",
"pathMatchRegex": "Регенерация",
"pathMatchValue": "Значение пути",
"clear": "Очистить",
"saveChanges": "Сохранить изменения",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathMatchDefaultPlaceholder": "/путь",
"pathMatchPrefixHelp": "Пример: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Пример: /api соответствует только /api",
"pathMatchRegexHelp": "Пример: ^/api/.* совпадает с /api/anything",
"pathRewriteModalTitle": "Настроить перезапись пути",
"pathRewriteModalDescription": "Преобразовать соответствующий путь перед пересылкой к цели.",
"pathRewriteType": "Тип перезаписи",
"pathRewritePrefixOption": "Префикс - Замена префикса",
"pathRewriteExactOption": "Точно - Заменить весь путь",
"pathRewriteRegexOption": "Regex - замена шаблона",
"pathRewriteStripPrefixOption": "Префикс вырезать - Удалить префикс",
"pathRewriteValue": "Перезаписать значение",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewritePrefixHelp": "Заменить соответствующий префикс этим значением",
"pathRewriteExactHelp": "Замените весь путь этим значением, когда путь точно соответствует",
"pathRewriteRegexHelp": "Использовать группы захвата типа $1, $2 для замены",
"pathRewriteStripPrefixHelp": "Оставьте пустым для префикса полосы или укажите новый префикс",
"pathRewritePrefix": "Префикс",
"pathRewriteExact": "Точно",
"pathRewriteRegex": "Регенерация",
"pathRewriteStrip": "Вырезать",
"pathRewriteStripLabel": "полоса",
"sidebarEnableEnterpriseLicense": "Включить корпоративную лицензию",
"cannotbeUndone": "Это действие не может быть отменено.",
"toConfirm": "для подтверждения",
"deleteClientQuestion": "Вы уверены, что хотите удалить клиента из сайта и организации?",
"clientMessageRemove": "После удаления клиент больше не сможет подключиться к сайту."
}

View File

@@ -47,9 +47,8 @@
"edit": "Düzenle",
"siteConfirmDelete": "Site Silmeyi Onayla",
"siteDelete": "Siteyi Sil",
"siteMessageRemove": "Kaldırıldıktan sonra site artık erişilebilir olmayacak. Siteyle ilişkili tüm kaynaklar ve hedefler de kaldırılacaktır.",
"siteMessageConfirm": "Onaylamak için lütfen aşağıya sitenin adını yazın.",
"siteQuestionRemove": "{selectedSite} sitesini organizasyondan kaldırmak istediğinizden emin misiniz?",
"siteMessageRemove": "Kaldırıldıktan sonra site artık erişilebilir olmayacaktır. Siteyle ilişkilendirilmiş tüm hedefler de kaldırılacaktır.",
"siteQuestionRemove": "Siteyi organizasyondan kaldırmak istediğinizden emin misiniz?",
"siteManageSites": "Siteleri Yönet",
"siteDescription": "Ağınıza güvenli tüneller üzerinden bağlantı izni verin",
"siteCreate": "Site Oluştur",
@@ -96,7 +95,7 @@
"siteWgDescription": "Bir tünel oluşturmak için herhangi bir WireGuard istemcisi kullanın. Manuel NAT kurulumu gereklidir.",
"siteWgDescriptionSaas": "Bir tünel oluşturmak için herhangi bir WireGuard istemcisi kullanın. Manuel NAT kurulumu gereklidir. YALNIZCA SELF HOSTED DÜĞÜMLERDE ÇALIŞIR",
"siteLocalDescription": "Yalnızca yerel kaynaklar. Tünelleme yok.",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "Yerel kaynaklar yalnızca. Tünel oluşturma yok. Yalnızca uzak düğümlerde mevcuttur.",
"siteSeeAll": "Tüm Siteleri Gör",
"siteTunnelDescription": "Sitenize nasıl bağlanmak istediğinizi belirleyin",
"siteNewtCredentials": "Newt Kimlik Bilgileri",
@@ -154,8 +153,7 @@
"protected": "Korunan",
"notProtected": "Korunmayan",
"resourceMessageRemove": "Kaldırıldıktan sonra kaynak artık erişilebilir olmayacaktır. Kaynakla ilişkili tüm hedefler de kaldırılacaktır.",
"resourceMessageConfirm": "Onaylamak için lütfen aşağıya kaynağın adını yazın.",
"resourceQuestionRemove": "{selectedResource} kaynağını organizasyondan kaldırmak istediğinizden emin misiniz?",
"resourceQuestionRemove": "Kaynağı organizasyondan kaldırmak istediğinizden emin misiniz?",
"resourceHTTP": "HTTPS Kaynağı",
"resourceHTTPDescription": "Bir alt alan adı veya temel alan adı kullanarak uygulamanıza HTTPS üzerinden vekil istek gönderin.",
"resourceRaw": "Ham TCP/UDP Kaynağı",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "Organizasyon Silmeyi Onayla",
"orgMessageRemove": "Bu işlem geri alınamaz ve tüm ilişkili verileri silecektir.",
"orgMessageConfirm": "Onaylamak için lütfen aşağıya organizasyonun adını yazın.",
"orgQuestionRemove": "{selectedOrg} organizasyonunu kaldırmak istediğinizden emin misiniz?",
"orgQuestionRemove": "Organizasyondan kaldırmak istediğinizden emin misiniz?",
"orgUpdated": "Organizasyon güncellendi",
"orgUpdatedDescription": "Organizasyon güncellendi.",
"orgErrorUpdate": "Organizasyon güncellenemedi",
@@ -287,9 +285,8 @@
"apiKeysAdd": "API Anahtarı Oluştur",
"apiKeysErrorDelete": "API anahtarı silinirken bir hata oluştu",
"apiKeysErrorDeleteMessage": "API anahtarı silinirken bir hata oluştu",
"apiKeysQuestionRemove": "{selectedApiKey} API anahtarını organizasyondan kaldırmak istediğinizden emin misiniz?",
"apiKeysQuestionRemove": "API anahtarını organizasyondan kaldırmak istediğinizden emin misiniz?",
"apiKeysMessageRemove": "Kaldırıldığında, API anahtarı artık kullanılamayacaktır.",
"apiKeysMessageConfirm": "Onaylamak için lütfen aşağıya API anahtarının adını yazın.",
"apiKeysDeleteConfirm": "API Anahtarının Silinmesini Onaylayın",
"apiKeysDelete": "API Anahtarını Sil",
"apiKeysManage": "API Anahtarlarını Yönet",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "Kullanıcı Silinmesini Onayla",
"userDeleteServer": "Kullanıcıyı Sunucudan Sil",
"userMessageRemove": "Kullanıcı tüm organizasyonlardan çıkarılacak ve tamamen sunucudan kaldırılacaktır.",
"userMessageConfirm": "Onaylamak için lütfen aşağıya kullanıcının adını yazın.",
"userQuestionRemove": "{selectedUser} kullanıcısını sunucudan kalıcı olarak silmek istediğinizden emin misiniz?",
"userQuestionRemove": "Kullanıcıyı sunucudan kalıcı olarak silmek istediğinizden emin misiniz?",
"licenseKey": "Lisans Anahtarı",
"valid": "Geçerli",
"numberOfSites": "Site Sayısı",
@@ -339,7 +335,7 @@
"fossorialLicense": "Fossorial Ticari Lisans ve Abonelik Koşullarını Gör",
"licenseMessageRemove": "Bu, lisans anahtarını ve onun tarafından verilen tüm izinleri kaldıracaktır.",
"licenseMessageConfirm": "Onaylamak için lütfen aşağıya lisans anahtarını yazın.",
"licenseQuestionRemove": "{selectedKey} lisans anahtarını silmek istediğinizden emin misiniz?",
"licenseQuestionRemove": "Lisans anahtarını silmek istediğinizden emin misiniz?",
"licenseKeyDelete": "Lisans Anahtarını Sil",
"licenseKeyDeleteConfirm": "Lisans Anahtarının Silinmesini Onaylayın",
"licenseTitle": "Lisans Durumunu Yönet",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "Daveti kaldırırken bir hata oluştu.",
"inviteRemoved": "Davetiye kaldırıldı",
"inviteRemovedDescription": "{email} için olan davetiye kaldırıldı.",
"inviteQuestionRemove": "{email} davetini kaldırmak istediğinizden emin misiniz?",
"inviteQuestionRemove": "Davetiyeyi kaldırmak istediğinizden emin misiniz?",
"inviteMessageRemove": "Kaldırıldıktan sonra bu davetiye artık geçerli olmayacak. Kullanıcı tekrar davet edilebilir.",
"inviteMessageConfirm": "Onaylamak için lütfen aşağıya davetiyenin e-posta adresini yazın.",
"inviteQuestionRegenerate": "Are you sure you want to regenerate the invitation for{email, plural, ='' {}, other { for #}}? This will revoke the previous invitation.",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "Kullanıcı kaldırılırken bir hata oluştu.",
"userOrgRemoved": "Kullanıcı kaldırıldı",
"userOrgRemovedDescription": "{email} kullanıcı organizasyondan kaldırılmıştır.",
"userQuestionOrgRemove": "{email} adresini organizasyondan kaldırmak istediğinizden emin misiniz?",
"userQuestionOrgRemove": "Kullanıcıyı organizasyondan kaldırmak istediğinizden emin misiniz?",
"userMessageOrgRemove": "Kaldırıldığında, bu kullanıcı organizasyona artık erişim sağlayamayacak. Kullanıcı tekrar davet edilebilir, ancak daveti kabul etmesi gerekecek.",
"userMessageOrgConfirm": "Onaylamak için lütfen aşağıya kullanıcının adını yazın.",
"userRemoveOrgConfirm": "Kullanıcıyı Kaldırmayı Onayla",
"userRemoveOrg": "Kullanıcıyı Organizasyondan Kaldır",
"users": "Kullanıcılar",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "Sunucu Yöneticisi - Pangolin",
"licenseTierProfessional": "Profesyonel Lisans",
"licenseTierEnterprise": "Kurumsal Lisans",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "Kişisel Lisans",
"licensed": "Lisanslı",
"yes": "Evet",
"no": "Hayır",
@@ -742,7 +737,7 @@
"idpManageDescription": "Sistem içindeki kimlik sağlayıcıları görün ve yönetin",
"idpDeletedDescription": "Kimlik sağlayıcı başarıyla silindi",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "Kimlik sağlayıcıyı kalıcı olarak silmek istediğinizden emin misiniz? {name}",
"idpQuestionRemove": "Kimlik sağlayıcısını kalıcı olarak silmek istediğinizden emin misiniz?",
"idpMessageRemove": "Bu, kimlik sağlayıcıyı ve tüm ilişkili yapılandırmaları kaldıracaktır. Bu sağlayıcıdan kimlik doğrulayan kullanıcılar artık giriş yapamayacaktır.",
"idpMessageConfirm": "Onaylamak için lütfen aşağıya kimlik sağlayıcının adını yazın.",
"idpConfirmDelete": "Kimlik Sağlayıcıyı Silme Onayı",
@@ -765,7 +760,7 @@
"idpDisplayName": "Bu kimlik sağlayıcı için bir görüntü adı",
"idpAutoProvisionUsers": "Kullanıcıları Otomatik Sağla",
"idpAutoProvisionUsersDescription": "Etkinleştirildiğinde, kullanıcılar rol ve organizasyonlara eşleme yeteneğiyle birlikte sistemde otomatik olarak oluşturulacak.",
"licenseBadge": "EE",
"licenseBadge": " ",
"idpType": "Sağlayıcı Türü",
"idpTypeDescription": "Yapılandırmak istediğiniz kimlik sağlayıcısı türünü seçin",
"idpOidcConfigure": "OAuth2/OIDC Yapılandırması",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "Tüm Kullanıcılar",
"sidebarIdentityProviders": "Kimlik Sağlayıcılar",
"sidebarLicense": "Lisans",
"sidebarClients": "Clients",
"sidebarClients": "İstemciler",
"sidebarDomains": "Alan Adları",
"enableDockerSocket": "Docker Soketini Etkinleştir",
"enableDockerSocketDescription": "Plan etiketleri için Docker Socket etiket toplamasını etkinleştirin. Newt'e soket yolu sağlanmalıdır.",
@@ -1211,9 +1206,8 @@
"domainCreate": "Alan Adı Oluştur",
"domainCreatedDescription": "Alan adı başarıyla oluşturuldu",
"domainDeletedDescription": "Alan adı başarıyla silindi",
"domainQuestionRemove": "{domain} alan adını hesabınızdan kaldırmak istediğinizden emin misiniz?",
"domainQuestionRemove": "Alan adını hesabınızdan kaldırmak istediğinizden emin misiniz?",
"domainMessageRemove": "Kaldırıldığında, alan adı hesabınızla ilişkilendirilmeyecek.",
"domainMessageConfirm": "Onaylamak için lütfen aşağıya alan adını yazın.",
"domainConfirmDelete": "Alan Adı Silinmesini Onayla",
"domainDelete": "Alan Adını Sil",
"domain": "Alan Adı",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "Kimlik sağlayıcıdan yönlendirme URL'si alınamadı.",
"autoLoginErrorGeneratingUrl": "Kimlik doğrulama URL'si oluşturulamadı.",
"remoteExitNodeManageRemoteExitNodes": "Uzak Düğümler",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "Kendi konum ağlarınızdan bir veya daha fazlasını barındırarak, bağlantı kurulumları için buluta bağımlılığı azaltın.",
"remoteExitNodes": "Düğümler",
"searchRemoteExitNodes": "Düğüm ara...",
"remoteExitNodeAdd": "Düğüm Ekle",
"remoteExitNodeErrorDelete": "Düğüm silinirken hata oluştu",
"remoteExitNodeQuestionRemove": "{selectedNode} düğümü organizasyondan kaldırmak istediğinizden emin misiniz?",
"remoteExitNodeQuestionRemove": "Düğümü organizasyondan kaldırmak istediğinizden emin misiniz?",
"remoteExitNodeMessageRemove": "Kaldırıldığında, düğüm artık erişilebilir olmayacaktır.",
"remoteExitNodeMessageConfirm": "Onaylamak için lütfen aşağıya düğümün adını yazın.",
"remoteExitNodeConfirmDelete": "Düğüm Silmeyi Onayla",
"remoteExitNodeDelete": "Düğümü Sil",
"sidebarRemoteExitNodes": "Uzak Düğümler",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "Başlık kimlik doğrulama başarıyla kaldırıldı.",
"resourceErrorHeaderAuthRemove": "Başlık Kimlik Doğrulama kaldırılamadı",
"resourceErrorHeaderAuthRemoveDescription": "Kaynak için başlık kimlik doğrulaması kaldırılamadı.",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "Başlık Doğrulaması Etkin",
"resourceHeaderAuthProtectionDisabled": "Başlık Doğrulaması Devre Dışı",
"headerAuthRemove": "Başlık Doğrulaması Kaldır",
"headerAuthAdd": "Başlık Doğrulaması Ekle",
"resourceErrorHeaderAuthSetup": "Başlık Kimlik Doğrulama ayarlanamadı",
"resourceErrorHeaderAuthSetupDescription": "Kaynak için başlık kimlik doğrulaması ayarlanamadı.",
"resourceHeaderAuthSetup": "Başlık Kimlik Doğrulama başarıyla ayarlandı",
"resourceHeaderAuthSetupDescription": "Başlık kimlik doğrulaması başarıyla ayarlandı.",
"resourceHeaderAuthSetupTitle": "Başlık Kimlik Doğrulama Ayarla",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "Bu kaynağı HTTP Başlık Kimlik Doğrulaması ile korumak için temel kimlik bilgilerini (kullanıcı adı ve şifre) ayarlayın. Kaynağa erişim için https://username:password@resource.example.com formatını kullanın.",
"resourceHeaderAuthSubmit": "Başlık Kimlik Doğrulama Ayarla",
"actionSetResourceHeaderAuth": "Başlık Kimlik Doğrulama Ayarla",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"enterpriseEdition": "Kurumsal Sürüm",
"unlicensed": "Lisansız",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"manageClients": "Müşteri Yönetimi",
"manageClientsDescription": "Müşteriler, sitelerinize bağlanabilen cihazlardır.",
"licenseTableValidUntil": "Geçerli İki Tarih Kadar",
"saasLicenseKeysSettingsTitle": "Kurumsal Lisanslar",
"saasLicenseKeysSettingsDescription": "Kendi barındırdığınız Pangolin örnekleri için kurumsal lisans anahtarları oluşturun ve yönetin.",
"sidebarEnterpriseLicenses": "Lisanslar",
"generateLicenseKey": "Lisans Anahtarı Oluştur",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "Lütfen geçerli bir e-posta adresi girin.",
"useCaseTypeRequired": "Lütfen bir kullanım alanı türü seçin.",
"firstNameRequired": "İsim gereklidir.",
"lastNameRequired": "Soyisim gereklidir.",
"primaryUseRequired": "Lütfen öncelikli kullanımınızııklayın.",
"jobTitleRequiredBusiness": "İş kullanımı için iş unvanı gereklidir.",
"industryRequiredBusiness": "İş kullanımı için sektör gereklidir.",
"stateProvinceRegionRequired": "Eyalet/İl/Bölge gereklidir.",
"postalZipCodeRequired": "Posta/ZIP kodu gereklidir.",
"companyNameRequiredBusiness": "İş kullanımı için şirket ismi gereklidir.",
"countryOfResidenceRequiredBusiness": "İş kullanımı için ikamet edilen ülke gereklidir.",
"countryRequiredPersonal": "Kişisel kullanım için ülke gereklidir.",
"agreeToTermsRequired": "Şartları kabul etmelisiniz.",
"complianceConfirmationRequired": "Fossorial Ticari Lisans ile uyumluluğu doğrulamalısınız."
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "Kişisel Kullanım",
"description": "Bireysel, ticari olmayan kullanım için öğrenme, kişisel projeler veya denemeler gibi."
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "İş Kullanımı",
"description": "Kuruluşlar, şirketler veya ticari veya gelir getirici faaliyetler bünyesinde kullanım için."
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "E-posta ve Lisans Türü",
"description": "E-posta adresinizi girin ve lisans türünüzü seçin."
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "Kişisel Bilgiler",
"description": "Kendinizden bahsedin."
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "İletişim Bilgileri",
"description": "İletişim detaylarınız."
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "Şartlar ve Lisans Üret",
"description": "Lisansınızı oluşturmak için şartları inceleyin ve kabul edin."
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "Kullanım Açıklaması",
"description": "Kullanım amacınızı doğru bir şekilde yansıtan lisans seviyesini seçin. Kişisel Lisans, yazılımın bireysel, ticari olmayan veya yıllık geliri 100,000 ABD Dolarının altında olan küçük ölçekli ticari faaliyetlerde ücretsiz kullanılmasına izin verir. Bu sınırların ötesinde kullanım — bir işletme, organizasyon veya diğer gelir getirici ortamlarda kullanım dahil olmak üzere — geçerli bir Kurumsal Lisans ve ilgili lisans ücretinin ödenmesini gerektirir. Tüm kullanıcılar, ister Kişisel ister Kurumsal, Fossorial Ticari Lisans Şartlarına uymalıdır."
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "Deneme Süresi Bilgileri",
"description": "Bu Lisans Anahtarı, Kurumsal özellikleri 7 günlük bir değerlendirme süresi için etkinleştirir. Değerlendirme süresi bittikten sonra, Ücretli Özelliklere devam eden erişim, geçerli bir Kişisel veya Kurumsal Lisans altında etkinleşmeyi gerektirir. Kurumsal lisanslama için sales@pangolin.net ile iletişime geçin."
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "Pangolin'i kişisel veya iş kullanımı için mi kullanıyorsunuz?",
"firstName": "İsim",
"lastName": "Soyisim",
"jobTitle": "İş Unvanı",
"primaryUseQuestion": "Pangolin'i öncelikli olarak ne amacıyla kullanmayı planlıyorsunuz?",
"industryQuestion": "Hangi sektördesiniz?",
"prospectiveUsersQuestion": "Kaç potansiyel kullanıcı öngörüyorsunuz?",
"prospectiveSitesQuestion": "Kaç potansiyel site (tünel) öngörüyorsunuz?",
"companyName": "Şirket İsmi",
"countryOfResidence": "İkamet edilen ülke",
"stateProvinceRegion": "Eyalet / İl / Bölge",
"postalZipCode": "Posta / ZIP Kodu",
"companyWebsite": "Şirket web sitesi",
"companyPhoneNumber": "Şirket telefon numarası",
"country": "Ülke",
"phoneNumberOptional": "Telefon numarası (isteğe bağlı)",
"complianceConfirmation": "Sağladığım bilgilerin doğru olduğunu ve Fossorial Ticari Lisans ile uyumlu olduğumu teyit ederim. Yanlış bilgi raporlamak veya ürün kullanımını yanlış tanımlamak lisans ihlalidir ve anahtarınızın iptal edilmesine neden olabilir."
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "Kapat",
"previous": "Önceki",
"next": "Sonraki",
"generateLicenseKey": "Lisans Anahtarı Oluştur"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "Lisans anahtarı başarıyla oluşturuldu",
"description": "Lisans anahtarınız oluşturuldu ve kullanıma hazır."
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "Lisans anahtarı oluşturulamadı",
"description": "Lisans anahtarı oluşturulurken bir hata oluştu."
}
}
},
"priority": "Öncelik",
"priorityDescription": "Daha yüksek öncelikli rotalar önce değerlendirilir. Öncelik = 100, otomatik sıralama anlamına gelir (sistem karar verir). Manuel öncelik uygulamak için başka bir numara kullanın.",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"instanceName": "Örnek İsmi",
"pathMatchModalTitle": "Yol Eşleşmesini Yapılandır",
"pathMatchModalDescription": "Gelen isteklerin yolu temel alarak nasıl eşleştirilmesi gerektiğini ayarlayın.",
"pathMatchType": "Eşleşme Türü",
"pathMatchPrefix": "Önek",
"pathMatchExact": "Tam",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"pathMatchValue": "Yol Değeri",
"clear": "Temizle",
"saveChanges": "Değişiklikleri Kaydet",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathMatchPrefixHelp": "Örnek: /api, /api/users vb.'ni eşleştirir.",
"pathMatchExactHelp": "Örnek: /api yalnızca /api'yi eşleştirir",
"pathMatchRegexHelp": "Örnek: ^/api/.* her şeyi eşleştirir /api/anything",
"pathRewriteModalTitle": "Yolu Yeniden Yazmayı Yapılandır",
"pathRewriteModalDescription": "Hedefe iletilmeden önce eşleşen yolu dönüştürün.",
"pathRewriteType": "Yeniden Yazma Türü",
"pathRewritePrefixOption": "Önek - Ön ek değiştirme",
"pathRewriteExactOption": "Tam - Tüm yolu değiştir",
"pathRewriteRegexOption": "Regex - Desen değiştirme",
"pathRewriteStripPrefixOption": "Ön Ek Kaldır - Ön eki sil",
"pathRewriteValue": "Yeniden Yazma Değeri",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewritePrefixHelp": "Eşleşen öneki bu değerle değiştir",
"pathRewriteExactHelp": "Yol tam olarak eşleştiğinde, yolun tamamını bu değerle değiştir",
"pathRewriteRegexHelp": "Değiştirme için $1, $2 gibi yakalama gruplarını kullan",
"pathRewriteStripPrefixHelp": "Öneki silmek veya yeni bir ön ek sağlamak için boş bırakın",
"pathRewritePrefix": "Önek",
"pathRewriteExact": "Tam",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewriteStrip": "Sil",
"pathRewriteStripLabel": "sil",
"sidebarEnableEnterpriseLicense": "Kurumsal Lisans Etkinleştir",
"cannotbeUndone": "Bu geri alınamaz.",
"toConfirm": "doğrulamak için",
"deleteClientQuestion": "Müşteriyi siteden ve organizasyondan kaldırmak istediğinizden emin misiniz?",
"clientMessageRemove": "Kaldırıldıktan sonra müşteri siteye bağlanamayacaktır."
}

View File

@@ -47,9 +47,8 @@
"edit": "编辑",
"siteConfirmDelete": "确认删除站点",
"siteDelete": "删除站点",
"siteMessageRemove": "一旦除,站点将无法访问。与站点相关的所有资源和目标也将被除。",
"siteMessageConfirm": "请在下面输入站点名称以确认。",
"siteQuestionRemove": "您确定要从组织中删除 {selectedSite} 站点吗?",
"siteMessageRemove": "一旦除,站点将无法访问。与站点相关的所有目标也将被除。",
"siteQuestionRemove": "您确定要从组织中删除该站点吗?",
"siteManageSites": "管理站点",
"siteDescription": "允许通过安全隧道连接到您的网络",
"siteCreate": "创建站点",
@@ -96,7 +95,7 @@
"siteWgDescription": "使用任何 WireGuard 客户端来建立隧道。需要手动配置 NAT。",
"siteWgDescriptionSaas": "使用任何WireGuard客户端建立隧道。需要手动配置NAT。仅适用于自托管节点。",
"siteLocalDescription": "仅限本地资源。不需要隧道。",
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
"siteLocalDescriptionSaas": "仅本地资源。没有隧道。仅在远程节点上可用。",
"siteSeeAll": "查看所有站点",
"siteTunnelDescription": "确定如何连接到您的网站",
"siteNewtCredentials": "Newt 凭据",
@@ -154,8 +153,7 @@
"protected": "受到保护",
"notProtected": "未受到保护",
"resourceMessageRemove": "一旦删除,资源将不再可访问。与该资源相关的所有目标也将被删除。",
"resourceMessageConfirm": "请在下面输入资源名称以确认。",
"resourceQuestionRemove": "您确定要从组织中删除 {selectedResource} 吗?",
"resourceQuestionRemove": "您确定要从组织中删除资源吗?",
"resourceHTTP": "HTTPS 资源",
"resourceHTTPDescription": "使用子域或根域名通过 HTTPS 向您的应用程序提出代理请求。",
"resourceRaw": "TCP/UDP 资源",
@@ -220,7 +218,7 @@
"orgDeleteConfirm": "确认删除组织",
"orgMessageRemove": "此操作不可逆,这将删除所有相关数据。",
"orgMessageConfirm": "要确认,请在下面输入组织名称。",
"orgQuestionRemove": "确定要删除 \"{selectedOrg}\" 组织吗?",
"orgQuestionRemove": "确定要删除组织吗?",
"orgUpdated": "组织已更新",
"orgUpdatedDescription": "组织已更新。",
"orgErrorUpdate": "更新组织失败",
@@ -287,9 +285,8 @@
"apiKeysAdd": "生成 API 密钥",
"apiKeysErrorDelete": "删除 API 密钥出错",
"apiKeysErrorDeleteMessage": "删除 API 密钥出错",
"apiKeysQuestionRemove": "您确定要从组织中删除 \"{selectedApiKey}\" API密钥吗",
"apiKeysQuestionRemove": "您确定要从组织中删除 API 密钥吗?",
"apiKeysMessageRemove": "一旦删除此API密钥将无法被使用。",
"apiKeysMessageConfirm": "要确认请在下方输入API密钥名称。",
"apiKeysDeleteConfirm": "确认删除 API 密钥",
"apiKeysDelete": "删除 API 密钥",
"apiKeysManage": "管理 API 密钥",
@@ -305,8 +302,7 @@
"userDeleteConfirm": "确认删除用户",
"userDeleteServer": "从服务器删除用户",
"userMessageRemove": "该用户将被从所有组织中删除并完全从服务器中删除。",
"userMessageConfirm": "请在下面输入用户名称以确认。",
"userQuestionRemove": "您确定要从服务器中永久删除 {selectedUser} 吗?",
"userQuestionRemove": "您确定要从服务器永久删除用户吗?",
"licenseKey": "许可证密钥",
"valid": "有效",
"numberOfSites": "站点数量",
@@ -339,7 +335,7 @@
"fossorialLicense": "查看Fossorial Commercial License和订阅条款",
"licenseMessageRemove": "这将删除许可证密钥和它授予的所有相关权限。",
"licenseMessageConfirm": "要确认,请在下面输入许可证密钥。",
"licenseQuestionRemove": "您确定要删除 {selectedKey} 的邀请吗",
"licenseQuestionRemove": "您确定要删除许可证密钥",
"licenseKeyDelete": "删除许可证密钥",
"licenseKeyDeleteConfirm": "确认删除许可证密钥",
"licenseTitle": "管理许可证状态",
@@ -372,7 +368,7 @@
"inviteRemoveErrorDescription": "删除邀请时出错。",
"inviteRemoved": "邀请已删除",
"inviteRemovedDescription": "为 {email} 创建的邀请已删除",
"inviteQuestionRemove": "您确定要删除 {email} 的邀请吗?",
"inviteQuestionRemove": "您确定要删除邀请吗?",
"inviteMessageRemove": "一旦删除,这个邀请将不再有效。",
"inviteMessageConfirm": "要确认,请在下面输入邀请的电子邮件地址。",
"inviteQuestionRegenerate": "您确定要重新邀请 {email} 吗?这将会撤销掉之前的邀请",
@@ -398,9 +394,8 @@
"userErrorOrgRemoveDescription": "删除用户时出错。",
"userOrgRemoved": "用户已删除",
"userOrgRemovedDescription": "已将 {email} 从组织中移除。",
"userQuestionOrgRemove": "确定要将 {email} 从组织中移除吗?",
"userQuestionOrgRemove": "确定要从组织中删除此用户吗?",
"userMessageOrgRemove": "一旦删除,这个用户将不再能够访问组织。 你总是可以稍后重新邀请他们,但他们需要再次接受邀请。",
"userMessageOrgConfirm": "请在下面输入用户名称以确认。",
"userRemoveOrgConfirm": "确认删除用户",
"userRemoveOrg": "从组织中删除用户",
"users": "用户",
@@ -730,7 +725,7 @@
"pangolinServerAdmin": "服务器管理员 - Pangolin",
"licenseTierProfessional": "专业许可证",
"licenseTierEnterprise": "企业许可证",
"licenseTierPersonal": "Personal License",
"licenseTierPersonal": "个人许可证",
"licensed": "已授权",
"yes": "是",
"no": "否",
@@ -742,7 +737,7 @@
"idpManageDescription": "查看和管理系统中的身份提供商",
"idpDeletedDescription": "身份提供商删除成功",
"idpOidc": "OAuth2/OIDC",
"idpQuestionRemove": "确定要永久删除 \"{name}\" 这个身份提供吗?",
"idpQuestionRemove": "确定要永久删除身份提供吗?",
"idpMessageRemove": "这将删除身份提供者和所有相关的配置。通过此提供者进行身份验证的用户将无法登录。",
"idpMessageConfirm": "要确认,请在下面输入身份提供者的名称。",
"idpConfirmDelete": "确认删除身份提供商",
@@ -1154,7 +1149,7 @@
"sidebarAllUsers": "所有用户",
"sidebarIdentityProviders": "身份提供商",
"sidebarLicense": "证书",
"sidebarClients": "Clients",
"sidebarClients": "客户端",
"sidebarDomains": "域",
"enableDockerSocket": "启用 Docker 蓝图",
"enableDockerSocketDescription": "启用 Docker Socket 标签擦除蓝图标签。套接字路径必须提供给新的。",
@@ -1211,9 +1206,8 @@
"domainCreate": "创建域",
"domainCreatedDescription": "域创建成功",
"domainDeletedDescription": "成功删除域",
"domainQuestionRemove": "您确定要从您的户中除域{domain}吗?",
"domainQuestionRemove": "您确定要从您的户中除域吗?",
"domainMessageRemove": "移除后,该域将不再与您的账户关联。",
"domainMessageConfirm": "要确认,请在下方输入域名。",
"domainConfirmDelete": "确认删除域",
"domainDelete": "删除域",
"domain": "域",
@@ -1558,14 +1552,13 @@
"autoLoginErrorNoRedirectUrl": "未从身份提供商收到重定向URL。",
"autoLoginErrorGeneratingUrl": "生成身份验证URL失败。",
"remoteExitNodeManageRemoteExitNodes": "远程节点",
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
"remoteExitNodeDescription": "自我主机一个或多个远程节点来扩展您的网络连接并减少对云的依赖性",
"remoteExitNodes": "节点",
"searchRemoteExitNodes": "搜索节点...",
"remoteExitNodeAdd": "添加节点",
"remoteExitNodeErrorDelete": "删除节点时出错",
"remoteExitNodeQuestionRemove": "您确定要从组织中删除 {selectedNode} 节点吗?",
"remoteExitNodeQuestionRemove": "您确定要从组织中删除节点吗?",
"remoteExitNodeMessageRemove": "一旦删除,该节点将不再能够访问。",
"remoteExitNodeMessageConfirm": "要确认,请输入以下节点的名称。",
"remoteExitNodeConfirmDelete": "确认删除节点",
"remoteExitNodeDelete": "删除节点",
"sidebarRemoteExitNodes": "远程节点",
@@ -1745,153 +1738,158 @@
"resourceHeaderAuthRemoveDescription": "已成功删除头部身份验证。",
"resourceErrorHeaderAuthRemove": "删除头部身份验证失败",
"resourceErrorHeaderAuthRemoveDescription": "无法删除资源的头部身份验证。",
"resourceHeaderAuthProtectionEnabled": "Header Authentication Enabled",
"resourceHeaderAuthProtectionDisabled": "Header Authentication Disabled",
"headerAuthRemove": "Remove Header Auth",
"headerAuthAdd": "Add Header Auth",
"resourceHeaderAuthProtectionEnabled": "头部认证已启用",
"resourceHeaderAuthProtectionDisabled": "头部身份验证已禁用",
"headerAuthRemove": "删除头部认证",
"headerAuthAdd": "添加页眉认证",
"resourceErrorHeaderAuthSetup": "设置页眉认证失败",
"resourceErrorHeaderAuthSetupDescription": "无法设置资源的头部身份验证。",
"resourceHeaderAuthSetup": "头部认证设置成功",
"resourceHeaderAuthSetupDescription": "头部认证已成功设置。",
"resourceHeaderAuthSetupTitle": "设置头部身份验证",
"resourceHeaderAuthSetupTitleDescription": "Set the basic auth credentials (username and password) to protect this resource with HTTP Header Authentication. Access it using the format https://username:password@resource.example.com",
"resourceHeaderAuthSetupTitleDescription": "使用HTTP 头身份验证来设置基本身份验证信息(用户名和密码)。使用 https://username:password@resource.example.com 访问它",
"resourceHeaderAuthSubmit": "设置头部身份验证",
"actionSetResourceHeaderAuth": "设置头部身份验证",
"enterpriseEdition": "Enterprise Edition",
"unlicensed": "Unlicensed",
"beta": "Beta",
"manageClients": "Manage Clients",
"manageClientsDescription": "Clients are devices that can connect to your sites",
"licenseTableValidUntil": "Valid Until",
"saasLicenseKeysSettingsTitle": "Enterprise Licenses",
"saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances",
"sidebarEnterpriseLicenses": "Licenses",
"generateLicenseKey": "Generate License Key",
"enterpriseEdition": "企业版",
"unlicensed": "未授权",
"beta": "测试版",
"manageClients": "管理客户端",
"manageClientsDescription": "客户端是可以连接到您的站点的设备",
"licenseTableValidUntil": "有效期至",
"saasLicenseKeysSettingsTitle": "企业许可证",
"saasLicenseKeysSettingsDescription": "为自我托管的 Pangolin 实例生成和管理企业许可证密钥",
"sidebarEnterpriseLicenses": "许可协议",
"generateLicenseKey": "生成许可证密钥",
"generateLicenseKeyForm": {
"validation": {
"emailRequired": "Please enter a valid email address",
"useCaseTypeRequired": "Please select a use case type",
"firstNameRequired": "First name is required",
"lastNameRequired": "Last name is required",
"primaryUseRequired": "Please describe your primary use",
"jobTitleRequiredBusiness": "Job title is required for business use",
"industryRequiredBusiness": "Industry is required for business use",
"stateProvinceRegionRequired": "State/Province/Region is required",
"postalZipCodeRequired": "Postal/ZIP Code is required",
"companyNameRequiredBusiness": "Company name is required for business use",
"countryOfResidenceRequiredBusiness": "Country of residence is required for business use",
"countryRequiredPersonal": "Country is required for personal use",
"agreeToTermsRequired": "You must agree to the terms",
"complianceConfirmationRequired": "You must confirm compliance with the Fossorial Commercial License"
"emailRequired": "请输入一个有效的电子邮件地址",
"useCaseTypeRequired": "请选择一个使用的案例类型",
"firstNameRequired": "必填名",
"lastNameRequired": "姓氏是必填项",
"primaryUseRequired": "请描述您的主要使用",
"jobTitleRequiredBusiness": "企业使用必须有职位头衔。",
"industryRequiredBusiness": "商业使用需要工业",
"stateProvinceRegionRequired": "州/省/地区是必填项",
"postalZipCodeRequired": "邮政编码是必需的",
"companyNameRequiredBusiness": "企业使用需要公司名称",
"countryOfResidenceRequiredBusiness": "商业使用必须是居住国",
"countryRequiredPersonal": "国家需要个人使用",
"agreeToTermsRequired": "您必须同意条款",
"complianceConfirmationRequired": "您必须确认遵守Fossorial Commercial License"
},
"useCaseOptions": {
"personal": {
"title": "Personal Use",
"description": "For individual, non-commercial use such as learning, personal projects, or experimentation."
"title": "个人使用",
"description": "个人非商业用途,如学习、个人项目或实验。"
},
"business": {
"title": "Business Use",
"description": "For use within organizations, companies, or commercial or revenue-generating activities."
"title": "商业使用",
"description": "供组织、公司或商业或创收活动使用。"
}
},
"steps": {
"emailLicenseType": {
"title": "Email & License Type",
"description": "Enter your email and choose your license type"
"title": "电子邮件和许可证类型",
"description": "输入您的电子邮件并选择您的许可证类型"
},
"personalInformation": {
"title": "Personal Information",
"description": "Tell us about yourself"
"title": "个人信息",
"description": "告诉我们自己的信息"
},
"contactInformation": {
"title": "Contact Information",
"description": "Your contact details"
"title": "联系信息",
"description": "您的联系信息"
},
"termsGenerate": {
"title": "Terms & Generate",
"description": "Review and accept terms to generate your license"
"title": "条款并生成",
"description": "审阅并接受条款生成您的许可证"
}
},
"alerts": {
"commercialUseDisclosure": {
"title": "Usage Disclosure",
"description": "Select the license tier that accurately reflects your intended use. The Personal License permits free use of the Software for individual, non-commercial or small-scale commercial activities with annual gross revenue under $100,000 USD. Any use beyond these limits — including use within a business, organization, or other revenue-generating environment — requires a valid Enterprise License and payment of the applicable licensing fee. All users, whether Personal or Enterprise, must comply with the Fossorial Commercial License Terms."
"title": "使用情况披露",
"description": "选择能准确反映您预定用途的许可等级。 个人许可证允许对个人、非商业性或小型商业活动免费使用软件,年收入毛额不到100 000美元。 超出这些限度的任何用途,包括在企业、组织内的用途。 或其他创收环境——需要有效的企业许可证和支付适用的许可证费用。 所有用户,不论是个人还是企业,都必须遵守寄养商业许可证条款。"
},
"trialPeriodInformation": {
"title": "Trial Period Information",
"description": "This License Key enables Enterprise features for a 7-day evaluation period. Continued access to Paid Features beyond the evaluation period requires activation under a valid Personal or Enterprise License. For Enterprise licensing, contact sales@pangolin.net."
"title": "试用期信息",
"description": "此许可证密钥使企业特性能够持续7天的评价。 在评估期过后继续访问付费功能需要在有效的个人或企业许可证下激活。对于企业许可证请联系Sales@pangolin.net"
}
},
"form": {
"useCaseQuestion": "Are you using Pangolin for personal or business use?",
"firstName": "First Name",
"lastName": "Last Name",
"jobTitle": "Job Title",
"primaryUseQuestion": "What do you primarily plan to use Pangolin for?",
"industryQuestion": "What is your industry?",
"prospectiveUsersQuestion": "How many prospective users do you expect to have?",
"prospectiveSitesQuestion": "How many prospective sites (tunnels) do you expect to have?",
"companyName": "Company name",
"countryOfResidence": "Country of residence",
"stateProvinceRegion": "State / Province / Region",
"postalZipCode": "Postal / ZIP Code",
"companyWebsite": "Company website",
"companyPhoneNumber": "Company phone number",
"country": "Country",
"phoneNumberOptional": "Phone number (optional)",
"complianceConfirmation": "I confirm that I am in compliance with the Fossorial Commercial License and that reporting inaccurate information or misidentifying use of the product is a violation of the license."
"useCaseQuestion": "您是否正在使用 Pangolin 进行个人或商业使用?",
"firstName": "名字",
"lastName": "名字",
"jobTitle": "工作头衔:",
"primaryUseQuestion": "您主要计划使用 Pangolin 吗?",
"industryQuestion": "您的行业是什么?",
"prospectiveUsersQuestion": "您期望有多少预期用户?",
"prospectiveSitesQuestion": "您期望有多少站点(隧道)",
"companyName": "公司名称",
"countryOfResidence": "居住国",
"stateProvinceRegion": "州/省/地区",
"postalZipCode": "邮政编码",
"companyWebsite": "公司网站",
"companyPhoneNumber": "公司电话号码",
"country": "国家",
"phoneNumberOptional": "电话号码 (可选)",
"complianceConfirmation": "我确认我提供的资料是准确的,我遵守了寄养商业许可证。 报告不准确的信息或错误的产品使用是违反许可证的行为,可能导致您的密钥被撤销。"
},
"buttons": {
"close": "Close",
"previous": "Previous",
"next": "Next",
"generateLicenseKey": "Generate License Key"
"close": "关闭",
"previous": "上一个",
"next": "下一个",
"generateLicenseKey": "生成许可证密钥"
},
"toasts": {
"success": {
"title": "License key generated successfully",
"description": "Your license key has been generated and is ready to use."
"title": "许可证密钥生成成功",
"description": "您的许可证密钥已经生成并准备使用。"
},
"error": {
"title": "Failed to generate license key",
"description": "An error occurred while generating the license key."
"title": "生成许可证密钥失败",
"description": "生成许可证密钥时出错。"
}
}
},
"priority": "优先权",
"priorityDescription": "先评估更高优先级线路。优先级 = 100意味着自动排序(系统决定). 使用另一个数字强制执行手动优先级。",
"instanceName": "Instance Name",
"pathMatchModalTitle": "Configure Path Matching",
"pathMatchModalDescription": "Set up how incoming requests should be matched based on their path.",
"pathMatchType": "Match Type",
"pathMatchPrefix": "Prefix",
"pathMatchExact": "Exact",
"pathMatchRegex": "Regex",
"pathMatchValue": "Path Value",
"clear": "Clear",
"saveChanges": "Save Changes",
"instanceName": "实例名称",
"pathMatchModalTitle": "配置路径匹配",
"pathMatchModalDescription": "根据传入请求的路径设置匹配方式。",
"pathMatchType": "匹配类型",
"pathMatchPrefix": "前缀",
"pathMatchExact": "精准的",
"pathMatchRegex": "正则表达式",
"pathMatchValue": "路径值",
"clear": "清空",
"saveChanges": "保存更改",
"pathMatchRegexPlaceholder": "^/api/.*",
"pathMatchDefaultPlaceholder": "/path",
"pathMatchPrefixHelp": "Example: /api matches /api, /api/users, etc.",
"pathMatchExactHelp": "Example: /api matches only /api",
"pathMatchRegexHelp": "Example: ^/api/.* matches /api/anything",
"pathRewriteModalTitle": "Configure Path Rewriting",
"pathRewriteModalDescription": "Transform the matched path before forwarding to the target.",
"pathRewriteType": "Rewrite Type",
"pathRewritePrefixOption": "Prefix - Replace prefix",
"pathRewriteExactOption": "Exact - Replace entire path",
"pathRewriteRegexOption": "Regex - Pattern replacement",
"pathRewriteStripPrefixOption": "Strip Prefix - Remove prefix",
"pathRewriteValue": "Rewrite Value",
"pathMatchDefaultPlaceholder": "/路径",
"pathMatchPrefixHelp": "示例: /api 匹配/api, /api/users 等。",
"pathMatchExactHelp": "示例:/api 匹配仅限/api",
"pathMatchRegexHelp": "例如:^/api/.* 匹配/api/why",
"pathRewriteModalTitle": "配置路径重写",
"pathRewriteModalDescription": "在转发到目标之前变换匹配的路径。",
"pathRewriteType": "重写类型",
"pathRewritePrefixOption": "前缀 - 替换前缀",
"pathRewriteExactOption": "精确-替换整个路径",
"pathRewriteRegexOption": "正则表达式 - 替换模式",
"pathRewriteStripPrefixOption": "删除前缀 - 删除前缀",
"pathRewriteValue": "重写值",
"pathRewriteRegexPlaceholder": "/new/$1",
"pathRewriteDefaultPlaceholder": "/new-path",
"pathRewritePrefixHelp": "Replace the matched prefix with this value",
"pathRewriteExactHelp": "Replace the entire path with this value when the path matches exactly",
"pathRewriteRegexHelp": "Use capture groups like $1, $2 for replacement",
"pathRewriteStripPrefixHelp": "Leave empty to strip prefix or provide new prefix",
"pathRewritePrefix": "Prefix",
"pathRewriteExact": "Exact",
"pathRewriteRegex": "Regex",
"pathRewriteStrip": "Strip",
"pathRewriteStripLabel": "strip"
"pathRewritePrefixHelp": "用此值替换匹配的前缀",
"pathRewriteExactHelp": "当路径匹配时用此值替换整个路径",
"pathRewriteRegexHelp": "使用抓取组,如$1$2来替换",
"pathRewriteStripPrefixHelp": "留空以脱离前缀或提供新的前缀",
"pathRewritePrefix": "前缀",
"pathRewriteExact": "精准的",
"pathRewriteRegex": "正则表达式",
"pathRewriteStrip": "带状图",
"pathRewriteStripLabel": "条形图",
"sidebarEnableEnterpriseLicense": "启用企业许可证",
"cannotbeUndone": "无法撤消。",
"toConfirm": "确认",
"deleteClientQuestion": "您确定要从站点和组织中删除客户吗?",
"clientMessageRemove": "一旦删除,客户端将无法连接到站点。"
}

24
package-lock.json generated
View File

@@ -105,7 +105,7 @@
"devDependencies": {
"@dotenvx/dotenvx": "1.51.0",
"@esbuild-plugins/tsconfig-paths": "0.1.2",
"@react-email/preview-server": "4.3.0",
"@react-email/preview-server": "4.3.1",
"@tailwindcss/postcss": "^4.1.14",
"@types/better-sqlite3": "7.6.12",
"@types/cookie-parser": "1.4.9",
@@ -116,7 +116,7 @@
"@types/jmespath": "^0.15.2",
"@types/js-yaml": "4.0.9",
"@types/jsonwebtoken": "^9.0.10",
"@types/node": "24.7.2",
"@types/node": "24.8.1",
"@types/nodemailer": "7.0.2",
"@types/pg": "8.15.5",
"@types/react": "19.2.2",
@@ -129,7 +129,7 @@
"esbuild": "0.25.11",
"esbuild-node-externals": "1.18.0",
"postcss": "^8",
"react-email": "4.3.0",
"react-email": "4.3.1",
"tailwindcss": "^4.1.4",
"tsc-alias": "1.8.16",
"tsx": "4.20.6",
@@ -6194,9 +6194,9 @@
}
},
"node_modules/@react-email/preview-server": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/@react-email/preview-server/-/preview-server-4.3.0.tgz",
"integrity": "sha512-cUaSrxezCzdg2hF6PzIxVrtagLdw3z3ovHeB3y2RDkmDZpp7EeIoNyJm22Ch2S0uAqTZNAgqu67aroLn3mFC1A==",
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/@react-email/preview-server/-/preview-server-4.3.1.tgz",
"integrity": "sha512-3YdkWMCy5PyMLT/ShbGfmZ0qbYGE+IlMG1PkSe2KEvv+NUC0j3XFrk17Ej4VHZZ5ecR+pezuMSm5W7IX34GGyw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8664,9 +8664,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "24.7.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz",
"integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==",
"version": "24.8.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.8.1.tgz",
"integrity": "sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -19152,9 +19152,9 @@
}
},
"node_modules/react-email": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/react-email/-/react-email-4.3.0.tgz",
"integrity": "sha512-XFHCSfhdlO7k5q2TYGwC0HsVh5Yn13YaOdahuJEUEOfOJKHEpSP4PKg7R/RiKFoK9cDvzunhY+58pXxz0vE2zA==",
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/react-email/-/react-email-4.3.1.tgz",
"integrity": "sha512-GBgI7fl0fXVFVQ4zlXG+x14egDNX1WVlOrAXKMyc1h9xeTnIAt/u3g1liU4v+7Yv3yprMSkZ1mIO3YPuTKo77A==",
"dev": true,
"license": "MIT",
"dependencies": {

View File

@@ -128,7 +128,7 @@
"devDependencies": {
"@dotenvx/dotenvx": "1.51.0",
"@esbuild-plugins/tsconfig-paths": "0.1.2",
"@react-email/preview-server": "4.3.0",
"@react-email/preview-server": "4.3.1",
"@tailwindcss/postcss": "^4.1.14",
"@types/better-sqlite3": "7.6.12",
"@types/cookie-parser": "1.4.9",
@@ -139,7 +139,7 @@
"@types/jmespath": "^0.15.2",
"@types/js-yaml": "4.0.9",
"@types/jsonwebtoken": "^9.0.10",
"@types/node": "24.7.2",
"@types/node": "24.8.1",
"@types/nodemailer": "7.0.2",
"@types/pg": "8.15.5",
"@types/react": "19.2.2",
@@ -152,7 +152,7 @@
"esbuild": "0.25.11",
"esbuild-node-externals": "1.18.0",
"postcss": "^8",
"react-email": "4.3.0",
"react-email": "4.3.1",
"tailwindcss": "^4.1.4",
"tsc-alias": "1.8.16",
"tsx": "4.20.6",

View File

@@ -126,7 +126,7 @@ export const targets = pgTable("targets", {
pathMatchType: text("pathMatchType"), // exact, prefix, regex
rewritePath: text("rewritePath"), // if set, rewrites the path to this value before sending to the target
rewritePathType: text("rewritePathType"), // exact, prefix, regex, stripPrefix
priority: integer("priority").default(100)
priority: integer("priority").notNull().default(100)
});
export const targetHealthCheck = pgTable("targetHealthCheck", {

View File

@@ -138,7 +138,7 @@ export const targets = sqliteTable("targets", {
pathMatchType: text("pathMatchType"), // exact, prefix, regex
rewritePath: text("rewritePath"), // if set, rewrites the path to this value before sending to the target
rewritePathType: text("rewritePathType"), // exact, prefix, regex, stripPrefix
priority: integer("priority").default(100)
priority: integer("priority").notNull().default(100)
});
export const targetHealthCheck = sqliteTable("targetHealthCheck", {

View File

@@ -88,7 +88,14 @@ export async function getTraefikConfig(
and(
eq(targets.enabled, true),
eq(resources.enabled, true),
eq(sites.exitNodeId, exitNodeId),
or(
eq(sites.exitNodeId, exitNodeId),
and(
isNull(sites.exitNodeId),
sql`(${siteTypes.includes("local") ? 1 : 0} = 1)`, // only allow local sites if "local" is in siteTypes
eq(sites.type, "local")
)
),
or(
ne(targetHealthCheck.hcHealth, "unhealthy"), // Exclude unhealthy targets
isNull(targetHealthCheck.hcHealth) // Include targets with no health check record

View File

@@ -40,6 +40,7 @@ import {
CertificateResult,
getValidCertificatesForDomains
} from "#private/lib/certificates";
import { build } from "@server/build";
const redirectHttpsMiddlewareName = "redirect-to-https";
const redirectToRootMiddlewareName = "redirect-to-root";
@@ -120,7 +121,14 @@ export async function getTraefikConfig(
and(
eq(targets.enabled, true),
eq(resources.enabled, true),
eq(sites.exitNodeId, exitNodeId),
or(
eq(sites.exitNodeId, exitNodeId),
and(
isNull(sites.exitNodeId),
sql`(${siteTypes.includes("local") ? 1 : 0} = 1)`, // only allow local sites if "local" is in siteTypes
eq(sites.type, "local")
)
),
or(
ne(targetHealthCheck.hcHealth, "unhealthy"), // Exclude unhealthy targets
isNull(targetHealthCheck.hcHealth) // Include targets with no health check record

View File

@@ -1,3 +1,16 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
import { Request, Response, NextFunction } from "express";
import createHttpError from "http-errors";
import HttpCode from "@server/types/HttpCode";

View File

@@ -1,3 +1,16 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
import { Request, Response, NextFunction } from "express";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";

View File

@@ -1,2 +1,15 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
export * from "./listGeneratedLicenses";
export * from "./generateNewLicense";

View File

@@ -1,3 +1,16 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
import { Request, Response, NextFunction } from "express";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";

View File

@@ -1,3 +1,16 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
import { Request, Response, NextFunction } from "express";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";

View File

@@ -1,3 +1,16 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
import { Request, Response, NextFunction } from "express";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";

View File

@@ -1,3 +1,16 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
import { Request, Response, NextFunction } from "express";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";

View File

@@ -1,3 +1,16 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
export * from "./getLicenseStatus";
export * from "./activateLicense";
export * from "./listLicenseKeys";

View File

@@ -1,3 +1,16 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
import { Request, Response, NextFunction } from "express";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";

View File

@@ -1,3 +1,16 @@
/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
import { Request, Response, NextFunction } from "express";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";

View File

@@ -267,50 +267,10 @@ export async function createSite(
})
.returning();
} else if (type == "local") {
let exitNodeIdToCreate = exitNodeId;
if (!exitNodeIdToCreate) {
if (build == "saas") {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
"Exit node ID of a remote node is required for local sites"
)
);
}
// select the exit node for local sites
// TODO: THIS SHOULD BE CHOSEN IN THE FRONTEND OR SOMETHING BECAUSE
// YOU CAN HAVE MORE THAN ONE NODE IN THE SYSTEM AND YOU SHOULD SELECT
// WHICH GERBIL NODE TO PUT THE SITE ON BUT FOR NOW THIS WILL DO
const [localExitNode] = await trx
.select()
.from(exitNodes)
.where(eq(exitNodes.type, "gerbil"))
.limit(1);
if (!localExitNode) {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
"No gerbil exit node found for organization. Please create a gerbil exit node first."
)
);
}
exitNodeIdToCreate = localExitNode.exitNodeId;
} else {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
"Site type not recognized"
)
);
}
[newSite] = await trx
.insert(sites)
.values({
exitNodeId: exitNodeIdToCreate,
exitNodeId: exitNodeId || null,
orgId,
name,
niceId,
@@ -321,6 +281,13 @@ export async function createSite(
subnet: "0.0.0.0/32"
})
.returning();
} else {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
"Site type not recognized"
)
);
}
const adminRole = await trx

View File

@@ -1,41 +1,57 @@
import { ActionsEnum } from "@server/auth/actions";
import { db } from "@server/db";
import { db, orgs } from "@server/db";
import { actions, roles, roleActions } from "@server/db";
import { eq, inArray } from "drizzle-orm";
import logger from "@server/logger";
export async function ensureActions() {
const actionIds = Object.values(ActionsEnum);
const existingActions = await db.select().from(actions).execute();
const existingActionIds = existingActions.map((action) => action.actionId);
const actionsToAdd = actionIds.filter(
(id) => !existingActionIds.includes(id)
);
const actionsToRemove = existingActionIds.filter(
(id) => !actionIds.includes(id as ActionsEnum)
);
const defaultRoles = await db
.select()
.from(roles)
.where(eq(roles.isAdmin, true))
.execute();
await db.transaction(async (trx) => {
const actionIds = Object.values(ActionsEnum);
const existingActions = await trx.select().from(actions).execute();
const existingActionIds = existingActions.map(
(action) => action.actionId
);
const actionsToAdd = actionIds.filter(
(id) => !existingActionIds.includes(id)
);
const actionsToRemove = existingActionIds.filter(
(id) => !actionIds.includes(id as ActionsEnum)
);
const defaultRoles = await trx
.select()
.from(roles)
.where(eq(roles.isAdmin, true))
.execute();
const allOrgs = await trx
.select({ orgId: orgs.orgId })
.from(orgs)
.execute();
const allOrgIds = new Set(allOrgs.map((o) => o.orgId));
const validRoles = defaultRoles.filter(
(r) => r.orgId && r.roleId && allOrgIds.has(r.orgId)
);
const skipped = defaultRoles.length - validRoles.length;
if (skipped > 0) {
logger.warn(`Skipped ${skipped} orphaned admin roles missing orgs`);
}
// Add new actions
for (const actionId of actionsToAdd) {
logger.debug(`Adding action: ${actionId}`);
await trx.insert(actions).values({ actionId }).execute();
// Add new actions to the Default role
if (defaultRoles.length != 0) {
if (validRoles.length != 0) {
await trx
.insert(roleActions)
.values(
defaultRoles.map((role) => ({
roleId: role.roleId!,
validRoles.map((role) => ({
roleId: role.roleId,
actionId,
orgId: role.orgId!
orgId: role.orgId
}))
)
.execute();
@@ -45,14 +61,14 @@ export async function ensureActions() {
// Remove deprecated actions
if (actionsToRemove.length > 0) {
logger.debug(`Removing actions: ${actionsToRemove.join(", ")}`);
await trx
.delete(actions)
.where(inArray(actions.actionId, actionsToRemove))
.execute();
await trx
.delete(roleActions)
.where(inArray(roleActions.actionId, actionsToRemove))
.execute();
await trx
.delete(actions)
.where(inArray(actions.actionId, actionsToRemove))
.execute();
}
});
}

View File

@@ -12,6 +12,7 @@ import m4 from "./scriptsPg/1.9.0";
import m5 from "./scriptsPg/1.10.0";
import m6 from "./scriptsPg/1.10.2";
import m7 from "./scriptsPg/1.11.0";
import m8 from "./scriptsPg/1.11.1";
// THIS CANNOT IMPORT ANYTHING FROM THE SERVER
// EXCEPT FOR THE DATABASE AND THE SCHEMA
@@ -25,6 +26,7 @@ const migrations = [
{ version: "1.10.0", run: m5 },
{ version: "1.10.2", run: m6 },
{ version: "1.11.0", run: m7 },
{ version: "1.11.1", run: m8 }
// Add new migrations here as they are created
] as {
version: string;

View File

@@ -30,6 +30,7 @@ import m25 from "./scriptsSqlite/1.10.0";
import m26 from "./scriptsSqlite/1.10.1";
import m27 from "./scriptsSqlite/1.10.2";
import m28 from "./scriptsSqlite/1.11.0";
import m29 from "./scriptsSqlite/1.11.1";
// THIS CANNOT IMPORT ANYTHING FROM THE SERVER
// EXCEPT FOR THE DATABASE AND THE SCHEMA
@@ -59,6 +60,7 @@ const migrations = [
{ version: "1.10.1", run: m26 },
{ version: "1.10.2", run: m27 },
{ version: "1.11.0", run: m28 },
{ version: "1.11.1", run: m29 }
// Add new migrations here as they are created
] as const;

View File

@@ -7,30 +7,9 @@ export default async function migration() {
console.log(`Running setup script ${version}...`);
try {
// Get the first exit node with type 'gerbil'
const exitNodesQuery = await db.execute(
sql`SELECT "exitNodeId" FROM "exitNodes" WHERE "type" = 'gerbil' LIMIT 1`
);
const exitNodes = exitNodesQuery.rows as {
exitNodeId: number;
}[];
await db.execute(sql`BEGIN`);
const exitNodeId = exitNodes.length > 0 ? exitNodes[0].exitNodeId : null;
// Get all sites with type 'local'
const sitesQuery = await db.execute(
sql`SELECT "siteId" FROM "sites" WHERE "type" = 'local'`
);
const sites = sitesQuery.rows as {
siteId: number;
}[];
// Update sites to use the exit node
for (const site of sites) {
await db.execute(sql`
UPDATE "sites" SET "exitNodeId" = ${exitNodeId} WHERE "siteId" = ${site.siteId}
`);
}
await db.execute(sql`UPDATE "exitNodes" SET "online" = true`); // Mark exit nodes as online
await db.execute(sql`COMMIT`);
console.log(`Updated sites with exit node`);

View File

@@ -11,27 +11,8 @@ export default async function migration() {
const db = new Database(location);
db.transaction(() => {
const exitNodes = db.prepare(`SELECT * FROM exitNodes WHERE type = 'gerbil' LIMIT 1`).all() as {
exitNodeId: number;
name: string;
}[];
const exitNodeId = exitNodes.length > 0 ? exitNodes[0].exitNodeId : null;
// get all of the targets
const sites = db.prepare(`SELECT * FROM sites WHERE type = 'local'`).all() as {
siteId: number;
exitNodeId: number | null;
}[];
const defineExitNodeOnSite = db.prepare(
`UPDATE sites SET exitNodeId = ? WHERE siteId = ?`
);
for (const site of sites) {
defineExitNodeOnSite.run(exitNodeId, site.siteId);
}
db.prepare(`UPDATE exitNodes SET online = 1`).run(); // mark exit nodes as online
})();
console.log(`${version} migration complete`);
}
}

View File

@@ -1118,28 +1118,32 @@ export default function ReverseProxyTargets(props: {
</PopoverContent>
</Popover>
<Select
defaultValue={row.original.method ?? "http"}
onValueChange={(value) =>
updateTarget(row.original.targetId, {
...row.original,
method: value
})
}
>
<SelectTrigger className="h-8 px-2 w-[70px] text-sm font-normal border-none bg-transparent shadow-none focus:ring-0 focus:outline-none focus-visible:ring-0 data-[state=open]:bg-transparent">
{row.original.method || "http"}
</SelectTrigger>
<SelectContent>
<SelectItem value="http">http</SelectItem>
<SelectItem value="https">https</SelectItem>
<SelectItem value="h2c">h2c</SelectItem>
</SelectContent>
</Select>
{resource.http && (
<Select
defaultValue={row.original.method ?? "http"}
onValueChange={(value) =>
updateTarget(row.original.targetId, {
...row.original,
method: value
})
}
>
<SelectTrigger className="h-8 px-2 w-[70px] text-sm font-normal border-none bg-transparent shadow-none focus:ring-0 focus:outline-none focus-visible:ring-0 data-[state=open]:bg-transparent">
{row.original.method || "http"}
</SelectTrigger>
<SelectContent>
<SelectItem value="http">http</SelectItem>
<SelectItem value="https">https</SelectItem>
<SelectItem value="h2c">h2c</SelectItem>
</SelectContent>
</Select>
)}
<div className="flex items-center justify-center bg-muted px-2 h-9">
{"://"}
</div>
{resource.http && (
<div className="flex items-center justify-center bg-muted px-2 h-9">
{"://"}
</div>
)}
<Input
defaultValue={row.original.ip}

View File

@@ -1034,28 +1034,32 @@ export default function Page() {
</PopoverContent>
</Popover>
<Select
defaultValue={row.original.method ?? "http"}
onValueChange={(value) =>
updateTarget(row.original.targetId, {
...row.original,
method: value
})
}
>
<SelectTrigger className="h-8 px-2 w-[70px] border-none bg-transparent shadow-none focus:ring-0 focus:outline-none focus-visible:ring-0 data-[state=open]:bg-transparent">
{row.original.method || "http"}
</SelectTrigger>
<SelectContent>
<SelectItem value="http">http</SelectItem>
<SelectItem value="https">https</SelectItem>
<SelectItem value="h2c">h2c</SelectItem>
</SelectContent>
</Select>
{isHttp && (
<Select
defaultValue={row.original.method ?? "http"}
onValueChange={(value) =>
updateTarget(row.original.targetId, {
...row.original,
method: value
})
}
>
<SelectTrigger className="h-8 px-2 w-[70px] border-none bg-transparent shadow-none focus:ring-0 focus:outline-none focus-visible:ring-0 data-[state=open]:bg-transparent">
{row.original.method || "http"}
</SelectTrigger>
<SelectContent>
<SelectItem value="http">http</SelectItem>
<SelectItem value="https">https</SelectItem>
<SelectItem value="h2c">h2c</SelectItem>
</SelectContent>
</Select>
)}
<div className="flex items-center justify-center bg-muted px-2 h-9">
{"://"}
</div>
{isHttp && (
<div className="flex items-center justify-center bg-muted px-2 h-9">
{"://"}
</div>
)}
<Input
defaultValue={row.original.ip}