Merge branch 'master' into 2476-rwmutex
This commit is contained in:
commit
7e1b4ca6fe
@ -1,40 +1,3 @@
|
|||||||
.DS_Store
|
# Ignore everything except for explicitly allowed stuff.
|
||||||
/.git
|
*
|
||||||
/.github
|
!dist/docker
|
||||||
/.vscode
|
|
||||||
.idea
|
|
||||||
/AdGuardHome
|
|
||||||
/AdGuardHome.exe
|
|
||||||
/AdGuardHome.yaml
|
|
||||||
/AdGuardHome.log
|
|
||||||
/data
|
|
||||||
/build
|
|
||||||
/dist
|
|
||||||
/client/node_modules
|
|
||||||
/.gitattributes
|
|
||||||
/.gitignore
|
|
||||||
/.goreleaser.yml
|
|
||||||
/changelog.config.js
|
|
||||||
/coverage.txt
|
|
||||||
/Dockerfile
|
|
||||||
/LICENSE.txt
|
|
||||||
/Makefile
|
|
||||||
/querylog.json
|
|
||||||
/querylog.json.1
|
|
||||||
/*.md
|
|
||||||
|
|
||||||
# Test output
|
|
||||||
dnsfilter/tests/top-1m.csv
|
|
||||||
dnsfilter/tests/dnsfilter.TestLotsOfRules*.pprof
|
|
||||||
|
|
||||||
# Snapcraft build temporary files
|
|
||||||
*.snap
|
|
||||||
launchpad_credentials
|
|
||||||
snapcraft_login
|
|
||||||
snapcraft.yaml.bak
|
|
||||||
|
|
||||||
# IntelliJ IDEA project files
|
|
||||||
*.iml
|
|
||||||
|
|
||||||
# Packr
|
|
||||||
*-packr.go
|
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e -f -u
|
|
||||||
|
|
||||||
if [ "$(git diff --cached --name-only -- '*.js')" ]
|
|
||||||
then
|
|
||||||
make js-lint js-test
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$(git diff --cached --name-only -- '*.go' 'go.mod')" ]
|
|
||||||
then
|
|
||||||
make go-lint go-test
|
|
||||||
fi
|
|
12
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
12
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
@ -1,11 +1,9 @@
|
|||||||
---
|
---
|
||||||
name: Bug report
|
name: Bug report
|
||||||
about: Create a bug report to help us improve AdGuard Home
|
about: Create a bug report to help us improve AdGuard Home
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<!-- As an open-source project with a dedicated but small maintainer team, it can sometimes take a long time for issues to be addressed so please be patient and we will get back to you as soon as we can.
|
Have a question or an idea? Please search it [on our forum](https://github.com/AdguardTeam/AdGuardHome/discussions) to make sure it was not yet asked. If you cannot find what you had in mind, please [submit it here](https://github.com/AdguardTeam/AdGuardHome/discussions/new).
|
||||||
-->
|
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
@ -17,14 +15,18 @@ Please answer the following questions for yourself before submitting an issue. *
|
|||||||
|
|
||||||
### Issue Details
|
### Issue Details
|
||||||
|
|
||||||
<!--- Please include all relevant details about the environment you experienced the bug in -->
|
<!-- Please include all relevant details about the environment you experienced the bug in. -->
|
||||||
|
|
||||||
* **Version of AdGuard Home server:**
|
* **Version of AdGuard Home server:**
|
||||||
* <!-- (e.g. v1.0) -->
|
* <!-- (e.g. v0.123.4) -->
|
||||||
|
* **How did you install AdGuard Home:**
|
||||||
|
* <!-- (e.g. Built from source, Snapcraft, Docker, Github releases, etc.) -->
|
||||||
* **How did you setup DNS configuration:**
|
* **How did you setup DNS configuration:**
|
||||||
* <!-- (System/Router/IoT) -->
|
* <!-- (System/Router/IoT) -->
|
||||||
* **If it's a router or IoT, please write device model:**
|
* **If it's a router or IoT, please write device model:**
|
||||||
* <!-- (e.g. Raspberry Pi 3 Model B) -->
|
* <!-- (e.g. Raspberry Pi 3 Model B) -->
|
||||||
|
* **CPU architecture:**
|
||||||
|
* <!-- (e.g. AMD64, MIPS, etc.) -->
|
||||||
* **Operating system and version:**
|
* **Operating system and version:**
|
||||||
* <!-- (e.g. Ubuntu 18.04.1) -->
|
* <!-- (e.g. Ubuntu 18.04.1) -->
|
||||||
|
|
||||||
|
6
.github/ISSUE_TEMPLATE/Feature_request.md
vendored
6
.github/ISSUE_TEMPLATE/Feature_request.md
vendored
@ -1,11 +1,9 @@
|
|||||||
---
|
---
|
||||||
name: Feature request
|
name: Feature request
|
||||||
about: Suggest an idea for AdGuard Home
|
about: Suggest a feature request for AdGuard Home
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<!-- As an open-source project with a dedicated but small maintainer team, it can sometimes take a long time for issues to be addressed so please be patient and we will get back to you as soon as we can.
|
Have a question or an idea? Please search it [on our forum](https://github.com/AdguardTeam/AdGuardHome/discussions) to make sure it was not yet asked. If you cannot find what you had in mind, please [submit it here](https://github.com/AdguardTeam/AdGuardHome/discussions/new).
|
||||||
-->
|
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
|
9
.github/stale.yml
vendored
9
.github/stale.yml
vendored
@ -1,19 +1,22 @@
|
|||||||
# Number of days of inactivity before an issue becomes stale.
|
# Number of days of inactivity before an issue becomes stale.
|
||||||
'daysUntilStale': 60
|
'daysUntilStale': 90
|
||||||
# Number of days of inactivity before a stale issue is closed.
|
# Number of days of inactivity before a stale issue is closed.
|
||||||
'daysUntilClose': 7
|
'daysUntilClose': 15
|
||||||
# Issues with these labels will never be considered stale.
|
# Issues with these labels will never be considered stale.
|
||||||
'exemptLabels':
|
'exemptLabels':
|
||||||
- 'bug'
|
- 'bug'
|
||||||
- 'enhancement'
|
- 'enhancement'
|
||||||
- 'feature request'
|
- 'feature request'
|
||||||
- 'localization'
|
- 'localization'
|
||||||
|
- 'needs investigation'
|
||||||
|
- 'recurrent'
|
||||||
|
- 'research'
|
||||||
# Label to use when marking an issue as stale.
|
# Label to use when marking an issue as stale.
|
||||||
'staleLabel': 'wontfix'
|
'staleLabel': 'wontfix'
|
||||||
# Comment to post when marking an issue as stale. Set to `false` to disable.
|
# Comment to post when marking an issue as stale. Set to `false` to disable.
|
||||||
'markComment': >
|
'markComment': >
|
||||||
This issue has been automatically marked as stale because it has not had
|
This issue has been automatically marked as stale because it has not had
|
||||||
recent activity. It will be closed if no further activity occurs. Thank you
|
recent activity. It will be closed if no further activity occurs. Thank you
|
||||||
for your contributions.
|
for your contributions.
|
||||||
# Comment to post when closing a stale issue. Set to `false` to disable.
|
# Comment to post when closing a stale issue. Set to `false` to disable.
|
||||||
'closeComment': false
|
'closeComment': false
|
||||||
|
46
.github/workflows/build.yml
vendored
46
.github/workflows/build.yml
vendored
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
'env':
|
'env':
|
||||||
'GO_VERSION': '1.14'
|
'GO_VERSION': '1.14'
|
||||||
'NODE_VERSION': '13'
|
'NODE_VERSION': '14'
|
||||||
|
|
||||||
'on':
|
'on':
|
||||||
'push':
|
'push':
|
||||||
@ -39,7 +39,9 @@
|
|||||||
'with':
|
'with':
|
||||||
'node-version': '${{ env.NODE_VERSION }}'
|
'node-version': '${{ env.NODE_VERSION }}'
|
||||||
- 'name': 'Set up Go modules cache'
|
- 'name': 'Set up Go modules cache'
|
||||||
'uses': 'actions/cache@v2'
|
# TODO(a.garipov): Update when they fix the macOS issue. The issue is
|
||||||
|
# most probably https://github.com/actions/cache/issues/527.
|
||||||
|
'uses': 'actions/cache@v2.1.3'
|
||||||
'with':
|
'with':
|
||||||
'path': '~/go/pkg/mod'
|
'path': '~/go/pkg/mod'
|
||||||
'key': "${{ runner.os }}-go-${{ hashFiles('go.sum') }}"
|
'key': "${{ runner.os }}-go-${{ hashFiles('go.sum') }}"
|
||||||
@ -48,21 +50,23 @@
|
|||||||
'id': 'npm-cache'
|
'id': 'npm-cache'
|
||||||
'run': 'echo "::set-output name=dir::$(npm config get cache)"'
|
'run': 'echo "::set-output name=dir::$(npm config get cache)"'
|
||||||
- 'name': 'Set up npm cache'
|
- 'name': 'Set up npm cache'
|
||||||
'uses': 'actions/cache@v2'
|
# TODO(a.garipov): Update when they fix the macOS issue. The issue is
|
||||||
|
# most probably https://github.com/actions/cache/issues/527.
|
||||||
|
'uses': 'actions/cache@v2.1.3'
|
||||||
'with':
|
'with':
|
||||||
'path': '${{ steps.npm-cache.outputs.dir }}'
|
'path': '${{ steps.npm-cache.outputs.dir }}'
|
||||||
'key': "${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}"
|
'key': "${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}"
|
||||||
'restore-keys': '${{ runner.os }}-node-'
|
'restore-keys': '${{ runner.os }}-node-'
|
||||||
- 'name': 'Run make ci'
|
- 'name': 'Run make ci'
|
||||||
'shell': 'bash'
|
'shell': 'bash'
|
||||||
'run': 'make ci'
|
'run': 'make VERBOSE=1 ci'
|
||||||
- 'name': 'Upload coverage'
|
- 'name': 'Upload coverage'
|
||||||
'uses': 'codecov/codecov-action@v1'
|
'uses': 'codecov/codecov-action@v1'
|
||||||
'if': "success() && matrix.os == 'ubuntu-latest'"
|
'if': "success() && matrix.os == 'ubuntu-latest'"
|
||||||
'with':
|
'with':
|
||||||
'token': '${{ secrets.CODECOV_TOKEN }}'
|
'token': '${{ secrets.CODECOV_TOKEN }}'
|
||||||
'file': './coverage.txt'
|
'file': './coverage.txt'
|
||||||
'app':
|
'build-release':
|
||||||
'runs-on': 'ubuntu-latest'
|
'runs-on': 'ubuntu-latest'
|
||||||
'needs': 'test'
|
'needs': 'test'
|
||||||
'steps':
|
'steps':
|
||||||
@ -79,7 +83,9 @@
|
|||||||
'with':
|
'with':
|
||||||
'node-version': '${{ env.NODE_VERSION }}'
|
'node-version': '${{ env.NODE_VERSION }}'
|
||||||
- 'name': 'Set up Go modules cache'
|
- 'name': 'Set up Go modules cache'
|
||||||
'uses': 'actions/cache@v2'
|
# TODO(a.garipov): Update when they fix the macOS issue. The issue is
|
||||||
|
# most probably https://github.com/actions/cache/issues/527.
|
||||||
|
'uses': 'actions/cache@v2.1.3'
|
||||||
'with':
|
'with':
|
||||||
'path': '~/go/pkg/mod'
|
'path': '~/go/pkg/mod'
|
||||||
'key': "${{ runner.os }}-go-${{ hashFiles('go.sum') }}"
|
'key': "${{ runner.os }}-go-${{ hashFiles('go.sum') }}"
|
||||||
@ -87,38 +93,26 @@
|
|||||||
- 'name': 'Get npm cache directory'
|
- 'name': 'Get npm cache directory'
|
||||||
'id': 'npm-cache'
|
'id': 'npm-cache'
|
||||||
'run': 'echo "::set-output name=dir::$(npm config get cache)"'
|
'run': 'echo "::set-output name=dir::$(npm config get cache)"'
|
||||||
- 'name': 'Set up node_modules cache'
|
- 'name': 'Set up npm cache'
|
||||||
'uses': 'actions/cache@v2'
|
# TODO(a.garipov): Update when they fix the macOS issue. The issue is
|
||||||
|
# most probably https://github.com/actions/cache/issues/527.
|
||||||
|
'uses': 'actions/cache@v2.1.3'
|
||||||
'with':
|
'with':
|
||||||
'path': '${{ steps.npm-cache.outputs.dir }}'
|
'path': '${{ steps.npm-cache.outputs.dir }}'
|
||||||
'key': "${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}"
|
'key': "${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}"
|
||||||
'restore-keys': '${{ runner.os }}-node-'
|
'restore-keys': '${{ runner.os }}-node-'
|
||||||
- 'name': 'Set up Snapcraft'
|
- 'name': 'Set up Snapcraft'
|
||||||
'run': 'sudo apt-get -yq --no-install-suggests --no-install-recommends install snapcraft'
|
'run': 'sudo apt-get -yq --no-install-suggests --no-install-recommends install snapcraft'
|
||||||
- 'name': 'Set up GoReleaser'
|
|
||||||
'run': 'curl -sfL https://install.goreleaser.com/github.com/goreleaser/goreleaser.sh | BINDIR="$(go env GOPATH)/bin" sh'
|
|
||||||
- 'name': 'Run snapshot build'
|
|
||||||
'run': 'make release'
|
|
||||||
|
|
||||||
'docker':
|
|
||||||
'runs-on': 'ubuntu-latest'
|
|
||||||
'needs': 'test'
|
|
||||||
'steps':
|
|
||||||
- 'name': 'Checkout'
|
|
||||||
'uses': 'actions/checkout@v2'
|
|
||||||
'with':
|
|
||||||
'fetch-depth': 0
|
|
||||||
- 'name': 'Set up QEMU'
|
- 'name': 'Set up QEMU'
|
||||||
'uses': 'docker/setup-qemu-action@v1'
|
'uses': 'docker/setup-qemu-action@v1'
|
||||||
- 'name': 'Set up Docker Buildx'
|
- 'name': 'Set up Docker Buildx'
|
||||||
'uses': 'docker/setup-buildx-action@v1'
|
'uses': 'docker/setup-buildx-action@v1'
|
||||||
- 'name': 'Docker Buildx (build)'
|
- 'name': 'Run snapshot build'
|
||||||
'run': 'make docker-multi-arch'
|
'run': 'make SIGN=0 VERBOSE=1 build-release build-docker'
|
||||||
|
|
||||||
'notify':
|
'notify':
|
||||||
'needs':
|
'needs':
|
||||||
- 'app'
|
- 'build-release'
|
||||||
- 'docker'
|
|
||||||
# Secrets are not passed to workflows that are triggered by a pull request
|
# Secrets are not passed to workflows that are triggered by a pull request
|
||||||
# from a fork.
|
# from a fork.
|
||||||
#
|
#
|
||||||
@ -139,7 +133,7 @@
|
|||||||
'uses': '8398a7/action-slack@v3'
|
'uses': '8398a7/action-slack@v3'
|
||||||
'with':
|
'with':
|
||||||
'status': '${{ env.WORKFLOW_CONCLUSION }}'
|
'status': '${{ env.WORKFLOW_CONCLUSION }}'
|
||||||
'fields': 'repo, message, commit, author, job'
|
'fields': 'repo, message, commit, author, workflow'
|
||||||
'env':
|
'env':
|
||||||
'GITHUB_TOKEN': '${{ secrets.GITHUB_TOKEN }}'
|
'GITHUB_TOKEN': '${{ secrets.GITHUB_TOKEN }}'
|
||||||
'SLACK_WEBHOOK_URL': '${{ secrets.SLACK_WEBHOOK_URL }}'
|
'SLACK_WEBHOOK_URL': '${{ secrets.SLACK_WEBHOOK_URL }}'
|
||||||
|
8
.github/workflows/lint.yml
vendored
8
.github/workflows/lint.yml
vendored
@ -13,15 +13,15 @@
|
|||||||
- 'uses': 'actions/checkout@v2'
|
- 'uses': 'actions/checkout@v2'
|
||||||
- 'name': 'run-lint'
|
- 'name': 'run-lint'
|
||||||
'run': >
|
'run': >
|
||||||
make go-install-tools go-lint
|
make go-deps go-tools go-lint
|
||||||
'eslint':
|
'eslint':
|
||||||
'runs-on': 'ubuntu-latest'
|
'runs-on': 'ubuntu-latest'
|
||||||
'steps':
|
'steps':
|
||||||
- 'uses': 'actions/checkout@v2'
|
- 'uses': 'actions/checkout@v2'
|
||||||
- 'name': 'Install modules'
|
- 'name': 'Install modules'
|
||||||
'run': 'npm --prefix client ci'
|
'run': 'npm --prefix="./client" ci'
|
||||||
- 'name': 'Run ESLint'
|
- 'name': 'Run ESLint'
|
||||||
'run': 'npm --prefix client run lint'
|
'run': 'npm --prefix="./client" run lint'
|
||||||
'notify':
|
'notify':
|
||||||
'needs':
|
'needs':
|
||||||
- 'go-lint'
|
- 'go-lint'
|
||||||
@ -46,7 +46,7 @@
|
|||||||
'uses': '8398a7/action-slack@v3'
|
'uses': '8398a7/action-slack@v3'
|
||||||
'with':
|
'with':
|
||||||
'status': '${{ env.WORKFLOW_CONCLUSION }}'
|
'status': '${{ env.WORKFLOW_CONCLUSION }}'
|
||||||
'fields': 'repo, message, commit, author, job'
|
'fields': 'repo, message, commit, author, workflow'
|
||||||
'env':
|
'env':
|
||||||
'GITHUB_TOKEN': '${{ secrets.GITHUB_TOKEN }}'
|
'GITHUB_TOKEN': '${{ secrets.GITHUB_TOKEN }}'
|
||||||
'SLACK_WEBHOOK_URL': '${{ secrets.SLACK_WEBHOOK_URL }}'
|
'SLACK_WEBHOOK_URL': '${{ secrets.SLACK_WEBHOOK_URL }}'
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -7,9 +7,11 @@
|
|||||||
# Only build, run, and test outputs here. Sorted.
|
# Only build, run, and test outputs here. Sorted.
|
||||||
*-packr.go
|
*-packr.go
|
||||||
*.db
|
*.db
|
||||||
|
*.log
|
||||||
*.snap
|
*.snap
|
||||||
/bin/
|
/bin/
|
||||||
/build/
|
/build/
|
||||||
|
/build2/
|
||||||
/data/
|
/data/
|
||||||
/dist/
|
/dist/
|
||||||
/dnsfilter/tests/dnsfilter.TestLotsOfRules*.pprof
|
/dnsfilter/tests/dnsfilter.TestLotsOfRules*.pprof
|
||||||
@ -19,4 +21,5 @@
|
|||||||
/snapcraft_login
|
/snapcraft_login
|
||||||
AdGuardHome*
|
AdGuardHome*
|
||||||
coverage.txt
|
coverage.txt
|
||||||
|
leases.db
|
||||||
node_modules/
|
node_modules/
|
||||||
|
115
.goreleaser.yml
115
.goreleaser.yml
@ -1,115 +0,0 @@
|
|||||||
'project_name': 'AdGuardHome'
|
|
||||||
|
|
||||||
'env':
|
|
||||||
- 'GO111MODULE=on'
|
|
||||||
- 'GOPROXY=https://goproxy.io'
|
|
||||||
|
|
||||||
'before':
|
|
||||||
'hooks':
|
|
||||||
- 'go mod download'
|
|
||||||
- 'go generate ./...'
|
|
||||||
|
|
||||||
'builds':
|
|
||||||
- 'main': './main.go'
|
|
||||||
'ldflags':
|
|
||||||
- '-s -w -X main.version={{.Version}} -X main.channel={{.Env.CHANNEL}} -X main.goarm={{.Env.GOARM}}'
|
|
||||||
'env':
|
|
||||||
- 'CGO_ENABLED=0'
|
|
||||||
'goos':
|
|
||||||
- 'darwin'
|
|
||||||
- 'linux'
|
|
||||||
- 'freebsd'
|
|
||||||
- 'windows'
|
|
||||||
'goarch':
|
|
||||||
- '386'
|
|
||||||
- 'amd64'
|
|
||||||
- 'arm'
|
|
||||||
- 'arm64'
|
|
||||||
- 'mips'
|
|
||||||
- 'mipsle'
|
|
||||||
- 'mips64'
|
|
||||||
- 'mips64le'
|
|
||||||
'goarm':
|
|
||||||
- '5'
|
|
||||||
- '6'
|
|
||||||
- '7'
|
|
||||||
'gomips':
|
|
||||||
- 'softfloat'
|
|
||||||
'ignore':
|
|
||||||
- 'goos': 'freebsd'
|
|
||||||
'goarch': 'mips'
|
|
||||||
- 'goos': 'freebsd'
|
|
||||||
'goarch': 'mipsle'
|
|
||||||
|
|
||||||
'archives':
|
|
||||||
- # Archive name template.
|
|
||||||
# Defaults:
|
|
||||||
# - if format is `tar.gz`, `tar.xz`, `gz` or `zip`:
|
|
||||||
# - `{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}`
|
|
||||||
# - if format is `binary`:
|
|
||||||
# - `{{ .Binary }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}`
|
|
||||||
'name_template': '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}'
|
|
||||||
'wrap_in_directory': 'AdGuardHome'
|
|
||||||
'format_overrides':
|
|
||||||
- 'goos': 'windows'
|
|
||||||
'format': 'zip'
|
|
||||||
- 'goos': 'darwin'
|
|
||||||
'format': 'zip'
|
|
||||||
'files':
|
|
||||||
- 'LICENSE.txt'
|
|
||||||
- 'README.md'
|
|
||||||
|
|
||||||
'snapcrafts':
|
|
||||||
- 'name': 'adguard-home'
|
|
||||||
'base': 'core20'
|
|
||||||
'name_template': '{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
|
|
||||||
'summary': 'Network-wide ads & trackers blocking DNS server'
|
|
||||||
'description': |
|
|
||||||
AdGuard Home is a network-wide software for blocking ads & tracking. After
|
|
||||||
you set it up, it'll cover ALL your home devices, and you don't need any
|
|
||||||
client-side software for that.
|
|
||||||
|
|
||||||
It operates as a DNS server that re-routes tracking domains to a "black hole,"
|
|
||||||
thus preventing your devices from connecting to those servers. It's based
|
|
||||||
on software we use for our public AdGuard DNS servers -- both share a lot
|
|
||||||
of common code.
|
|
||||||
'grade': 'stable'
|
|
||||||
'confinement': 'strict'
|
|
||||||
'publish': false
|
|
||||||
'license': 'GPL-3.0'
|
|
||||||
'extra_files':
|
|
||||||
- 'source': 'scripts/snap/local/adguard-home-web.sh'
|
|
||||||
'destination': 'adguard-home-web.sh'
|
|
||||||
'mode': 0755
|
|
||||||
- 'source': 'scripts/snap/gui/adguard-home-web.desktop'
|
|
||||||
'destination': 'meta/gui/adguard-home-web.desktop'
|
|
||||||
'mode': 0644
|
|
||||||
- 'source': 'scripts/snap/gui/adguard-home-web.png'
|
|
||||||
'destination': 'meta/gui/adguard-home-web.png'
|
|
||||||
'mode': 0644
|
|
||||||
'apps':
|
|
||||||
'adguard-home':
|
|
||||||
'command': 'AdGuardHome -w $SNAP_DATA --no-check-update'
|
|
||||||
'plugs':
|
|
||||||
# Add the "netrwork-bind" plug to bind to interfaces.
|
|
||||||
- 'network-bind'
|
|
||||||
# Add the "netrwork-observe" plug to be able to bind to ports below 1024
|
|
||||||
# (cap_net_bind_service) and also to bind to a particular interface using
|
|
||||||
# SO_BINDTODEVICE (cap_net_raw).
|
|
||||||
- 'network-observe'
|
|
||||||
'daemon': 'simple'
|
|
||||||
'adguard-home-web':
|
|
||||||
'command': 'adguard-home-web.sh'
|
|
||||||
'plugs':
|
|
||||||
- 'desktop'
|
|
||||||
|
|
||||||
'checksum':
|
|
||||||
'name_template': 'checksums.txt'
|
|
||||||
|
|
||||||
'snapshot':
|
|
||||||
# TODO(a.garipov): A temporary solution to trim the prerelease versions.
|
|
||||||
# A real solution would consist of making a better versioning scheme that also
|
|
||||||
# doesn't break SemVer or Snapcraft.
|
|
||||||
#
|
|
||||||
# See https://github.com/AdguardTeam/AdGuardHome/issues/2412.
|
|
||||||
'name_template': '{{ slice .Tag 0 8 }}-SNAPSHOT-{{ .ShortCommit }}'
|
|
@ -1846,7 +1846,7 @@ Response:
|
|||||||
}
|
}
|
||||||
|
|
||||||
There are also deprecated properties `filter_id` and `rule` on the top level of
|
There are also deprecated properties `filter_id` and `rule` on the top level of
|
||||||
the response object. Their usaga should be replaced with
|
the response object. Their usage should be replaced with
|
||||||
`rules[*].filter_list_id` and `rules[*].text` correspondingly. See the
|
`rules[*].filter_list_id` and `rules[*].text` correspondingly. See the
|
||||||
_OpenAPI_ documentation and the `./openapi/CHANGELOG.md` file.
|
_OpenAPI_ documentation and the `./openapi/CHANGELOG.md` file.
|
||||||
|
|
||||||
|
162
CHANGELOG.md
162
CHANGELOG.md
@ -10,11 +10,84 @@ and this project adheres to
|
|||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
## [v0.105.0] - 2020-12-28
|
## [v0.106.0] - 2021-04-26
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
## [v0.105.2] - 2021-03-04
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Incomplete OpenWRT detection ([#2757]).
|
||||||
|
- DHCP lease's `expired` field incorrect time format ([#2692]).
|
||||||
|
- Incomplete DNS upstreams validation ([#2674]).
|
||||||
|
- Wrong parsing of DHCP options of the `ip` type ([#2688]).
|
||||||
|
|
||||||
|
[#2674]: https://github.com/AdguardTeam/AdGuardHome/issues/2674
|
||||||
|
[#2688]: https://github.com/AdguardTeam/AdGuardHome/issues/2688
|
||||||
|
[#2692]: https://github.com/AdguardTeam/AdGuardHome/issues/2692
|
||||||
|
[#2757]: https://github.com/AdguardTeam/AdGuardHome/issues/2757
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Session token doesn't contain user's information anymore ([#2470]).
|
||||||
|
|
||||||
|
[#2470]: https://github.com/AdguardTeam/AdGuardHome/issues/2470
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.105.1] - 2021-02-15
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Increased HTTP API timeouts ([#2671], [#2682]).
|
||||||
|
- "Permission denied" errors when checking if the machine has a static IP no
|
||||||
|
longer prevent the DHCP server from starting ([#2667]).
|
||||||
|
- The server name sent by clients of TLS APIs is not only checked when
|
||||||
|
`strict_sni_check` is enabled ([#2664]).
|
||||||
|
- HTTP API request body size limit for the `POST /control/access/set` and `POST
|
||||||
|
/control/filtering/set_rules` HTTP APIs is increased ([#2666], [#2675]).
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Error when enabling the DHCP server when AdGuard Home couldn't determine if
|
||||||
|
the machine has a static IP.
|
||||||
|
- Optical issue on custom rules ([#2641]).
|
||||||
|
- Occasional crashes during startup.
|
||||||
|
- The field `"range_start"` in the `GET /control/dhcp/status` HTTP API response
|
||||||
|
is now correctly named again ([#2678]).
|
||||||
|
- DHCPv6 server's `ra_slaac_only` and `ra_allow_slaac` settings aren't reset to
|
||||||
|
`false` on update any more ([#2653]).
|
||||||
|
- The `Vary` header is now added along with `Access-Control-Allow-Origin` to
|
||||||
|
prevent cache-related and other issues in browsers ([#2658]).
|
||||||
|
- The request body size limit is now set for HTTPS requests as well.
|
||||||
|
- Incorrect version tag in the Docker release ([#2663]).
|
||||||
|
- DNSCrypt queries weren't marked as such in logs ([#2662]).
|
||||||
|
|
||||||
|
[#2641]: https://github.com/AdguardTeam/AdGuardHome/issues/2641
|
||||||
|
[#2653]: https://github.com/AdguardTeam/AdGuardHome/issues/2653
|
||||||
|
[#2658]: https://github.com/AdguardTeam/AdGuardHome/issues/2658
|
||||||
|
[#2662]: https://github.com/AdguardTeam/AdGuardHome/issues/2662
|
||||||
|
[#2663]: https://github.com/AdguardTeam/AdGuardHome/issues/2663
|
||||||
|
[#2664]: https://github.com/AdguardTeam/AdGuardHome/issues/2664
|
||||||
|
[#2666]: https://github.com/AdguardTeam/AdGuardHome/issues/2666
|
||||||
|
[#2667]: https://github.com/AdguardTeam/AdGuardHome/issues/2667
|
||||||
|
[#2671]: https://github.com/AdguardTeam/AdGuardHome/issues/2671
|
||||||
|
[#2675]: https://github.com/AdguardTeam/AdGuardHome/issues/2675
|
||||||
|
[#2678]: https://github.com/AdguardTeam/AdGuardHome/issues/2678
|
||||||
|
[#2682]: https://github.com/AdguardTeam/AdGuardHome/issues/2682
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.105.0] - 2021-02-10
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
- Added more services to the "Blocked services" list ([#2224], [#2401]).
|
||||||
|
- `ipset` subdomain matching, just like `dnsmasq` does ([#2179]).
|
||||||
|
- Client ID support for DNS-over-HTTPS, DNS-over-QUIC, and DNS-over-TLS
|
||||||
|
([#1383]).
|
||||||
- `$dnsrewrite` modifier for filters ([#2102]).
|
- `$dnsrewrite` modifier for filters ([#2102]).
|
||||||
- The host checking API and the query logs API can now return multiple matched
|
- The host checking API and the query logs API can now return multiple matched
|
||||||
rules ([#2102]).
|
rules ([#2102]).
|
||||||
@ -26,15 +99,13 @@ and this project adheres to
|
|||||||
- `$dnstype` modifier for filters ([#2337]).
|
- `$dnstype` modifier for filters ([#2337]).
|
||||||
- HTTP API request body size limit ([#2305]).
|
- HTTP API request body size limit ([#2305]).
|
||||||
|
|
||||||
[#1361]: https://github.com/AdguardTeam/AdGuardHome/issues/1361
|
|
||||||
[#2102]: https://github.com/AdguardTeam/AdGuardHome/issues/2102
|
|
||||||
[#2302]: https://github.com/AdguardTeam/AdGuardHome/issues/2302
|
|
||||||
[#2304]: https://github.com/AdguardTeam/AdGuardHome/issues/2304
|
|
||||||
[#2305]: https://github.com/AdguardTeam/AdGuardHome/issues/2305
|
|
||||||
[#2337]: https://github.com/AdguardTeam/AdGuardHome/issues/2337
|
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
- `Access-Control-Allow-Origin` is now only set to the same origin as the
|
||||||
|
domain, but with an HTTP scheme as opposed to `*` ([#2484]).
|
||||||
|
- `workDir` now supports symlinks.
|
||||||
|
- Stopped mounting together the directories `/opt/adguardhome/conf` and
|
||||||
|
`/opt/adguardhome/work` in our Docker images ([#2589]).
|
||||||
- When `dns.bogus_nxdomain` option is used, the server will now transform
|
- When `dns.bogus_nxdomain` option is used, the server will now transform
|
||||||
responses if there is at least one bogus address instead of all of them
|
responses if there is at least one bogus address instead of all of them
|
||||||
([#2394]). The new behavior is the same as in `dnsmasq`.
|
([#2394]). The new behavior is the same as in `dnsmasq`.
|
||||||
@ -44,20 +115,20 @@ and this project adheres to
|
|||||||
improve error response ([#2358]).
|
improve error response ([#2358]).
|
||||||
- Improved HTTP requests handling and timeouts ([#2343]).
|
- Improved HTTP requests handling and timeouts ([#2343]).
|
||||||
- Our snap package now uses the `core20` image as its base ([#2306]).
|
- Our snap package now uses the `core20` image as its base ([#2306]).
|
||||||
- Various internal improvements ([#2267], [#2271], [#2297]).
|
- New build system and various internal improvements ([#2271], [#2276], [#2297],
|
||||||
|
[#2509], [#2552], [#2639], [#2646]).
|
||||||
|
|
||||||
[#2231]: https://github.com/AdguardTeam/AdGuardHome/issues/2231
|
### Deprecated
|
||||||
[#2267]: https://github.com/AdguardTeam/AdGuardHome/issues/2267
|
|
||||||
[#2271]: https://github.com/AdguardTeam/AdGuardHome/issues/2271
|
- Go 1.14 support. v0.106.0 will require at least Go 1.15 to build.
|
||||||
[#2297]: https://github.com/AdguardTeam/AdGuardHome/issues/2297
|
- The `darwin/386` port. It will be removed in v0.106.0.
|
||||||
[#2306]: https://github.com/AdguardTeam/AdGuardHome/issues/2306
|
- The `"rule"` and `"filter_id"` fields in `GET /filtering/check_host` and
|
||||||
[#2343]: https://github.com/AdguardTeam/AdGuardHome/issues/2343
|
`GET /querylog` responses. They will be removed in v0.106.0 ([#2102]).
|
||||||
[#2358]: https://github.com/AdguardTeam/AdGuardHome/issues/2358
|
|
||||||
[#2391]: https://github.com/AdguardTeam/AdGuardHome/issues/2391
|
|
||||||
[#2394]: https://github.com/AdguardTeam/AdGuardHome/issues/2394
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
- Autoupdate bug in the Darwin (macOS) version ([#2630]).
|
||||||
|
- Unnecessary conversions from `string` to `net.IP`, and vice versa ([#2508]).
|
||||||
- Inability to set DNS cache TTL limits ([#2459]).
|
- Inability to set DNS cache TTL limits ([#2459]).
|
||||||
- Possible freezes on slower machines ([#2225]).
|
- Possible freezes on slower machines ([#2225]).
|
||||||
- A mitigation against records being shown in the wrong order on the query log
|
- A mitigation against records being shown in the wrong order on the query log
|
||||||
@ -66,16 +137,48 @@ and this project adheres to
|
|||||||
- Incorrect detection of the IPv6 address of an interface as well as another
|
- Incorrect detection of the IPv6 address of an interface as well as another
|
||||||
infinite loop in the `/dhcp/find_active_dhcp` HTTP API ([#2355]).
|
infinite loop in the `/dhcp/find_active_dhcp` HTTP API ([#2355]).
|
||||||
|
|
||||||
[#2225]: https://github.com/AdguardTeam/AdGuardHome/issues/2225
|
|
||||||
[#2293]: https://github.com/AdguardTeam/AdGuardHome/issues/2293
|
|
||||||
[#2345]: https://github.com/AdguardTeam/AdGuardHome/issues/2345
|
|
||||||
[#2355]: https://github.com/AdguardTeam/AdGuardHome/issues/2355
|
|
||||||
[#2459]: https://github.com/AdguardTeam/AdGuardHome/issues/2459
|
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
|
- The undocumented ability to use hostnames as any of `bind_host` values in
|
||||||
|
configuration. Documentation requires them to be valid IP addresses, and now
|
||||||
|
the implementation makes sure that that is the case ([#2508]).
|
||||||
|
- `Dockerfile` ([#2276]). Replaced with the script
|
||||||
|
`scripts/make/build-docker.sh` which uses `scripts/make/Dockerfile`.
|
||||||
- Support for pre-v0.99.3 format of query logs ([#2102]).
|
- Support for pre-v0.99.3 format of query logs ([#2102]).
|
||||||
|
|
||||||
|
[#1361]: https://github.com/AdguardTeam/AdGuardHome/issues/1361
|
||||||
|
[#1383]: https://github.com/AdguardTeam/AdGuardHome/issues/1383
|
||||||
|
[#2102]: https://github.com/AdguardTeam/AdGuardHome/issues/2102
|
||||||
|
[#2179]: https://github.com/AdguardTeam/AdGuardHome/issues/2179
|
||||||
|
[#2224]: https://github.com/AdguardTeam/AdGuardHome/issues/2224
|
||||||
|
[#2225]: https://github.com/AdguardTeam/AdGuardHome/issues/2225
|
||||||
|
[#2231]: https://github.com/AdguardTeam/AdGuardHome/issues/2231
|
||||||
|
[#2271]: https://github.com/AdguardTeam/AdGuardHome/issues/2271
|
||||||
|
[#2276]: https://github.com/AdguardTeam/AdGuardHome/issues/2276
|
||||||
|
[#2293]: https://github.com/AdguardTeam/AdGuardHome/issues/2293
|
||||||
|
[#2297]: https://github.com/AdguardTeam/AdGuardHome/issues/2297
|
||||||
|
[#2302]: https://github.com/AdguardTeam/AdGuardHome/issues/2302
|
||||||
|
[#2304]: https://github.com/AdguardTeam/AdGuardHome/issues/2304
|
||||||
|
[#2305]: https://github.com/AdguardTeam/AdGuardHome/issues/2305
|
||||||
|
[#2306]: https://github.com/AdguardTeam/AdGuardHome/issues/2306
|
||||||
|
[#2337]: https://github.com/AdguardTeam/AdGuardHome/issues/2337
|
||||||
|
[#2343]: https://github.com/AdguardTeam/AdGuardHome/issues/2343
|
||||||
|
[#2345]: https://github.com/AdguardTeam/AdGuardHome/issues/2345
|
||||||
|
[#2355]: https://github.com/AdguardTeam/AdGuardHome/issues/2355
|
||||||
|
[#2358]: https://github.com/AdguardTeam/AdGuardHome/issues/2358
|
||||||
|
[#2391]: https://github.com/AdguardTeam/AdGuardHome/issues/2391
|
||||||
|
[#2394]: https://github.com/AdguardTeam/AdGuardHome/issues/2394
|
||||||
|
[#2401]: https://github.com/AdguardTeam/AdGuardHome/issues/2401
|
||||||
|
[#2459]: https://github.com/AdguardTeam/AdGuardHome/issues/2459
|
||||||
|
[#2484]: https://github.com/AdguardTeam/AdGuardHome/issues/2484
|
||||||
|
[#2508]: https://github.com/AdguardTeam/AdGuardHome/issues/2508
|
||||||
|
[#2509]: https://github.com/AdguardTeam/AdGuardHome/issues/2509
|
||||||
|
[#2552]: https://github.com/AdguardTeam/AdGuardHome/issues/2552
|
||||||
|
[#2589]: https://github.com/AdguardTeam/AdGuardHome/issues/2589
|
||||||
|
[#2630]: https://github.com/AdguardTeam/AdGuardHome/issues/2630
|
||||||
|
[#2639]: https://github.com/AdguardTeam/AdGuardHome/issues/2639
|
||||||
|
[#2646]: https://github.com/AdguardTeam/AdGuardHome/issues/2646
|
||||||
|
|
||||||
## [v0.104.3] - 2020-11-19
|
## [v0.104.3] - 2020-11-19
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
@ -101,7 +204,7 @@ and this project adheres to
|
|||||||
|
|
||||||
- Query logs from file not loading after the ones buffered in memory ([#2325]).
|
- Query logs from file not loading after the ones buffered in memory ([#2325]).
|
||||||
- Unnecessary errors in query logs when switching between log files ([#2324]).
|
- Unnecessary errors in query logs when switching between log files ([#2324]).
|
||||||
- `404 Not Found` errors on the DHCP settings page on *Windows*. The page now
|
- `404 Not Found` errors on the DHCP settings page on Windows. The page now
|
||||||
correctly shows that DHCP is not currently available on that OS ([#2295]).
|
correctly shows that DHCP is not currently available on that OS ([#2295]).
|
||||||
- Infinite loop in `/dhcp/find_active_dhcp` ([#2301]).
|
- Infinite loop in `/dhcp/find_active_dhcp` ([#2301]).
|
||||||
|
|
||||||
@ -115,9 +218,12 @@ and this project adheres to
|
|||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.105.0...HEAD
|
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.105.2...HEAD
|
||||||
[v0.105.0]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.3...v0.105.0
|
[v0.105.2]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.105.1...v0.105.2
|
||||||
-->
|
-->
|
||||||
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.3...HEAD
|
|
||||||
|
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.105.1...HEAD
|
||||||
|
[v0.105.1]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.105.0...v0.105.1
|
||||||
|
[v0.105.0]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.3...v0.105.0
|
||||||
[v0.104.3]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.2...v0.104.3
|
[v0.104.3]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.2...v0.104.3
|
||||||
[v0.104.2]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.1...v0.104.2
|
[v0.104.2]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.1...v0.104.2
|
||||||
|
77
Dockerfile
77
Dockerfile
@ -1,77 +0,0 @@
|
|||||||
FROM --platform=${BUILDPLATFORM:-linux/amd64} tonistiigi/xx:golang AS xgo
|
|
||||||
FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.14-alpine as builder
|
|
||||||
|
|
||||||
ARG BUILD_DATE
|
|
||||||
ARG VCS_REF
|
|
||||||
ARG VERSION=dev
|
|
||||||
ARG CHANNEL=release
|
|
||||||
|
|
||||||
ENV CGO_ENABLED 0
|
|
||||||
ENV GO111MODULE on
|
|
||||||
ENV GOPROXY https://goproxy.io
|
|
||||||
|
|
||||||
COPY --from=xgo / /
|
|
||||||
RUN go env
|
|
||||||
|
|
||||||
RUN apk --update --no-cache add \
|
|
||||||
build-base \
|
|
||||||
gcc \
|
|
||||||
git \
|
|
||||||
npm \
|
|
||||||
&& rm -rf /tmp/* /var/cache/apk/*
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY . ./
|
|
||||||
|
|
||||||
# Prepare the client code
|
|
||||||
RUN npm --prefix client ci && npm --prefix client run build-prod
|
|
||||||
|
|
||||||
# Download go dependencies
|
|
||||||
RUN go mod download
|
|
||||||
RUN go generate ./...
|
|
||||||
|
|
||||||
# It's important to place TARGET* arguments here to avoid running npm and go mod download for every platform
|
|
||||||
ARG TARGETPLATFORM
|
|
||||||
ARG TARGETOS
|
|
||||||
ARG TARGETARCH
|
|
||||||
RUN go build -ldflags="-s -w -X main.version=${VERSION} -X main.channel=${CHANNEL} -X main.goarm=${GOARM}"
|
|
||||||
|
|
||||||
FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:latest
|
|
||||||
|
|
||||||
ARG BUILD_DATE
|
|
||||||
ARG VCS_REF
|
|
||||||
ARG VERSION
|
|
||||||
ARG CHANNEL
|
|
||||||
|
|
||||||
LABEL maintainer="AdGuard Team <devteam@adguard.com>" \
|
|
||||||
org.opencontainers.image.created=$BUILD_DATE \
|
|
||||||
org.opencontainers.image.url="https://adguard.com/adguard-home.html" \
|
|
||||||
org.opencontainers.image.source="https://github.com/AdguardTeam/AdGuardHome" \
|
|
||||||
org.opencontainers.image.version=$VERSION \
|
|
||||||
org.opencontainers.image.revision=$VCS_REF \
|
|
||||||
org.opencontainers.image.vendor="AdGuard" \
|
|
||||||
org.opencontainers.image.title="AdGuard Home" \
|
|
||||||
org.opencontainers.image.description="Network-wide ads & trackers blocking DNS server" \
|
|
||||||
org.opencontainers.image.licenses="GPL-3.0"
|
|
||||||
|
|
||||||
RUN apk --update --no-cache add \
|
|
||||||
ca-certificates \
|
|
||||||
libcap \
|
|
||||||
libressl \
|
|
||||||
&& rm -rf /tmp/* /var/cache/apk/*
|
|
||||||
|
|
||||||
COPY --from=builder --chown=nobody:nogroup /app/AdGuardHome /opt/adguardhome/AdGuardHome
|
|
||||||
COPY --from=builder --chown=nobody:nogroup /usr/local/go/lib/time/zoneinfo.zip /usr/local/go/lib/time/zoneinfo.zip
|
|
||||||
|
|
||||||
RUN /opt/adguardhome/AdGuardHome --version \
|
|
||||||
&& mkdir -p /opt/adguardhome/conf /opt/adguardhome/work \
|
|
||||||
&& chown -R nobody: /opt/adguardhome \
|
|
||||||
&& setcap 'cap_net_bind_service=+eip' /opt/adguardhome/AdGuardHome
|
|
||||||
|
|
||||||
EXPOSE 53/tcp 53/udp 67/udp 68/udp 80/tcp 443/tcp 853/tcp 3000/tcp
|
|
||||||
WORKDIR /opt/adguardhome/work
|
|
||||||
VOLUME ["/opt/adguardhome/conf", "/opt/adguardhome/work"]
|
|
||||||
|
|
||||||
ENTRYPOINT ["/opt/adguardhome/AdGuardHome"]
|
|
||||||
CMD ["-h", "0.0.0.0", "-c", "/opt/adguardhome/conf/AdGuardHome.yaml", "-w", "/opt/adguardhome/work", "--no-check-update"]
|
|
118
HACKING.md
118
HACKING.md
@ -1,17 +1,33 @@
|
|||||||
# *AdGuardHome* Developer Guidelines
|
# AdGuard Home Developer Guidelines
|
||||||
|
|
||||||
As of **December 2020**, this document is partially a work-in-progress, but
|
As of **February 2021**, this document is partially a work-in-progress, but
|
||||||
should still be followed. Some of the rules aren't enforced as thoroughly or
|
should still be followed. Some of the rules aren't enforced as thoroughly or
|
||||||
remain broken in old code, but this is still the place to find out about what we
|
remain broken in old code, but this is still the place to find out about what we
|
||||||
**want** our code to look like.
|
**want** our code to look like.
|
||||||
|
|
||||||
The rules are mostly sorted in the alphabetical order.
|
The rules are mostly sorted in the alphabetical order.
|
||||||
|
|
||||||
## *Git*
|
## Contents
|
||||||
|
|
||||||
|
* [Git](#git)
|
||||||
|
* [Go](#go)
|
||||||
|
* [Code And Naming](#code-and-naming)
|
||||||
|
* [Commenting](#commenting)
|
||||||
|
* [Formatting](#formatting)
|
||||||
|
* [Recommended Reading](#recommended-reading)
|
||||||
|
* [Markdown](#markdown)
|
||||||
|
* [Shell Scripting](#shell-scripting)
|
||||||
|
* [Text, Including Comments](#text-including-comments)
|
||||||
|
* [YAML](#yaml)
|
||||||
|
|
||||||
|
<!-- NOTE: Use the IDs that GitHub would generate in order for this to work both
|
||||||
|
on GitHub and most other Markdown renderers. -->
|
||||||
|
|
||||||
|
## <a id="git" href="#git">Git</a>
|
||||||
|
|
||||||
* Call your branches either `NNNN-fix-foo` (where `NNNN` is the ID of the
|
* Call your branches either `NNNN-fix-foo` (where `NNNN` is the ID of the
|
||||||
*GitHub* issue you worked on in this branch) or just `fix-foo` if there was
|
GitHub issue you worked on in this branch) or just `fix-foo` if there was no
|
||||||
no *GitHub* issue.
|
GitHub issue.
|
||||||
|
|
||||||
* Follow the commit message header format:
|
* Follow the commit message header format:
|
||||||
|
|
||||||
@ -19,8 +35,9 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
pkg: fix the network error logging issue
|
pkg: fix the network error logging issue
|
||||||
```
|
```
|
||||||
|
|
||||||
Where `pkg` is the package where most changes took place. If there are
|
Where `pkg` is the directory or Go package (without the `internal/` part)
|
||||||
several such packages, or the change is top-level only, write `all`.
|
where most changes took place. If there are several such packages, or the
|
||||||
|
change is top-level only, write `all`.
|
||||||
|
|
||||||
* Keep your commit messages, including headers, to eighty (**80**) columns.
|
* Keep your commit messages, including headers, to eighty (**80**) columns.
|
||||||
|
|
||||||
@ -30,14 +47,14 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
The only exceptions are direct mentions of identifiers from the source code
|
The only exceptions are direct mentions of identifiers from the source code
|
||||||
and filenames like `HACKING.md`.
|
and filenames like `HACKING.md`.
|
||||||
|
|
||||||
## *Go*
|
## <a id="go" href="#go">Go</a>
|
||||||
|
|
||||||
> Not Golang, not GO, not GOLANG, not GoLang. It is Go in natural language,
|
> Not Golang, not GO, not GOLANG, not GoLang. It is Go in natural language,
|
||||||
> golang for others.
|
> golang for others.
|
||||||
|
|
||||||
— [@rakyll](https://twitter.com/rakyll/status/1229850223184269312)
|
— [@rakyll](https://twitter.com/rakyll/status/1229850223184269312)
|
||||||
|
|
||||||
### Code And Naming
|
### <a id="code-and-naming" href="#code-and-naming">Code And Naming</a>
|
||||||
|
|
||||||
* Avoid `goto`.
|
* Avoid `goto`.
|
||||||
|
|
||||||
@ -45,6 +62,14 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
|
|
||||||
* Avoid `new`, especially with structs.
|
* Avoid `new`, especially with structs.
|
||||||
|
|
||||||
|
* Check against empty strings like this:
|
||||||
|
|
||||||
|
```go
|
||||||
|
if s == "" {
|
||||||
|
// …
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
* Constructors should validate their arguments and return meaningful errors.
|
* Constructors should validate their arguments and return meaningful errors.
|
||||||
As a corollary, avoid lazy initialization.
|
As a corollary, avoid lazy initialization.
|
||||||
|
|
||||||
@ -53,9 +78,12 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
* Don't use underscores in file and package names, unless they're build tags
|
* Don't use underscores in file and package names, unless they're build tags
|
||||||
or for tests. This is to prevent accidental build errors with weird tags.
|
or for tests. This is to prevent accidental build errors with weird tags.
|
||||||
|
|
||||||
* Don't write code with more than four (**4**) levels of indentation. Just
|
* Don't write non-test code with more than four (**4**) levels of indentation.
|
||||||
like [Linus said], plus an additional level for an occasional error check or
|
Just like [Linus said], plus an additional level for an occasional error
|
||||||
struct initialization.
|
check or struct initialization.
|
||||||
|
|
||||||
|
The exception proving the rule is the table-driven test code, where an
|
||||||
|
additional level of indentation is allowed.
|
||||||
|
|
||||||
* Eschew external dependencies, including transitive, unless
|
* Eschew external dependencies, including transitive, unless
|
||||||
absolutely necessary.
|
absolutely necessary.
|
||||||
@ -70,6 +98,14 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
func TestType_Method_suffix(t *testing.T) { /* … */ }
|
func TestType_Method_suffix(t *testing.T) { /* … */ }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Name parameters in interface definitions:
|
||||||
|
|
||||||
|
```go
|
||||||
|
type Frobulator interface {
|
||||||
|
Frobulate(f Foo, b Bar) (r Result, err error)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
* Name the deferred errors (e.g. when closing something) `cerr`.
|
* Name the deferred errors (e.g. when closing something) `cerr`.
|
||||||
|
|
||||||
* No shadowing, since it can often lead to subtle bugs, especially with
|
* No shadowing, since it can often lead to subtle bugs, especially with
|
||||||
@ -78,6 +114,9 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
* Prefer constants to variables where possible. Reduce global variables. Use
|
* Prefer constants to variables where possible. Reduce global variables. Use
|
||||||
[constant errors] instead of `errors.New`.
|
[constant errors] instead of `errors.New`.
|
||||||
|
|
||||||
|
* Program code lines should not be longer than one hundred (**100**) columns.
|
||||||
|
For comments, see the text section below.
|
||||||
|
|
||||||
* Unused arguments in anonymous functions must be called `_`:
|
* Unused arguments in anonymous functions must be called `_`:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@ -93,12 +132,9 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
* Write logs and error messages in lowercase only to make it easier to `grep`
|
* Write logs and error messages in lowercase only to make it easier to `grep`
|
||||||
logs and error messages without using the `-i` flag.
|
logs and error messages without using the `-i` flag.
|
||||||
|
|
||||||
[constant errors]: https://dave.cheney.net/2016/04/07/constant-errors
|
### <a id="commenting" href="#commenting">Commenting</a>
|
||||||
[Linus said]: https://www.kernel.org/doc/html/v4.17/process/coding-style.html#indentation
|
|
||||||
|
|
||||||
### Commenting
|
* See also the “[Text, Including Comments]” section below.
|
||||||
|
|
||||||
* See also the *Text, Including Comments* section below.
|
|
||||||
|
|
||||||
* Document everything, including unexported top-level identifiers, to build
|
* Document everything, including unexported top-level identifiers, to build
|
||||||
a habit of writing documentation.
|
a habit of writing documentation.
|
||||||
@ -127,7 +163,7 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Formatting
|
### <a id="formatting" href="#formatting">Formatting</a>
|
||||||
|
|
||||||
* Add an empty line before `break`, `continue`, `fallthrough`, and `return`,
|
* Add an empty line before `break`, `continue`, `fallthrough`, and `return`,
|
||||||
unless it's the only statement in that block.
|
unless it's the only statement in that block.
|
||||||
@ -149,7 +185,7 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
}}
|
}}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Recommended Reading
|
### <a id="recommended-reading" href="#recommended-reading">Recommended Reading</a>
|
||||||
|
|
||||||
* <https://github.com/golang/go/wiki/CodeReviewComments>.
|
* <https://github.com/golang/go/wiki/CodeReviewComments>.
|
||||||
|
|
||||||
@ -157,13 +193,24 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
|
|
||||||
* <https://go-proverbs.github.io/>
|
* <https://go-proverbs.github.io/>
|
||||||
|
|
||||||
## *Markdown*
|
[constant errors]: https://dave.cheney.net/2016/04/07/constant-errors
|
||||||
|
[Linus said]: https://www.kernel.org/doc/html/v4.17/process/coding-style.html#indentation
|
||||||
|
[Text, Including Comments]: #text-including-comments
|
||||||
|
|
||||||
* **TODO(a.garipov):** Define our *Markdown* conventions.
|
## <a id="markdown" href="#markdown">Markdown</a>
|
||||||
|
|
||||||
## Shell Scripting
|
* **TODO(a.garipov):** Define more Markdown conventions.
|
||||||
|
|
||||||
* Avoid bashisms and GNUisms, prefer *POSIX* features only.
|
* Prefer triple-backtick preformatted code blocks to indented code blocks.
|
||||||
|
|
||||||
|
* Use asterisks and not underscores for bold and italic.
|
||||||
|
|
||||||
|
* Use either link references or link destinations only. Put all link
|
||||||
|
reference definitions at the end of the second-level block.
|
||||||
|
|
||||||
|
## <a id="shell-scripting" href="#shell-scripting">Shell Scripting</a>
|
||||||
|
|
||||||
|
* Avoid bashisms and GNUisms, prefer POSIX features only.
|
||||||
|
|
||||||
* Prefer `'raw strings'` to `"double quoted strings"` whenever possible.
|
* Prefer `'raw strings'` to `"double quoted strings"` whenever possible.
|
||||||
|
|
||||||
@ -172,10 +219,15 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
* Put utility flags in the ASCII order and **don't** group them together. For
|
* Put utility flags in the ASCII order and **don't** group them together. For
|
||||||
example, `ls -1 -A -q`.
|
example, `ls -1 -A -q`.
|
||||||
|
|
||||||
* `snake_case`, not `camelCase`.
|
* `snake_case`, not `camelCase` for variables. `kebab-case` for filenames.
|
||||||
|
|
||||||
|
* UPPERCASE names for external exported variables, lowercase for local,
|
||||||
|
unexported ones.
|
||||||
|
|
||||||
* Use `set -e -f -u` and also `set -x` in verbose mode.
|
* Use `set -e -f -u` and also `set -x` in verbose mode.
|
||||||
|
|
||||||
|
* Use `readonly` liberally.
|
||||||
|
|
||||||
* Use the `"$var"` form instead of the `$var` form, unless word splitting is
|
* Use the `"$var"` form instead of the `$var` form, unless word splitting is
|
||||||
required.
|
required.
|
||||||
|
|
||||||
@ -197,7 +249,7 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
dir="${TOP_DIR}"/sub
|
dir="${TOP_DIR}"/sub
|
||||||
```
|
```
|
||||||
|
|
||||||
## Text, Including Comments
|
## <a id="text-including-comments" href="#text-including-comments">Text, Including Comments</a>
|
||||||
|
|
||||||
* End sentences with appropriate punctuation.
|
* End sentences with appropriate punctuation.
|
||||||
|
|
||||||
@ -218,7 +270,7 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
|
|
||||||
* Use double spacing between sentences to make sentence borders more clear.
|
* Use double spacing between sentences to make sentence borders more clear.
|
||||||
|
|
||||||
* Use the serial comma (a.k.a. *Oxford* comma) to improve comprehension,
|
* Use the serial comma (a.k.a. Oxford comma) to improve comprehension,
|
||||||
decrease ambiguity, and use a common standard.
|
decrease ambiguity, and use a common standard.
|
||||||
|
|
||||||
* Write todos like this:
|
* Write todos like this:
|
||||||
@ -233,16 +285,16 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
// TODO(usr1, usr2): Fix the frobulation issue.
|
// TODO(usr1, usr2): Fix the frobulation issue.
|
||||||
```
|
```
|
||||||
|
|
||||||
## *YAML*
|
## <a id="yaml" href="#yaml">YAML</a>
|
||||||
|
|
||||||
* **TODO(a.garipov):** Define naming conventions for schema names in our
|
* **TODO(a.garipov):** Define naming conventions for schema names in our
|
||||||
*OpenAPI* *YAML* file. And just generally OpenAPI conventions.
|
OpenAPI YAML file. And just generally OpenAPI conventions.
|
||||||
|
|
||||||
* **TODO(a.garipov):** Find a *YAML* formatter or write our own.
|
* **TODO(a.garipov):** Find a YAML formatter or write our own.
|
||||||
|
|
||||||
* All strings, including keys, must be quoted. Reason: the [*NO-rway Law*].
|
* All strings, including keys, must be quoted. Reason: the “[NO-rway Law]”.
|
||||||
|
|
||||||
* Indent with two (**2**) spaces. *YAML* documents can get pretty
|
* Indent with two (**2**) spaces. YAML documents can get pretty
|
||||||
deeply-nested.
|
deeply-nested.
|
||||||
|
|
||||||
* No extra indentation in multiline arrays:
|
* No extra indentation in multiline arrays:
|
||||||
@ -256,8 +308,8 @@ The rules are mostly sorted in the alphabetical order.
|
|||||||
|
|
||||||
* Prefer single quotes for strings to prevent accidental escaping, unless
|
* Prefer single quotes for strings to prevent accidental escaping, unless
|
||||||
escaping is required or there are single quotes inside the string (e.g. for
|
escaping is required or there are single quotes inside the string (e.g. for
|
||||||
*GitHub Actions*).
|
GitHub Actions).
|
||||||
|
|
||||||
* Use `>` for multiline strings, unless you need to keep the line breaks.
|
* Use `>` for multiline strings, unless you need to keep the line breaks.
|
||||||
|
|
||||||
[*NO-rway Law*]: https://news.ycombinator.com/item?id=17359376
|
[NO-rway Law]: https://news.ycombinator.com/item?id=17359376
|
||||||
|
418
Makefile
418
Makefile
@ -1,347 +1,103 @@
|
|||||||
|
# Keep the Makefile POSIX-compliant. We currently allow hyphens in
|
||||||
|
# target names, but that may change in the future.
|
||||||
#
|
#
|
||||||
# Available targets
|
# See https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html.
|
||||||
|
.POSIX:
|
||||||
|
|
||||||
|
CHANNEL = development
|
||||||
|
CLIENT_BETA_DIR = client2
|
||||||
|
CLIENT_DIR = client
|
||||||
|
COMMIT = $$(git rev-parse --short HEAD)
|
||||||
|
DIST_DIR = dist
|
||||||
|
GO = go
|
||||||
|
# TODO(a.garipov): Add more default proxies using pipes after update to
|
||||||
|
# Go 1.15.
|
||||||
#
|
#
|
||||||
# * build -- builds AdGuardHome for the current platform
|
# GOPROXY = https://goproxy.io|https://goproxy.cn|direct
|
||||||
# * client -- builds client-side code of AdGuard Home
|
GOPROXY = https://goproxy.cn,https://goproxy.io,direct
|
||||||
# * client-watch -- builds client-side code of AdGuard Home and watches for changes there
|
GPG_KEY = devteam@adguard.com
|
||||||
# * docker -- builds a docker image for the current platform
|
GPG_KEY_PASSPHRASE = not-a-real-password
|
||||||
# * clean -- clean everything created by previous builds
|
NPM = npm
|
||||||
# * lint -- run all linters
|
NPM_FLAGS = --prefix $(CLIENT_DIR)
|
||||||
# * test -- run all unit-tests
|
SIGN = 1
|
||||||
# * dependencies -- installs dependencies (go and npm modules)
|
VERBOSE = 0
|
||||||
# * ci -- installs dependencies, runs linters and tests, intended to be used by CI/CD
|
VERSION = v0.0.0
|
||||||
#
|
YARN = yarn
|
||||||
# Building releases:
|
YARN_FLAGS = --cwd $(CLIENT_BETA_DIR)
|
||||||
#
|
|
||||||
# * release -- builds AdGuard Home distros. CHANNEL must be specified (edge, release or beta).
|
|
||||||
# * release_and_sign -- builds AdGuard Home distros and signs the binary files.
|
|
||||||
# CHANNEL must be specified (edge, release or beta).
|
|
||||||
# * sign -- Repacks all release archive files and signs the binary files inside them.
|
|
||||||
# For signing to work, the public+private key pair for $(GPG_KEY) must be imported:
|
|
||||||
# gpg --import public.txt
|
|
||||||
# gpg --import private.txt
|
|
||||||
# GPG_KEY_PASSPHRASE must contain the GPG key passphrase
|
|
||||||
# * docker-multi-arch -- builds a multi-arch image. If you want it to be pushed to docker hub,
|
|
||||||
# you must specify:
|
|
||||||
# * DOCKER_IMAGE_NAME - adguard/adguard-home
|
|
||||||
# * DOCKER_OUTPUT - type=image,name=adguard/adguard-home,push=true
|
|
||||||
|
|
||||||
GO := go
|
ENV = env\
|
||||||
GOPATH := $(shell $(GO) env GOPATH)
|
COMMIT='$(COMMIT)'\
|
||||||
PWD := $(shell pwd)
|
CHANNEL='$(CHANNEL)'\
|
||||||
TARGET=AdGuardHome
|
GPG_KEY='$(GPG_KEY)'\
|
||||||
BASE_URL="https://static.adguard.com/adguardhome/$(CHANNEL)"
|
GPG_KEY_PASSPHRASE='$(GPG_KEY_PASSPHRASE)'\
|
||||||
GPG_KEY := devteam@adguard.com
|
DIST_DIR='$(DIST_DIR)'\
|
||||||
GPG_KEY_PASSPHRASE :=
|
GO='$(GO)'\
|
||||||
GPG_CMD := gpg --detach-sig --default-key $(GPG_KEY) --pinentry-mode loopback --passphrase $(GPG_KEY_PASSPHRASE)
|
GOPROXY='$(GOPROXY)'\
|
||||||
VERBOSE := -v
|
PATH="$${PWD}/bin:$$($(GO) env GOPATH)/bin:$${PATH}"\
|
||||||
REBUILD_CLIENT = 1
|
SIGN='$(SIGN)'\
|
||||||
|
VERBOSE='$(VERBOSE)'\
|
||||||
|
VERSION='$(VERSION)'\
|
||||||
|
|
||||||
# See release target
|
# Keep the line above blank.
|
||||||
DIST_DIR=dist
|
|
||||||
|
|
||||||
# Update channel. Can be release, beta or edge. Uses edge by default.
|
# Keep this target first, so that a naked make invocation triggers
|
||||||
CHANNEL ?= edge
|
# a full build.
|
||||||
|
build: deps quick-build
|
||||||
|
|
||||||
# Validate channel
|
quick-build: js-build go-build
|
||||||
ifneq ($(CHANNEL),release)
|
|
||||||
ifneq ($(CHANNEL),beta)
|
|
||||||
ifneq ($(CHANNEL),edge)
|
|
||||||
$(error CHANNEL value is not valid. Valid values are release,beta or edge)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Version history URL (see
|
ci: deps test
|
||||||
VERSION_HISTORY_URL="https://github.com/AdguardTeam/AdGuardHome/releases"
|
|
||||||
ifeq ($(CHANNEL),edge)
|
|
||||||
VERSION_HISTORY_URL="https://github.com/AdguardTeam/AdGuardHome/commits/master"
|
|
||||||
endif
|
|
||||||
|
|
||||||
# goreleaser command depends on the $CHANNEL
|
|
||||||
GORELEASER_COMMAND=goreleaser release --rm-dist --skip-publish --snapshot --parallelism 1
|
|
||||||
ifneq ($(CHANNEL),edge)
|
|
||||||
# If this is not an "edge" build, use normal release command
|
|
||||||
GORELEASER_COMMAND=goreleaser release --rm-dist --skip-publish --parallelism 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Version properties
|
|
||||||
COMMIT=$(shell git rev-parse --short HEAD)
|
|
||||||
# TODO(a.garipov): The cut call is a temporary solution to trim
|
|
||||||
# prerelease versions. See the comment in .goreleaser.yml.
|
|
||||||
TAG_NAME=$(shell git describe --abbrev=0 | cut -c 1-8)
|
|
||||||
RELEASE_VERSION=$(TAG_NAME)
|
|
||||||
SNAPSHOT_VERSION=$(RELEASE_VERSION)-SNAPSHOT-$(COMMIT)
|
|
||||||
|
|
||||||
# Set proper version
|
|
||||||
VERSION=
|
|
||||||
ifeq ($(TAG_NAME),$(shell git describe --abbrev=4))
|
|
||||||
ifeq ($(CHANNEL),edge)
|
|
||||||
VERSION=$(SNAPSHOT_VERSION)
|
|
||||||
else
|
|
||||||
VERSION=$(RELEASE_VERSION)
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
VERSION=$(SNAPSHOT_VERSION)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Docker target parameters
|
|
||||||
DOCKER_IMAGE_NAME ?= adguardhome-dev
|
|
||||||
DOCKER_IMAGE_FULL_NAME = $(DOCKER_IMAGE_NAME):$(VERSION)
|
|
||||||
DOCKER_PLATFORMS=linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/386,linux/ppc64le
|
|
||||||
DOCKER_OUTPUT ?= type=image,name=$(DOCKER_IMAGE_NAME),push=false
|
|
||||||
BUILD_DATE=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
|
|
||||||
|
|
||||||
# Docker tags (can be redefined)
|
|
||||||
DOCKER_TAGS ?=
|
|
||||||
ifndef DOCKER_TAGS
|
|
||||||
ifeq ($(CHANNEL),release)
|
|
||||||
DOCKER_TAGS := --tag $(DOCKER_IMAGE_NAME):latest
|
|
||||||
endif
|
|
||||||
ifeq ($(CHANNEL),beta)
|
|
||||||
DOCKER_TAGS := --tag $(DOCKER_IMAGE_NAME):beta
|
|
||||||
endif
|
|
||||||
ifeq ($(CHANNEL),edge)
|
|
||||||
# Don't set the version tag when pushing to "edge"
|
|
||||||
DOCKER_IMAGE_FULL_NAME := $(DOCKER_IMAGE_NAME):edge
|
|
||||||
# DOCKER_TAGS := --tag $(DOCKER_IMAGE_NAME):edge
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Validate docker build arguments
|
|
||||||
ifndef DOCKER_IMAGE_NAME
|
|
||||||
$(error DOCKER_IMAGE_NAME value is not set)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# OS-specific flags
|
|
||||||
TEST_FLAGS := --race $(VERBOSE)
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
TEST_FLAGS :=
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: all build client client-watch docker lint lint-js lint-go test dependencies clean release docker-multi-arch
|
|
||||||
all: build
|
|
||||||
|
|
||||||
init:
|
|
||||||
git config core.hooksPath .githooks
|
|
||||||
|
|
||||||
build:
|
|
||||||
test '$(REBUILD_CLIENT)' = '1' && $(MAKE) client_with_deps || exit 0
|
|
||||||
$(GO) mod download
|
|
||||||
PATH=$(GOPATH)/bin:$(PATH) $(GO) generate ./...
|
|
||||||
CGO_ENABLED=0 $(GO) build -ldflags="-s -w -X main.version=$(VERSION) -X main.channel=$(CHANNEL) -X main.goarm=$(GOARM)"
|
|
||||||
PATH=$(GOPATH)/bin:$(PATH) packr clean
|
|
||||||
|
|
||||||
client:
|
|
||||||
npm --prefix client run build-prod
|
|
||||||
|
|
||||||
client_with_deps:
|
|
||||||
npm --prefix client ci
|
|
||||||
npm --prefix client run build-prod
|
|
||||||
|
|
||||||
client-watch:
|
|
||||||
npm --prefix client run watch
|
|
||||||
|
|
||||||
docker:
|
|
||||||
DOCKER_CLI_EXPERIMENTAL=enabled \
|
|
||||||
docker buildx build \
|
|
||||||
--build-arg VERSION=$(VERSION) \
|
|
||||||
--build-arg CHANNEL=$(CHANNEL) \
|
|
||||||
--build-arg VCS_REF=$(COMMIT) \
|
|
||||||
--build-arg BUILD_DATE=$(BUILD_DATE) \
|
|
||||||
$(DOCKER_TAGS) \
|
|
||||||
--load \
|
|
||||||
-t "$(DOCKER_IMAGE_NAME)" -f ./Dockerfile .
|
|
||||||
|
|
||||||
@echo Now you can run the docker image:
|
|
||||||
@echo docker run --name "adguard-home" -p 53:53/tcp -p 53:53/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp $(DOCKER_IMAGE_NAME)
|
|
||||||
|
|
||||||
|
deps: js-deps go-deps
|
||||||
lint: js-lint go-lint
|
lint: js-lint go-lint
|
||||||
|
|
||||||
js-lint: dependencies
|
|
||||||
npm --prefix client run lint
|
|
||||||
|
|
||||||
go-install-tools:
|
|
||||||
env GO=$(GO) sh ./scripts/go-install-tools.sh
|
|
||||||
|
|
||||||
go-lint:
|
|
||||||
env GO=$(GO) PATH="$$PWD/bin:$$PATH" sh ./scripts/go-lint.sh
|
|
||||||
|
|
||||||
test: js-test go-test
|
test: js-test go-test
|
||||||
|
|
||||||
js-test:
|
# Here and below, keep $(SHELL) in quotes, because on Windows this will
|
||||||
npm run test --prefix client
|
# expand to something like "C:/Program Files/Git/usr/bin/sh.exe".
|
||||||
|
build-docker: ; $(ENV) "$(SHELL)" ./scripts/make/build-docker.sh
|
||||||
|
|
||||||
go-test:
|
build-release: deps js-build
|
||||||
$(GO) test $(TEST_FLAGS) --coverprofile coverage.txt ./...
|
$(ENV) "$(SHELL)" ./scripts/make/build-release.sh
|
||||||
|
|
||||||
ci: client_with_deps
|
clean: ; $(ENV) "$(SHELL)" ./scripts/make/clean.sh
|
||||||
$(GO) mod download
|
init: ; git config core.hooksPath ./scripts/hooks
|
||||||
$(MAKE) test
|
|
||||||
|
|
||||||
|
js-build:
|
||||||
|
$(NPM) $(NPM_FLAGS) run build-prod
|
||||||
|
$(YARN) $(YARN_FLAGS) build
|
||||||
|
js-deps:
|
||||||
|
$(NPM) $(NPM_FLAGS) ci
|
||||||
|
$(YARN) $(YARN_FLAGS) install
|
||||||
|
|
||||||
|
# TODO(a.garipov): Remove the legacy client tasks support once the new
|
||||||
|
# client is done and the old one is removed.
|
||||||
|
js-lint: ; $(NPM) $(NPM_FLAGS) run lint
|
||||||
|
js-test: ; $(NPM) $(NPM_FLAGS) run test
|
||||||
|
js-beta-lint: ; $(YARN) $(YARN_FLAGS) lint
|
||||||
|
js-beta-test: ; # TODO(v.abdulmyanov): Add tests for the new client.
|
||||||
|
|
||||||
|
go-build: ; $(ENV) "$(SHELL)" ./scripts/make/go-build.sh
|
||||||
|
go-deps: ; $(ENV) "$(SHELL)" ./scripts/make/go-deps.sh
|
||||||
|
go-lint: ; $(ENV) "$(SHELL)" ./scripts/make/go-lint.sh
|
||||||
|
go-test: ; $(ENV) "$(SHELL)" ./scripts/make/go-test.sh
|
||||||
|
go-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-tools.sh
|
||||||
|
|
||||||
|
go-check: go-tools go-lint go-test
|
||||||
|
|
||||||
|
openapi-lint: ; cd ./openapi/ && $(YARN) test
|
||||||
|
openapi-show: ; cd ./openapi/ && $(YARN) start
|
||||||
|
|
||||||
|
# TODO(a.garipov): Remove the legacy targets once the build
|
||||||
|
# infrastructure stops using them.
|
||||||
dependencies:
|
dependencies:
|
||||||
npm --prefix client ci
|
@ echo "use make deps instead"
|
||||||
$(GO) mod download
|
@ $(MAKE) deps
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f ./AdGuardHome ./AdGuardHome.exe ./coverage.txt
|
|
||||||
rm -f -r ./build/ ./client/node_modules/ ./data/ ./$(DIST_DIR)/
|
|
||||||
# Set the GOPATH explicitly in case make clean is called from under sudo
|
|
||||||
# after a Docker build.
|
|
||||||
env PATH="$(GOPATH)/bin:$$PATH" packr clean
|
|
||||||
rm -f -r ./bin/
|
|
||||||
|
|
||||||
docker-multi-arch:
|
docker-multi-arch:
|
||||||
DOCKER_CLI_EXPERIMENTAL=enabled \
|
@ echo "use make build-docker instead"
|
||||||
docker buildx build \
|
@ $(MAKE) build-docker
|
||||||
--platform $(DOCKER_PLATFORMS) \
|
go-install-tools:
|
||||||
--build-arg VERSION=$(VERSION) \
|
@ echo "use make go-tools instead"
|
||||||
--build-arg CHANNEL=$(CHANNEL) \
|
@ $(MAKE) go-tools
|
||||||
--build-arg VCS_REF=$(COMMIT) \
|
release:
|
||||||
--build-arg BUILD_DATE=$(BUILD_DATE) \
|
@ echo "use make build-release instead"
|
||||||
$(DOCKER_TAGS) \
|
@ $(MAKE) build-release
|
||||||
--output "$(DOCKER_OUTPUT)" \
|
|
||||||
-t "$(DOCKER_IMAGE_FULL_NAME)" -f ./Dockerfile .
|
|
||||||
|
|
||||||
@echo If the image was pushed to the registry, you can now run it:
|
|
||||||
@echo docker run --name "adguard-home" -p 53:53/tcp -p 53:53/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp $(DOCKER_IMAGE_NAME)
|
|
||||||
|
|
||||||
release: client_with_deps
|
|
||||||
$(GO) mod download
|
|
||||||
@echo Starting release build: version $(VERSION), channel $(CHANNEL)
|
|
||||||
CHANNEL=$(CHANNEL) $(GORELEASER_COMMAND)
|
|
||||||
$(call write_version_file,$(VERSION))
|
|
||||||
PATH=$(GOPATH)/bin:$(PATH) packr clean
|
|
||||||
|
|
||||||
release_and_sign: client_with_deps
|
|
||||||
$(MAKE) release
|
|
||||||
$(call repack_dist)
|
|
||||||
|
|
||||||
sign:
|
|
||||||
$(call repack_dist)
|
|
||||||
|
|
||||||
define write_version_file
|
|
||||||
$(eval version := $(1))
|
|
||||||
|
|
||||||
@echo Writing version file: $(version)
|
|
||||||
|
|
||||||
# Variables for CI
|
|
||||||
rm -f $(DIST_DIR)/version.txt
|
|
||||||
echo "version=$(version)" > $(DIST_DIR)/version.txt
|
|
||||||
|
|
||||||
# Prepare the version.json file
|
|
||||||
rm -f $(DIST_DIR)/version.json
|
|
||||||
echo "{" >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"version\": \"$(version)\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"announcement\": \"AdGuard Home $(version) is now available!\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"announcement_url\": \"$(VERSION_HISTORY_URL)\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"selfupdate_min_version\": \"0.0\"," >> $(DIST_DIR)/version.json
|
|
||||||
|
|
||||||
# Windows builds
|
|
||||||
echo " \"download_windows_amd64\": \"$(BASE_URL)/AdGuardHome_windows_amd64.zip\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_windows_386\": \"$(BASE_URL)/AdGuardHome_windows_386.zip\"," >> $(DIST_DIR)/version.json
|
|
||||||
|
|
||||||
# MacOS builds
|
|
||||||
echo " \"download_darwin_amd64\": \"$(BASE_URL)/AdGuardHome_darwin_amd64.zip\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_darwin_386\": \"$(BASE_URL)/AdGuardHome_darwin_386.zip\"," >> $(DIST_DIR)/version.json
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
echo " \"download_linux_amd64\": \"$(BASE_URL)/AdGuardHome_linux_amd64.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_linux_386\": \"$(BASE_URL)/AdGuardHome_linux_386.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
|
|
||||||
# Linux, all kinds of ARM
|
|
||||||
echo " \"download_linux_arm\": \"$(BASE_URL)/AdGuardHome_linux_armv6.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_linux_armv5\": \"$(BASE_URL)/AdGuardHome_linux_armv5.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_linux_armv6\": \"$(BASE_URL)/AdGuardHome_linux_armv6.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_linux_armv7\": \"$(BASE_URL)/AdGuardHome_linux_armv7.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_linux_arm64\": \"$(BASE_URL)/AdGuardHome_linux_arm64.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
|
|
||||||
# Linux, MIPS
|
|
||||||
echo " \"download_linux_mips\": \"$(BASE_URL)/AdGuardHome_linux_mips_softfloat.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_linux_mipsle\": \"$(BASE_URL)/AdGuardHome_linux_mipsle_softfloat.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_linux_mips64\": \"$(BASE_URL)/AdGuardHome_linux_mips64_softfloat.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_linux_mips64le\": \"$(BASE_URL)/AdGuardHome_linux_mips64le_softfloat.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
|
|
||||||
# FreeBSD
|
|
||||||
echo " \"download_freebsd_386\": \"$(BASE_URL)/AdGuardHome_freebsd_386.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_freebsd_amd64\": \"$(BASE_URL)/AdGuardHome_freebsd_amd64.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
|
|
||||||
# FreeBSD, all kinds of ARM
|
|
||||||
echo " \"download_freebsd_arm\": \"$(BASE_URL)/AdGuardHome_freebsd_armv6.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_freebsd_armv5\": \"$(BASE_URL)/AdGuardHome_freebsd_armv5.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_freebsd_armv6\": \"$(BASE_URL)/AdGuardHome_freebsd_armv6.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_freebsd_armv7\": \"$(BASE_URL)/AdGuardHome_freebsd_armv7.tar.gz\"," >> $(DIST_DIR)/version.json
|
|
||||||
echo " \"download_freebsd_arm64\": \"$(BASE_URL)/AdGuardHome_freebsd_arm64.tar.gz\"" >> $(DIST_DIR)/version.json
|
|
||||||
|
|
||||||
# Finish
|
|
||||||
echo "}" >> $(DIST_DIR)/version.json
|
|
||||||
endef
|
|
||||||
|
|
||||||
define repack_dist
|
|
||||||
# Repack archive files
|
|
||||||
# A temporary solution for our auto-update code to be able to unpack these archive files
|
|
||||||
# The problem is that goreleaser doesn't add directory AdGuardHome/ to the archive file
|
|
||||||
# and we can't create it
|
|
||||||
rm -rf $(DIST_DIR)/AdGuardHome
|
|
||||||
|
|
||||||
# Windows builds
|
|
||||||
$(call zip_repack_windows,AdGuardHome_windows_amd64.zip)
|
|
||||||
$(call zip_repack_windows,AdGuardHome_windows_386.zip)
|
|
||||||
|
|
||||||
# MacOS builds
|
|
||||||
$(call zip_repack,AdGuardHome_darwin_amd64.zip)
|
|
||||||
$(call zip_repack,AdGuardHome_darwin_386.zip)
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
$(call tar_repack,AdGuardHome_linux_amd64.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_linux_386.tar.gz)
|
|
||||||
|
|
||||||
# Linux, all kinds of ARM
|
|
||||||
$(call tar_repack,AdGuardHome_linux_armv5.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_linux_armv6.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_linux_armv7.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_linux_arm64.tar.gz)
|
|
||||||
|
|
||||||
# Linux, MIPS
|
|
||||||
$(call tar_repack,AdGuardHome_linux_mips_softfloat.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_linux_mipsle_softfloat.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_linux_mips64_softfloat.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_linux_mips64le_softfloat.tar.gz)
|
|
||||||
|
|
||||||
# FreeBSD
|
|
||||||
$(call tar_repack,AdGuardHome_freebsd_386.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_freebsd_amd64.tar.gz)
|
|
||||||
|
|
||||||
# FreeBSD, all kinds of ARM
|
|
||||||
$(call tar_repack,AdGuardHome_freebsd_armv5.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_freebsd_armv6.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_freebsd_armv7.tar.gz)
|
|
||||||
$(call tar_repack,AdGuardHome_freebsd_arm64.tar.gz)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define zip_repack_windows
|
|
||||||
$(eval ARC := $(1))
|
|
||||||
cd $(DIST_DIR) && \
|
|
||||||
unzip $(ARC) && \
|
|
||||||
$(GPG_CMD) AdGuardHome/AdGuardHome.exe && \
|
|
||||||
zip -r $(ARC) AdGuardHome/ && \
|
|
||||||
rm -rf AdGuardHome
|
|
||||||
endef
|
|
||||||
|
|
||||||
define zip_repack
|
|
||||||
$(eval ARC := $(1))
|
|
||||||
cd $(DIST_DIR) && \
|
|
||||||
unzip $(ARC) && \
|
|
||||||
$(GPG_CMD) AdGuardHome/AdGuardHome && \
|
|
||||||
zip -r $(ARC) AdGuardHome/ && \
|
|
||||||
rm -rf AdGuardHome
|
|
||||||
endef
|
|
||||||
|
|
||||||
define tar_repack
|
|
||||||
$(eval ARC := $(1))
|
|
||||||
cd $(DIST_DIR) && \
|
|
||||||
tar xzf $(ARC) && \
|
|
||||||
$(GPG_CMD) AdGuardHome/AdGuardHome && \
|
|
||||||
tar czf $(ARC) AdGuardHome/ && \
|
|
||||||
rm -rf AdGuardHome
|
|
||||||
endef
|
|
||||||
|
98
README.md
98
README.md
@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
AdGuard Home is a network-wide software for blocking ads & tracking. After you set it up, it'll cover ALL your home devices, and you don't need any client-side software for that.
|
AdGuard Home is a network-wide software for blocking ads & tracking. After you set it up, it'll cover ALL your home devices, and you don't need any client-side software for that.
|
||||||
|
|
||||||
It operates as a DNS server that re-routes tracking domains to a "black hole," thus preventing your devices from connecting to those servers. It's based on software we use for our public [AdGuard DNS](https://adguard.com/en/adguard-dns/overview.html) servers -- both share a lot of common code.
|
It operates as a DNS server that re-routes tracking domains to a "black hole", thus preventing your devices from connecting to those servers. It's based on software we use for our public [AdGuard DNS](https://adguard.com/en/adguard-dns/overview.html) servers -- both share a lot of common code.
|
||||||
|
|
||||||
* [Getting Started](#getting-started)
|
* [Getting Started](#getting-started)
|
||||||
* [Comparing AdGuard Home to other solutions](#comparison)
|
* [Comparing AdGuard Home to other solutions](#comparison)
|
||||||
@ -58,7 +58,7 @@ It operates as a DNS server that re-routes tracking domains to a "black hole," t
|
|||||||
* [Reporting issues](#reporting-issues)
|
* [Reporting issues](#reporting-issues)
|
||||||
* [Help with translations](#translate)
|
* [Help with translations](#translate)
|
||||||
* [Other](#help-other)
|
* [Other](#help-other)
|
||||||
* [Projects that use AdGuardHome](#uses)
|
* [Projects that use AdGuard Home](#uses)
|
||||||
* [Acknowledgments](#acknowledgments)
|
* [Acknowledgments](#acknowledgments)
|
||||||
* [Privacy](#privacy)
|
* [Privacy](#privacy)
|
||||||
|
|
||||||
@ -87,12 +87,21 @@ If you're running **Linux**, there's a secure and easy way to install AdGuard Ho
|
|||||||
|
|
||||||
### Guides
|
### Guides
|
||||||
|
|
||||||
* [FAQ](https://github.com/AdguardTeam/AdGuardHome/wiki/FAQ)
|
* [Getting Started](https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started)
|
||||||
* [Configuration](https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration)
|
* [FAQ](https://github.com/AdguardTeam/AdGuardHome/wiki/FAQ)
|
||||||
* [AdGuard Home as a DNS-over-HTTPS or DNS-over-TLS server](https://github.com/AdguardTeam/AdGuardHome/wiki/Encryption)
|
* [How to Write Hosts Blocklists](https://github.com/AdguardTeam/AdGuardHome/wiki/Hosts-Blocklists)
|
||||||
* [How to install and run AdGuard Home on Raspberry Pi](https://github.com/AdguardTeam/AdGuardHome/wiki/Raspberry-Pi)
|
* [Comparing AdGuard Home to Other Solutions](https://github.com/AdguardTeam/AdGuardHome/wiki/Comparison)
|
||||||
* [How to install and run AdGuard Home on a Virtual Private Server](https://github.com/AdguardTeam/AdGuardHome/wiki/VPS)
|
* Configuring AdGuard
|
||||||
* [How to write your own hosts blocklists properly](https://github.com/AdguardTeam/AdGuardHome/wiki/Hosts-Blocklists)
|
* [Configuration](https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration)
|
||||||
|
* [Configuring AdGuard Home Clients](https://github.com/AdguardTeam/AdGuardHome/wiki/Clients)
|
||||||
|
* [AdGuard Home as a DoH, DoT, or DoQ Server](https://github.com/AdguardTeam/AdGuardHome/wiki/Encryption)
|
||||||
|
* [AdGuard Home as a DNSCrypt Server](https://github.com/AdguardTeam/AdGuardHome/wiki/DNSCrypt)
|
||||||
|
* [AdGuard Home as a DHCP Server](https://github.com/AdguardTeam/AdGuardHome/wiki/DHCP)
|
||||||
|
* Installing AdGuard Home
|
||||||
|
* [Docker](https://github.com/AdguardTeam/AdGuardHome/wiki/Docker)
|
||||||
|
* [How to Install and Run AdGuard Home on a Raspberry Pi](https://github.com/AdguardTeam/AdGuardHome/wiki/Raspberry-Pi)
|
||||||
|
* [How to Install and Run AdGuard Home on a Virtual Private Server](https://github.com/AdguardTeam/AdGuardHome/wiki/VPS)
|
||||||
|
* [Verifying Releases](https://github.com/AdguardTeam/AdGuardHome/wiki/Verify-Releases)
|
||||||
|
|
||||||
### API
|
### API
|
||||||
|
|
||||||
@ -123,20 +132,21 @@ AdGuard Home provides a lot of features out-of-the-box with no need to install a
|
|||||||
|
|
||||||
> Disclaimer: some of the listed features can be added to Pi-Hole by installing additional software or by manually using SSH terminal and reconfiguring one of the utilities Pi-Hole consists of. However, in our opinion, this cannot be legitimately counted as a Pi-Hole's feature.
|
> Disclaimer: some of the listed features can be added to Pi-Hole by installing additional software or by manually using SSH terminal and reconfiguring one of the utilities Pi-Hole consists of. However, in our opinion, this cannot be legitimately counted as a Pi-Hole's feature.
|
||||||
|
|
||||||
| Feature | AdGuard Home | Pi-Hole |
|
| Feature | AdGuard Home | Pi-Hole |
|
||||||
|-------------------------------------------------------------------------|--------------|--------------------------------------------------------|
|
|-------------------------------------------------------------------------|-------------------|-----------------------------------------------------------|
|
||||||
| Blocking ads and trackers | ✅ | ✅ |
|
| Blocking ads and trackers | ✅ | ✅ |
|
||||||
| Customizing blocklists | ✅ | ✅ |
|
| Customizing blocklists | ✅ | ✅ |
|
||||||
| Built-in DHCP server | ✅ | ✅ |
|
| Built-in DHCP server | ✅ | ✅ |
|
||||||
| HTTPS for the Admin interface | ✅ | Kind of, but you'll need to manually configure lighthttpd |
|
| HTTPS for the Admin interface | ✅ | Kind of, but you'll need to manually configure lighthttpd |
|
||||||
| Encrypted DNS upstream servers (DNS-over-HTTPS, DNS-over-TLS, DNSCrypt) | ✅ | ❌ (requires additional software) |
|
| Encrypted DNS upstream servers (DNS-over-HTTPS, DNS-over-TLS, DNSCrypt) | ✅ | ❌ (requires additional software) |
|
||||||
| Cross-platform | ✅ | ❌ (not natively, only via Docker) |
|
| Cross-platform | ✅ | ❌ (not natively, only via Docker) |
|
||||||
| Running as a DNS-over-HTTPS or DNS-over-TLS server | ✅ | ❌ (requires additional software) |
|
| Running as a DNS-over-HTTPS or DNS-over-TLS server | ✅ | ❌ (requires additional software) |
|
||||||
| Blocking phishing and malware domains | ✅ | ❌ (requires non-default blocklists) |
|
| Blocking phishing and malware domains | ✅ | ❌ (requires non-default blocklists) |
|
||||||
| Parental control (blocking adult domains) | ✅ | ❌ |
|
| Parental control (blocking adult domains) | ✅ | ❌ |
|
||||||
| Force Safe search on search engines | ✅ | ❌ |
|
| Force Safe search on search engines | ✅ | ❌ |
|
||||||
| Per-client (device) configuration | ✅ | ✅ |
|
| Per-client (device) configuration | ✅ | ✅ |
|
||||||
| Access settings (choose who can use AGH DNS) | ✅ | ❌ |
|
| Access settings (choose who can use AGH DNS) | ✅ | ❌ |
|
||||||
|
| Running [without root privileges](https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#running-without-superuser) | ✅ | ❌ |
|
||||||
|
|
||||||
<a id="comparison-adblock"></a>
|
<a id="comparison-adblock"></a>
|
||||||
### How does AdGuard Home compare to traditional ad blockers
|
### How does AdGuard Home compare to traditional ad blockers
|
||||||
@ -145,7 +155,7 @@ It depends.
|
|||||||
|
|
||||||
"DNS sinkholing" is capable of blocking a big percentage of ads, but it lacks flexibility and power of traditional ad blockers. You can get a good impression about the difference between these methods by reading [this article](https://adguard.com/en/blog/adguard-vs-adaway-dns66/). It compares AdGuard for Android (a traditional ad blocker) to hosts-level ad blockers (which are almost identical to DNS-based blockers in their capabilities).
|
"DNS sinkholing" is capable of blocking a big percentage of ads, but it lacks flexibility and power of traditional ad blockers. You can get a good impression about the difference between these methods by reading [this article](https://adguard.com/en/blog/adguard-vs-adaway-dns66/). It compares AdGuard for Android (a traditional ad blocker) to hosts-level ad blockers (which are almost identical to DNS-based blockers in their capabilities).
|
||||||
|
|
||||||
However, this level of protection is enough for some users. Additionally, using a DNS-based blocker can help to block ads, tracking and analytics requests on other types of devices, such as SmartTVs, smart speakers or other kinds of IoT devices (on which you can't install tradtional ad blockers).
|
However, this level of protection is enough for some users. Additionally, using a DNS-based blocker can help to block ads, tracking and analytics requests on other types of devices, such as SmartTVs, smart speakers or other kinds of IoT devices (on which you can't install traditional ad blockers).
|
||||||
|
|
||||||
**Known limitations**
|
**Known limitations**
|
||||||
|
|
||||||
@ -169,7 +179,8 @@ You will need this to build AdGuard Home:
|
|||||||
|
|
||||||
* [go](https://golang.org/dl/) v1.14 or later.
|
* [go](https://golang.org/dl/) v1.14 or later.
|
||||||
* [node.js](https://nodejs.org/en/download/) v10.16.2 or later.
|
* [node.js](https://nodejs.org/en/download/) v10.16.2 or later.
|
||||||
* [npm](https://www.npmjs.com/) v6.14 or later.
|
* [npm](https://www.npmjs.com/) v6.14 or later (temporary requirement, TODO: remove when redesign is finished).
|
||||||
|
* [yarn](https://yarnpkg.com/) v1.22.5 or later.
|
||||||
|
|
||||||
### Building
|
### Building
|
||||||
|
|
||||||
@ -181,6 +192,12 @@ cd AdGuardHome
|
|||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Please note, that the non-standard `-j` flag is currently not supported, so
|
||||||
|
building with `make -j 4` or setting your `MAKEFLAGS` to include, for example,
|
||||||
|
`-j 4` is likely to break the build. If you do have your `MAKEFLAGS` set to
|
||||||
|
that, and you don't want to change it, you can override it by running
|
||||||
|
`make -j 1`.
|
||||||
|
|
||||||
Check the [`Makefile`](https://github.com/AdguardTeam/AdGuardHome/blob/master/Makefile) to learn about other commands.
|
Check the [`Makefile`](https://github.com/AdguardTeam/AdGuardHome/blob/master/Makefile) to learn about other commands.
|
||||||
|
|
||||||
**Building for a different platform.** You can build AdGuard for any OS/ARCH just like any other Go project.
|
**Building for a different platform.** You can build AdGuard for any OS/ARCH just like any other Go project.
|
||||||
@ -188,26 +205,28 @@ In order to do this, specify `GOOS` and `GOARCH` env variables before running ma
|
|||||||
|
|
||||||
For example:
|
For example:
|
||||||
```
|
```
|
||||||
GOOS=linux GOARCH=arm64 make
|
env GOOS='linux' GOARCH='arm64' make
|
||||||
|
```
|
||||||
|
Or:
|
||||||
|
```
|
||||||
|
make GOOS='linux' GOARCH='arm64'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Preparing release
|
#### Preparing release
|
||||||
|
|
||||||
You'll need this to prepare a release build:
|
You'll need this to prepare a release build:
|
||||||
|
|
||||||
* [goreleaser](https://goreleaser.com/)
|
|
||||||
* [snapcraft](https://snapcraft.io/)
|
* [snapcraft](https://snapcraft.io/)
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
|
|
||||||
* `make release` - builds a snapshot build (CHANNEL=edge)
|
```
|
||||||
* `CHANNEL=beta make release` - builds beta version, tag is mandatory.
|
make build-release CHANNEL='...' VERSION='...'
|
||||||
* `CHANNEL=release make release` - builds release version, tag is mandatory.
|
```
|
||||||
|
|
||||||
#### Docker image
|
#### Docker image
|
||||||
|
|
||||||
* Run `make docker` to build the Docker image locally.
|
* Run `make build-docker` to build the Docker image locally (the one that we publish to DockerHub).
|
||||||
* Run `make docker-multi-arch` to build the multi-arch Docker image (the one that we publish to Docker Hub).
|
|
||||||
|
|
||||||
Please note, that we're using [Docker Buildx](https://docs.docker.com/buildx/working-with-buildx/) to build our official image.
|
Please note, that we're using [Docker Buildx](https://docs.docker.com/buildx/working-with-buildx/) to build our official image.
|
||||||
|
|
||||||
@ -290,17 +309,20 @@ Here is a link to AdGuard Home project: https://crowdin.com/project/adguard-appl
|
|||||||
Here's what you can also do to contribute:
|
Here's what you can also do to contribute:
|
||||||
|
|
||||||
1. [Look for issues](https://github.com/AdguardTeam/AdGuardHome/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22+) marked as "help wanted".
|
1. [Look for issues](https://github.com/AdguardTeam/AdGuardHome/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22+) marked as "help wanted".
|
||||||
2. Actualize the list of *Blocked services*. It it can be found in [dnsfilter/blocked_services.go](https://github.com/AdguardTeam/AdGuardHome/blob/master/internal/dnsfilter/blocked_services.go).
|
2. Actualize the list of *Blocked services*. It it can be found in [dnsfilter/blocked.go](https://github.com/AdguardTeam/AdGuardHome/blob/master/internal/dnsfilter/blocked.go).
|
||||||
3. Actualize the list of known *trackers*. It it can be found in [client/src/helpers/trackers/adguard.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/src/helpers/trackers/adguard.json).
|
3. Actualize the list of known *trackers*. It it can be found in [client/src/helpers/trackers/adguard.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/src/helpers/trackers/adguard.json).
|
||||||
4. Actualize the list of vetted *blocklists*. It it can be found in [client/src/helpers/filters/filters.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/src/helpers/filters/filters.json).
|
4. Actualize the list of vetted *blocklists*. It it can be found in [client/src/helpers/filters/filters.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/src/helpers/filters/filters.json).
|
||||||
|
|
||||||
<a id="uses"></a>
|
<a id="uses"></a>
|
||||||
## Projects that use AdGuardHome
|
## Projects that use AdGuard Home
|
||||||
|
|
||||||
* Python library (https://github.com/frenck/python-adguardhome)
|
|
||||||
* Hass.io add-on (https://github.com/hassio-addons/addon-adguard-home)
|
|
||||||
* OpenWrt LUCI app (https://github.com/rufengsuixing/luci-app-adguardhome)
|
|
||||||
|
|
||||||
|
* [AdGuard Home Remote](https://apps.apple.com/app/apple-store/id1543143740) - iOS app by [Joost](https://rocketscience-it.nl/)
|
||||||
|
* [Python library](https://github.com/frenck/python-adguardhome) by [@frenck](https://github.com/frenck)
|
||||||
|
* [Home Assistant add-on](https://github.com/hassio-addons/addon-adguard-home) by [@frenck](https://github.com/frenck)
|
||||||
|
* [OpenWrt LUCI app](https://github.com/kongfl888/luci-app-adguardhome) by [@kongfl888](https://github.com/kongfl888) (originally by [@rufengsuixing](https://github.com/rufengsuixing))
|
||||||
|
* [Prometheus exporter for AdGuard Home](https://github.com/ebrianne/adguard-exporter) by [@ebrianne](https://github.com/ebrianne)
|
||||||
|
* [AdGuard Home on GLInet routers](https://forum.gl-inet.com/t/adguardhome-on-gl-routers/10664) by [Gl-Inet](https://gl-inet.com/)
|
||||||
|
* [Cloudron app](https://git.cloudron.io/cloudron/adguard-home-app) by [@gramakri](https://github.com/gramakri)
|
||||||
|
|
||||||
<a id="acknowledgments"></a>
|
<a id="acknowledgments"></a>
|
||||||
## Acknowledgments
|
## Acknowledgments
|
||||||
@ -321,7 +343,7 @@ This software wouldn't have been possible without:
|
|||||||
* And many more node.js packages.
|
* And many more node.js packages.
|
||||||
* [whotracks.me data](https://github.com/cliqz-oss/whotracks.me)
|
* [whotracks.me data](https://github.com/cliqz-oss/whotracks.me)
|
||||||
|
|
||||||
You might have seen that [CoreDNS](https://coredns.io) was mentioned here before — we've stopped using it in AdGuardHome. While we still use it on our servers for [AdGuard DNS](https://adguard.com/adguard-dns/overview.html) service, it seemed like an overkill for Home as it impeded with Home features that we plan to implement.
|
You might have seen that [CoreDNS](https://coredns.io) was mentioned here before — we've stopped using it in AdGuard Home. While we still use it on our servers for [AdGuard DNS](https://adguard.com/adguard-dns/overview.html) service, it seemed like an overkill for Home as it impeded with Home features that we plan to implement.
|
||||||
|
|
||||||
For a full list of all node.js packages in use, please take a look at [client/package.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/package.json) file.
|
For a full list of all node.js packages in use, please take a look at [client/package.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/package.json) file.
|
||||||
|
|
||||||
|
12
client/package-lock.json
generated
vendored
12
client/package-lock.json
generated
vendored
@ -3066,12 +3066,6 @@
|
|||||||
"pkg-up": "^2.0.0"
|
"pkg-up": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"caniuse-lite": {
|
|
||||||
"version": "1.0.30001062",
|
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz",
|
|
||||||
"integrity": "sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"postcss": {
|
"postcss": {
|
||||||
"version": "7.0.30",
|
"version": "7.0.30",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
|
||||||
@ -3928,9 +3922,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"caniuse-lite": {
|
"caniuse-lite": {
|
||||||
"version": "1.0.30001059",
|
"version": "1.0.30001165",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001059.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz",
|
||||||
"integrity": "sha512-oOrc+jPJWooKIA0IrNZ5sYlsXc7NP7KLhNWrSGEJhnfSzDvDJ0zd3i6HXsslExY9bbu+x0FQ5C61LcqmPt7bOQ==",
|
"integrity": "sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"capture-exit": {
|
"capture-exit": {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||||
<meta name="theme-color" content="#000000">
|
<meta name="theme-color" content="#000000">
|
||||||
<meta name="google" content="notranslate">
|
<meta name="google" content="notranslate">
|
||||||
<meta http-equiv="x-dns-prefetch-control" content="off">
|
<meta http-equiv="x-dns-prefetch-control" content="off">
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||||
<meta name="theme-color" content="#000000">
|
<meta name="theme-color" content="#000000">
|
||||||
<meta name="google" content="notranslate">
|
<meta name="google" content="notranslate">
|
||||||
<meta name="mobile-web-app-capable" content="yes" />
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||||
<meta name="theme-color" content="#000000">
|
<meta name="theme-color" content="#000000">
|
||||||
<meta name="google" content="notranslate">
|
<meta name="google" content="notranslate">
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon-180x180.png" />
|
<link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon-180x180.png" />
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Няслушны фармат IP-адраса",
|
"form_error_ip_format": "Няслушны фармат IP-адраса",
|
||||||
"form_error_mac_format": "Некарэктны фармат MAC",
|
"form_error_mac_format": "Некарэктны фармат MAC",
|
||||||
"form_error_client_id_format": "Няслушны фармат ID кліента",
|
"form_error_client_id_format": "Няслушны фармат ID кліента",
|
||||||
|
"form_error_server_name": "Няслушнае імя сервера",
|
||||||
"form_error_positive": "Павінна быць больш 0",
|
"form_error_positive": "Павінна быць больш 0",
|
||||||
"form_error_negative": "Павінна быць не менш 0",
|
"form_error_negative": "Павінна быць не менш 0",
|
||||||
"range_end_error": "Павінен перавышаць пачатак дыяпазону",
|
"range_end_error": "Павінен перавышаць пачатак дыяпазону",
|
||||||
@ -247,8 +248,16 @@
|
|||||||
"custom_ip": "Свой IP",
|
"custom_ip": "Свой IP",
|
||||||
"blocking_ipv4": "Блакаванне IPv4",
|
"blocking_ipv4": "Блакаванне IPv4",
|
||||||
"blocking_ipv6": "Блакаванне IPv6",
|
"blocking_ipv6": "Блакаванне IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "Ідэнтыфікатар кліента",
|
||||||
|
"client_id_placeholder": "Увядзіце ідэнтыфікатар кліента",
|
||||||
|
"client_id_desc": "Розныя кліенты могуць ідэнтыфікавацца па адмысловым ідэнтыфікатары кліента. <a>Тут</a> вы можаце даведацца больш пра ідэнтыфікацыю кліентаў.",
|
||||||
|
"download_mobileconfig_doh": "Спампаваць .mobileconfig для DNS-over-HTTPS",
|
||||||
|
"download_mobileconfig_dot": "Спампаваць .mobileconfig для DNS-over-TLS",
|
||||||
|
"download_mobileconfig": "Загрузіць файл канфігурацыі",
|
||||||
"plain_dns": "Нешыфраваны DNS",
|
"plain_dns": "Нешыфраваны DNS",
|
||||||
"form_enter_rate_limit": "Увядзіце rate limit",
|
"form_enter_rate_limit": "Увядзіце rate limit",
|
||||||
"rate_limit": "Ограничение скорости",
|
"rate_limit": "Ограничение скорости",
|
||||||
@ -267,7 +276,7 @@
|
|||||||
"source_label": "Крыніца",
|
"source_label": "Крыніца",
|
||||||
"found_in_known_domain_db": "Знойдзены ў базе вядомых даменаў.",
|
"found_in_known_domain_db": "Знойдзены ў базе вядомых даменаў.",
|
||||||
"category_label": "Катэгорыя",
|
"category_label": "Катэгорыя",
|
||||||
"rule_label": "Правіла",
|
"rule_label": "Правіла(ы)",
|
||||||
"list_label": "Спіс",
|
"list_label": "Спіс",
|
||||||
"unknown_filter": "Невядомы фільтр {{filterId}}",
|
"unknown_filter": "Невядомы фільтр {{filterId}}",
|
||||||
"known_tracker": "Вядомы трэкер",
|
"known_tracker": "Вядомы трэкер",
|
||||||
@ -416,6 +425,7 @@
|
|||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Ужывайце радок <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Ужывайце радок <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Ужывайце радок <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Ужывайце радок <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_3": "<0>Вось спіс ПА, якое вы можаце выкарыстоўваць.</0>",
|
"setup_dns_privacy_3": "<0>Вось спіс ПА, якое вы можаце выкарыстоўваць.</0>",
|
||||||
|
"setup_dns_privacy_4": "На прыладах з iOS 14 і macOS Big Sur вы можаце спампаваць адмысловы файл '.mobileconfig', які дадае <highlight>DNS-over-HTTPS</highlight> ці <highlight>DNS-over-TLS</highlight> серверы ў налады DNS.",
|
||||||
"setup_dns_privacy_android_1": "Android 9 натыўна падтрымвае DNS-over-TLS. Для налады, перайдзіце ў Налады → Сеціва і Інтэрнэт → Дадаткова → Персанальны DNS сервер, і ўвядзіце туды ваша даменавае імя.",
|
"setup_dns_privacy_android_1": "Android 9 натыўна падтрымвае DNS-over-TLS. Для налады, перайдзіце ў Налады → Сеціва і Інтэрнэт → Дадаткова → Персанальны DNS сервер, і ўвядзіце туды ваша даменавае імя.",
|
||||||
"setup_dns_privacy_android_2": "<0>AdGuard для Android</0> падтрымвае <1>DNS-over-HTTPS</1> і <1>DNS-over-TLS</1>.",
|
"setup_dns_privacy_android_2": "<0>AdGuard для Android</0> падтрымвае <1>DNS-over-HTTPS</1> і <1>DNS-over-TLS</1>.",
|
||||||
"setup_dns_privacy_android_3": "<0>Intra</0> дадае падтрымка <1>DNS-over-HTTPS</1> на Android.",
|
"setup_dns_privacy_android_3": "<0>Intra</0> дадае падтрымка <1>DNS-over-HTTPS</1> на Android.",
|
||||||
@ -427,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> падтрымвае <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> падтрымвае <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> падтрымвае <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> падтрымвае <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Вы можаце знайсці яшчэ варыянты <0>тут</0> і <1>тут</1>.",
|
"setup_dns_privacy_other_5": "Вы можаце знайсці яшчэ варыянты <0>тут</0> і <1>тут</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Канфігурацыя для iOS і macOS",
|
||||||
"setup_dns_notice": "Каб выкарыстоўваць <1>DNS-over-HTTPS</1> ці <1>DNS-over-TLS</1>, вам патрэбна <0>наладзіць шыфраванне</0> у наладах AdGuard Home.",
|
"setup_dns_notice": "Каб выкарыстоўваць <1>DNS-over-HTTPS</1> ці <1>DNS-over-TLS</1>, вам патрэбна <0>наладзіць шыфраванне</0> у наладах AdGuard Home.",
|
||||||
"rewrite_added": "Правіла перанакіравання DNS для \"{{key}}\" паспяхова дададзена",
|
"rewrite_added": "Правіла перанакіравання DNS для \"{{key}}\" паспяхова дададзена",
|
||||||
"rewrite_deleted": "Правіла перанакіравання DNS для \"{{key}}\" паспяхова выдалена",
|
"rewrite_deleted": "Правіла перанакіравання DNS для \"{{key}}\" паспяхова выдалена",
|
||||||
@ -526,7 +537,6 @@
|
|||||||
"check_ip": "IP-адрасы: {{ip}}",
|
"check_ip": "IP-адрасы: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Прычына: {{reason}}",
|
"check_reason": "Прычына: {{reason}}",
|
||||||
"check_rule": "Правіла: {{rule}}",
|
|
||||||
"check_service": "Назва сэрвісу: {{service}}",
|
"check_service": "Назва сэрвісу: {{service}}",
|
||||||
"service_name": "Назва сэрвіса",
|
"service_name": "Назва сэрвіса",
|
||||||
"check_not_found": "Не знойдзена ў вашым спісе фільтраў",
|
"check_not_found": "Не знойдзена ў вашым спісе фільтраў",
|
||||||
|
@ -144,7 +144,6 @@
|
|||||||
"source_label": "Източник",
|
"source_label": "Източник",
|
||||||
"found_in_known_domain_db": "Намерен в списъците с домейни.",
|
"found_in_known_domain_db": "Намерен в списъците с домейни.",
|
||||||
"category_label": "Категория",
|
"category_label": "Категория",
|
||||||
"rule_label": "Правило",
|
|
||||||
"unknown_filter": "Непознат филтър {{filterId}}",
|
"unknown_filter": "Непознат филтър {{filterId}}",
|
||||||
"install_welcome_title": "Добре дошли в AdGuard Home!",
|
"install_welcome_title": "Добре дошли в AdGuard Home!",
|
||||||
"install_welcome_desc": "AdGuard Home e мрежово решение за блокиране на реклами и тракери на DNS ниво. Създадено е за да ви даде пълен контрол над мрежата и всичките ви устройства, без да е необходимо допълнително инсталиране на друг софтуер.",
|
"install_welcome_desc": "AdGuard Home e мрежово решение за блокиране на реклами и тракери на DNS ниво. Създадено е за да ви даде пълен контрол над мрежата и всичките ви устройства, без да е необходимо допълнително инсталиране на друг софтуер.",
|
||||||
@ -202,7 +201,6 @@
|
|||||||
"encryption_config_saved": "Конфигурацията е успешно записана",
|
"encryption_config_saved": "Конфигурацията е успешно записана",
|
||||||
"encryption_server": "Име на сървъра",
|
"encryption_server": "Име на сървъра",
|
||||||
"encryption_server_enter": "Въведете име на домейна",
|
"encryption_server_enter": "Въведете име на домейна",
|
||||||
"encryption_server_desc": "За да използвате HTTPS, трябва името на сървъра да съвпада с това на SSL сертификата.",
|
|
||||||
"encryption_redirect": "Автоматично пренасочване към HTTPS",
|
"encryption_redirect": "Автоматично пренасочване към HTTPS",
|
||||||
"encryption_redirect_desc": "Служи за автоматично пренасочване от HTTP към HTTPS на страницата за Администрация в AdGuard Home.",
|
"encryption_redirect_desc": "Служи за автоматично пренасочване от HTTP към HTTPS на страницата за Администрация в AdGuard Home.",
|
||||||
"encryption_https": "HTTPS порт",
|
"encryption_https": "HTTPS порт",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Neplatný formát IP",
|
"form_error_ip_format": "Neplatný formát IP",
|
||||||
"form_error_mac_format": "Neplatný formát MAC",
|
"form_error_mac_format": "Neplatný formát MAC",
|
||||||
"form_error_client_id_format": "Neplatný formát ID klienta",
|
"form_error_client_id_format": "Neplatný formát ID klienta",
|
||||||
|
"form_error_server_name": "Neplatný název serveru",
|
||||||
"form_error_positive": "Musí být větší než 0",
|
"form_error_positive": "Musí být větší než 0",
|
||||||
"form_error_negative": "Musí být rovno nebo větší než 0",
|
"form_error_negative": "Musí být rovno nebo větší než 0",
|
||||||
"range_end_error": "Musí být větší než začátek rozsahu",
|
"range_end_error": "Musí být větší než začátek rozsahu",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "Vlastní IP",
|
"custom_ip": "Vlastní IP",
|
||||||
"blocking_ipv4": "Blokování IPv4",
|
"blocking_ipv4": "Blokování IPv4",
|
||||||
"blocking_ipv6": "Blokování IPv6",
|
"blocking_ipv6": "Blokování IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS přes HTTPS",
|
"dns_over_https": "DNS přes HTTPS",
|
||||||
"dns_over_tls": "DNS přes TLS",
|
"dns_over_tls": "DNS přes TLS",
|
||||||
|
"dns_over_quic": "DNS skrze QUIC",
|
||||||
|
"client_id": "ID klienta",
|
||||||
|
"client_id_placeholder": "Zadejte ID klienta",
|
||||||
|
"client_id_desc": "Různé klienty lze identifikovat pomocí speciálního ID klienta. <a>Zde</a> se můžete dozvědět více o tom, jak klienty identifikovat.",
|
||||||
"download_mobileconfig_doh": "Stáhnout .mobileconfig pro DNS skrze HTTPS",
|
"download_mobileconfig_doh": "Stáhnout .mobileconfig pro DNS skrze HTTPS",
|
||||||
"download_mobileconfig_dot": "Stáhnout .mobileconfig pro DNS skrze TLS",
|
"download_mobileconfig_dot": "Stáhnout .mobileconfig pro DNS skrze TLS",
|
||||||
|
"download_mobileconfig": "Stáhnout konfigurační soubor",
|
||||||
"plain_dns": "Čisté DNS",
|
"plain_dns": "Čisté DNS",
|
||||||
"form_enter_rate_limit": "Zadejte rychlostní limit",
|
"form_enter_rate_limit": "Zadejte rychlostní limit",
|
||||||
"rate_limit": "Rychlostní limit",
|
"rate_limit": "Rychlostní limit",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Zdroj",
|
"source_label": "Zdroj",
|
||||||
"found_in_known_domain_db": "Nalezeno v databázi známých domén",
|
"found_in_known_domain_db": "Nalezeno v databázi známých domén",
|
||||||
"category_label": "Kategorie",
|
"category_label": "Kategorie",
|
||||||
"rule_label": "Pravidlo",
|
"rule_label": "Pravidla",
|
||||||
"list_label": "Seznam",
|
"list_label": "Seznam",
|
||||||
"unknown_filter": "Neznámý filtr {{filterId}}",
|
"unknown_filter": "Neznámý filtr {{filterId}}",
|
||||||
"known_tracker": "Známý slídič",
|
"known_tracker": "Známý slídič",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Konfigurace šifrování byla uložena",
|
"encryption_config_saved": "Konfigurace šifrování byla uložena",
|
||||||
"encryption_server": "Název serveru",
|
"encryption_server": "Název serveru",
|
||||||
"encryption_server_enter": "Zadejte název domény",
|
"encryption_server_enter": "Zadejte název domény",
|
||||||
"encryption_server_desc": "Abyste mohli používat protokol HTTPS, musíte zadat název serveru, který odpovídá vašemu certifikátu SSL.",
|
"encryption_server_desc": "Abyste mohli používat HTTPS, musíte zadat název serveru, který odpovídá vašemu certifikátu SSL nebo zástupnému certifikátu. Pokud není pole nastaveno, bude přijímat připojení TLS pro libovolnou doménu.",
|
||||||
"encryption_redirect": "Automaticky přesměrovat na HTTPS",
|
"encryption_redirect": "Automaticky přesměrovat na HTTPS",
|
||||||
"encryption_redirect_desc": "Pokud je zaškrtnuto, AdGuard Home vás automaticky přesměruje z adres HTTP na HTTPS.",
|
"encryption_redirect_desc": "Pokud je zaškrtnuto, AdGuard Home vás automaticky přesměruje z adres HTTP na HTTPS.",
|
||||||
"encryption_https": "HTTPS port",
|
"encryption_https": "HTTPS port",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Upravit klienta",
|
"client_edit": "Upravit klienta",
|
||||||
"client_identifier": "Identifikátor",
|
"client_identifier": "Identifikátor",
|
||||||
"ip_address": "IP adresa",
|
"ip_address": "IP adresa",
|
||||||
"client_identifier_desc": "Klienti můžou být identifikováni podle IP adresy, CIDR nebo MAC adresy. Upozorňujeme, že použití MAC jako identifikátoru je možné pouze v případě, že je AdGuard Home také <0>DHCP server</0>",
|
"client_identifier_desc": "Klienti můžou být identifikováni podle IP adresy, CIDR, MAC adresy nebo speciálního ID klienta (může být použito pro DoT/DoH/DoQ). <0>Zde</0> se můžete dozvědět více o tom, jak klienty identifikovat.",
|
||||||
"form_enter_ip": "Zadejte IP",
|
"form_enter_ip": "Zadejte IP",
|
||||||
"form_enter_mac": "Zadejte MAC",
|
"form_enter_mac": "Zadejte MAC",
|
||||||
"form_enter_id": "Zadejte identifikátor",
|
"form_enter_id": "Zadejte identifikátor",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> podporuje <1>DNS-přes-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> podporuje <1>DNS-přes-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> podporuje <1>DNS-přes-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> podporuje <1>DNS-přes-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Další implementace naleznete <0>zde</0> a <1>zde</1>.",
|
"setup_dns_privacy_other_5": "Další implementace naleznete <0>zde</0> a <1>zde</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Konfigurace pro iOS a macOS",
|
||||||
"setup_dns_notice": "Pro použití <1>DNS-přes-HTTPS</1> nebo <1>DNS-přes-TLS</1> potřebujete v nastaveních AdGuard Home <0>nakonfigurovat šifrování</0>.",
|
"setup_dns_notice": "Pro použití <1>DNS-přes-HTTPS</1> nebo <1>DNS-přes-TLS</1> potřebujete v nastaveních AdGuard Home <0>nakonfigurovat šifrování</0>.",
|
||||||
"rewrite_added": "Přesměrování DNS pro „{{key}}“ úspěšně přidáno",
|
"rewrite_added": "Přesměrování DNS pro „{{key}}“ úspěšně přidáno",
|
||||||
"rewrite_deleted": "Přesměrování DNS pro „{{key}}“ úspěšně smazáno",
|
"rewrite_deleted": "Přesměrování DNS pro „{{key}}“ úspěšně smazáno",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP adresy: {{ip}}",
|
"check_ip": "IP adresy: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Důvod: {{reason}}",
|
"check_reason": "Důvod: {{reason}}",
|
||||||
"check_rule": "Pravidlo: {{rule}}",
|
|
||||||
"check_service": "Název služby: {{service}}",
|
"check_service": "Název služby: {{service}}",
|
||||||
"service_name": "Název služby",
|
"service_name": "Název služby",
|
||||||
"check_not_found": "Nenalezeno ve Vašich seznamech filtrů",
|
"check_not_found": "Nenalezeno ve Vašich seznamech filtrů",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Ugyldigt IP-format",
|
"form_error_ip_format": "Ugyldigt IP-format",
|
||||||
"form_error_mac_format": "Ugyldigt MAC-format",
|
"form_error_mac_format": "Ugyldigt MAC-format",
|
||||||
"form_error_client_id_format": "Ugyldigt klient-ID-format",
|
"form_error_client_id_format": "Ugyldigt klient-ID-format",
|
||||||
|
"form_error_server_name": "Ugyldigt servernavn",
|
||||||
"form_error_positive": "Skal være større end 0",
|
"form_error_positive": "Skal være større end 0",
|
||||||
"form_error_negative": "Skal være lig med 0 eller større",
|
"form_error_negative": "Skal være lig med 0 eller større",
|
||||||
"range_end_error": "Skal være større end starten af intervallet",
|
"range_end_error": "Skal være større end starten af intervallet",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "Tilpasset IP",
|
"custom_ip": "Tilpasset IP",
|
||||||
"blocking_ipv4": "IPv4-blokering",
|
"blocking_ipv4": "IPv4-blokering",
|
||||||
"blocking_ipv6": "IPv6-blokering",
|
"blocking_ipv6": "IPv6-blokering",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-Quic",
|
||||||
|
"client_id": "Klient-ID",
|
||||||
|
"client_id_placeholder": "Indtast klient-ID",
|
||||||
|
"client_id_desc": "Forskellige klienter kan identificeres ved hjælp af et specielt klient-ID. <a>Her</a> kan du lære mere om, hvordan du identificerer klienter.",
|
||||||
"download_mobileconfig_doh": "Download .mobileconfig til DNS-over-HTTPS",
|
"download_mobileconfig_doh": "Download .mobileconfig til DNS-over-HTTPS",
|
||||||
"download_mobileconfig_dot": "Download .mobileconfig til DNS-over-TLS",
|
"download_mobileconfig_dot": "Download .mobileconfig til DNS-over-TLS",
|
||||||
|
"download_mobileconfig": "Download konfigurationsfil",
|
||||||
"plain_dns": "Almindelig DNS",
|
"plain_dns": "Almindelig DNS",
|
||||||
"form_enter_rate_limit": "Indtast hyppighedsgrænse",
|
"form_enter_rate_limit": "Indtast hyppighedsgrænse",
|
||||||
"rate_limit": "Hyppighedsgrænse",
|
"rate_limit": "Hyppighedsgrænse",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Kilde",
|
"source_label": "Kilde",
|
||||||
"found_in_known_domain_db": "Fundet i databasen med kendte domæner.",
|
"found_in_known_domain_db": "Fundet i databasen med kendte domæner.",
|
||||||
"category_label": "Kategori",
|
"category_label": "Kategori",
|
||||||
"rule_label": "Regel",
|
"rule_label": "Regel(regler)",
|
||||||
"list_label": "Liste",
|
"list_label": "Liste",
|
||||||
"unknown_filter": "Ukendt filter {{filterId}}",
|
"unknown_filter": "Ukendt filter {{filterId}}",
|
||||||
"known_tracker": "Kendt tracker",
|
"known_tracker": "Kendt tracker",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Krypteringskonfiguration gemt",
|
"encryption_config_saved": "Krypteringskonfiguration gemt",
|
||||||
"encryption_server": "Servernavn",
|
"encryption_server": "Servernavn",
|
||||||
"encryption_server_enter": "Indtast dit domænenavn",
|
"encryption_server_enter": "Indtast dit domænenavn",
|
||||||
"encryption_server_desc": "For at kunne bruge HTTPS skal du indtaste servernavnet, der matcher dit SSL-certifikat.",
|
"encryption_server_desc": "For at kunne bruge HTTPS skal du indtaste det servernavn, der matcher dit SSL-certifikat eller wildcard-certifikat. Hvis feltet ikke er indstillet, accepterer det TLS-forbindelser til ethvert domæne.",
|
||||||
"encryption_redirect": "Omdiriger automatisk til HTTPS",
|
"encryption_redirect": "Omdiriger automatisk til HTTPS",
|
||||||
"encryption_redirect_desc": "Hvis afkrydset, vil AdGuard Home automatisk omdirigere dig fra HTTP til HTTPS-adresser.",
|
"encryption_redirect_desc": "Hvis afkrydset, vil AdGuard Home automatisk omdirigere dig fra HTTP til HTTPS-adresser.",
|
||||||
"encryption_https": "HTTPS-port",
|
"encryption_https": "HTTPS-port",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Rediger Klient",
|
"client_edit": "Rediger Klient",
|
||||||
"client_identifier": "Identifikator",
|
"client_identifier": "Identifikator",
|
||||||
"ip_address": "IP-adresse",
|
"ip_address": "IP-adresse",
|
||||||
"client_identifier_desc": "Klienter kan identificeres ud fra IP-adressen, CIDR eller MAC-adressen. Bemærk, at det kun er muligt at bruge MAC som identifikator, hvis AdGuard Home også er en <0>DHCP-server</0>",
|
"client_identifier_desc": "Klienter kan identificeres ud fra IP-adressen, CIDR eller MAC-adressen eller et specielt klient-ID (kan bruges til DoT/DoH/DoQ). <0>Her</0> kan du lære mere om, hvordan du identificerer klienter.",
|
||||||
"form_enter_ip": "Indtast IP",
|
"form_enter_ip": "Indtast IP",
|
||||||
"form_enter_mac": "Indtast MAC",
|
"form_enter_mac": "Indtast MAC",
|
||||||
"form_enter_id": "Indtast identifikator",
|
"form_enter_id": "Indtast identifikator",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> understøtter <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> understøtter <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> understøtter <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> understøtter <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Du kan finde flere implementeringer <0>her</0> og <1>her</1>.",
|
"setup_dns_privacy_other_5": "Du kan finde flere implementeringer <0>her</0> og <1>her</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "iOS- og macOS-konfiguration",
|
||||||
"setup_dns_notice": "For at kunne bruge <1>DNS-over-HTTPS</1> eller <1>DNS-over-TLS</1>, skal du <0>konfigurere Krypteringen</0> i indstillingerne i AdGuard Home.",
|
"setup_dns_notice": "For at kunne bruge <1>DNS-over-HTTPS</1> eller <1>DNS-over-TLS</1>, skal du <0>konfigurere Krypteringen</0> i indstillingerne i AdGuard Home.",
|
||||||
"rewrite_added": "DNS-omskrivning for \"{{key}}\" blev tilføjet",
|
"rewrite_added": "DNS-omskrivning for \"{{key}}\" blev tilføjet",
|
||||||
"rewrite_deleted": "DNS-omskrivning for \"{{key}}\" blev slettet",
|
"rewrite_deleted": "DNS-omskrivning for \"{{key}}\" blev slettet",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP-adresser: {{ip}}",
|
"check_ip": "IP-adresser: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Årsag: {{reason}}",
|
"check_reason": "Årsag: {{reason}}",
|
||||||
"check_rule": "Regel: {{rule}}",
|
|
||||||
"check_service": "Servicenavn: {{service}}",
|
"check_service": "Servicenavn: {{service}}",
|
||||||
"service_name": "Navn på tjeneste",
|
"service_name": "Navn på tjeneste",
|
||||||
"check_not_found": "Ikke fundet i dine filterlister",
|
"check_not_found": "Ikke fundet i dine filterlister",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Ungültiges IPv4-Format",
|
"form_error_ip_format": "Ungültiges IPv4-Format",
|
||||||
"form_error_mac_format": "Ungültiges MAC-Format",
|
"form_error_mac_format": "Ungültiges MAC-Format",
|
||||||
"form_error_client_id_format": "Ungültiges Client-ID-Format",
|
"form_error_client_id_format": "Ungültiges Client-ID-Format",
|
||||||
|
"form_error_server_name": "Ungültiger Servername",
|
||||||
"form_error_positive": "Muss größer als 0 sein.",
|
"form_error_positive": "Muss größer als 0 sein.",
|
||||||
"form_error_negative": "Muss gleich oder größer als 0 (Null) sein",
|
"form_error_negative": "Muss gleich oder größer als 0 (Null) sein",
|
||||||
"range_end_error": "Muss größer als der Bereichsbeginn sein",
|
"range_end_error": "Muss größer als der Bereichsbeginn sein",
|
||||||
@ -91,16 +92,16 @@
|
|||||||
"disabled_protection": "Schutz deaktiviert",
|
"disabled_protection": "Schutz deaktiviert",
|
||||||
"refresh_statics": "Statistiken aktualisieren",
|
"refresh_statics": "Statistiken aktualisieren",
|
||||||
"dns_query": "DNS-Anfragen",
|
"dns_query": "DNS-Anfragen",
|
||||||
"blocked_by": "<0>Blockiert durch die Filter</0>",
|
"blocked_by": "<0>Durch Filter gesperrt</0>",
|
||||||
"stats_malware_phishing": "Blockierte Malware/Phishing",
|
"stats_malware_phishing": "Gesperrte Schädliche/Phishing-Webseiten",
|
||||||
"stats_adult": "Blockierte Webseiten für Erwachsene",
|
"stats_adult": "Gesperrte jugendgefährdende Webseiten",
|
||||||
"stats_query_domain": "Am häufigsten angefragte Domains",
|
"stats_query_domain": "Am häufigsten angefragte Domains",
|
||||||
"for_last_24_hours": "für die letzten 24 Stunden",
|
"for_last_24_hours": "für die letzten 24 Stunden",
|
||||||
"for_last_days": "am letzten {{count}} Tag",
|
"for_last_days": "am letzten {{count}} Tag",
|
||||||
"for_last_days_plural": "in den letzten {{count}} Tage",
|
"for_last_days_plural": "in den letzten {{count}} Tage",
|
||||||
"no_domains_found": "Keine Domains gefunden",
|
"no_domains_found": "Keine Domains gefunden",
|
||||||
"requests_count": "Anzahl der Anfragen",
|
"requests_count": "Anzahl der Anfragen",
|
||||||
"top_blocked_domains": "Am häufigsten blockierte Domains",
|
"top_blocked_domains": "Am häufigsten gesperrte Domains",
|
||||||
"top_clients": "Top Clients",
|
"top_clients": "Top Clients",
|
||||||
"no_clients_found": "Keine Clients gefunden",
|
"no_clients_found": "Keine Clients gefunden",
|
||||||
"general_statistics": "Allgemeine Statistiken",
|
"general_statistics": "Allgemeine Statistiken",
|
||||||
@ -109,7 +110,7 @@
|
|||||||
"number_of_dns_query_24_hours": "Anzahl der in den letzten 24 Stunden durchgeführten DNS-Anfragen",
|
"number_of_dns_query_24_hours": "Anzahl der in den letzten 24 Stunden durchgeführten DNS-Anfragen",
|
||||||
"number_of_dns_query_blocked_24_hours": "Anzahl der durch Werbefilter und Host-Blocklisten geblockten DNS-Anfragen",
|
"number_of_dns_query_blocked_24_hours": "Anzahl der durch Werbefilter und Host-Blocklisten geblockten DNS-Anfragen",
|
||||||
"number_of_dns_query_blocked_24_hours_by_sec": "Anzahl der durch das AdGuard-Modul „Internetsicherheit” gesperrten DNS-Anfragen",
|
"number_of_dns_query_blocked_24_hours_by_sec": "Anzahl der durch das AdGuard-Modul „Internetsicherheit” gesperrten DNS-Anfragen",
|
||||||
"number_of_dns_query_blocked_24_hours_adult": "Anzahl der blockierten Webseiten für Erwachsene",
|
"number_of_dns_query_blocked_24_hours_adult": "Anzahl der gesperrten Webseiten mit jugendgefährdenden Inhalten",
|
||||||
"enforced_save_search": "SafeSearch erzwungen",
|
"enforced_save_search": "SafeSearch erzwungen",
|
||||||
"number_of_dns_query_to_safe_search": "Anzahl der DNS-Anfragen bei denen SafeSearch für Suchanfragen erzwungen wurde",
|
"number_of_dns_query_to_safe_search": "Anzahl der DNS-Anfragen bei denen SafeSearch für Suchanfragen erzwungen wurde",
|
||||||
"average_processing_time": "Durchschnittliche Bearbeitungsdauer",
|
"average_processing_time": "Durchschnittliche Bearbeitungsdauer",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "Benutzerdefinierte IP",
|
"custom_ip": "Benutzerdefinierte IP",
|
||||||
"blocking_ipv4": "IPv4-Sperren",
|
"blocking_ipv4": "IPv4-Sperren",
|
||||||
"blocking_ipv6": "IPv6-Sperren",
|
"blocking_ipv6": "IPv6-Sperren",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS (DNS-Abrage über HTTPS)",
|
"dns_over_https": "DNS-over-HTTPS (DNS-Abrage über HTTPS)",
|
||||||
"dns_over_tls": "DNS-over-TLS (DNS-Abrage über TLS)",
|
"dns_over_tls": "DNS-over-TLS (DNS-Abrage über TLS)",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "Client-ID",
|
||||||
|
"client_id_placeholder": "Client-ID eingeben",
|
||||||
|
"client_id_desc": "Verschiedene Clients können durch eine spezielle Client-ID identifiziert werden. <a>Hier</a> können Sie mehr darüber erfahren, wie Sie Clients identifizieren können.",
|
||||||
"download_mobileconfig_doh": ".mobileconfig für DNS-über-HTTPS herunterladen",
|
"download_mobileconfig_doh": ".mobileconfig für DNS-über-HTTPS herunterladen",
|
||||||
"download_mobileconfig_dot": ".mobileconfig für DNS-über-TLS herunterladen",
|
"download_mobileconfig_dot": ".mobileconfig für DNS-über-TLS herunterladen",
|
||||||
|
"download_mobileconfig": "Konfigurationsdatei herunterladen",
|
||||||
"plain_dns": "Einfaches DNS",
|
"plain_dns": "Einfaches DNS",
|
||||||
"form_enter_rate_limit": "Begrenzungswert eingeben",
|
"form_enter_rate_limit": "Begrenzungswert eingeben",
|
||||||
"rate_limit": "Begrenzungswert",
|
"rate_limit": "Begrenzungswert",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Quelle",
|
"source_label": "Quelle",
|
||||||
"found_in_known_domain_db": "In der Datenbank der bekannten Domains gefunden.",
|
"found_in_known_domain_db": "In der Datenbank der bekannten Domains gefunden.",
|
||||||
"category_label": "Kategorie",
|
"category_label": "Kategorie",
|
||||||
"rule_label": "Regel",
|
"rule_label": "Regel(n)",
|
||||||
"list_label": "Liste",
|
"list_label": "Liste",
|
||||||
"unknown_filter": "Unbekannter Filter {{filterId}}",
|
"unknown_filter": "Unbekannter Filter {{filterId}}",
|
||||||
"known_tracker": "Bekannte Tracker",
|
"known_tracker": "Bekannte Tracker",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> unterstützt <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> unterstützt <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> unterstützt <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> unterstützt <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Weitere Umsetzungen finden Sie <0>hier</0> und <1>hier</1>.",
|
"setup_dns_privacy_other_5": "Weitere Umsetzungen finden Sie <0>hier</0> und <1>hier</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Konfiguration für iOS und macOS",
|
||||||
"setup_dns_notice": "Um <1>DNS-over-HTTTPS</1> oder <1>DNS-over-TLS</1> verwenden zu können, müssen Sie in den AdGuard Home Einstellungen die <0>Verschlüsselung konfigurieren</0>.",
|
"setup_dns_notice": "Um <1>DNS-over-HTTTPS</1> oder <1>DNS-over-TLS</1> verwenden zu können, müssen Sie in den AdGuard Home Einstellungen die <0>Verschlüsselung konfigurieren</0>.",
|
||||||
"rewrite_added": "DNS-Umschreibung für „{{key}}” erfolgreich hinzugefügt",
|
"rewrite_added": "DNS-Umschreibung für „{{key}}” erfolgreich hinzugefügt",
|
||||||
"rewrite_deleted": "DNS-Umschreibung für „{{key}}” erfolgreich entfernt",
|
"rewrite_deleted": "DNS-Umschreibung für „{{key}}” erfolgreich entfernt",
|
||||||
@ -498,7 +506,7 @@
|
|||||||
"descr": "Beschreibung",
|
"descr": "Beschreibung",
|
||||||
"whois": "Whois",
|
"whois": "Whois",
|
||||||
"filtering_rules_learn_more": "<0>Erfahren Sie mehr</0> über die Erstellung eigener Hosts-Listen.",
|
"filtering_rules_learn_more": "<0>Erfahren Sie mehr</0> über die Erstellung eigener Hosts-Listen.",
|
||||||
"blocked_by_response": "Nach CNAME oder IP-Antwort blockiert",
|
"blocked_by_response": "Gesperrt nach Antwort von CNAME oder IP",
|
||||||
"blocked_by_cname_or_ip": "Gesperrt durch CNAME oder IP",
|
"blocked_by_cname_or_ip": "Gesperrt durch CNAME oder IP",
|
||||||
"try_again": "Erneut versuchen",
|
"try_again": "Erneut versuchen",
|
||||||
"domain_desc": "Geben Sie den Domain-Namen oder den Platzhalter ein, der umgeschrieben werden soll.",
|
"domain_desc": "Geben Sie den Domain-Namen oder den Platzhalter ein, der umgeschrieben werden soll.",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP-Adressen: {{ip}}",
|
"check_ip": "IP-Adressen: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Grund: {{reason}}",
|
"check_reason": "Grund: {{reason}}",
|
||||||
"check_rule": "Regel: {{rule}}",
|
|
||||||
"check_service": "Dienstname: {{service}}",
|
"check_service": "Dienstname: {{service}}",
|
||||||
"service_name": "Name des Dienstes",
|
"service_name": "Name des Dienstes",
|
||||||
"check_not_found": "Nicht in Ihren Filterlisten enthalten",
|
"check_not_found": "Nicht in Ihren Filterlisten enthalten",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Invalid IP format",
|
"form_error_ip_format": "Invalid IP format",
|
||||||
"form_error_mac_format": "Invalid MAC format",
|
"form_error_mac_format": "Invalid MAC format",
|
||||||
"form_error_client_id_format": "Invalid client ID format",
|
"form_error_client_id_format": "Invalid client ID format",
|
||||||
|
"form_error_server_name": "Invalid server name",
|
||||||
"form_error_positive": "Must be greater than 0",
|
"form_error_positive": "Must be greater than 0",
|
||||||
"form_error_negative": "Must be equal to 0 or greater",
|
"form_error_negative": "Must be equal to 0 or greater",
|
||||||
"range_end_error": "Must be greater than range start",
|
"range_end_error": "Must be greater than range start",
|
||||||
@ -247,11 +248,16 @@
|
|||||||
"custom_ip": "Custom IP",
|
"custom_ip": "Custom IP",
|
||||||
"blocking_ipv4": "Blocking IPv4",
|
"blocking_ipv4": "Blocking IPv4",
|
||||||
"blocking_ipv6": "Blocking IPv6",
|
"blocking_ipv6": "Blocking IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
"dns_over_quic": "DNS-over-QUIC",
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "Client ID",
|
||||||
|
"client_id_placeholder": "Enter client ID",
|
||||||
|
"client_id_desc": "Different clients can be identified by a special client ID. <a>Here</a> you can learn more about how to identify clients.",
|
||||||
"download_mobileconfig_doh": "Download .mobileconfig for DNS-over-HTTPS",
|
"download_mobileconfig_doh": "Download .mobileconfig for DNS-over-HTTPS",
|
||||||
"download_mobileconfig_dot": "Download .mobileconfig for DNS-over-TLS",
|
"download_mobileconfig_dot": "Download .mobileconfig for DNS-over-TLS",
|
||||||
|
"download_mobileconfig": "Download configuration file",
|
||||||
"plain_dns": "Plain DNS",
|
"plain_dns": "Plain DNS",
|
||||||
"form_enter_rate_limit": "Enter rate limit",
|
"form_enter_rate_limit": "Enter rate limit",
|
||||||
"rate_limit": "Rate limit",
|
"rate_limit": "Rate limit",
|
||||||
@ -270,7 +276,7 @@
|
|||||||
"source_label": "Source",
|
"source_label": "Source",
|
||||||
"found_in_known_domain_db": "Found in the known domains database.",
|
"found_in_known_domain_db": "Found in the known domains database.",
|
||||||
"category_label": "Category",
|
"category_label": "Category",
|
||||||
"rule_label": "Rule",
|
"rule_label": "Rule(s)",
|
||||||
"list_label": "List",
|
"list_label": "List",
|
||||||
"unknown_filter": "Unknown filter {{filterId}}",
|
"unknown_filter": "Unknown filter {{filterId}}",
|
||||||
"known_tracker": "Known tracker",
|
"known_tracker": "Known tracker",
|
||||||
@ -331,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Encryption config saved",
|
"encryption_config_saved": "Encryption config saved",
|
||||||
"encryption_server": "Server name",
|
"encryption_server": "Server name",
|
||||||
"encryption_server_enter": "Enter your domain name",
|
"encryption_server_enter": "Enter your domain name",
|
||||||
"encryption_server_desc": "In order to use HTTPS, you need to enter the server name that matches your SSL certificate.",
|
"encryption_server_desc": "In order to use HTTPS, you need to enter the server name that matches your SSL certificate or wildcard certificate. If the field is not set, it will accept TLS connections for any domain.",
|
||||||
"encryption_redirect": "Redirect to HTTPS automatically",
|
"encryption_redirect": "Redirect to HTTPS automatically",
|
||||||
"encryption_redirect_desc": "If checked, AdGuard Home will automatically redirect you from HTTP to HTTPS addresses.",
|
"encryption_redirect_desc": "If checked, AdGuard Home will automatically redirect you from HTTP to HTTPS addresses.",
|
||||||
"encryption_https": "HTTPS port",
|
"encryption_https": "HTTPS port",
|
||||||
@ -387,7 +393,7 @@
|
|||||||
"client_edit": "Edit Client",
|
"client_edit": "Edit Client",
|
||||||
"client_identifier": "Identifier",
|
"client_identifier": "Identifier",
|
||||||
"ip_address": "IP address",
|
"ip_address": "IP address",
|
||||||
"client_identifier_desc": "Clients can be identified by the IP address, CIDR, MAC address. Please note that using MAC as identifier is possible only if AdGuard Home is also a <0>DHCP server</0>",
|
"client_identifier_desc": "Clients can be identified by the IP address, CIDR, MAC address or a special client ID (can be used for DoT/DoH/DoQ). <0>Here</0> you can learn more about how to identify clients.",
|
||||||
"form_enter_ip": "Enter IP",
|
"form_enter_ip": "Enter IP",
|
||||||
"form_enter_mac": "Enter MAC",
|
"form_enter_mac": "Enter MAC",
|
||||||
"form_enter_id": "Enter identifier",
|
"form_enter_id": "Enter identifier",
|
||||||
@ -431,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> supports <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> supports <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> supports <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> supports <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "You will find more implementations <0>here</0> and <1>here</1>.",
|
"setup_dns_privacy_other_5": "You will find more implementations <0>here</0> and <1>here</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "iOS and macOS configuration",
|
||||||
"setup_dns_notice": "In order to use <1>DNS-over-HTTPS</1> or <1>DNS-over-TLS</1>, you need to <0>configure Encryption</0> in AdGuard Home settings.",
|
"setup_dns_notice": "In order to use <1>DNS-over-HTTPS</1> or <1>DNS-over-TLS</1>, you need to <0>configure Encryption</0> in AdGuard Home settings.",
|
||||||
"rewrite_added": "DNS rewrite for \"{{key}}\" successfully added",
|
"rewrite_added": "DNS rewrite for \"{{key}}\" successfully added",
|
||||||
"rewrite_deleted": "DNS rewrite for \"{{key}}\" successfully deleted",
|
"rewrite_deleted": "DNS rewrite for \"{{key}}\" successfully deleted",
|
||||||
@ -530,7 +537,6 @@
|
|||||||
"check_ip": "IP addresses: {{ip}}",
|
"check_ip": "IP addresses: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Reason: {{reason}}",
|
"check_reason": "Reason: {{reason}}",
|
||||||
"check_rule": "Rule: {{rule}}",
|
|
||||||
"check_service": "Service name: {{service}}",
|
"check_service": "Service name: {{service}}",
|
||||||
"service_name": "Service name",
|
"service_name": "Service name",
|
||||||
"check_not_found": "Not found in your filter lists",
|
"check_not_found": "Not found in your filter lists",
|
||||||
@ -588,4 +594,4 @@
|
|||||||
"adg_will_drop_dns_queries": "AdGuard Home will be dropping all DNS queries from this client.",
|
"adg_will_drop_dns_queries": "AdGuard Home will be dropping all DNS queries from this client.",
|
||||||
"client_not_in_allowed_clients": "The client is not allowed because it is not in the \"Allowed clients\" list.",
|
"client_not_in_allowed_clients": "The client is not allowed because it is not in the \"Allowed clients\" list.",
|
||||||
"experimental": "Experimental"
|
"experimental": "Experimental"
|
||||||
}
|
}
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Formato IP no válido",
|
"form_error_ip_format": "Formato IP no válido",
|
||||||
"form_error_mac_format": "Formato MAC no válido",
|
"form_error_mac_format": "Formato MAC no válido",
|
||||||
"form_error_client_id_format": "Formato de ID de cliente no válido",
|
"form_error_client_id_format": "Formato de ID de cliente no válido",
|
||||||
|
"form_error_server_name": "Nombre de servidor no válido",
|
||||||
"form_error_positive": "Debe ser mayor que 0",
|
"form_error_positive": "Debe ser mayor que 0",
|
||||||
"form_error_negative": "Debe ser igual o mayor que 0",
|
"form_error_negative": "Debe ser igual o mayor que 0",
|
||||||
"range_end_error": "Debe ser mayor que el inicio de rango",
|
"range_end_error": "Debe ser mayor que el inicio de rango",
|
||||||
@ -50,7 +51,7 @@
|
|||||||
"dhcp_table_expires": "Expira",
|
"dhcp_table_expires": "Expira",
|
||||||
"dhcp_warning": "Si de todos modos deseas habilitar el servidor DHCP, asegúrate de que no hay otro servidor DHCP activo en tu red. ¡De lo contrario, puedes dejar sin Internet a los dispositivos conectados!",
|
"dhcp_warning": "Si de todos modos deseas habilitar el servidor DHCP, asegúrate de que no hay otro servidor DHCP activo en tu red. ¡De lo contrario, puedes dejar sin Internet a los dispositivos conectados!",
|
||||||
"dhcp_error": "No pudimos determinar si hay otro servidor DHCP en la red.",
|
"dhcp_error": "No pudimos determinar si hay otro servidor DHCP en la red.",
|
||||||
"dhcp_static_ip_error": "Para poder utilizar el servidor DHCP se debe establecer una dirección IP estática. No hemos podido determinar si esta interfaz de red está configurada utilizando una dirección IP estática. Por favor establezca una dirección IP estática manualmente.",
|
"dhcp_static_ip_error": "Para poder utilizar el servidor DHCP se debe establecer una dirección IP estática. No hemos podido determinar si esta interfaz de red está configurada utilizando una dirección IP estática. Por favor establece una dirección IP estática manualmente.",
|
||||||
"dhcp_dynamic_ip_found": "Tu sistema utiliza la configuración de dirección IP dinámica para la interfaz <0>{{interfaceName}}</0>. Para poder utilizar el servidor DHCP se debe establecer una dirección IP estática. Tu dirección IP actual es <0>{{ipAddress}}</0>. Si presionas el botón Habilitar servidor DHCP, estableceremos automáticamente esta dirección IP como estática.",
|
"dhcp_dynamic_ip_found": "Tu sistema utiliza la configuración de dirección IP dinámica para la interfaz <0>{{interfaceName}}</0>. Para poder utilizar el servidor DHCP se debe establecer una dirección IP estática. Tu dirección IP actual es <0>{{ipAddress}}</0>. Si presionas el botón Habilitar servidor DHCP, estableceremos automáticamente esta dirección IP como estática.",
|
||||||
"dhcp_lease_added": "Asignación estática \"{{key}}\" añadido correctamente",
|
"dhcp_lease_added": "Asignación estática \"{{key}}\" añadido correctamente",
|
||||||
"dhcp_lease_deleted": "Asignación estática \"{{key}}\" eliminado correctamente",
|
"dhcp_lease_deleted": "Asignación estática \"{{key}}\" eliminado correctamente",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "IP personalizada",
|
"custom_ip": "IP personalizada",
|
||||||
"blocking_ipv4": "Bloqueo de IPv4",
|
"blocking_ipv4": "Bloqueo de IPv4",
|
||||||
"blocking_ipv6": "Bloqueo de IPv6",
|
"blocking_ipv6": "Bloqueo de IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS mediante HTTPS",
|
"dns_over_https": "DNS mediante HTTPS",
|
||||||
"dns_over_tls": "DNS mediante TLS",
|
"dns_over_tls": "DNS mediante TLS",
|
||||||
|
"dns_over_quic": "DNS mediante QUIC",
|
||||||
|
"client_id": "ID de cliente",
|
||||||
|
"client_id_placeholder": "Ingresa el ID del cliente",
|
||||||
|
"client_id_desc": "Diferentes clientes pueden ser identificados por un ID de cliente especial. <a>Aquí</a> puedes obtener más información sobre cómo identificar clientes.",
|
||||||
"download_mobileconfig_doh": "Descargar .mobileconfig para DNS mediante HTTPS",
|
"download_mobileconfig_doh": "Descargar .mobileconfig para DNS mediante HTTPS",
|
||||||
"download_mobileconfig_dot": "Descargar .mobileconfig para DNS mediante TLS",
|
"download_mobileconfig_dot": "Descargar .mobileconfig para DNS mediante TLS",
|
||||||
|
"download_mobileconfig": "Descargar archivo de configuración",
|
||||||
"plain_dns": "DNS simple",
|
"plain_dns": "DNS simple",
|
||||||
"form_enter_rate_limit": "Ingresa el límite de cantidad",
|
"form_enter_rate_limit": "Ingresa el límite de cantidad",
|
||||||
"rate_limit": "Límite de cantidad",
|
"rate_limit": "Límite de cantidad",
|
||||||
@ -294,7 +301,7 @@
|
|||||||
"install_devices_title": "Configura tus dispositivos",
|
"install_devices_title": "Configura tus dispositivos",
|
||||||
"install_devices_desc": "Para comenzar a utilizar AdGuard Home, debes configurar tus dispositivos para usarlo.",
|
"install_devices_desc": "Para comenzar a utilizar AdGuard Home, debes configurar tus dispositivos para usarlo.",
|
||||||
"install_submit_title": "¡Felicitaciones!",
|
"install_submit_title": "¡Felicitaciones!",
|
||||||
"install_submit_desc": "El proceso de configuración ha finalizado y está listo para comenzar a usar AdGuard Home.",
|
"install_submit_desc": "El proceso de configuración ha finalizado y estás listo para comenzar a usar AdGuard Home.",
|
||||||
"install_devices_router": "Router",
|
"install_devices_router": "Router",
|
||||||
"install_devices_router_desc": "Esta configuración cubrirá automáticamente todos los dispositivos conectados a tu router doméstico y no necesitarás configurar cada uno de ellos manualmente.",
|
"install_devices_router_desc": "Esta configuración cubrirá automáticamente todos los dispositivos conectados a tu router doméstico y no necesitarás configurar cada uno de ellos manualmente.",
|
||||||
"install_devices_address": "El servidor DNS de AdGuard Home está escuchando en las siguientes direcciones",
|
"install_devices_address": "El servidor DNS de AdGuard Home está escuchando en las siguientes direcciones",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Configuración de cifrado guardado",
|
"encryption_config_saved": "Configuración de cifrado guardado",
|
||||||
"encryption_server": "Nombre del servidor",
|
"encryption_server": "Nombre del servidor",
|
||||||
"encryption_server_enter": "Ingresa el nombre del dominio",
|
"encryption_server_enter": "Ingresa el nombre del dominio",
|
||||||
"encryption_server_desc": "Para utilizar HTTPS, debes ingresar el nombre del servidor que coincida con tu certificado SSL.",
|
"encryption_server_desc": "Para utilizar HTTPS, debes ingresar el nombre del servidor que coincida con tu certificado SSL o certificado comodín. Si el campo no está establecido, el servidor aceptará conexiones TLS para cualquier dominio.",
|
||||||
"encryption_redirect": "Redireccionar a HTTPS automáticamente",
|
"encryption_redirect": "Redireccionar a HTTPS automáticamente",
|
||||||
"encryption_redirect_desc": "Si está marcado, AdGuard Home redireccionará automáticamente de HTTP a las direcciones HTTPS.",
|
"encryption_redirect_desc": "Si está marcado, AdGuard Home redireccionará automáticamente de HTTP a las direcciones HTTPS.",
|
||||||
"encryption_https": "Puerto HTTPS",
|
"encryption_https": "Puerto HTTPS",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Editar cliente",
|
"client_edit": "Editar cliente",
|
||||||
"client_identifier": "Identificador",
|
"client_identifier": "Identificador",
|
||||||
"ip_address": "Dirección IP",
|
"ip_address": "Dirección IP",
|
||||||
"client_identifier_desc": "Los clientes pueden ser identificados por la dirección IP, MAC y CIDR. Ten en cuenta que el uso de MAC como identificador solo es posible si AdGuard Home también es un <0>servidor DHCP</0>",
|
"client_identifier_desc": "Los clientes pueden ser identificados por la dirección IP, MAC, CIDR o un ID de cliente especial (puede ser utilizado para DoT/DoH/DoQ). <0>Aquí</0> puedes obtener más información sobre cómo identificar clientes.",
|
||||||
"form_enter_ip": "Ingresa la IP",
|
"form_enter_ip": "Ingresa la IP",
|
||||||
"form_enter_mac": "Ingresa la MAC",
|
"form_enter_mac": "Ingresa la MAC",
|
||||||
"form_enter_id": "Ingresa el identificador",
|
"form_enter_id": "Ingresa el identificador",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> soporta <1>DNS mediante HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> soporta <1>DNS mediante HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> soporta <1>DNS mediante HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> soporta <1>DNS mediante HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Encontrarás más implementaciones <0>aquí</0> y <1>aquí</1>.",
|
"setup_dns_privacy_other_5": "Encontrarás más implementaciones <0>aquí</0> y <1>aquí</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Configuración de iOS y macOS",
|
||||||
"setup_dns_notice": "Para utilizar <1>DNS mediante HTTPS</1> o <1>DNS mediante TLS</1>, debes <0>configurar el cifrado</0> en la configuración de AdGuard Home.",
|
"setup_dns_notice": "Para utilizar <1>DNS mediante HTTPS</1> o <1>DNS mediante TLS</1>, debes <0>configurar el cifrado</0> en la configuración de AdGuard Home.",
|
||||||
"rewrite_added": "Reescritura DNS para \"{{key}}\" añadido correctamente",
|
"rewrite_added": "Reescritura DNS para \"{{key}}\" añadido correctamente",
|
||||||
"rewrite_deleted": "Reescritura DNS para \"{{key}}\" eliminado correctamente",
|
"rewrite_deleted": "Reescritura DNS para \"{{key}}\" eliminado correctamente",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "Direcciones IP: {{ip}}",
|
"check_ip": "Direcciones IP: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Razón: {{reason}}",
|
"check_reason": "Razón: {{reason}}",
|
||||||
"check_rule": "Regla: {{rule}}",
|
|
||||||
"check_service": "Nombre del servicio: {{service}}",
|
"check_service": "Nombre del servicio: {{service}}",
|
||||||
"service_name": "Nombre del servicio",
|
"service_name": "Nombre del servicio",
|
||||||
"check_not_found": "No se ha encontrado en tus listas de filtros",
|
"check_not_found": "No se ha encontrado en tus listas de filtros",
|
||||||
|
@ -239,7 +239,6 @@
|
|||||||
"source_label": "منبع",
|
"source_label": "منبع",
|
||||||
"found_in_known_domain_db": "در پایگاه داده دامنه های شناخته شده پیدا شد",
|
"found_in_known_domain_db": "در پایگاه داده دامنه های شناخته شده پیدا شد",
|
||||||
"category_label": "دسته بندی",
|
"category_label": "دسته بندی",
|
||||||
"rule_label": "دستور",
|
|
||||||
"list_label": "لیست",
|
"list_label": "لیست",
|
||||||
"unknown_filter": "فیلتر ناشناخته {{filterId}}",
|
"unknown_filter": "فیلتر ناشناخته {{filterId}}",
|
||||||
"known_tracker": "ردیاب های شناخته شده",
|
"known_tracker": "ردیاب های شناخته شده",
|
||||||
@ -300,7 +299,6 @@
|
|||||||
"encryption_config_saved": "پیکربندی رمزگذاری ذخیره شد",
|
"encryption_config_saved": "پیکربندی رمزگذاری ذخیره شد",
|
||||||
"encryption_server": "نام سرور",
|
"encryption_server": "نام سرور",
|
||||||
"encryption_server_enter": "نام دامنه خود را وارد کنید",
|
"encryption_server_enter": "نام دامنه خود را وارد کنید",
|
||||||
"encryption_server_desc": "به منظور استفاده از HTTPS،شما باید نام سرور مطابق با گواهینامه اِس اِس اِل را وارد کنید.",
|
|
||||||
"encryption_redirect": "تغییر مسیر خودکار به HTTPS",
|
"encryption_redirect": "تغییر مسیر خودکار به HTTPS",
|
||||||
"encryption_redirect_desc": "اگر انتخاب شده باشد،AdGuard Home خودکار شما را از آدرس HTTP به HTTPS منتقل می کند",
|
"encryption_redirect_desc": "اگر انتخاب شده باشد،AdGuard Home خودکار شما را از آدرس HTTP به HTTPS منتقل می کند",
|
||||||
"encryption_https": "پورت HTTPS",
|
"encryption_https": "پورت HTTPS",
|
||||||
@ -354,7 +352,6 @@
|
|||||||
"client_edit": "ویرایش کلاینت",
|
"client_edit": "ویرایش کلاینت",
|
||||||
"client_identifier": "احراز با",
|
"client_identifier": "احراز با",
|
||||||
"ip_address": "آدرس آی پی",
|
"ip_address": "آدرس آی پی",
|
||||||
"client_identifier_desc": "کلاینت میتواند با آدرس آی پی یا آدرس مَک احراز شود. لطفا توجه کنید،که استفاده از مَک بعنوان عامل احراز زمانی امکان دارد که AdGuard Home نیز <0>سرور DHCP </0> باشد",
|
|
||||||
"form_enter_ip": "آی پی را وارد کنید",
|
"form_enter_ip": "آی پی را وارد کنید",
|
||||||
"form_enter_mac": "مَک را وارد کنید",
|
"form_enter_mac": "مَک را وارد کنید",
|
||||||
"form_enter_id": "خطای احرازکننده",
|
"form_enter_id": "خطای احرازکننده",
|
||||||
@ -487,7 +484,6 @@
|
|||||||
"check_ip": "آدرس آی پی: {{ip}}",
|
"check_ip": "آدرس آی پی: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "علت: {{reason}}",
|
"check_reason": "علت: {{reason}}",
|
||||||
"check_rule": "دستور: {{rule}}",
|
|
||||||
"check_service": "نام سرویس: {{service}}",
|
"check_service": "نام سرویس: {{service}}",
|
||||||
"check_not_found": "در لیست فیلترهای شما یافت نشد",
|
"check_not_found": "در لیست فیلترهای شما یافت نشد",
|
||||||
"client_confirm_block": "آیا واقعا میخواهید کلاینت \"{{ip}}\" را مسدود کنید؟",
|
"client_confirm_block": "آیا واقعا میخواهید کلاینت \"{{ip}}\" را مسدود کنید؟",
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
"dhcp_found": "Il y a plusieurs serveurs DHCP actifs sur le réseau. Ce n'est pas prudent d'activer le serveur DHCP intégré en ce moment.",
|
"dhcp_found": "Il y a plusieurs serveurs DHCP actifs sur le réseau. Ce n'est pas prudent d'activer le serveur DHCP intégré en ce moment.",
|
||||||
"dhcp_leases": "Locations des serveurs DHCP",
|
"dhcp_leases": "Locations des serveurs DHCP",
|
||||||
"dhcp_static_leases": "Baux statiques DHCP",
|
"dhcp_static_leases": "Baux statiques DHCP",
|
||||||
"dhcp_leases_not_found": "Aucune location des serveurs DHCP trouvée",
|
"dhcp_leases_not_found": "Aucun bail DHCP trouvé",
|
||||||
"dhcp_config_saved": "La configuration du serveur DHCP est sauvegardée",
|
"dhcp_config_saved": "La configuration du serveur DHCP est sauvegardée",
|
||||||
"dhcp_ipv4_settings": "Paramètres IPv4 du DHCP",
|
"dhcp_ipv4_settings": "Paramètres IPv4 du DHCP",
|
||||||
"dhcp_ipv6_settings": "Paramètres IPv6 du DHCP",
|
"dhcp_ipv6_settings": "Paramètres IPv6 du DHCP",
|
||||||
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Format IPv4 invalide",
|
"form_error_ip_format": "Format IPv4 invalide",
|
||||||
"form_error_mac_format": "Format MAC invalide",
|
"form_error_mac_format": "Format MAC invalide",
|
||||||
"form_error_client_id_format": "Format d'ID client non valide",
|
"form_error_client_id_format": "Format d'ID client non valide",
|
||||||
|
"form_error_server_name": "Nom de serveur invalide",
|
||||||
"form_error_positive": "Doit être supérieur à 0",
|
"form_error_positive": "Doit être supérieur à 0",
|
||||||
"form_error_negative": "Doit être égal à 0 ou supérieur",
|
"form_error_negative": "Doit être égal à 0 ou supérieur",
|
||||||
"range_end_error": "Doit être supérieur au début de la gamme",
|
"range_end_error": "Doit être supérieur au début de la gamme",
|
||||||
@ -92,7 +93,7 @@
|
|||||||
"refresh_statics": "Renouveler les statistiques",
|
"refresh_statics": "Renouveler les statistiques",
|
||||||
"dns_query": "Requêtes DNS",
|
"dns_query": "Requêtes DNS",
|
||||||
"blocked_by": "<0>Bloqué par Filtres</0>",
|
"blocked_by": "<0>Bloqué par Filtres</0>",
|
||||||
"stats_malware_phishing": "Tentative de malware/hammeçonnage bloquée",
|
"stats_malware_phishing": "Tentative de malware/hameçonnage bloquée",
|
||||||
"stats_adult": "Sites à contenu adulte bloqués",
|
"stats_adult": "Sites à contenu adulte bloqués",
|
||||||
"stats_query_domain": "Domaines les plus recherchés",
|
"stats_query_domain": "Domaines les plus recherchés",
|
||||||
"for_last_24_hours": "pendant les dernières 24 heures",
|
"for_last_24_hours": "pendant les dernières 24 heures",
|
||||||
@ -178,13 +179,13 @@
|
|||||||
"custom_filter_rules": "Règles de filtrage d'utilisateur",
|
"custom_filter_rules": "Règles de filtrage d'utilisateur",
|
||||||
"custom_filter_rules_hint": "Saisissez la règle en une ligne. C'est possible d'utiliser les règles de blocage ou la syntaxe des fichiers hosts.",
|
"custom_filter_rules_hint": "Saisissez la règle en une ligne. C'est possible d'utiliser les règles de blocage ou la syntaxe des fichiers hosts.",
|
||||||
"examples_title": "Exemples",
|
"examples_title": "Exemples",
|
||||||
"example_meaning_filter_block": "bloquer l'accés au domaine exemple.org et à tous ses sous-domaines",
|
"example_meaning_filter_block": "bloque l’accès au domaine example.org et à tous ses sous-domaines",
|
||||||
"example_meaning_filter_whitelist": "débloquer l'accés au domaine exemple.org et à tous ses sous-domaines",
|
"example_meaning_filter_whitelist": "débloque l’accès au domaine example.org et à tous ses sous-domaines",
|
||||||
"example_meaning_host_block": "AdGuard Home va retourner l'adresse 127.0.0.1 au domaine example.org (mais pas aux sous-domaines).",
|
"example_meaning_host_block": "AdGuard Home va retourner l'adresse 127.0.0.1 au domaine example.org (mais pas aux sous-domaines).",
|
||||||
"example_comment": "! Voici comment ajouter une déscription",
|
"example_comment": "! Voici comment ajouter une déscription",
|
||||||
"example_comment_meaning": "commentaire",
|
"example_comment_meaning": "commentaire",
|
||||||
"example_comment_hash": "# Et comme ça aussi on peut laisser des commentaires",
|
"example_comment_hash": "# Et comme ça aussi on peut laisser des commentaires",
|
||||||
"example_regex_meaning": "bloquer l'accés aux domaines correspondants à l'expression régulière spécifiée",
|
"example_regex_meaning": "bloque l’accès aux domaines correspondants à l'expression régulière spécifiée",
|
||||||
"example_upstream_regular": "DNS classique (au-dessus de UDP)",
|
"example_upstream_regular": "DNS classique (au-dessus de UDP)",
|
||||||
"example_upstream_dot": "<0>DNS-over-TLS</0> chiffré",
|
"example_upstream_dot": "<0>DNS-over-TLS</0> chiffré",
|
||||||
"example_upstream_doh": "<0>DNS-over-HTTPS</0> chiffré",
|
"example_upstream_doh": "<0>DNS-over-HTTPS</0> chiffré",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "IP personnalisée",
|
"custom_ip": "IP personnalisée",
|
||||||
"blocking_ipv4": "Blocage IPv4",
|
"blocking_ipv4": "Blocage IPv4",
|
||||||
"blocking_ipv6": "Blocage IPv6",
|
"blocking_ipv6": "Blocage IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "ID du client",
|
||||||
|
"client_id_placeholder": "Saisissez le ID du client",
|
||||||
|
"client_id_desc": "Les clients différents peuvent être identifiés par aide d'un ID client spécial. Vous trouverez plus d'information sur l'identification des clients <a>ici</a> .",
|
||||||
"download_mobileconfig_doh": "Télécharger .mobileconfig pour DNS-sur-HTTPS",
|
"download_mobileconfig_doh": "Télécharger .mobileconfig pour DNS-sur-HTTPS",
|
||||||
"download_mobileconfig_dot": "Télécharger .mobileconfig pour DNS-sur-TLS",
|
"download_mobileconfig_dot": "Télécharger .mobileconfig pour DNS-sur-TLS",
|
||||||
|
"download_mobileconfig": "Télécharger le fichier de configuration",
|
||||||
"plain_dns": "DNS brut",
|
"plain_dns": "DNS brut",
|
||||||
"form_enter_rate_limit": "Entrez la limite de taux",
|
"form_enter_rate_limit": "Entrez la limite de taux",
|
||||||
"rate_limit": "Limite de taux",
|
"rate_limit": "Limite de taux",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Source",
|
"source_label": "Source",
|
||||||
"found_in_known_domain_db": "Trouvé dans la base de données des domaines connus",
|
"found_in_known_domain_db": "Trouvé dans la base de données des domaines connus",
|
||||||
"category_label": "Catégorie",
|
"category_label": "Catégorie",
|
||||||
"rule_label": "Règle",
|
"rule_label": "Règle(s)",
|
||||||
"list_label": "Liste",
|
"list_label": "Liste",
|
||||||
"unknown_filter": "Filtre inconnu {{filterId}}",
|
"unknown_filter": "Filtre inconnu {{filterId}}",
|
||||||
"known_tracker": "Pisteur connu",
|
"known_tracker": "Pisteur connu",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Configuration de chiffrement enregistrée",
|
"encryption_config_saved": "Configuration de chiffrement enregistrée",
|
||||||
"encryption_server": "Nom du serveur",
|
"encryption_server": "Nom du serveur",
|
||||||
"encryption_server_enter": "Entrez votre nom de domaine",
|
"encryption_server_enter": "Entrez votre nom de domaine",
|
||||||
"encryption_server_desc": "Pour utiliser HTTPS, vous devez entrer le nom du serveur qui correspond à votre certificat SSL.",
|
"encryption_server_desc": "Pour utiliser HTTPS, vous devez saisir le nom du serveur qui correspond à votre certificat SSL ou wildcard. Si le champ n'est pas configuré, les connexions TLS pour tous les domaines seront acceptées.",
|
||||||
"encryption_redirect": "Redirection automatiquement vers HTTPS",
|
"encryption_redirect": "Redirection automatiquement vers HTTPS",
|
||||||
"encryption_redirect_desc": "Si coché, AdGuard Home vous redirigera automatiquement d'adresses HTTP vers HTTPS.",
|
"encryption_redirect_desc": "Si coché, AdGuard Home vous redirigera automatiquement d'adresses HTTP vers HTTPS.",
|
||||||
"encryption_https": "Port HTTPS",
|
"encryption_https": "Port HTTPS",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Modifier le client",
|
"client_edit": "Modifier le client",
|
||||||
"client_identifier": "Identifiant",
|
"client_identifier": "Identifiant",
|
||||||
"ip_address": "Adresse IP",
|
"ip_address": "Adresse IP",
|
||||||
"client_identifier_desc": "Les clients peuvent être identifiés par les adresses IP ou MAC. Veuillez noter que l'utilisation de l'adresse MAC comme identifiant est possible uniquement si AdGuard Home est aussi un <0>serveur DHCP</0>",
|
"client_identifier_desc": "Les clients peuvent être identifiés par les adresses IP, CIDR, MAC ou un ID client spécial (qui peut être utilisé pour DoT/DoH/DoQ). Vous trouverez plus d'information sur l'identification des clients <0>ici</0> .",
|
||||||
"form_enter_ip": "Saisissez l'IP",
|
"form_enter_ip": "Saisissez l'IP",
|
||||||
"form_enter_mac": "Saisissez MAC",
|
"form_enter_mac": "Saisissez MAC",
|
||||||
"form_enter_id": "Entrer identifiant",
|
"form_enter_id": "Entrer identifiant",
|
||||||
@ -430,7 +437,8 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> supporte le <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> supporte le <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> supporte le <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> supporte le <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Vous trouverez plus d'implémentations <0>ici</0> et <1>ici</1>.",
|
"setup_dns_privacy_other_5": "Vous trouverez plus d'implémentations <0>ici</0> et <1>ici</1>.",
|
||||||
"setup_dns_notice": "Pour utiliser le <1>DNS-over-HTTPS</1> ou le <1>DNS-over-TLS</1>, vous devez <0>configurer le Cryptage</0> dans les paramètres de AdGuard Home.",
|
"setup_dns_privacy_ioc_mac": "Configuration sur iOS et macOS",
|
||||||
|
"setup_dns_notice": "Pour utiliser le <1>DNS-over-HTTPS</1> ou le <1>DNS-over-TLS</1>, vous devez <0>configurer le Chiffrement</0> dans les paramètres de AdGuard Home.",
|
||||||
"rewrite_added": "Réécriture DNS pour \"{{key}}\" ajoutée",
|
"rewrite_added": "Réécriture DNS pour \"{{key}}\" ajoutée",
|
||||||
"rewrite_deleted": "Réécriture DNS pour \"{{key}}\" supprimée",
|
"rewrite_deleted": "Réécriture DNS pour \"{{key}}\" supprimée",
|
||||||
"rewrite_add": "Ajouter une réécriture DNS",
|
"rewrite_add": "Ajouter une réécriture DNS",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "Adresses IP : {{ip}}",
|
"check_ip": "Adresses IP : {{ip}}",
|
||||||
"check_cname": "CNAME : {{cname}}",
|
"check_cname": "CNAME : {{cname}}",
|
||||||
"check_reason": "Raison : {{reason}}",
|
"check_reason": "Raison : {{reason}}",
|
||||||
"check_rule": "Règle : {{rule}}",
|
|
||||||
"check_service": "Nom du service : {{service}}",
|
"check_service": "Nom du service : {{service}}",
|
||||||
"service_name": "Nom du service",
|
"service_name": "Nom du service",
|
||||||
"check_not_found": "Introuvable dans vos listes de filtres",
|
"check_not_found": "Introuvable dans vos listes de filtres",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Nevažeći format IP adrese",
|
"form_error_ip_format": "Nevažeći format IP adrese",
|
||||||
"form_error_mac_format": "Nevažeći MAC format",
|
"form_error_mac_format": "Nevažeći MAC format",
|
||||||
"form_error_client_id_format": "Nevažeći format ID-a klijenta",
|
"form_error_client_id_format": "Nevažeći format ID-a klijenta",
|
||||||
|
"form_error_server_name": "Nevažeće ime poslužitelja",
|
||||||
"form_error_positive": "Mora biti veće od 0",
|
"form_error_positive": "Mora biti veće od 0",
|
||||||
"form_error_negative": "Mora biti jednako ili veće od 0",
|
"form_error_negative": "Mora biti jednako ili veće od 0",
|
||||||
"range_end_error": "Mora biti veće od početne vrijednosti raspona",
|
"range_end_error": "Mora biti veće od početne vrijednosti raspona",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "Prilagođen IP",
|
"custom_ip": "Prilagođen IP",
|
||||||
"blocking_ipv4": "Blokiranje IPv4",
|
"blocking_ipv4": "Blokiranje IPv4",
|
||||||
"blocking_ipv6": "Blokiranje IPv6",
|
"blocking_ipv6": "Blokiranje IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-Quic",
|
||||||
|
"client_id": "ID klijenta",
|
||||||
|
"client_id_placeholder": "Unesite ID klijenta",
|
||||||
|
"client_id_desc": "Razni klijenti mogu biti prepoznati po specijalnom identifikatoru. <a>Ovdje</a> možete saznati više kako možete identificirati klijente.",
|
||||||
"download_mobileconfig_doh": "Preuzmi .mobileconfig za DNS-over-HTTPS",
|
"download_mobileconfig_doh": "Preuzmi .mobileconfig za DNS-over-HTTPS",
|
||||||
"download_mobileconfig_dot": "Preuzmi .mobileconfig za DNS-over-TLS",
|
"download_mobileconfig_dot": "Preuzmi .mobileconfig za DNS-over-TLS",
|
||||||
|
"download_mobileconfig": "Preuzmite konfiguracijsku datoteku",
|
||||||
"plain_dns": "Obični DNS",
|
"plain_dns": "Obični DNS",
|
||||||
"form_enter_rate_limit": "Unesite ograničenje",
|
"form_enter_rate_limit": "Unesite ograničenje",
|
||||||
"rate_limit": "Ograničenje",
|
"rate_limit": "Ograničenje",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> podržava <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> podržava <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> podržava <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> podržava <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Možete pronaći više implementacija <0>ovdje</0> i <1>ovdje</1>.",
|
"setup_dns_privacy_other_5": "Možete pronaći više implementacija <0>ovdje</0> i <1>ovdje</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "konfiguracija za iOS i macOS",
|
||||||
"setup_dns_notice": "Da biste koristili <1>DNS-over-HTTPS</1> ili <1>DNS-over-TLS</1>, morate <0>postaviti šifriranje</0> u AdGuard Home postavkama.",
|
"setup_dns_notice": "Da biste koristili <1>DNS-over-HTTPS</1> ili <1>DNS-over-TLS</1>, morate <0>postaviti šifriranje</0> u AdGuard Home postavkama.",
|
||||||
"rewrite_added": "DNS prijepis za \"{{key}}\" je uspješno dodan",
|
"rewrite_added": "DNS prijepis za \"{{key}}\" je uspješno dodan",
|
||||||
"rewrite_deleted": "DNS prijepis za \"{{key}}\" je uspješno uklonjen",
|
"rewrite_deleted": "DNS prijepis za \"{{key}}\" je uspješno uklonjen",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP adrese: {{ip}}",
|
"check_ip": "IP adrese: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Razlog: {{reason}}",
|
"check_reason": "Razlog: {{reason}}",
|
||||||
"check_rule": "Pravilo: {{rule}}",
|
|
||||||
"check_service": "Naziv usluge: {{service}}",
|
"check_service": "Naziv usluge: {{service}}",
|
||||||
"service_name": "Naziv usluge",
|
"service_name": "Naziv usluge",
|
||||||
"check_not_found": "Nije pronađeno na vašoj listi filtara",
|
"check_not_found": "Nije pronađeno na vašoj listi filtara",
|
||||||
|
@ -88,7 +88,7 @@
|
|||||||
"enable_protection": "Védelem engedélyezése",
|
"enable_protection": "Védelem engedélyezése",
|
||||||
"enabled_protection": "Védelem engedélyezve",
|
"enabled_protection": "Védelem engedélyezve",
|
||||||
"disable_protection": "Védelem letiltása",
|
"disable_protection": "Védelem letiltása",
|
||||||
"disabled_protection": "Letiltott védelem",
|
"disabled_protection": "Védelem letiltva",
|
||||||
"refresh_statics": "Statisztikák frissítése",
|
"refresh_statics": "Statisztikák frissítése",
|
||||||
"dns_query": "DNS lekérdezés",
|
"dns_query": "DNS lekérdezés",
|
||||||
"blocked_by": "<0>Szűrők által blokkolt</0>",
|
"blocked_by": "<0>Szűrők által blokkolt</0>",
|
||||||
@ -269,7 +269,6 @@
|
|||||||
"source_label": "Forrás",
|
"source_label": "Forrás",
|
||||||
"found_in_known_domain_db": "Benne van az ismert domainek listájában.",
|
"found_in_known_domain_db": "Benne van az ismert domainek listájában.",
|
||||||
"category_label": "Kategória",
|
"category_label": "Kategória",
|
||||||
"rule_label": "Szabály",
|
|
||||||
"list_label": "Lista",
|
"list_label": "Lista",
|
||||||
"unknown_filter": "Ismeretlen szűrő: {{filterId}}",
|
"unknown_filter": "Ismeretlen szűrő: {{filterId}}",
|
||||||
"known_tracker": "Ismert követő",
|
"known_tracker": "Ismert követő",
|
||||||
@ -330,7 +329,6 @@
|
|||||||
"encryption_config_saved": "Titkosítási beállítások mentve",
|
"encryption_config_saved": "Titkosítási beállítások mentve",
|
||||||
"encryption_server": "Szerver neve",
|
"encryption_server": "Szerver neve",
|
||||||
"encryption_server_enter": "Adja meg az Ön domain címét",
|
"encryption_server_enter": "Adja meg az Ön domain címét",
|
||||||
"encryption_server_desc": "A HTTPS használatához be kell írnia egy, az SSL-tanúsítvánnyal megegyező kiszolgálónevet.",
|
|
||||||
"encryption_redirect": "Automatikus átirányítás HTTPS kapcsolatra",
|
"encryption_redirect": "Automatikus átirányítás HTTPS kapcsolatra",
|
||||||
"encryption_redirect_desc": "Ha be van jelölve, az AdGuard Home automatikusan átirányítja a HTTP kapcsolatokat a biztonságos HTTPS protokollra.",
|
"encryption_redirect_desc": "Ha be van jelölve, az AdGuard Home automatikusan átirányítja a HTTP kapcsolatokat a biztonságos HTTPS protokollra.",
|
||||||
"encryption_https": "HTTPS port",
|
"encryption_https": "HTTPS port",
|
||||||
@ -386,7 +384,6 @@
|
|||||||
"client_edit": "Kliens módosítása",
|
"client_edit": "Kliens módosítása",
|
||||||
"client_identifier": "Azonosító",
|
"client_identifier": "Azonosító",
|
||||||
"ip_address": "IP cím",
|
"ip_address": "IP cím",
|
||||||
"client_identifier_desc": "A klienseket be lehet azonosítani IP-cím, CIDR, valamint MAC-cím alapján. Kérjük, vegye figyelembe, hogy a MAC-cím alapján történő azonosítás csak akkor működik, ha az AdGuard Home egyben <0>DHCP szerverként</0> is funkcionál",
|
|
||||||
"form_enter_ip": "IP-cím megadása",
|
"form_enter_ip": "IP-cím megadása",
|
||||||
"form_enter_mac": "MAC-cím megadása",
|
"form_enter_mac": "MAC-cím megadása",
|
||||||
"form_enter_id": "Azonosító megadása",
|
"form_enter_id": "Azonosító megadása",
|
||||||
@ -409,7 +406,7 @@
|
|||||||
"access_disallowed_title": "Nem engedélyezett kliensek",
|
"access_disallowed_title": "Nem engedélyezett kliensek",
|
||||||
"access_disallowed_desc": "A CIDR vagy IP címek listája. Ha konfigurálva van, az AdGuard Home eldobja a lekérdezéseket ezekről az IP-címekről.",
|
"access_disallowed_desc": "A CIDR vagy IP címek listája. Ha konfigurálva van, az AdGuard Home eldobja a lekérdezéseket ezekről az IP-címekről.",
|
||||||
"access_blocked_title": "Nem engedélyezett domainek",
|
"access_blocked_title": "Nem engedélyezett domainek",
|
||||||
"access_blocked_desc": "Ne keverje össze ezt a szűrőkkel. Az AdGuard Home az összes DNS kérést el fogja dobni, ami ezekkel a domainekkel kapcsolatos. Itt megadhatja a pontos domainneveket, a helyettesítő karaktereket és az urlfilter-szabályokat, pl. 'example.org', '*.example.org' or '||example.org^'.",
|
"access_blocked_desc": "Ne keverje össze ezt a szűrőkkel. Az AdGuard Home az összes DNS kérést el fogja dobni, ami ezekkel a domainekkel kapcsolatos. Itt megadhatja a pontos domainneveket, a helyettesítő karaktereket és az urlfilter-szabályokat, pl. 'example.org', '*.example.org' vagy '||example.org^'.",
|
||||||
"access_settings_saved": "A hozzáférési beállítások sikeresen mentésre kerültek",
|
"access_settings_saved": "A hozzáférési beállítások sikeresen mentésre kerültek",
|
||||||
"updates_checked": "A frissítések sikeresen ellenőrizve lettek",
|
"updates_checked": "A frissítések sikeresen ellenőrizve lettek",
|
||||||
"updates_version_equal": "Az AdGuard Home naprakész",
|
"updates_version_equal": "Az AdGuard Home naprakész",
|
||||||
@ -529,7 +526,6 @@
|
|||||||
"check_ip": "IP-címek: {{ip}}",
|
"check_ip": "IP-címek: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Indok: {{reason}}",
|
"check_reason": "Indok: {{reason}}",
|
||||||
"check_rule": "Szabály: {{rule}}",
|
|
||||||
"check_service": "Szolgáltatás neve: {{service}}",
|
"check_service": "Szolgáltatás neve: {{service}}",
|
||||||
"service_name": "Szolgáltatás neve",
|
"service_name": "Szolgáltatás neve",
|
||||||
"check_not_found": "Nem található az Ön szűrőlistái között",
|
"check_not_found": "Nem található az Ön szűrőlistái között",
|
||||||
|
@ -269,7 +269,6 @@
|
|||||||
"source_label": "Sumber",
|
"source_label": "Sumber",
|
||||||
"found_in_known_domain_db": "Ditemukan di database domain dikenal",
|
"found_in_known_domain_db": "Ditemukan di database domain dikenal",
|
||||||
"category_label": "Kategori",
|
"category_label": "Kategori",
|
||||||
"rule_label": "Aturan",
|
|
||||||
"list_label": "Daftar",
|
"list_label": "Daftar",
|
||||||
"unknown_filter": "Penyaringan {{filterId}} tidak dikenal",
|
"unknown_filter": "Penyaringan {{filterId}} tidak dikenal",
|
||||||
"known_tracker": "Pelacak yang dikenal",
|
"known_tracker": "Pelacak yang dikenal",
|
||||||
@ -330,7 +329,6 @@
|
|||||||
"encryption_config_saved": "Pengaturan enkripsi telah tersimpan",
|
"encryption_config_saved": "Pengaturan enkripsi telah tersimpan",
|
||||||
"encryption_server": "Nama server",
|
"encryption_server": "Nama server",
|
||||||
"encryption_server_enter": "Masukkan nama domain anda",
|
"encryption_server_enter": "Masukkan nama domain anda",
|
||||||
"encryption_server_desc": "Untuk menggunakan HTTPS, Anda harus memasukkan nama server yang cocok dengan sertifikat SSL Anda.",
|
|
||||||
"encryption_redirect": "Alihkan ke HTTPS secara otomatis",
|
"encryption_redirect": "Alihkan ke HTTPS secara otomatis",
|
||||||
"encryption_redirect_desc": "Jika dicentang, AdGuard Home akan secara otomatis mengarahkan anda dari HTTP ke alamat HTTPS.",
|
"encryption_redirect_desc": "Jika dicentang, AdGuard Home akan secara otomatis mengarahkan anda dari HTTP ke alamat HTTPS.",
|
||||||
"encryption_https": "Port HTTPS",
|
"encryption_https": "Port HTTPS",
|
||||||
@ -386,7 +384,6 @@
|
|||||||
"client_edit": "Ubah Klien",
|
"client_edit": "Ubah Klien",
|
||||||
"client_identifier": "Identifikasi",
|
"client_identifier": "Identifikasi",
|
||||||
"ip_address": "Alamat IP",
|
"ip_address": "Alamat IP",
|
||||||
"client_identifier_desc": "Klien dapat diidentifikasi dengan alamat IP atau alamat MAC. Harap dicatat bahwa menggunakan MAC sebagai pengidentifikasi hanya dimungkinkan jika AdGuard Home juga merupakan <0>server DHCP</0>",
|
|
||||||
"form_enter_ip": "Masukkan IP",
|
"form_enter_ip": "Masukkan IP",
|
||||||
"form_enter_mac": "Masukkan MAC",
|
"form_enter_mac": "Masukkan MAC",
|
||||||
"form_enter_id": "Masukkan pengenal",
|
"form_enter_id": "Masukkan pengenal",
|
||||||
@ -529,7 +526,6 @@
|
|||||||
"check_ip": "Alamat IP: {{ip}}",
|
"check_ip": "Alamat IP: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Alasan: {{reason}}",
|
"check_reason": "Alasan: {{reason}}",
|
||||||
"check_rule": "Aturan: {{rule}}",
|
|
||||||
"check_service": "Nama layanan: {{service}}",
|
"check_service": "Nama layanan: {{service}}",
|
||||||
"service_name": "Nama layanan",
|
"service_name": "Nama layanan",
|
||||||
"check_not_found": "Tidak di temukan di daftar penyaringan anda",
|
"check_not_found": "Tidak di temukan di daftar penyaringan anda",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Formato IPv4 non valido",
|
"form_error_ip_format": "Formato IPv4 non valido",
|
||||||
"form_error_mac_format": "Formato MAC non valido",
|
"form_error_mac_format": "Formato MAC non valido",
|
||||||
"form_error_client_id_format": "Formato ID cliente non valido",
|
"form_error_client_id_format": "Formato ID cliente non valido",
|
||||||
|
"form_error_server_name": "Nome server non valido",
|
||||||
"form_error_positive": "Deve essere maggiore di 0",
|
"form_error_positive": "Deve essere maggiore di 0",
|
||||||
"form_error_negative": "Deve essere maggiore o uguale a 0 (zero)",
|
"form_error_negative": "Deve essere maggiore o uguale a 0 (zero)",
|
||||||
"range_end_error": "Deve essere maggiore dell'intervallo di inizio",
|
"range_end_error": "Deve essere maggiore dell'intervallo di inizio",
|
||||||
@ -186,10 +187,10 @@
|
|||||||
"example_comment_hash": "# Un altro commento",
|
"example_comment_hash": "# Un altro commento",
|
||||||
"example_regex_meaning": "blocca l'accesso ai domini che corrispondono alla specifica espressione regolare",
|
"example_regex_meaning": "blocca l'accesso ai domini che corrispondono alla specifica espressione regolare",
|
||||||
"example_upstream_regular": "DNS regolari (via UDP)",
|
"example_upstream_regular": "DNS regolari (via UDP)",
|
||||||
"example_upstream_dot": "<0>DNS_over_TLS</0> crittografato",
|
"example_upstream_dot": "<0>DNS su TLS</0> crittografato",
|
||||||
"example_upstream_doh": "<0>DNS-over-HTTPS</0> crittografato",
|
"example_upstream_doh": "<0>DNS su HTTPS</0> crittografato",
|
||||||
"example_upstream_doq": "<0>DNS_over_QUIC</0> crittografato",
|
"example_upstream_doq": "<0>DNS su QUIC</0> crittografato",
|
||||||
"example_upstream_sdns": "puoi utilizzare <0>DNS Stamps</0> per <1>DNSCrypt</1> oppure dei resolver con <2>DNS-over-HTTPS</2>",
|
"example_upstream_sdns": "puoi utilizzare <0>DNS Stamps</0> per <1>DNSCrypt</1> oppure dei resolver con <2>DNS su HTTPS</2>",
|
||||||
"example_upstream_tcp": "DNS regolari (via TCP)",
|
"example_upstream_tcp": "DNS regolari (via TCP)",
|
||||||
"all_lists_up_to_date_toast": "Tutte le liste sono aggiornate",
|
"all_lists_up_to_date_toast": "Tutte le liste sono aggiornate",
|
||||||
"updated_upstream_dns_toast": "Server DNS upstream aggiornati",
|
"updated_upstream_dns_toast": "Server DNS upstream aggiornati",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "IP personalizzato",
|
"custom_ip": "IP personalizzato",
|
||||||
"blocking_ipv4": "Blocca IPv4",
|
"blocking_ipv4": "Blocca IPv4",
|
||||||
"blocking_ipv6": "Blocca IPv6",
|
"blocking_ipv6": "Blocca IPv6",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_https": "DNS su HTTPS",
|
||||||
"download_mobileconfig_doh": "Scarica .mobileconfig per DNS-over-HTTPS",
|
"dns_over_tls": "DNS su TLS",
|
||||||
"download_mobileconfig_dot": "Scarica .mobileconfig per DNS-over-TLS",
|
"dns_over_quic": "DNS su Quic",
|
||||||
|
"client_id": "ID client",
|
||||||
|
"client_id_placeholder": "Inserisci ID client",
|
||||||
|
"client_id_desc": "Client differenti possono essere identificati da uno speciale ID. <a>Qui</a> potrai saperne di più sui metodi per identificarli.",
|
||||||
|
"download_mobileconfig_doh": "Scarica .mobileconfig per DNS su HTTPS",
|
||||||
|
"download_mobileconfig_dot": "Scarica .mobileconfig per DNS su TLS",
|
||||||
|
"download_mobileconfig": "Scarica file di configurazione",
|
||||||
"plain_dns": "DNS semplice",
|
"plain_dns": "DNS semplice",
|
||||||
"form_enter_rate_limit": "Imposta limite delle richieste",
|
"form_enter_rate_limit": "Imposta limite delle richieste",
|
||||||
"rate_limit": "Limite delle richieste",
|
"rate_limit": "Limite delle richieste",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Fonte",
|
"source_label": "Fonte",
|
||||||
"found_in_known_domain_db": "Trovato nel database dei domini conosciuti.",
|
"found_in_known_domain_db": "Trovato nel database dei domini conosciuti.",
|
||||||
"category_label": "Categoria",
|
"category_label": "Categoria",
|
||||||
"rule_label": "Regola",
|
"rule_label": "Regola(e)",
|
||||||
"list_label": "Lista",
|
"list_label": "Lista",
|
||||||
"unknown_filter": "Filtro sconosciuto {{filterId}}",
|
"unknown_filter": "Filtro sconosciuto {{filterId}}",
|
||||||
"known_tracker": "Tracker conosciuto",
|
"known_tracker": "Tracker conosciuto",
|
||||||
@ -330,14 +337,14 @@
|
|||||||
"encryption_config_saved": "Configurazione della crittografia salvata",
|
"encryption_config_saved": "Configurazione della crittografia salvata",
|
||||||
"encryption_server": "Nome server",
|
"encryption_server": "Nome server",
|
||||||
"encryption_server_enter": "Inserisci il tuo nome di dominio",
|
"encryption_server_enter": "Inserisci il tuo nome di dominio",
|
||||||
"encryption_server_desc": "Per utilizzare HTTPS, è necessario inserire il nome del server che corrisponde al certificato SSL.",
|
"encryption_server_desc": "Per utilizzare HTTPS, è necessario immettere il nome del server che corrisponde al certificato SSL o al certificato wildcard. Se il campo risulterà vuoto, accetterà connessioni TLS per qualsiasi dominio.",
|
||||||
"encryption_redirect": "Reindirizza automaticamente a HTTPS",
|
"encryption_redirect": "Reindirizza automaticamente a HTTPS",
|
||||||
"encryption_redirect_desc": "Se selezionato, AdGuard Home ti reindirizzerà automaticamente da indirizzi HTTP a HTTPS.",
|
"encryption_redirect_desc": "Se selezionato, AdGuard Home ti reindirizzerà automaticamente da indirizzi HTTP a HTTPS.",
|
||||||
"encryption_https": "Porta HTTPS",
|
"encryption_https": "Porta HTTPS",
|
||||||
"encryption_https_desc": "Se la porta HTTPS è configurata, l'interfaccia di amministrazione di AdGuard Home sarà accessibile tramite HTTPS e fornirà anche DNS-over-HTTPS nella posizione \"/ dns-query\".",
|
"encryption_https_desc": "Se la porta HTTPS è configurata, l'interfaccia di amministrazione di AdGuard Home sarà accessibile tramite HTTPS e fornirà anche DNS su HTTPS nella posizione \"/ dns-query\".",
|
||||||
"encryption_dot": "DNS-su porta-TLS",
|
"encryption_dot": "DNS su porta TLS",
|
||||||
"encryption_dot_desc": "Se questa porta è configurata, AdGuard Home eseguirà un server DNS-over-TLS su questa porta.",
|
"encryption_dot_desc": "Se questa porta è configurata, AdGuard Home eseguirà un server DNS su TLS su questa porta.",
|
||||||
"encryption_doq": "DNS-su porta-QUIC",
|
"encryption_doq": "DNS su porta QUIC",
|
||||||
"encryption_doq_desc": "Se questa porta è configurata, AdGuard Home eseguirà un server DNS su porta QUIC. Questa opzione è sperimentale e potrebbe non risultare affidabile. Inoltre, al momento non sono molti i client a supportarla.",
|
"encryption_doq_desc": "Se questa porta è configurata, AdGuard Home eseguirà un server DNS su porta QUIC. Questa opzione è sperimentale e potrebbe non risultare affidabile. Inoltre, al momento non sono molti i client a supportarla.",
|
||||||
"encryption_certificates": "Certificati",
|
"encryption_certificates": "Certificati",
|
||||||
"encryption_certificates_desc": "Per utilizzare la crittografia, è necessario fornire una catena di certificati SSL valida per il proprio dominio. Puoi ottenere un certificato gratuito su <0> {{link}} </ 0> o puoi acquistarlo da una delle Autorità di certificazione attendibili.",
|
"encryption_certificates_desc": "Per utilizzare la crittografia, è necessario fornire una catena di certificati SSL valida per il proprio dominio. Puoi ottenere un certificato gratuito su <0> {{link}} </ 0> o puoi acquistarlo da una delle Autorità di certificazione attendibili.",
|
||||||
@ -346,8 +353,8 @@
|
|||||||
"encryption_expire": "Scaduto",
|
"encryption_expire": "Scaduto",
|
||||||
"encryption_key": "Chiave privata",
|
"encryption_key": "Chiave privata",
|
||||||
"encryption_key_input": "Copia/Incolla qui la tua chiave privata codificata PEM per il tuo certificato.",
|
"encryption_key_input": "Copia/Incolla qui la tua chiave privata codificata PEM per il tuo certificato.",
|
||||||
"encryption_enable": "Attiva crittografia (HTTPS, DNS-su-HTTPS e DNS-su-TLS)",
|
"encryption_enable": "Attiva crittografia (HTTPS, DNS su HTTPS e DNS su TLS)",
|
||||||
"encryption_enable_desc": "Se la crittografia è attiva, l'interfaccia di amministrazione di AdGuard Home funzionerà su HTTPS e il server DNS ascolterà le richieste su DNS-over-HTTPS e DNS-over-TLS.",
|
"encryption_enable_desc": "Se la crittografia è attiva, l'interfaccia di amministrazione di AdGuard Home funzionerà su HTTPS e il server DNS ascolterà le richieste su DNS su HTTPS e DNS su TLS.",
|
||||||
"encryption_chain_valid": "La catena di certificati è valida",
|
"encryption_chain_valid": "La catena di certificati è valida",
|
||||||
"encryption_chain_invalid": "La catena di certificati non è valida",
|
"encryption_chain_invalid": "La catena di certificati non è valida",
|
||||||
"encryption_key_valid": "Questa è una chiave privata {{type}} valida",
|
"encryption_key_valid": "Questa è una chiave privata {{type}} valida",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Modifica Client",
|
"client_edit": "Modifica Client",
|
||||||
"client_identifier": "Identificatore",
|
"client_identifier": "Identificatore",
|
||||||
"ip_address": "Indirizzo IP",
|
"ip_address": "Indirizzo IP",
|
||||||
"client_identifier_desc": "I client possono essere identificati dall indirizzo IP o dall' indirizzo MAC. Nota che l' utilizzo dell' indirizzo MAC come identificatore è consentito solo se AdGuard Home è anche il <0>server DHCP</0>",
|
"client_identifier_desc": "I client possono essere identificati dall'indirizzo IP, CIDR, indirizzo MAC o un ID speciale (che può essere utilizzato per DoT/DoH/DoQ). <0>Qui</0> potrai saperne di più sui metodi per identificarli.",
|
||||||
"form_enter_ip": "Inserisci IP",
|
"form_enter_ip": "Inserisci IP",
|
||||||
"form_enter_mac": "Inserisci MAC",
|
"form_enter_mac": "Inserisci MAC",
|
||||||
"form_enter_id": "Inserisci identificatore",
|
"form_enter_id": "Inserisci identificatore",
|
||||||
@ -415,22 +422,23 @@
|
|||||||
"updates_version_equal": "AdGuard Home è aggiornato",
|
"updates_version_equal": "AdGuard Home è aggiornato",
|
||||||
"check_updates_now": "Controlla aggiornamenti adesso",
|
"check_updates_now": "Controlla aggiornamenti adesso",
|
||||||
"dns_privacy": "Privacy DNS",
|
"dns_privacy": "Privacy DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Utilizza la stringa <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS su TLS:</0> Utilizza la stringa <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Utilizza la stringa <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS su HTTPS:</0> Utilizza la stringa <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_3": "<0>Ecco un elenco di software che è possibile utilizzare.</0>",
|
"setup_dns_privacy_3": "<0>Ecco un elenco di software che è possibile utilizzare.</0>",
|
||||||
"setup_dns_privacy_4": "Si usa un dispositivo iOS 14 o macOS Big Sur puoi scaricare uno file speciale.mobileconfig' che aggiunge i server <highlight>DNS-over-HTTPS</highlight> or <highlight>DNS-over-TLS</highlight> alle configurazioni DNS.",
|
"setup_dns_privacy_4": "Si usa un dispositivo iOS 14 o macOS Big Sur puoi scaricare uno file speciale.mobileconfig' che aggiunge i server <highlight>DNS su HTTPS</highlight> or <highlight>DNS su TLS</highlight> alle configurazioni DNS.",
|
||||||
"setup_dns_privacy_android_1": "Android 9 supporta DNS-over-TLS in modo nativo. Per configurarlo, vai su Impostazioni → Rete e Internet → Avanzate → DNS privato e inserisci qui il tuo nome di dominio.",
|
"setup_dns_privacy_android_1": "Android 9 supporta DNS su TLS in modo nativo. Per configurarlo, vai su Impostazioni → Rete e Internet → Avanzate → DNS privato e inserisci qui il tuo nome di dominio.",
|
||||||
"setup_dns_privacy_android_2": "<0>AdGuard per Android</0> supporta <1>DNS-over-HTTPS</1> e <1>DNS-over-TLS</1>.",
|
"setup_dns_privacy_android_2": "<0>AdGuard per Android</0> supporta <1>DNS su HTTPS</1> e <1>DNS su TLS</1>.",
|
||||||
"setup_dns_privacy_android_3": "<0>Intra</0> aggiunge <1>DNS-over-HTTPS</1> il supporto ad Android.",
|
"setup_dns_privacy_android_3": "<0>Intra</0> aggiunge <1>DNS su HTTPS</1> il supporto ad Android.",
|
||||||
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> supporta <1>DNS-over-HTTPS</1>, ma per configurarlo per l'utilizzo del proprio server, è necessario generare un <2> DNS Stamp</2> apposito.",
|
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> supporta <1>DNS su HTTPS</1>, ma per configurarlo per l'utilizzo del proprio server, è necessario generare un <2> DNS Stamp</2> apposito.",
|
||||||
"setup_dns_privacy_ios_2": "<0>AdGuard per iOS</0>supporta l'impostazione <1>DNS-over-HTTPS</1> e <1>DNS-over-TLS</1>.",
|
"setup_dns_privacy_ios_2": "<0>AdGuard per iOS</0>supporta l'impostazione <1>DNS su HTTPS</1> e <1>DNS su TLS</1>.",
|
||||||
"setup_dns_privacy_other_title": "Altre implementazion",
|
"setup_dns_privacy_other_title": "Altre implementazion",
|
||||||
"setup_dns_privacy_other_1": "AdGuard Home può essere un client DNS sicuro su qualsiasi piattaforma.",
|
"setup_dns_privacy_other_1": "AdGuard Home può essere un client DNS sicuro su qualsiasi piattaforma.",
|
||||||
"setup_dns_privacy_other_2": "<0>dnsproxy</0> supporta tutti i protocolli DNS sicuri noti.",
|
"setup_dns_privacy_other_2": "<0>dnsproxy</0> supporta tutti i protocolli DNS sicuri noti.",
|
||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> supporta <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> supporta <1>DNS su HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> supporta <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> supporta <1>DNS su HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Troverai più implementazioni <0>qui</0> e <1>qui</1>.",
|
"setup_dns_privacy_other_5": "Troverai più implementazioni <0>qui</0> e <1>qui</1>.",
|
||||||
"setup_dns_notice": "Per utilizzare <1>DNS-over-HTTPS</1> o <1>DNS-over-TLS</1>, è necessario <0>configurare la crittografia</0> nelle impostazioni di AdGuard Home.",
|
"setup_dns_privacy_ioc_mac": "configurazione iOS e macOS",
|
||||||
|
"setup_dns_notice": "Per utilizzare <1>DNS su HTTPS</1> o <1>DNS su TLS</1>, è necessario <0>configurare la crittografia</0> nelle impostazioni di AdGuard Home.",
|
||||||
"rewrite_added": "Riscrittura DNS per \"{{key}}\" aggiunta correttamente",
|
"rewrite_added": "Riscrittura DNS per \"{{key}}\" aggiunta correttamente",
|
||||||
"rewrite_deleted": "La riscrittura DNS per \"{{key}}\" è stata eliminata correttamente",
|
"rewrite_deleted": "La riscrittura DNS per \"{{key}}\" è stata eliminata correttamente",
|
||||||
"rewrite_add": "Aggiungi la riscrittura DNS",
|
"rewrite_add": "Aggiungi la riscrittura DNS",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "Indirizzi IP: {{ip}}",
|
"check_ip": "Indirizzi IP: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Motivo: {{reason}}",
|
"check_reason": "Motivo: {{reason}}",
|
||||||
"check_rule": "Regola: {{rule}}",
|
|
||||||
"check_service": "Nome servizio: {{service}}",
|
"check_service": "Nome servizio: {{service}}",
|
||||||
"service_name": "Nome servizio",
|
"service_name": "Nome servizio",
|
||||||
"check_not_found": "Non trovato negli elenchi dei filtri",
|
"check_not_found": "Non trovato negli elenchi dei filtri",
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "クライアント設定",
|
"client_settings": "クライアント設定",
|
||||||
"example_upstream_reserved": "<0>特定のドメイン</0>に対してDNSアップストリームを指定できます",
|
"example_upstream_reserved": "<0>特定のドメイン</0>に対してDNSアップストリームを指定できます",
|
||||||
|
"example_upstream_comment": "コメントを指定できます",
|
||||||
"upstream_parallel": "並列リクエストを使用する(すべてのアップストリームサーバーを同時に照会することで解決スピードが向上します)",
|
"upstream_parallel": "並列リクエストを使用する(すべてのアップストリームサーバーを同時に照会することで解決スピードが向上します)",
|
||||||
"parallel_requests": "並列リクエスト",
|
"parallel_requests": "並列リクエスト",
|
||||||
"load_balancing": "ロードバランシング",
|
"load_balancing": "ロードバランシング",
|
||||||
@ -31,6 +32,7 @@
|
|||||||
"form_error_ip_format": "IPv4フォーマットではありません",
|
"form_error_ip_format": "IPv4フォーマットではありません",
|
||||||
"form_error_mac_format": "MACフォーマットではありません",
|
"form_error_mac_format": "MACフォーマットではありません",
|
||||||
"form_error_client_id_format": "Client IDの形式が無効です",
|
"form_error_client_id_format": "Client IDの形式が無効です",
|
||||||
|
"form_error_server_name": "サーバ名が無効です",
|
||||||
"form_error_positive": "0より大きい必要があります",
|
"form_error_positive": "0より大きい必要があります",
|
||||||
"form_error_negative": "0以上である必要があります",
|
"form_error_negative": "0以上である必要があります",
|
||||||
"range_end_error": "範囲開始よりも大きくなければなりません",
|
"range_end_error": "範囲開始よりも大きくなければなりません",
|
||||||
@ -246,8 +248,16 @@
|
|||||||
"custom_ip": "カスタムIP",
|
"custom_ip": "カスタムIP",
|
||||||
"blocking_ipv4": "ブロック中のIPv4",
|
"blocking_ipv4": "ブロック中のIPv4",
|
||||||
"blocking_ipv6": "ブロック中のIPv6",
|
"blocking_ipv6": "ブロック中のIPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "Client ID(クライアントID)",
|
||||||
|
"client_id_placeholder": "クライアントIDを入力してください",
|
||||||
|
"client_id_desc": "それぞれのクライアントは、特別なクライアントIDで識別できます。 <a>ここ</a>では、クライアントを特定する方法について詳しく知ることができます。",
|
||||||
|
"download_mobileconfig_doh": "DNS-over-HTTPS用の .mobileconfig をダウンロード",
|
||||||
|
"download_mobileconfig_dot": "DNS-over-TLS用の .mobileconfig をダウンロード",
|
||||||
|
"download_mobileconfig": "設定ファイルをダウンロードする",
|
||||||
"plain_dns": "通常のDNS",
|
"plain_dns": "通常のDNS",
|
||||||
"form_enter_rate_limit": "頻度制限を入力してください",
|
"form_enter_rate_limit": "頻度制限を入力してください",
|
||||||
"rate_limit": "頻度制限",
|
"rate_limit": "頻度制限",
|
||||||
@ -327,7 +337,7 @@
|
|||||||
"encryption_config_saved": "暗号化の設定を保存しました",
|
"encryption_config_saved": "暗号化の設定を保存しました",
|
||||||
"encryption_server": "サーバ名",
|
"encryption_server": "サーバ名",
|
||||||
"encryption_server_enter": "ドメイン名を入力してください",
|
"encryption_server_enter": "ドメイン名を入力してください",
|
||||||
"encryption_server_desc": "HTTPSを使用するには、SSL証明書と一致するサーバ名を入力する必要があります。",
|
"encryption_server_desc": "HTTPSを使用するには、SSL証明書またはワイルドカード証明書と一致するサーバー名を入力する必要があります。このフィールドが設定されていない場合は、任意のドメインのTLS接続を受け入れます。",
|
||||||
"encryption_redirect": "HTTPSに自動的にリダイレクト",
|
"encryption_redirect": "HTTPSに自動的にリダイレクト",
|
||||||
"encryption_redirect_desc": "チェックすると、AdGuard Homeは自動的にHTTPからHTTPSアドレスへリダイレクトします。",
|
"encryption_redirect_desc": "チェックすると、AdGuard Homeは自動的にHTTPからHTTPSアドレスへリダイレクトします。",
|
||||||
"encryption_https": "HTTPS ポート",
|
"encryption_https": "HTTPS ポート",
|
||||||
@ -383,7 +393,7 @@
|
|||||||
"client_edit": "クライアントの編集",
|
"client_edit": "クライアントの編集",
|
||||||
"client_identifier": "識別子",
|
"client_identifier": "識別子",
|
||||||
"ip_address": "IPアドレス",
|
"ip_address": "IPアドレス",
|
||||||
"client_identifier_desc": "クライアントはIPアドレスまたはMACアドレスで識別できます。AdGuard Homeが<0>DHCPサーバ</0>でもある場合にのみ、識別子としてMACを使用することが可能であることにご注意ください。",
|
"client_identifier_desc": "クライアントは、IPアドレス、CIDR、MACアドレス、または特別なクライアントID(DoT/DoH/DoQで使用可能)によって識別することができます。<0>ここ</0>では、クライアントの識別方法についてより詳しく説明しています。",
|
||||||
"form_enter_ip": "IPアドレスを入力してください",
|
"form_enter_ip": "IPアドレスを入力してください",
|
||||||
"form_enter_mac": "MACアドレスを入力してください",
|
"form_enter_mac": "MACアドレスを入力してください",
|
||||||
"form_enter_id": "識別子を入力してください",
|
"form_enter_id": "識別子を入力してください",
|
||||||
@ -414,6 +424,7 @@
|
|||||||
"dns_privacy": "DNSプライバシー",
|
"dns_privacy": "DNSプライバシー",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1>という文字列を使用してください。",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1>という文字列を使用してください。",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1>という文字列を使用してください。",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1>という文字列を使用してください。",
|
||||||
|
"setup_dns_privacy_3": "<0>使用できるソフトウェアのリストは次の通りです。</0>",
|
||||||
"setup_dns_privacy_4": "iOS 14 または macOS Big Sur デバイスにて、<highlight>DNS-over-HTTPS</highlight>または<highlight>DNS-over-TLS</highlight>サーバをDNS設定へ追加する特別な「.mobileconfig」ファイルをダウンロードできます。",
|
"setup_dns_privacy_4": "iOS 14 または macOS Big Sur デバイスにて、<highlight>DNS-over-HTTPS</highlight>または<highlight>DNS-over-TLS</highlight>サーバをDNS設定へ追加する特別な「.mobileconfig」ファイルをダウンロードできます。",
|
||||||
"setup_dns_privacy_android_1": "Android 9はDNS-over-TLSをネイティブにサポートします。設定するには、設定 → ネットワークとインターネット → 詳細設定 → プライベートDNS へ遷移し、そこにドメイン名を入力してください。",
|
"setup_dns_privacy_android_1": "Android 9はDNS-over-TLSをネイティブにサポートします。設定するには、設定 → ネットワークとインターネット → 詳細設定 → プライベートDNS へ遷移し、そこにドメイン名を入力してください。",
|
||||||
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0>は、<1>DNS-over-HTTPS</1>と<1>DNS-over-TLS</1>をサポートしています。",
|
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0>は、<1>DNS-over-HTTPS</1>と<1>DNS-over-TLS</1>をサポートしています。",
|
||||||
@ -426,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0>は<1>DNS-over-HTTPS</1>をサポートします。",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0>は<1>DNS-over-HTTPS</1>をサポートします。",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0>は<1>DNS-over-HTTPS</1>をサポートしています。",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0>は<1>DNS-over-HTTPS</1>をサポートしています。",
|
||||||
"setup_dns_privacy_other_5": "もっと多くの実装を<0>ここ</0>や<1>ここ</1>で見つけられます。",
|
"setup_dns_privacy_other_5": "もっと多くの実装を<0>ここ</0>や<1>ここ</1>で見つけられます。",
|
||||||
|
"setup_dns_privacy_ioc_mac": "iOS と macOS での設定",
|
||||||
"setup_dns_notice": "<1>DNS-over-HTTPS</1>または<1>DNS-over-TLS</1>を使用するには、AdGuard Home 設定の<0>暗号化設定</0>が必要です。",
|
"setup_dns_notice": "<1>DNS-over-HTTPS</1>または<1>DNS-over-TLS</1>を使用するには、AdGuard Home 設定の<0>暗号化設定</0>が必要です。",
|
||||||
"rewrite_added": "\"{{key}}\" のためのDNS書き換え情報を追加完了しました",
|
"rewrite_added": "\"{{key}}\" のためのDNS書き換え情報を追加完了しました",
|
||||||
"rewrite_deleted": "\"{{key}}\" のためのDNS書き換え情報を削除完了しました",
|
"rewrite_deleted": "\"{{key}}\" のためのDNS書き換え情報を削除完了しました",
|
||||||
@ -525,8 +537,8 @@
|
|||||||
"check_ip": "IPアドレス: {{ip}}",
|
"check_ip": "IPアドレス: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "理由: {{reason}}",
|
"check_reason": "理由: {{reason}}",
|
||||||
"check_rule": "ルール: {{rule}}",
|
|
||||||
"check_service": "サービス名: {{service}}",
|
"check_service": "サービス名: {{service}}",
|
||||||
|
"service_name": "サービス名",
|
||||||
"check_not_found": "フィルタ一覧には見つかりません",
|
"check_not_found": "フィルタ一覧には見つかりません",
|
||||||
"client_confirm_block": "クライアント\"{{ip}}\"をブロックしてもよろしいですか?",
|
"client_confirm_block": "クライアント\"{{ip}}\"をブロックしてもよろしいですか?",
|
||||||
"client_confirm_unblock": "クライアント\"{{ip}}\"のブロックを解除してもよろしいですか?",
|
"client_confirm_unblock": "クライアント\"{{ip}}\"のブロックを解除してもよろしいですか?",
|
||||||
@ -561,6 +573,11 @@
|
|||||||
"cache_size_desc": "DNSキャッシュサイズ(バイト単位)",
|
"cache_size_desc": "DNSキャッシュサイズ(バイト単位)",
|
||||||
"cache_ttl_min_override": "最小TTLの上書き(秒単位)",
|
"cache_ttl_min_override": "最小TTLの上書き(秒単位)",
|
||||||
"cache_ttl_max_override": "最大TTLの上書き(秒単位)",
|
"cache_ttl_max_override": "最大TTLの上書き(秒単位)",
|
||||||
|
"enter_cache_size": "キャッシュサイズ(バイト単位)を入力してください",
|
||||||
|
"enter_cache_ttl_min_override": "最小TTL(秒単位)を入力してください",
|
||||||
|
"enter_cache_ttl_max_override": "最大TTL(秒単位)を入力してください",
|
||||||
|
"cache_ttl_min_override_desc": "DNS応答をキャッシュするとき、上流サーバから受信した短いTTL(秒単位)を延長します",
|
||||||
|
"cache_ttl_max_override_desc": "DNSキャッシュ内のエントリの最大TTL(秒単位)を設定します",
|
||||||
"ttl_cache_validation": "最小キャッシュTTL値は最大値以下にする必要があります",
|
"ttl_cache_validation": "最小キャッシュTTL値は最大値以下にする必要があります",
|
||||||
"filter_category_general": "一般",
|
"filter_category_general": "一般",
|
||||||
"filter_category_security": "セキュリティ",
|
"filter_category_security": "セキュリティ",
|
||||||
@ -570,9 +587,11 @@
|
|||||||
"filter_category_security_desc": "マルウェア、フィッシング、詐欺ドメインのブロック専用リストです。",
|
"filter_category_security_desc": "マルウェア、フィッシング、詐欺ドメインのブロック専用リストです。",
|
||||||
"filter_category_regional_desc": "それぞれの地域の広告と追跡サーバをターゲットするリストです。",
|
"filter_category_regional_desc": "それぞれの地域の広告と追跡サーバをターゲットするリストです。",
|
||||||
"filter_category_other_desc": "その他のブロックリストです。",
|
"filter_category_other_desc": "その他のブロックリストです。",
|
||||||
|
"setup_config_to_enable_dhcp_server": "DHCPサーバを有効にするには構成を設定してください",
|
||||||
"original_response": "当初の応答",
|
"original_response": "当初の応答",
|
||||||
"click_to_view_queries": "クエリを表示するにはクリックしてください",
|
"click_to_view_queries": "クエリを表示するにはクリックしてください",
|
||||||
"port_53_faq_link": "多くの場合、ポート53は \"DNSStubListener\" または \"systemd-resolved\" サービスによって利用されています。これを解決する方法については、<0>この手順</0>をお読みください。",
|
"port_53_faq_link": "多くの場合、ポート53は \"DNSStubListener\" または \"systemd-resolved\" サービスによって利用されています。これを解決する方法については、<0>この手順</0>をお読みください。",
|
||||||
"adg_will_drop_dns_queries": "AdGuard Homeは、このクライアントからすべてのDNSクエリを落とします。",
|
"adg_will_drop_dns_queries": "AdGuard Homeは、このクライアントからすべてのDNSクエリを落とします。",
|
||||||
|
"client_not_in_allowed_clients": "「許可されたクライアント」リストにないため、このクライアントは許可されていません。",
|
||||||
"experimental": "実験用"
|
"experimental": "実験用"
|
||||||
}
|
}
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "잘못된 IP 형식",
|
"form_error_ip_format": "잘못된 IP 형식",
|
||||||
"form_error_mac_format": "잘못된 MAC 형식",
|
"form_error_mac_format": "잘못된 MAC 형식",
|
||||||
"form_error_client_id_format": "잘못된 클라이언트 ID 형식",
|
"form_error_client_id_format": "잘못된 클라이언트 ID 형식",
|
||||||
|
"form_error_server_name": "유효하지 않은 서버 이름입니다",
|
||||||
"form_error_positive": "0보다 커야 합니다",
|
"form_error_positive": "0보다 커야 합니다",
|
||||||
"form_error_negative": "반드시 0 이상이여야 합니다",
|
"form_error_negative": "반드시 0 이상이여야 합니다",
|
||||||
"range_end_error": "입력 값은 범위의 시작 지점보다 큰 값 이여야 합니다.",
|
"range_end_error": "입력 값은 범위의 시작 지점보다 큰 값 이여야 합니다.",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "사용자 지정 IP",
|
"custom_ip": "사용자 지정 IP",
|
||||||
"blocking_ipv4": "IPv4 차단",
|
"blocking_ipv4": "IPv4 차단",
|
||||||
"blocking_ipv6": "IPv6 차단",
|
"blocking_ipv6": "IPv6 차단",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "클라이언트 ID",
|
||||||
|
"client_id_placeholder": "클라이언트 ID 입력",
|
||||||
|
"client_id_desc": "클라이언트는 특별한 클라이언트 ID를 기반으로 구분됩니다. <a>여기</a>에서 클라이언트를 구분하는 방법을 자세히 알아보세요.",
|
||||||
"download_mobileconfig_doh": "DNS-over-HTTPS용 .mobileconfig 다운로드",
|
"download_mobileconfig_doh": "DNS-over-HTTPS용 .mobileconfig 다운로드",
|
||||||
"download_mobileconfig_dot": "DNS-over-TLS용 .mobileconfig 다운로드",
|
"download_mobileconfig_dot": "DNS-over-TLS용 .mobileconfig 다운로드",
|
||||||
|
"download_mobileconfig": "설정 파일 내려받기",
|
||||||
"plain_dns": "평문 DNS",
|
"plain_dns": "평문 DNS",
|
||||||
"form_enter_rate_limit": "한도 제한 입력하기",
|
"form_enter_rate_limit": "한도 제한 입력하기",
|
||||||
"rate_limit": "한도 제한",
|
"rate_limit": "한도 제한",
|
||||||
@ -301,7 +308,7 @@
|
|||||||
"install_devices_router_list_1": "라우터의 환경 설정을 여세요. 환경 설정은 다음의 주소(http://192.168.0.1/ 혹은 http://192.168.1.1/)를 통해 브라우저로 접근 가능합니다. 비밀번호를 입력해야할 수 있습니다. 비밀번호를 잊었다면 대개 라우터 기기에 있는 버튼을 눌러 비밀번호를 초기화할 수 있습니다. 어떤 라우터들은 당신의 컴퓨터/핸드폰에 설치할 수 있는 특정 어플리케이션을 필요로합니다.",
|
"install_devices_router_list_1": "라우터의 환경 설정을 여세요. 환경 설정은 다음의 주소(http://192.168.0.1/ 혹은 http://192.168.1.1/)를 통해 브라우저로 접근 가능합니다. 비밀번호를 입력해야할 수 있습니다. 비밀번호를 잊었다면 대개 라우터 기기에 있는 버튼을 눌러 비밀번호를 초기화할 수 있습니다. 어떤 라우터들은 당신의 컴퓨터/핸드폰에 설치할 수 있는 특정 어플리케이션을 필요로합니다.",
|
||||||
"install_devices_router_list_2": "각각 1~3자리 숫자의 네 그룹으로 분할된 두 세트의 숫자를 허용하는 필드 옆에 있는 DNS 문자를 찾으세요.",
|
"install_devices_router_list_2": "각각 1~3자리 숫자의 네 그룹으로 분할된 두 세트의 숫자를 허용하는 필드 옆에 있는 DNS 문자를 찾으세요.",
|
||||||
"install_devices_router_list_3": "AdGuard Home 서버 주소를 입력하세요",
|
"install_devices_router_list_3": "AdGuard Home 서버 주소를 입력하세요",
|
||||||
"install_devices_router_list_4": "일부 라우터는 DNS서버의 커스텀 설정이 불가합니다. 간혹 AdGuard Home을 DHCP서버로 이용하여 문제를 해결하는 경우가 있지만 문제가 지속될 경우 사용하시는 라우터 모델의 매뉴얼을 참고하시어 <0>DNS</0>서버 커스텀 설정 방법을 직접 살펴보셔야 합니다.",
|
"install_devices_router_list_4": "일부 라우터 유형에서는 사용자 정의 DNS 서버를 설정할 수 없습니다. 이 경우에는 AdGuard Home을 <0>DHCP 서버</0>로 설정할 수 있습니다. 그렇지 않으면 특정 라우터 모델에 맞게 DNS 서버를 설정하는 방법을 찾아야 합니다.",
|
||||||
"install_devices_windows_list_1": "시작 메뉴 또는 윈도우 검색을 통해 제어판을 여세요",
|
"install_devices_windows_list_1": "시작 메뉴 또는 윈도우 검색을 통해 제어판을 여세요",
|
||||||
"install_devices_windows_list_2": "네트워크 및 인터넷 카테고리로 이동한 다음 네트워크 및 공유 센터로 이동하세요.",
|
"install_devices_windows_list_2": "네트워크 및 인터넷 카테고리로 이동한 다음 네트워크 및 공유 센터로 이동하세요.",
|
||||||
"install_devices_windows_list_3": "화면 왼쪽에서 어댑터 설정 변경을 찾아 클릭하세요.",
|
"install_devices_windows_list_3": "화면 왼쪽에서 어댑터 설정 변경을 찾아 클릭하세요.",
|
||||||
@ -370,7 +377,7 @@
|
|||||||
"dns_status_error": "DNS 서버 상태를 가져오는 도중 오류가 발생했습니다",
|
"dns_status_error": "DNS 서버 상태를 가져오는 도중 오류가 발생했습니다",
|
||||||
"down": "다운로드",
|
"down": "다운로드",
|
||||||
"fix": "수정",
|
"fix": "수정",
|
||||||
"dns_providers": "여기에 선택가능한 DNS 목록 </0>이 있습니다.",
|
"dns_providers": "다음은 선택할 수 있는 <0>알려진 DNS 공급자 목록</0>입니다.",
|
||||||
"update_now": "지금 업데이트",
|
"update_now": "지금 업데이트",
|
||||||
"update_failed": "자동 업데이트 실패 되었습니다. <a> 단계를 따라 수동으로 업데이트하세요</a>",
|
"update_failed": "자동 업데이트 실패 되었습니다. <a> 단계를 따라 수동으로 업데이트하세요</a>",
|
||||||
"processing_update": "잠시만 기다려주세요, AdGuard Home가 업데이트 중입니다.",
|
"processing_update": "잠시만 기다려주세요, AdGuard Home가 업데이트 중입니다.",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "클라이언트 수정",
|
"client_edit": "클라이언트 수정",
|
||||||
"client_identifier": "식별자",
|
"client_identifier": "식별자",
|
||||||
"ip_address": "IP 주소",
|
"ip_address": "IP 주소",
|
||||||
"client_identifier_desc": "사용자는 IP 주소 또는 MAC 주소로 식별할 수 있지만 AdGuard Home이 <0>DHCP 서버인 </0> 경우에만 사용자는 MAC 주소로 식별할 수 있습니다.",
|
"client_identifier_desc": "클라이언트는 IP 주소, CIDR, MAC 주소 또는 특수 클라이언트 ID로 식별할 수 있습니다 (DoT/DoH/DoQ에 사용 가능). <0>여기에서</0> 클라이언트를 식별하는 방법에 대한 자세한 내용은 확인하실 수 있습니다.",
|
||||||
"form_enter_ip": "IP 입력",
|
"form_enter_ip": "IP 입력",
|
||||||
"form_enter_mac": "MAC 입력",
|
"form_enter_mac": "MAC 입력",
|
||||||
"form_enter_id": "식별자 입력",
|
"form_enter_id": "식별자 입력",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> <1>DNS-over-HTTPS</1> 지원합니다.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> <1>DNS-over-HTTPS</1> 지원합니다.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0><1>DNS-over-HTTPS</1>지원합니다.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0><1>DNS-over-HTTPS</1>지원합니다.",
|
||||||
"setup_dns_privacy_other_5": "<0>이곳이나</0> <1>이곳을</1> 클릭하여 더 많은 구현에 대한 정보를 확인하세요.",
|
"setup_dns_privacy_other_5": "<0>이곳이나</0> <1>이곳을</1> 클릭하여 더 많은 구현에 대한 정보를 확인하세요.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "iOS 및 macOS 설정",
|
||||||
"setup_dns_notice": "<1>DNS-over-HTTPS</1> 또는 <1>DNS-over-TLS를</1> 사용하려면 AdGuard Home 설정에서 <0>암호화를 구성해야 합니다.</0>",
|
"setup_dns_notice": "<1>DNS-over-HTTPS</1> 또는 <1>DNS-over-TLS를</1> 사용하려면 AdGuard Home 설정에서 <0>암호화를 구성해야 합니다.</0>",
|
||||||
"rewrite_added": "\"{{key}}\"에 대한 DNS 수정 정보를 성공적으로 추가 됩니다.",
|
"rewrite_added": "\"{{key}}\"에 대한 DNS 수정 정보를 성공적으로 추가 됩니다.",
|
||||||
"rewrite_deleted": "\"{{key}}\"에 대한 DNS 수정 정보를 성공적으로 삭제 됩니다.",
|
"rewrite_deleted": "\"{{key}}\"에 대한 DNS 수정 정보를 성공적으로 삭제 됩니다.",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP 주소: {{ip}}",
|
"check_ip": "IP 주소: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "이유: {{reason}}",
|
"check_reason": "이유: {{reason}}",
|
||||||
"check_rule": "규칙: {{rule}}",
|
|
||||||
"check_service": "서비스 이름: {{service}}",
|
"check_service": "서비스 이름: {{service}}",
|
||||||
"service_name": "서비스 이름",
|
"service_name": "서비스 이름",
|
||||||
"check_not_found": "필터 목록에서 찾을 수 없음",
|
"check_not_found": "필터 목록에서 찾을 수 없음",
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
"parallel_requests": "Parallelle verzoeken",
|
"parallel_requests": "Parallelle verzoeken",
|
||||||
"load_balancing": "Volume balanceren",
|
"load_balancing": "Volume balanceren",
|
||||||
"load_balancing_desc": "Eén server per keer bevragen. AdGuard Home gebruikt hiervoor een gewogen willekeurig algoritme om de server te kiezen zodat de snelste server meer zal gebruikt worden.",
|
"load_balancing_desc": "Eén server per keer bevragen. AdGuard Home gebruikt hiervoor een gewogen willekeurig algoritme om de server te kiezen zodat de snelste server meer zal gebruikt worden.",
|
||||||
"bootstrap_dns": "Bootstrap DNS servers",
|
"bootstrap_dns": "Bootstrap DNS-servers",
|
||||||
"bootstrap_dns_desc": "Bootstrap DNS-servers worden gebruikt om IP-adressen op te lossen van de DoH / DoT-resolvers die u opgeeft als upstreams.",
|
"bootstrap_dns_desc": "Bootstrap DNS-servers worden gebruikt om IP-adressen op te lossen van de DoH / DoT-resolvers die u opgeeft als upstreams.",
|
||||||
"check_dhcp_servers": "Zoek achter DHCP servers",
|
"check_dhcp_servers": "Zoek achter DHCP servers",
|
||||||
"save_config": "Configuratie opslaan",
|
"save_config": "Configuratie opslaan",
|
||||||
@ -23,7 +23,7 @@
|
|||||||
"dhcp_leases": "DHCP lease overzicht",
|
"dhcp_leases": "DHCP lease overzicht",
|
||||||
"dhcp_static_leases": "DHCP statische lease",
|
"dhcp_static_leases": "DHCP statische lease",
|
||||||
"dhcp_leases_not_found": "Geen DHCP lease gevonden",
|
"dhcp_leases_not_found": "Geen DHCP lease gevonden",
|
||||||
"dhcp_config_saved": "DHCP server configuratie opgeslagen",
|
"dhcp_config_saved": "DHCP configuratie succesvol opgeslagen",
|
||||||
"dhcp_ipv4_settings": "DHCP IPv4 instellingen",
|
"dhcp_ipv4_settings": "DHCP IPv4 instellingen",
|
||||||
"dhcp_ipv6_settings": "DHCP IPv6 instellingen",
|
"dhcp_ipv6_settings": "DHCP IPv6 instellingen",
|
||||||
"form_error_required": "Vereist veld",
|
"form_error_required": "Vereist veld",
|
||||||
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Ongeldig IPv4 formaat",
|
"form_error_ip_format": "Ongeldig IPv4 formaat",
|
||||||
"form_error_mac_format": "Ongeldig MAC formaat.",
|
"form_error_mac_format": "Ongeldig MAC formaat.",
|
||||||
"form_error_client_id_format": "Opmaak cliënt-ID is ongeldig",
|
"form_error_client_id_format": "Opmaak cliënt-ID is ongeldig",
|
||||||
|
"form_error_server_name": "Ongeldige servernaam",
|
||||||
"form_error_positive": "Moet groter zijn dan 0",
|
"form_error_positive": "Moet groter zijn dan 0",
|
||||||
"form_error_negative": "Moet 0 of hoger dan 0 zijn",
|
"form_error_negative": "Moet 0 of hoger dan 0 zijn",
|
||||||
"range_end_error": "Moet groter zijn dan het startbereik",
|
"range_end_error": "Moet groter zijn dan het startbereik",
|
||||||
@ -132,8 +133,8 @@
|
|||||||
"custom_filtering_rules": "Aangepaste filter regels",
|
"custom_filtering_rules": "Aangepaste filter regels",
|
||||||
"encryption_settings": "Encryptie Instellingen",
|
"encryption_settings": "Encryptie Instellingen",
|
||||||
"dhcp_settings": "DHCP Instellingen",
|
"dhcp_settings": "DHCP Instellingen",
|
||||||
"upstream_dns": "Upstream DNS servers",
|
"upstream_dns": "Upstream DNS-servers",
|
||||||
"upstream_dns_help": "Server adressen invoeren, een per regel. <a>Meer weten</a> over het configureren van upstream DNS servers.",
|
"upstream_dns_help": "Server adressen invoeren, een per regel. <a>Meer weten</a> over het configureren van upstream DNS-servers.",
|
||||||
"upstream_dns_configured_in_file": "Geconfigureerd in {{path}}",
|
"upstream_dns_configured_in_file": "Geconfigureerd in {{path}}",
|
||||||
"test_upstream_btn": "Test upstream",
|
"test_upstream_btn": "Test upstream",
|
||||||
"upstreams": "Upstreams",
|
"upstreams": "Upstreams",
|
||||||
@ -186,15 +187,15 @@
|
|||||||
"example_comment_hash": "# Nog een opmerking",
|
"example_comment_hash": "# Nog een opmerking",
|
||||||
"example_regex_meaning": "blokkeer de toegang tot de domeinen die overeenkomen met de opgegeven reguliere expressie",
|
"example_regex_meaning": "blokkeer de toegang tot de domeinen die overeenkomen met de opgegeven reguliere expressie",
|
||||||
"example_upstream_regular": "standaard DNS (over UDP)",
|
"example_upstream_regular": "standaard DNS (over UDP)",
|
||||||
"example_upstream_dot": "versleutelde <0>DNS_over_TLS</0>",
|
"example_upstream_dot": "versleutelde <0>DNS-via-TLS</0>",
|
||||||
"example_upstream_doh": "versleutelde <0>DNS_over_HTTPS</0>",
|
"example_upstream_doh": "versleutelde <0>DNS-via-HTTPS</0>",
|
||||||
"example_upstream_doq": "versleutelde <0>DNS-via-QUIC</0>",
|
"example_upstream_doq": "versleutelde <0>DNS-via-QUIC</0>",
|
||||||
"example_upstream_sdns": "je kunt <0>DNS Stamps</0> voor <1>DNSCrypt</1> of <2>DNS-over-HTTPS</2> resolvers",
|
"example_upstream_sdns": "je kunt <0>DNS Stamps</0> voor <1>DNSCrypt</1> of <2>DNS-via-HTTPS</2> oplossingen gebruiken",
|
||||||
"example_upstream_tcp": "standaard DNS (over TCP)",
|
"example_upstream_tcp": "standaard DNS (over TCP)",
|
||||||
"all_lists_up_to_date_toast": "Alle lijsten zijn reeds up-to-date",
|
"all_lists_up_to_date_toast": "Alle lijsten zijn reeds up-to-date",
|
||||||
"updated_upstream_dns_toast": "De upstream DNS-servers zijn bijgewerkt",
|
"updated_upstream_dns_toast": "De upstream DNS-servers zijn bijgewerkt",
|
||||||
"dns_test_ok_toast": "Opgegeven DNS-servers werken correct",
|
"dns_test_ok_toast": "Opgegeven DNS-servers werken correct",
|
||||||
"dns_test_not_ok_toast": "Server \"{{key}}\": kon niet worden gebruikt, controleer of u het correct hebt geschreven",
|
"dns_test_not_ok_toast": "Server \"{{key}}\": kon niet worden gebruikt, controleer of je het correct hebt geschreven",
|
||||||
"unblock": "Deblokkeren",
|
"unblock": "Deblokkeren",
|
||||||
"block": "Blokkeren",
|
"block": "Blokkeren",
|
||||||
"disallow_this_client": "Toepassing/systeem niet toelaten",
|
"disallow_this_client": "Toepassing/systeem niet toelaten",
|
||||||
@ -212,7 +213,7 @@
|
|||||||
"empty_response_status": "Leeg",
|
"empty_response_status": "Leeg",
|
||||||
"show_all_filter_type": "Toon alles",
|
"show_all_filter_type": "Toon alles",
|
||||||
"show_filtered_type": "Toon gefilterde",
|
"show_filtered_type": "Toon gefilterde",
|
||||||
"no_logs_found": "Geen log bestanden gevonden",
|
"no_logs_found": "Geen logboeken gevonden",
|
||||||
"refresh_btn": "Verversen",
|
"refresh_btn": "Verversen",
|
||||||
"previous_btn": "Vorige",
|
"previous_btn": "Vorige",
|
||||||
"next_btn": "Volgende",
|
"next_btn": "Volgende",
|
||||||
@ -235,8 +236,8 @@
|
|||||||
"query_log_strict_search": "Gebruik dubbele aanhalingstekens voor strikt zoeken",
|
"query_log_strict_search": "Gebruik dubbele aanhalingstekens voor strikt zoeken",
|
||||||
"query_log_retention_confirm": "Weet u zeker dat u de bewaartermijn van het query logboek wilt wijzigen? Als u de intervalwaarde verlaagt, gaan sommige gegevens verloren",
|
"query_log_retention_confirm": "Weet u zeker dat u de bewaartermijn van het query logboek wilt wijzigen? Als u de intervalwaarde verlaagt, gaan sommige gegevens verloren",
|
||||||
"anonymize_client_ip": "Cliënt IP anonimiseren",
|
"anonymize_client_ip": "Cliënt IP anonimiseren",
|
||||||
"anonymize_client_ip_desc": "Het volledige IP-adres van de cliënt niet opnemen in log- en statistiekbestanden",
|
"anonymize_client_ip_desc": "Het volledige IP-adres van de cliënt niet opnemen in logboeken en statistiekbestanden",
|
||||||
"dns_config": "DNS server configuratie",
|
"dns_config": "DNS-server configuratie",
|
||||||
"dns_cache_config": "DNS cache configuratie",
|
"dns_cache_config": "DNS cache configuratie",
|
||||||
"dns_cache_config_desc": "Hier kan de DNS cache geconfigureerd worden",
|
"dns_cache_config_desc": "Hier kan de DNS cache geconfigureerd worden",
|
||||||
"blocking_mode": "Blocking modus",
|
"blocking_mode": "Blocking modus",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "Aangepast IP",
|
"custom_ip": "Aangepast IP",
|
||||||
"blocking_ipv4": "Blokkeren IP4",
|
"blocking_ipv4": "Blokkeren IP4",
|
||||||
"blocking_ipv6": "Blokkeren IP6",
|
"blocking_ipv6": "Blokkeren IP6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-via-HTTPS",
|
"dns_over_https": "DNS-via-HTTPS",
|
||||||
"dns_over_tls": "DNS-via-TLS",
|
"dns_over_tls": "DNS-via-TLS",
|
||||||
|
"dns_over_quic": "DNS-via-QUIC",
|
||||||
|
"client_id": "Apparaat-ID",
|
||||||
|
"client_id_placeholder": "Apparaat-ID invoeren",
|
||||||
|
"client_id_desc": "Verschillende apparaten kunnen worden geïdentificeerd door hun specifiek apparaat-ID. <a>Hier</a> vind je meer informatie over het identificeren van apparaten.",
|
||||||
"download_mobileconfig_doh": ".mobileconfig voor DNS-via-HTTPS downloaden",
|
"download_mobileconfig_doh": ".mobileconfig voor DNS-via-HTTPS downloaden",
|
||||||
"download_mobileconfig_dot": ".mobileconfig voor DNS-via-TLS downloaden",
|
"download_mobileconfig_dot": ".mobileconfig voor DNS-via-TLS downloaden",
|
||||||
|
"download_mobileconfig": "Configuratiebestand downloaden",
|
||||||
"plain_dns": "Gewone DNS",
|
"plain_dns": "Gewone DNS",
|
||||||
"form_enter_rate_limit": "Voer ratio limiet in",
|
"form_enter_rate_limit": "Voer ratio limiet in",
|
||||||
"rate_limit": "Ratio limiet",
|
"rate_limit": "Ratio limiet",
|
||||||
@ -269,19 +276,19 @@
|
|||||||
"source_label": "Bron",
|
"source_label": "Bron",
|
||||||
"found_in_known_domain_db": "Gevonden in de bekende domeingegevensbank.",
|
"found_in_known_domain_db": "Gevonden in de bekende domeingegevensbank.",
|
||||||
"category_label": "Categorie",
|
"category_label": "Categorie",
|
||||||
"rule_label": "Regel",
|
"rule_label": "Regel(s)",
|
||||||
"list_label": "Lijst",
|
"list_label": "Lijst",
|
||||||
"unknown_filter": "Onbekend filter {{filterId}}",
|
"unknown_filter": "Onbekend filter {{filterId}}",
|
||||||
"known_tracker": "Bekende volger",
|
"known_tracker": "Bekende volger",
|
||||||
"install_welcome_title": "Welkom bij AdGuard Home!",
|
"install_welcome_title": "Welkom bij AdGuard Home!",
|
||||||
"install_welcome_desc": "AdGuard Home is een netwerk DNS server die advertenties en trackers blokkeert. Het doel is om jou controle te geven over je gehele netwerk en al je apparaten, en er hoeft geen client-side programma te worden gebruikt.",
|
"install_welcome_desc": "AdGuard Home is een netwerk DNS-server die advertenties en trackers blokkeert. Het doel is om jou controle te geven over je gehele netwerk en al je apparaten, en er hoeft geen client-side programma te worden gebruikt.",
|
||||||
"install_settings_title": "Admin webinterface",
|
"install_settings_title": "Admin webinterface",
|
||||||
"install_settings_listen": "Luister interface",
|
"install_settings_listen": "Luister interface",
|
||||||
"install_settings_port": "Poort",
|
"install_settings_port": "Poort",
|
||||||
"install_settings_interface_link": "De webinterface van AdGuard Home admin is beschikbaar op de volgende adressen:",
|
"install_settings_interface_link": "De webinterface van AdGuard Home admin is beschikbaar op de volgende adressen:",
|
||||||
"form_error_port": "Voer geldige poortwaarde in",
|
"form_error_port": "Voer geldige poortwaarde in",
|
||||||
"install_settings_dns": "DNS server",
|
"install_settings_dns": "DNS-server",
|
||||||
"install_settings_dns_desc": "U moet uw apparaten of router configureren om de DNS-server te gebruiken op de volgende adressen:",
|
"install_settings_dns_desc": "Je moet jouw apparaten of router configureren om de DNS-server te gebruiken op de volgende adressen:",
|
||||||
"install_settings_all_interfaces": "Alle interfaces",
|
"install_settings_all_interfaces": "Alle interfaces",
|
||||||
"install_auth_title": "Authenticatie",
|
"install_auth_title": "Authenticatie",
|
||||||
"install_auth_desc": "Het wordt ten zeerste aanbevolen om wachtwoordverificatie te configureren voor de AdGuard Home admin webinterface. Zelfs als het alleen toegankelijk is in uw lokale netwerk, is het nog steeds belangrijk om het te beschermen tegen onbeperkte toegang.",
|
"install_auth_desc": "Het wordt ten zeerste aanbevolen om wachtwoordverificatie te configureren voor de AdGuard Home admin webinterface. Zelfs als het alleen toegankelijk is in uw lokale netwerk, is het nog steeds belangrijk om het te beschermen tegen onbeperkte toegang.",
|
||||||
@ -301,26 +308,26 @@
|
|||||||
"install_devices_router_list_1": "Open de instellingen pagina voor uw router. Meestal kunt u deze vanuit uw browser openen via een URL (zoals http://192.168.0.1/ of http://192.168.1.1/). Mogelijk wordt u gevraagd om het wachtwoord in te voeren. Als u het niet meer weet, kunt u het wachtwoord vaak opnieuw instellen door op een knop op de router zelf te drukken. Voor sommige routers is een specifieke toepassing vereist, die in dat geval al op uw computer / telefoon moet zijn geïnstalleerd.",
|
"install_devices_router_list_1": "Open de instellingen pagina voor uw router. Meestal kunt u deze vanuit uw browser openen via een URL (zoals http://192.168.0.1/ of http://192.168.1.1/). Mogelijk wordt u gevraagd om het wachtwoord in te voeren. Als u het niet meer weet, kunt u het wachtwoord vaak opnieuw instellen door op een knop op de router zelf te drukken. Voor sommige routers is een specifieke toepassing vereist, die in dat geval al op uw computer / telefoon moet zijn geïnstalleerd.",
|
||||||
"install_devices_router_list_2": "Zoek de DHCP/DNS-instellingen. Zoek naar de DNS-letters naast een veld dat twee of drie reeksen nummers toestaat, elk verdeeld in vier groepen van één tot drie cijfers.",
|
"install_devices_router_list_2": "Zoek de DHCP/DNS-instellingen. Zoek naar de DNS-letters naast een veld dat twee of drie reeksen nummers toestaat, elk verdeeld in vier groepen van één tot drie cijfers.",
|
||||||
"install_devices_router_list_3": "Voer je AdGuard Home server adressen daar in.",
|
"install_devices_router_list_3": "Voer je AdGuard Home server adressen daar in.",
|
||||||
"install_devices_router_list_4": "Je kan de DNS server niet aanpassen op sommige routers. In dat geval kan het een oplossing zijn om AdGuard Home te definiëren als een <0>DHCP server</0>. Je kan ook in de handleiding van je router kijken hoe je een DNS server aanpast.",
|
"install_devices_router_list_4": "Je kan de DNS-server niet aanpassen op sommige routers. In dat geval kan het een oplossing zijn om AdGuard Home te definiëren als een <0>DHCP-server</0>. Je kan ook in de handleiding van je router kijken hoe je een DNS-server aanpast.",
|
||||||
"install_devices_windows_list_1": "Open het Configuratiescherm via het menu Start of Windows zoeken.",
|
"install_devices_windows_list_1": "Open het Configuratiescherm via het menu Start of Windows zoeken.",
|
||||||
"install_devices_windows_list_2": "Ga naar de categorie Netwerk en Internet en vervolgens naar Netwerkcentrum.",
|
"install_devices_windows_list_2": "Ga naar de categorie Netwerk en Internet en vervolgens naar Netwerkcentrum.",
|
||||||
"install_devices_windows_list_3": "Zoek aan de linkerkant van het scherm Adapter-instellingen wijzigen en klik erop.",
|
"install_devices_windows_list_3": "Zoek aan de linkerkant van het scherm Adapter-instellingen wijzigen en klik erop.",
|
||||||
"install_devices_windows_list_4": "Selecteer jouw actieve verbinding, klik er met de rechtermuisknop op en kies Eigenschappen.",
|
"install_devices_windows_list_4": "Selecteer jouw actieve verbinding, klik er met de rechtermuisknop op en kies Eigenschappen.",
|
||||||
"install_devices_windows_list_5": "Zoek Internet Protocol versie 4 (TCP / IP) in de lijst, selecteer het en klik vervolgens opnieuw op Eigenschappen.",
|
"install_devices_windows_list_5": "Zoek Internet Protocol versie 4 (TCP / IP) in de lijst, selecteer het en klik vervolgens opnieuw op Eigenschappen.",
|
||||||
"install_devices_windows_list_6": "Kies Gebruik de volgende DNS-serveradressen en voer uw AdGuard Home-serveradressen in.",
|
"install_devices_windows_list_6": "Kies Gebruik de volgende DNS-server adressen en voer jouw AdGuard Home server adressen in.",
|
||||||
"install_devices_macos_list_1": "Klik op het Apple-pictogram en ga naar Systeemvoorkeuren.",
|
"install_devices_macos_list_1": "Klik op het Apple-pictogram en ga naar Systeemvoorkeuren.",
|
||||||
"install_devices_macos_list_2": "Klik op Netwerk.",
|
"install_devices_macos_list_2": "Klik op Netwerk.",
|
||||||
"install_devices_macos_list_3": "Selecteer de eerste verbinding in jouw lijst en klik op Geavanceerd.",
|
"install_devices_macos_list_3": "Selecteer de eerste verbinding in jouw lijst en klik op Geavanceerd.",
|
||||||
"install_devices_macos_list_4": "Selecteer het tabblad DNS en voer uw AdGuard Home-serveradressen in.",
|
"install_devices_macos_list_4": "Selecteer het tabblad DNS en voer jouw AdGuard Home server adressen in.",
|
||||||
"install_devices_android_list_1": "Tik op het startscherm van het Android-menu op Instellingen.",
|
"install_devices_android_list_1": "Tik op het startscherm van het Android-menu op Instellingen.",
|
||||||
"install_devices_android_list_2": "Tik op wifi in het menu. Het scherm met alle beschikbare netwerken wordt getoond (het is niet mogelijk om een aangepaste DNS in te stellen voor een mobiele verbinding).",
|
"install_devices_android_list_2": "Tik op wifi in het menu. Het scherm met alle beschikbare netwerken wordt getoond (het is niet mogelijk om een aangepaste DNS in te stellen voor een mobiele verbinding).",
|
||||||
"install_devices_android_list_3": "Druk lang op het netwerk waarmee je bent verbonden en tik op Netwerk instellingen aanpassen.",
|
"install_devices_android_list_3": "Druk lang op het netwerk waarmee je bent verbonden en tik op Netwerk instellingen aanpassen.",
|
||||||
"install_devices_android_list_4": "Op sommige apparaten moet u het vakje aanvinken voor Geavanceerd om verdere instellingen te bekijken. Om uw Android DNS-instellingen aan te passen, moet u de IP-instellingen wijzigen van DHCP in Statisch.",
|
"install_devices_android_list_4": "Op sommige apparaten moet u het vakje aanvinken voor Geavanceerd om verdere instellingen te bekijken. Om uw Android DNS-instellingen aan te passen, moet u de IP-instellingen wijzigen van DHCP in Statisch.",
|
||||||
"install_devices_android_list_5": "Wijzig de DNS 1-waarden en DNS 2-waarden in uw AdGuard Home-serveradressen.",
|
"install_devices_android_list_5": "Wijzig de DNS 1-waarden en DNS 2-waarden in jouw AdGuard Home server adressen.",
|
||||||
"install_devices_ios_list_1": "Tik op het startscherm op Instellingen.",
|
"install_devices_ios_list_1": "Tik op het startscherm op Instellingen.",
|
||||||
"install_devices_ios_list_2": "Kies Wi-Fi in het linkermenu (DNS kan niet worden geconfigureerd voor mobiele netwerken).",
|
"install_devices_ios_list_2": "Kies Wi-Fi in het linkermenu (DNS kan niet worden geconfigureerd voor mobiele netwerken).",
|
||||||
"install_devices_ios_list_3": "Tik op de naam van het momenteel actieve netwerk.",
|
"install_devices_ios_list_3": "Tik op de naam van het momenteel actieve netwerk.",
|
||||||
"install_devices_ios_list_4": "Voer in het DNS-veld uw AdGuard Home-serveradressen in.",
|
"install_devices_ios_list_4": "Voer in het DNS veld jouw AdGuard Home server adressen in.",
|
||||||
"get_started": "Beginnen",
|
"get_started": "Beginnen",
|
||||||
"next": "Volgende",
|
"next": "Volgende",
|
||||||
"open_dashboard": "Open Dashboard",
|
"open_dashboard": "Open Dashboard",
|
||||||
@ -330,13 +337,13 @@
|
|||||||
"encryption_config_saved": "Encryptie configuratie opgeslagen",
|
"encryption_config_saved": "Encryptie configuratie opgeslagen",
|
||||||
"encryption_server": "Server naam",
|
"encryption_server": "Server naam",
|
||||||
"encryption_server_enter": "Voer domein naam in",
|
"encryption_server_enter": "Voer domein naam in",
|
||||||
"encryption_server_desc": "Om HTTPS te gebruiken, voer de naam in van de server overeenkomstig met het SSL certificaat.",
|
"encryption_server_desc": "Om HTTPS te gebruiken, moet je de servernaam invoeren die overeenkomt met je SSL-certificaat of jokerteken-certificaat. Als het veld niet is ingesteld, accepteert het TLS-verbindingen voor elk domein.",
|
||||||
"encryption_redirect": "Herleid automatisch naar HTTPS",
|
"encryption_redirect": "Herleid automatisch naar HTTPS",
|
||||||
"encryption_redirect_desc": "Indien ingeschakeld, zal AdGuard Home je automatisch herleiden van HTTP naar HTTPS.",
|
"encryption_redirect_desc": "Indien ingeschakeld, zal AdGuard Home je automatisch herleiden van HTTP naar HTTPS.",
|
||||||
"encryption_https": "HTTPS poort",
|
"encryption_https": "HTTPS poort",
|
||||||
"encryption_https_desc": "Als de HTTPS-poort is geconfigureerd, is de AdGuard Home beheerders interface toegankelijk via HTTPS en biedt deze ook DNS-over-HTTPS op de locatie '/ dns-query'.",
|
"encryption_https_desc": "Als de HTTPS-poort is geconfigureerd, is de AdGuard Home beheerders interface toegankelijk via HTTPS en biedt deze ook DNS-via-HTTPS op de locatie '/ dns-query'.",
|
||||||
"encryption_dot": "DNS-over-TLS poort",
|
"encryption_dot": "DNS-via-TLS poort",
|
||||||
"encryption_dot_desc": "Indien deze poort is geconfigureerd, zal AdGuard Home gebruik maken van een DNS-over-TLS server via deze poort.",
|
"encryption_dot_desc": "Indien deze poort is geconfigureerd, zal AdGuard Home gebruik maken van een DNS-via-TLS server via deze poort.",
|
||||||
"encryption_doq": "DNS-via-QUIC poort",
|
"encryption_doq": "DNS-via-QUIC poort",
|
||||||
"encryption_doq_desc": "Als deze poort is geconfigureerd, zal AdGuard Home een DNS-via-QUIC server gebruiken via deze poort. Dit is experimenteel en kan onbetrouwbaar zijn. Er zijn overigens nog niet veel systemen die dit nu al ondersteunen.",
|
"encryption_doq_desc": "Als deze poort is geconfigureerd, zal AdGuard Home een DNS-via-QUIC server gebruiken via deze poort. Dit is experimenteel en kan onbetrouwbaar zijn. Er zijn overigens nog niet veel systemen die dit nu al ondersteunen.",
|
||||||
"encryption_certificates": "Certificaten",
|
"encryption_certificates": "Certificaten",
|
||||||
@ -346,8 +353,8 @@
|
|||||||
"encryption_expire": "Verloopt",
|
"encryption_expire": "Verloopt",
|
||||||
"encryption_key": "Prive sleutel",
|
"encryption_key": "Prive sleutel",
|
||||||
"encryption_key_input": "Kopieër en plak je PEM-gecodeerde prive sleutel voor je certificaat hier.",
|
"encryption_key_input": "Kopieër en plak je PEM-gecodeerde prive sleutel voor je certificaat hier.",
|
||||||
"encryption_enable": "Activeer encryptie (HTTPS, DNS-over-HTTPS, en DNS-over-TLS)",
|
"encryption_enable": "Activeer encryptie (HTTPS, DNS-via-HTTPS, en DNS-via-TLS)",
|
||||||
"encryption_enable_desc": "Als encryptie is geactiveerd, is de AdGuard Home beheerders interface toegankelijk via HTTPS en de DNS-server zal luisteren naar aanvragen via DNS-over-HTTPS en DNS-over-TLS.",
|
"encryption_enable_desc": "Als encryptie is geactiveerd, is de AdGuard Home beheerders interface toegankelijk via HTTPS en de DNS-server zal luisteren naar aanvragen via DNS-via-HTTPS en DNS-via-TLS.",
|
||||||
"encryption_chain_valid": "certificaatketen is geldig",
|
"encryption_chain_valid": "certificaatketen is geldig",
|
||||||
"encryption_chain_invalid": "certificaatketen is ongeldig",
|
"encryption_chain_invalid": "certificaatketen is ongeldig",
|
||||||
"encryption_key_valid": "Dit is een geldig {{type}} privé sleutel",
|
"encryption_key_valid": "Dit is een geldig {{type}} privé sleutel",
|
||||||
@ -366,8 +373,8 @@
|
|||||||
"update_announcement": "AdGuard Home{{version}} is nu beschikbaar! <0>klik hier</0> voor meer info.",
|
"update_announcement": "AdGuard Home{{version}} is nu beschikbaar! <0>klik hier</0> voor meer info.",
|
||||||
"setup_guide": "Installatie gids",
|
"setup_guide": "Installatie gids",
|
||||||
"dns_addresses": "DNS adressen",
|
"dns_addresses": "DNS adressen",
|
||||||
"dns_start": "DNS server aan het opstarten",
|
"dns_start": "DNS-server aan het opstarten",
|
||||||
"dns_status_error": "Fout bij het oproepen van de DNS server status",
|
"dns_status_error": "Fout bij het oproepen van de DNS-server status",
|
||||||
"down": "Uitgeschakeld",
|
"down": "Uitgeschakeld",
|
||||||
"fix": "Los op",
|
"fix": "Los op",
|
||||||
"dns_providers": "hier is een <0>lijst of gekende DNS providers</0> waarvan je kan kiezen.",
|
"dns_providers": "hier is een <0>lijst of gekende DNS providers</0> waarvan je kan kiezen.",
|
||||||
@ -380,13 +387,13 @@
|
|||||||
"settings_custom": "Aangepast",
|
"settings_custom": "Aangepast",
|
||||||
"table_client": "Gebruiker",
|
"table_client": "Gebruiker",
|
||||||
"table_name": "Naam",
|
"table_name": "Naam",
|
||||||
"save_btn": "Bewaar",
|
"save_btn": "Opslaan",
|
||||||
"client_add": "Voeg gebruiker toe",
|
"client_add": "Voeg gebruiker toe",
|
||||||
"client_new": "Nieuwe gebruiker",
|
"client_new": "Nieuwe gebruiker",
|
||||||
"client_edit": "Wijzig gebruiker",
|
"client_edit": "Wijzig gebruiker",
|
||||||
"client_identifier": "Identificeer via",
|
"client_identifier": "Identificeer via",
|
||||||
"ip_address": "IP adres",
|
"ip_address": "IP adres",
|
||||||
"client_identifier_desc": "Gebruikers kunnen worden geïdentificeerd door het IP-adres, CIDR of MAC-adres. Hou er rekening mee dat het gebruik van MAC als ID alleen mogelijk is als AdGuard Home ook een <0>DHCP-server</0> is",
|
"client_identifier_desc": "Apparaten kunnen worden geïdentificeerd door hun IP-adres, CIDR, MAC-adres of een speciaal apparaat-ID (kan gebruikt worden voor DoT/DoH/DoQ). <0>Hier</0> kan je meer lezen over het identificeren van apparaten.",
|
||||||
"form_enter_ip": "Vul IP in",
|
"form_enter_ip": "Vul IP in",
|
||||||
"form_enter_mac": "Vul MAC in",
|
"form_enter_mac": "Vul MAC in",
|
||||||
"form_enter_id": "ID invoeren",
|
"form_enter_id": "ID invoeren",
|
||||||
@ -403,34 +410,35 @@
|
|||||||
"auto_clients_title": "Gebruikers (runtime)",
|
"auto_clients_title": "Gebruikers (runtime)",
|
||||||
"auto_clients_desc": "Data over gebruikers die AdGuard Home gebruiken, maar niet geconfigureerd zijn",
|
"auto_clients_desc": "Data over gebruikers die AdGuard Home gebruiken, maar niet geconfigureerd zijn",
|
||||||
"access_title": "Toegangs instellingen",
|
"access_title": "Toegangs instellingen",
|
||||||
"access_desc": "Hier kan je toegangsregels voor de AdGuard Home DNS server instellen.",
|
"access_desc": "Hier kan je toegangsregels voor de AdGuard Home DNS-server instellen.",
|
||||||
"access_allowed_title": "Toegestane gebruikers",
|
"access_allowed_title": "Toegestane gebruikers",
|
||||||
"access_allowed_desc": "Een lijst van CIDR of IP adressen. Indien ingesteld, zal AdGuard Home alleen van deze IP adressen aanvragen accepteren.",
|
"access_allowed_desc": "Een lijst van CIDR of IP adressen. Indien ingesteld, zal AdGuard Home alleen van deze IP adressen aanvragen accepteren.",
|
||||||
"access_disallowed_title": "Verworpen gebruikers",
|
"access_disallowed_title": "Verworpen gebruikers",
|
||||||
"access_disallowed_desc": "Een lijst van CIDR of IP adressen. Indien ingesteld, zal AdGuard Home aanvragen van deze IP adressen verwerpen.",
|
"access_disallowed_desc": "Een lijst van CIDR of IP adressen. Indien ingesteld, zal AdGuard Home aanvragen van deze IP adressen verwerpen.",
|
||||||
"access_blocked_title": "Niet toegelaten domeinen",
|
"access_blocked_title": "Niet toegelaten domeinen",
|
||||||
"access_blocked_desc": "Verwar dit niet met filters. AdGuard Home zal deze DNS-zoekopdrachten niet uitvoeren die deze domeinen in de zoekopdracht bevatten. Hier kan je de domeinnamen, wildcards en url-filter-regels specifiëren, bijv. 'example.org', '*.example.org' or '||example.org^'.",
|
"access_blocked_desc": "Verwar dit niet met filters. AdGuard Home zal deze DNS-zoekopdrachten niet uitvoeren die deze domeinen in de zoekopdracht bevatten. Hier kan je de domeinnamen, wildcards en url-filter-regels specifiëren, bijv. 'example.org', '*.example.org' or '||example.org^'.",
|
||||||
"access_settings_saved": "Toegangsinstellingen met succes opgeslagen",
|
"access_settings_saved": "Toegangsinstellingen succesvol opgeslagen",
|
||||||
"updates_checked": "Met succes op updates gecontroleerd",
|
"updates_checked": "Met succes op updates gecontroleerd",
|
||||||
"updates_version_equal": "AdGuard Home is up-to-date",
|
"updates_version_equal": "AdGuard Home is up-to-date",
|
||||||
"check_updates_now": "Controleer op updates",
|
"check_updates_now": "Controleer op updates",
|
||||||
"dns_privacy": "DNS Privacy",
|
"dns_privacy": "DNS Privacy",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Gebruik <1>{{address}}</1> string.",
|
"setup_dns_privacy_1": "<0>DNS-via-TLS:</0> Gebruik <1>{{address}}</1> string.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Gebruik <1>{{address}}</1> string.",
|
"setup_dns_privacy_2": "<0>DNS-via-HTTPS:</0> Gebruik <1>{{address}}</1> string.",
|
||||||
"setup_dns_privacy_3": "<0>Hou er rekening mee dat het beveiligde DNS protocol alleen beschikbaar is voor Android 9. U moet dus extra software installeren voor andere besturingssystemen.</0><0>Hier is een lijst van te gebruiken software.</0>",
|
"setup_dns_privacy_3": "<0>Hou er rekening mee dat het beveiligde DNS protocol alleen beschikbaar is voor Android 9. U moet dus extra software installeren voor andere besturingssystemen.</0><0>Hier is een lijst van te gebruiken software.</0>",
|
||||||
"setup_dns_privacy_4": "Op een iOS 14 of macOS Big Sur apparaat kan je een speciaal '.mobileconfig'-bestand downloaden dat <highlight>DNS-via-HTTPS</highlight> of <highlight>DNS-via-TLS</highlight> servers aan de DNS-instellingen toevoegt.",
|
"setup_dns_privacy_4": "Op een iOS 14 of macOS Big Sur apparaat kan je een speciaal '.mobileconfig'-bestand downloaden dat <highlight>DNS-via-HTTPS</highlight> of <highlight>DNS-via-TLS</highlight> servers aan de DNS-instellingen toevoegt.",
|
||||||
"setup_dns_privacy_android_1": "Android 9 ondersteunt native DNS-over-TLS. Om het te configureren, ga naar Instellingen → Netwerk & internet → Geavanceerd → Privé DNS en voer daar uw domeinnaam in.",
|
"setup_dns_privacy_android_1": "Android 9 ondersteunt native DNS-via-TLS. Om het te configureren, ga naar Instellingen → Netwerk & internet → Geavanceerd → Privé DNS en voer daar je domeinnaam in.",
|
||||||
"setup_dns_privacy_android_2": "<0>AdGuard voor Android</0>ondersteunt<1>DNS-over-HTTPS </1>en<1>DNS-over-TLS</1>.",
|
"setup_dns_privacy_android_2": "<0>AdGuard voor Android</0>ondersteunt<1>DNS-via-HTTPS </1>en<1>DNS-via-TLS</1>.",
|
||||||
"setup_dns_privacy_android_3": "<0> Intra </0> voegt <1> DNS-over-HTTPS</1> ondersteuning toe aan Android.",
|
"setup_dns_privacy_android_3": "<0> Intra </0> voegt <1> DNS-via-HTTPS</1> ondersteuning toe aan Android.",
|
||||||
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> ondersteunt <1> DNS-over-HTTPS </1>, maar om het te configureren om op uw eigen server te gebruiken moet er een <2> DNS-stempel </2> gegenereerd worden.",
|
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> ondersteunt <1> DNS-via-HTTPS </1>, maar om het te configureren op jouw eigen server moet er een <2> DNS-stempel </2> gegenereerd worden.",
|
||||||
"setup_dns_privacy_ios_2": "<0> AdGuard voor iOS </0> ondersteunt de instellingen <1> DNS-over-HTTPS </1> en <1> DNS-over-TLS </1>.",
|
"setup_dns_privacy_ios_2": "<0> AdGuard voor iOS </0> ondersteunt de instellingen <1> DNS-via-HTTPS </1> en <1> DNS-via-TLS </1>.",
|
||||||
"setup_dns_privacy_other_title": "Overig gebruik",
|
"setup_dns_privacy_other_title": "Overig gebruik",
|
||||||
"setup_dns_privacy_other_1": "AdGuard Home kan op elk platform een veilige DNS-client zijn.",
|
"setup_dns_privacy_other_1": "AdGuard Home kan op elk platform een veilige DNS-client zijn.",
|
||||||
"setup_dns_privacy_other_2": "<0>dnsproxy</0> ondersteunt alle bekende beveiligde DNS-protocollen.",
|
"setup_dns_privacy_other_2": "<0>dnsproxy</0> ondersteunt alle bekende beveiligde DNS-protocollen.",
|
||||||
"setup_dns_privacy_other_3": "<0> dnscrypt-proxy </0> ondersteunt <1> DNS-over-HTTPS </1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> ondersteunt <1>DNS-via-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0> Mozilla Firefox </0> ondersteunt <1> DNS-over-HTTPS </1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> ondersteunt <1>DNS-via-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "U vindt meer implementaties <0> hier </0> en <1> hier </1>.",
|
"setup_dns_privacy_other_5": "U vindt meer implementaties <0> hier </0> en <1> hier </1>.",
|
||||||
"setup_dns_notice": "Om <1> DNS-over-HTTPS </1> of <1> DNS-over-TLS </1> te gebruiken, moet u <0> Codering </0> configureren in de AdGuard Home-instellingen.",
|
"setup_dns_privacy_ioc_mac": "iOS en macOS configuratie",
|
||||||
|
"setup_dns_notice": "Om <1>DNS-via-HTTPS</1> of <1>DNS-via-TLS</1> te gebruiken, moet je <0>Versleuteling configureren</0> in de AdGuard Home instellingen.",
|
||||||
"rewrite_added": "DNS-herschrijving voor \"{{key}}\" met succes toegevoegd",
|
"rewrite_added": "DNS-herschrijving voor \"{{key}}\" met succes toegevoegd",
|
||||||
"rewrite_deleted": "DNS-herschrijving voor \"{{key}}\" met succes verwijderd",
|
"rewrite_deleted": "DNS-herschrijving voor \"{{key}}\" met succes verwijderd",
|
||||||
"rewrite_add": "DNS-herschrijving toevoegen",
|
"rewrite_add": "DNS-herschrijving toevoegen",
|
||||||
@ -511,8 +519,8 @@
|
|||||||
"disable_ipv6": "Zet IPv6 uit",
|
"disable_ipv6": "Zet IPv6 uit",
|
||||||
"disable_ipv6_desc": "Als deze functie is ingeschakeld, worden alle DNS-query's voor IPv6-adressen (type AAAA) verwijderd.",
|
"disable_ipv6_desc": "Als deze functie is ingeschakeld, worden alle DNS-query's voor IPv6-adressen (type AAAA) verwijderd.",
|
||||||
"fastest_addr": "Snelste IP adres",
|
"fastest_addr": "Snelste IP adres",
|
||||||
"fastest_addr_desc": "Alle DNS servers bevragen en het snelste IP adres terugkoppelen. Dit zal de DNS verzoeken vertragen omdat we moeten wachten op de antwoorden van alles DNS servers, maar verbetert wel de connectiviteit.",
|
"fastest_addr_desc": "Alle DNS-servers bevragen en het snelste IP adres terugkoppelen. Dit zal de DNS verzoeken vertragen omdat we moeten wachten op de antwoorden van alles DNS-servers, maar verbetert wel de connectiviteit.",
|
||||||
"autofix_warning_text": "Als je op \"Repareren\" klikt, configureert AdGuard Home uw systeem om de AdGuard Home DNS-server te gebruiken.",
|
"autofix_warning_text": "Als je op \"Repareren\" klikt, configureert AdGuard Home jouw systeem om de AdGuard Home DNS-server te gebruiken.",
|
||||||
"autofix_warning_list": "De volgende taken worden uitgevoerd: <0> Deactiveren van Systeem DNSStubListener</0> <0> DNS-serveradres instellen op 127.0.0.1 </0> <0> Symbolisch koppelingsdoel van /etc/resolv.conf vervangen door /run/systemd/resolve/resolv.conf </0> <0> Stop DNSStubListener (herlaad systemd-resolved service) </0>",
|
"autofix_warning_list": "De volgende taken worden uitgevoerd: <0> Deactiveren van Systeem DNSStubListener</0> <0> DNS-serveradres instellen op 127.0.0.1 </0> <0> Symbolisch koppelingsdoel van /etc/resolv.conf vervangen door /run/systemd/resolve/resolv.conf </0> <0> Stop DNSStubListener (herlaad systemd-resolved service) </0>",
|
||||||
"autofix_warning_result": "Als gevolg hiervan worden alle DNS-verzoeken van je systeem standaard door AdGuard Home verwerkt.",
|
"autofix_warning_result": "Als gevolg hiervan worden alle DNS-verzoeken van je systeem standaard door AdGuard Home verwerkt.",
|
||||||
"tags_title": "Labels",
|
"tags_title": "Labels",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP-adressen: {{ip}}",
|
"check_ip": "IP-adressen: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Reden: {{reason}}",
|
"check_reason": "Reden: {{reason}}",
|
||||||
"check_rule": "Regel: {{rule}}",
|
|
||||||
"check_service": "Servicenaam: {{service}}",
|
"check_service": "Servicenaam: {{service}}",
|
||||||
"service_name": "Naam service",
|
"service_name": "Naam service",
|
||||||
"check_not_found": "Niet in je lijst met filters gevonden",
|
"check_not_found": "Niet in je lijst met filters gevonden",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Ugyldig IPv4-format",
|
"form_error_ip_format": "Ugyldig IPv4-format",
|
||||||
"form_error_mac_format": "Ugyldig MAC-format",
|
"form_error_mac_format": "Ugyldig MAC-format",
|
||||||
"form_error_client_id_format": "Ugyldig ID-klientformat",
|
"form_error_client_id_format": "Ugyldig ID-klientformat",
|
||||||
|
"form_error_server_name": "Ugyldig tjenernavn",
|
||||||
"form_error_positive": "Må være høyere enn 0",
|
"form_error_positive": "Må være høyere enn 0",
|
||||||
"form_error_negative": "Må være ≥0",
|
"form_error_negative": "Må være ≥0",
|
||||||
"range_end_error": "Må være høyere enn rekkeviddens start",
|
"range_end_error": "Må være høyere enn rekkeviddens start",
|
||||||
@ -247,8 +248,11 @@
|
|||||||
"custom_ip": "Tilpasset IP",
|
"custom_ip": "Tilpasset IP",
|
||||||
"blocking_ipv4": "IPv4-blokkering",
|
"blocking_ipv4": "IPv4-blokkering",
|
||||||
"blocking_ipv6": "IPv6-blokkering",
|
"blocking_ipv6": "IPv6-blokkering",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "Klient-ID",
|
||||||
"download_mobileconfig_doh": "Last ned .mobileconfig for DNS-over-HTTPS",
|
"download_mobileconfig_doh": "Last ned .mobileconfig for DNS-over-HTTPS",
|
||||||
"download_mobileconfig_dot": "Last ned .mobileconfig for DNS-over-TLS",
|
"download_mobileconfig_dot": "Last ned .mobileconfig for DNS-over-TLS",
|
||||||
"plain_dns": "Ordinær DNS",
|
"plain_dns": "Ordinær DNS",
|
||||||
@ -259,6 +263,7 @@
|
|||||||
"rate_limit_desc": "Antallet forespørsler per sekund som én enkelt klient har lov til å be om (0: ubegrenset)",
|
"rate_limit_desc": "Antallet forespørsler per sekund som én enkelt klient har lov til å be om (0: ubegrenset)",
|
||||||
"blocking_ipv4_desc": "IP-adressen som det skal svares med for blokkerte A-forespørsler",
|
"blocking_ipv4_desc": "IP-adressen som det skal svares med for blokkerte A-forespørsler",
|
||||||
"blocking_ipv6_desc": "IP-adressen som det skal svares med for blokkerte AAAA-forespørsler",
|
"blocking_ipv6_desc": "IP-adressen som det skal svares med for blokkerte AAAA-forespørsler",
|
||||||
|
"blocking_mode_default": "Standard: Svar med null-IP-adresse (0.0.0.0 for A; :: for AAAA) når den blokkeres av adblock-aktige oppføringer; svar med IP-adressen som er spesifisert i oppføringen når den blokkeres av /etc/hosts-typeoppføringer",
|
||||||
"blocking_mode_refused": "REFUSED: Svar med REFUSED-koden",
|
"blocking_mode_refused": "REFUSED: Svar med REFUSED-koden",
|
||||||
"blocking_mode_nxdomain": "NXDOMAIN: Svar med NXDOMAIN-koden",
|
"blocking_mode_nxdomain": "NXDOMAIN: Svar med NXDOMAIN-koden",
|
||||||
"blocking_mode_null_ip": "Null IP: Svar med en 0-IP-adresse (0.0.0.0 for A; :: for AAAA)",
|
"blocking_mode_null_ip": "Null IP: Svar med en 0-IP-adresse (0.0.0.0 for A; :: for AAAA)",
|
||||||
@ -268,7 +273,6 @@
|
|||||||
"source_label": "Kilde",
|
"source_label": "Kilde",
|
||||||
"found_in_known_domain_db": "Funnet i databasen over kjente domener.",
|
"found_in_known_domain_db": "Funnet i databasen over kjente domener.",
|
||||||
"category_label": "Kategori",
|
"category_label": "Kategori",
|
||||||
"rule_label": "Oppføring",
|
|
||||||
"list_label": "Liste",
|
"list_label": "Liste",
|
||||||
"unknown_filter": "Ukjent filter {{filterId}}",
|
"unknown_filter": "Ukjent filter {{filterId}}",
|
||||||
"known_tracker": "Kjent sporer",
|
"known_tracker": "Kjent sporer",
|
||||||
@ -329,7 +333,6 @@
|
|||||||
"encryption_config_saved": "Krypteringsoppsettet ble lagret",
|
"encryption_config_saved": "Krypteringsoppsettet ble lagret",
|
||||||
"encryption_server": "Tjenerens navn",
|
"encryption_server": "Tjenerens navn",
|
||||||
"encryption_server_enter": "Skriv inn domenenavnet ditt",
|
"encryption_server_enter": "Skriv inn domenenavnet ditt",
|
||||||
"encryption_server_desc": "For å kunne bruke HTTPS, må du skrive inn tjenernavnet som samsvarer med ditt SSL-sertifikat.",
|
|
||||||
"encryption_redirect": "Automatisk omdiriger til HTTPS",
|
"encryption_redirect": "Automatisk omdiriger til HTTPS",
|
||||||
"encryption_redirect_desc": "Dersom dette er valgt, vil AdGuard Home automatisk omdirigere deg fra HTTP til HTTPS-adresser.",
|
"encryption_redirect_desc": "Dersom dette er valgt, vil AdGuard Home automatisk omdirigere deg fra HTTP til HTTPS-adresser.",
|
||||||
"encryption_https": "HTTPS-port",
|
"encryption_https": "HTTPS-port",
|
||||||
@ -385,7 +388,6 @@
|
|||||||
"client_edit": "Rediger klienten",
|
"client_edit": "Rediger klienten",
|
||||||
"client_identifier": "Identifikator",
|
"client_identifier": "Identifikator",
|
||||||
"ip_address": "IP-adresse",
|
"ip_address": "IP-adresse",
|
||||||
"client_identifier_desc": "Klienter kan bli identifisert gjennom IP-adressen eller MAC-adressen. Vennligst bemerk at å bruke MAC som en identifikator, bare er mulig dersom AdGuard Home også er en <0>DHCP-tjener</0>",
|
|
||||||
"form_enter_ip": "Skriv inn IP",
|
"form_enter_ip": "Skriv inn IP",
|
||||||
"form_enter_mac": "Skriv inn MAC",
|
"form_enter_mac": "Skriv inn MAC",
|
||||||
"form_enter_id": "Skriv inn identifikator",
|
"form_enter_id": "Skriv inn identifikator",
|
||||||
@ -416,6 +418,7 @@
|
|||||||
"dns_privacy": "DNS-privatliv",
|
"dns_privacy": "DNS-privatliv",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Benytt <1>{{address}}</1>-strengen.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Benytt <1>{{address}}</1>-strengen.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Benytt <1>{{address}}</1>-strengen.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Benytt <1>{{address}}</1>-strengen.",
|
||||||
|
"setup_dns_privacy_3": "<0>Her er en liste over programvarer du kan bruke.</0>",
|
||||||
"setup_dns_privacy_android_1": "Android 9 har innebygd støtte for DNS-over-TLS. For å sette det opp, gå til Innstillinger → Nettverk og internett → Avansert → Privat DNS, og skriv inn domenenavnet ditt der.",
|
"setup_dns_privacy_android_1": "Android 9 har innebygd støtte for DNS-over-TLS. For å sette det opp, gå til Innstillinger → Nettverk og internett → Avansert → Privat DNS, og skriv inn domenenavnet ditt der.",
|
||||||
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> støtter <1>DNS-over-HTTPS</1> og <1>DNS-over-TLS</1>.",
|
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> støtter <1>DNS-over-HTTPS</1> og <1>DNS-over-TLS</1>.",
|
||||||
"setup_dns_privacy_android_3": "<0>Intra</0> legger til <1>DNS-over-HTTPS</1>-støtte i Android.",
|
"setup_dns_privacy_android_3": "<0>Intra</0> legger til <1>DNS-over-HTTPS</1>-støtte i Android.",
|
||||||
@ -526,7 +529,6 @@
|
|||||||
"check_ip": "IP-adresser: {{ip}}",
|
"check_ip": "IP-adresser: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Årsak: {{reason}}",
|
"check_reason": "Årsak: {{reason}}",
|
||||||
"check_rule": "Oppføring: {{rule}}",
|
|
||||||
"check_service": "Tjenestenavn: {{service}}",
|
"check_service": "Tjenestenavn: {{service}}",
|
||||||
"service_name": "Tjenestenavn",
|
"service_name": "Tjenestenavn",
|
||||||
"check_not_found": "Ikke funnet i filterlistene dine",
|
"check_not_found": "Ikke funnet i filterlistene dine",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Nieprawidłowy format IP",
|
"form_error_ip_format": "Nieprawidłowy format IP",
|
||||||
"form_error_mac_format": "Nieprawidłowy format MAC",
|
"form_error_mac_format": "Nieprawidłowy format MAC",
|
||||||
"form_error_client_id_format": "Nieprawidłowy format identyfikatora klienta",
|
"form_error_client_id_format": "Nieprawidłowy format identyfikatora klienta",
|
||||||
|
"form_error_server_name": "Nieprawidłowa nazwa serwera",
|
||||||
"form_error_positive": "Musi być większa niż 0",
|
"form_error_positive": "Musi być większa niż 0",
|
||||||
"form_error_negative": "Musi być równy 0 lub większy",
|
"form_error_negative": "Musi być równy 0 lub większy",
|
||||||
"range_end_error": "Zakres musi być większy niż początkowy",
|
"range_end_error": "Zakres musi być większy niż początkowy",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "Niestandardowy adres IP",
|
"custom_ip": "Niestandardowy adres IP",
|
||||||
"blocking_ipv4": "Blokowanie IPv4",
|
"blocking_ipv4": "Blokowanie IPv4",
|
||||||
"blocking_ipv6": "Blokowanie IPv6",
|
"blocking_ipv6": "Blokowanie IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "ID klienta",
|
||||||
|
"client_id_placeholder": "Wpisz ID klienta",
|
||||||
|
"client_id_desc": "Różnych klientów można zidentyfikować za pomocą specjalnego ID klienta. <a>Tutaj</a> możesz dowiedzieć się więcej o tym, jak identyfikować klientów.",
|
||||||
"download_mobileconfig_doh": "Pobierz plik .mobileconfig dla DNS-over-HTTPS",
|
"download_mobileconfig_doh": "Pobierz plik .mobileconfig dla DNS-over-HTTPS",
|
||||||
"download_mobileconfig_dot": "Pobierz plik .mobileconfig dla DNS-over-TLS",
|
"download_mobileconfig_dot": "Pobierz plik .mobileconfig dla DNS-over-TLS",
|
||||||
|
"download_mobileconfig": "Pobierz plik konfiguracyjny",
|
||||||
"plain_dns": "Zwykły DNS",
|
"plain_dns": "Zwykły DNS",
|
||||||
"form_enter_rate_limit": "Wpisz limit ilościowy",
|
"form_enter_rate_limit": "Wpisz limit ilościowy",
|
||||||
"rate_limit": "Limit ilościowy",
|
"rate_limit": "Limit ilościowy",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Źródło",
|
"source_label": "Źródło",
|
||||||
"found_in_known_domain_db": "Znaleziono w bazie danych znanych domen.",
|
"found_in_known_domain_db": "Znaleziono w bazie danych znanych domen.",
|
||||||
"category_label": "Kategoria",
|
"category_label": "Kategoria",
|
||||||
"rule_label": "Reguła",
|
"rule_label": "Reguła(y)",
|
||||||
"list_label": "Lista",
|
"list_label": "Lista",
|
||||||
"unknown_filter": "Nieznany filtr {{filterId}}",
|
"unknown_filter": "Nieznany filtr {{filterId}}",
|
||||||
"known_tracker": "Znany element śledzący",
|
"known_tracker": "Znany element śledzący",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Zapisano konfigurację szyfrowania",
|
"encryption_config_saved": "Zapisano konfigurację szyfrowania",
|
||||||
"encryption_server": "Nazwa serwera",
|
"encryption_server": "Nazwa serwera",
|
||||||
"encryption_server_enter": "Wpisz swoją nazwę domeny",
|
"encryption_server_enter": "Wpisz swoją nazwę domeny",
|
||||||
"encryption_server_desc": "Aby korzystać z protokołu HTTPS, musisz wprowadzić nazwę serwera zgodną z certyfikatem SSL.",
|
"encryption_server_desc": "Aby korzystać z protokołu HTTPS, musisz wprowadzić nazwę serwera, która jest zgodna z certyfikatem SSL lub certyfikatem typu wildcard. Jeśli pole nie jest ustawione, będzie akceptować połączenia TLS dla dowolnej domeny.",
|
||||||
"encryption_redirect": "Przekieruj automatycznie do HTTPS",
|
"encryption_redirect": "Przekieruj automatycznie do HTTPS",
|
||||||
"encryption_redirect_desc": "Jeśli zaznaczone, AdGuard Home automatycznie przekieruje Cię z adresów HTTP na HTTPS.",
|
"encryption_redirect_desc": "Jeśli zaznaczone, AdGuard Home automatycznie przekieruje Cię z adresów HTTP na HTTPS.",
|
||||||
"encryption_https": "Port HTTPS",
|
"encryption_https": "Port HTTPS",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Edytuj klienta",
|
"client_edit": "Edytuj klienta",
|
||||||
"client_identifier": "Identyfikator",
|
"client_identifier": "Identyfikator",
|
||||||
"ip_address": "Adres IP",
|
"ip_address": "Adres IP",
|
||||||
"client_identifier_desc": "Klienci mogą być identyfikowani na podstawie adresu IP, CIDR, adresu MAC. Pamiętaj, że użycie MAC jako identyfikatora jest możliwe tylko wtedy, gdy AdGuard Home jest również <0>serwerem DHCP</0>",
|
"client_identifier_desc": "Klientów można zidentyfikować po adresie IP, CIDR, adresie MAC lub specjalnym identyfikatorze klienta (może służyć do DoT/DoH/DoQ). <0>Tutaj</0> możesz dowiedzieć się więcej o tym, jak identyfikować klientów.",
|
||||||
"form_enter_ip": "Wpisz adres IP",
|
"form_enter_ip": "Wpisz adres IP",
|
||||||
"form_enter_mac": "Wpisz adres MAC",
|
"form_enter_mac": "Wpisz adres MAC",
|
||||||
"form_enter_id": "Wpisz identyfikator",
|
"form_enter_id": "Wpisz identyfikator",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> obsługuje <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> obsługuje <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> obsługuje <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> obsługuje <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Znajdziesz więcej implementacji <0>tutaj</0> i <1>tutaj</1>.",
|
"setup_dns_privacy_other_5": "Znajdziesz więcej implementacji <0>tutaj</0> i <1>tutaj</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Konfiguracja iOS i macOS",
|
||||||
"setup_dns_notice": "Aby skorzystać z <1>DNS-over-HTTPS</1> lub <1>DNS-over-TLS</1>, musisz w ustawieniach AdGuard Home <0>skonfigurować szyfrowanie</0>.",
|
"setup_dns_notice": "Aby skorzystać z <1>DNS-over-HTTPS</1> lub <1>DNS-over-TLS</1>, musisz w ustawieniach AdGuard Home <0>skonfigurować szyfrowanie</0>.",
|
||||||
"rewrite_added": "Pomyślnie dodano przepisanie DNS dla „{{key}}”",
|
"rewrite_added": "Pomyślnie dodano przepisanie DNS dla „{{key}}”",
|
||||||
"rewrite_deleted": "Przepisanie DNS dla „{{key}}” zostało pomyślnie usunięte",
|
"rewrite_deleted": "Przepisanie DNS dla „{{key}}” zostało pomyślnie usunięte",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "Adresy IP: {{ip}}",
|
"check_ip": "Adresy IP: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Powód: {{reason}}",
|
"check_reason": "Powód: {{reason}}",
|
||||||
"check_rule": "Reguła: {{rule}}",
|
|
||||||
"check_service": "Nazwa usługi: {{service}}",
|
"check_service": "Nazwa usługi: {{service}}",
|
||||||
"service_name": "Nazwa usługi",
|
"service_name": "Nazwa usługi",
|
||||||
"check_not_found": "Nie znaleziono na Twoich listach filtrów",
|
"check_not_found": "Nie znaleziono na Twoich listach filtrów",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Configurações do cliente",
|
"client_settings": "Configurações do cliente",
|
||||||
"example_upstream_reserved": "Você pode especificar o DNS upstream <0>para o domínio(s) especifico</0>",
|
"example_upstream_reserved": "Você pode especificar o DNS primário <0>para o domínio(s) especifico</0>",
|
||||||
"example_upstream_comment": "Você pode especificar o comentário",
|
"example_upstream_comment": "Você pode especificar o comentário",
|
||||||
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores upstream",
|
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores upstream",
|
||||||
"parallel_requests": "Solicitações paralelas",
|
"parallel_requests": "Solicitações paralelas",
|
||||||
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Formato de endereço IPv inválido",
|
"form_error_ip_format": "Formato de endereço IPv inválido",
|
||||||
"form_error_mac_format": "Formato do endereço MAC inválido",
|
"form_error_mac_format": "Formato do endereço MAC inválido",
|
||||||
"form_error_client_id_format": "Formato do ID de cliente inválido",
|
"form_error_client_id_format": "Formato do ID de cliente inválido",
|
||||||
|
"form_error_server_name": "Nome de servidor inválido",
|
||||||
"form_error_positive": "Deve ser maior que 0",
|
"form_error_positive": "Deve ser maior que 0",
|
||||||
"form_error_negative": "Deve ser igual ou superior a 0",
|
"form_error_negative": "Deve ser igual ou superior a 0",
|
||||||
"range_end_error": "Deve ser maior que o início do intervalo",
|
"range_end_error": "Deve ser maior que o início do intervalo",
|
||||||
@ -125,18 +126,18 @@
|
|||||||
"no_servers_specified": "Nenhum servidor especificado",
|
"no_servers_specified": "Nenhum servidor especificado",
|
||||||
"general_settings": "Configurações gerais",
|
"general_settings": "Configurações gerais",
|
||||||
"dns_settings": "Configurações de DNS",
|
"dns_settings": "Configurações de DNS",
|
||||||
"dns_blocklists": "Listas negra de DNS",
|
"dns_blocklists": "Listas de bloqueio de DNS",
|
||||||
"dns_allowlists": "Listas branca de DNS",
|
"dns_allowlists": "Listas de permissões de DNS",
|
||||||
"dns_blocklists_desc": "O AdGuard Home bloqueará domínios que correspondam às listas negras.",
|
"dns_blocklists_desc": "O AdGuard Home bloqueará domínios que correspondam às listas de bloqueio.",
|
||||||
"dns_allowlists_desc": "Os domínios das listas branca de DNS serão permitidos mesmo que estejam em qualquer uma das listas negra.",
|
"dns_allowlists_desc": "Os domínios das listas de permissões de DNS serão permitidos mesmo que estejam em qualquer uma das listas de bloqueio.",
|
||||||
"custom_filtering_rules": "Regras de filtragem personalizadas",
|
"custom_filtering_rules": "Regras de filtragem personalizadas",
|
||||||
"encryption_settings": "Configurações de criptografia",
|
"encryption_settings": "Configurações de criptografia",
|
||||||
"dhcp_settings": "Configurações de DHCP",
|
"dhcp_settings": "Configurações de DHCP",
|
||||||
"upstream_dns": "Servidores DNS upstream",
|
"upstream_dns": "Servidores DNS primário",
|
||||||
"upstream_dns_help": "Insira os endereços dos servidores, um por linha. <a>Saber mais</a> sobre a configuração de servidores DNS primários.",
|
"upstream_dns_help": "Insira os endereços dos servidores, um por linha. <a>Saber mais</a> sobre a configuração de servidores DNS primários.",
|
||||||
"upstream_dns_configured_in_file": "Configurado em {{path}}",
|
"upstream_dns_configured_in_file": "Configurado em {{path}}",
|
||||||
"test_upstream_btn": "Testar upstreams",
|
"test_upstream_btn": "Testar DNS primário",
|
||||||
"upstreams": "Upstreams",
|
"upstreams": "DNS primário",
|
||||||
"apply_btn": "Aplicar",
|
"apply_btn": "Aplicar",
|
||||||
"disabled_filtering_toast": "Filtragem desativada",
|
"disabled_filtering_toast": "Filtragem desativada",
|
||||||
"enabled_filtering_toast": "Filtragem ativada",
|
"enabled_filtering_toast": "Filtragem ativada",
|
||||||
@ -157,22 +158,22 @@
|
|||||||
"delete_table_action": "Excluir",
|
"delete_table_action": "Excluir",
|
||||||
"elapsed": "Tempo decorrido",
|
"elapsed": "Tempo decorrido",
|
||||||
"filters_and_hosts_hint": "O AdGuard Home entende regras básicas de bloqueio de anúncios e a sintaxe de arquivos de hosts.",
|
"filters_and_hosts_hint": "O AdGuard Home entende regras básicas de bloqueio de anúncios e a sintaxe de arquivos de hosts.",
|
||||||
"no_blocklist_added": "Nenhuma lista negra foi adicionada",
|
"no_blocklist_added": "Nenhuma lista de bloqueio adicionada",
|
||||||
"no_whitelist_added": "Nenhuma lista branca foi adicionada",
|
"no_whitelist_added": "Nenhuma lista de permissões foi adicionada",
|
||||||
"add_blocklist": "Adicionar lista negra",
|
"add_blocklist": "Adicionar lista de bloqueio",
|
||||||
"add_allowlist": "Adicionar lista branca",
|
"add_allowlist": "Adicionar lista de permissões",
|
||||||
"cancel_btn": "Cancelar",
|
"cancel_btn": "Cancelar",
|
||||||
"enter_name_hint": "Digite o nome",
|
"enter_name_hint": "Digite o nome",
|
||||||
"enter_url_or_path_hint": "Digite a URL ou o local da lista",
|
"enter_url_or_path_hint": "Digite a URL ou o local da lista",
|
||||||
"check_updates_btn": "Verificar atualizações",
|
"check_updates_btn": "Verificar atualizações",
|
||||||
"new_blocklist": "Nova lista negra",
|
"new_blocklist": "Nova lista de bloqueio",
|
||||||
"new_allowlist": "Nova lista branca",
|
"new_allowlist": "Nova lista de permissão",
|
||||||
"edit_blocklist": "Editar lista negra",
|
"edit_blocklist": "Editar lista de bloqueio",
|
||||||
"edit_allowlist": "Editar lista branca",
|
"edit_allowlist": "Editar lista de permissões",
|
||||||
"choose_blocklist": "Escolher as listas negras",
|
"choose_blocklist": "Escolher as listasde bloqueio",
|
||||||
"choose_allowlist": "Escolher as listas brancas",
|
"choose_allowlist": "Escolher as listas de permissões",
|
||||||
"enter_valid_blocklist": "Digite uma URL válida para a lista negra.",
|
"enter_valid_blocklist": "Digite um URL válido para a lista de bloqueio.",
|
||||||
"enter_valid_allowlist": "Digite uma URL válida para a lista branca.",
|
"enter_valid_allowlist": "Digite uma URL válida para a lista de permissões.",
|
||||||
"form_error_url_format": "Formato da URL inválida",
|
"form_error_url_format": "Formato da URL inválida",
|
||||||
"form_error_url_or_path_format": "URL ou local da lista inválida",
|
"form_error_url_or_path_format": "URL ou local da lista inválida",
|
||||||
"custom_filter_rules": "Regras de filtragem personalizadas",
|
"custom_filter_rules": "Regras de filtragem personalizadas",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "IP personalizado",
|
"custom_ip": "IP personalizado",
|
||||||
"blocking_ipv4": "Bloqueando IPv4",
|
"blocking_ipv4": "Bloqueando IPv4",
|
||||||
"blocking_ipv6": "Bloqueando IPv6",
|
"blocking_ipv6": "Bloqueando IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-sobre-HTTPS",
|
"dns_over_https": "DNS-sobre-HTTPS",
|
||||||
"dns_over_tls": "DNS-sobre-TLS",
|
"dns_over_tls": "DNS-sobre-TLS",
|
||||||
|
"dns_over_quic": "DNS-sobre-QUIC",
|
||||||
|
"client_id": "ID do cliente",
|
||||||
|
"client_id_placeholder": "Digite o ID do cliente",
|
||||||
|
"client_id_desc": "Diferentes clientes podem ser identificados por um ID de cliente especial. <a>Aqui</a> você pode aprender mais sobre como identificar clientes.",
|
||||||
"download_mobileconfig_doh": "BAixar .mobileconfig para DNS-sobre-HTTPS",
|
"download_mobileconfig_doh": "BAixar .mobileconfig para DNS-sobre-HTTPS",
|
||||||
"download_mobileconfig_dot": "BAixar .mobileconfig para DNS-sobre-TLS",
|
"download_mobileconfig_dot": "BAixar .mobileconfig para DNS-sobre-TLS",
|
||||||
|
"download_mobileconfig": "Baixar arquivo de configuração",
|
||||||
"plain_dns": "DNS simples",
|
"plain_dns": "DNS simples",
|
||||||
"form_enter_rate_limit": "Insira a taxa limite",
|
"form_enter_rate_limit": "Insira a taxa limite",
|
||||||
"rate_limit": "Taxa limite",
|
"rate_limit": "Taxa limite",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Fonte",
|
"source_label": "Fonte",
|
||||||
"found_in_known_domain_db": "Encontrado no banco de dados de domínios conhecidos.",
|
"found_in_known_domain_db": "Encontrado no banco de dados de domínios conhecidos.",
|
||||||
"category_label": "Categoria",
|
"category_label": "Categoria",
|
||||||
"rule_label": "Regra",
|
"rule_label": "Regra(s)",
|
||||||
"list_label": "Lista",
|
"list_label": "Lista",
|
||||||
"unknown_filter": "Filtro desconhecido {{filterId}}",
|
"unknown_filter": "Filtro desconhecido {{filterId}}",
|
||||||
"known_tracker": "Rastreador conhecido",
|
"known_tracker": "Rastreador conhecido",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Configuração de criptografia salva",
|
"encryption_config_saved": "Configuração de criptografia salva",
|
||||||
"encryption_server": "Nome do servidor",
|
"encryption_server": "Nome do servidor",
|
||||||
"encryption_server_enter": "Digite seu nome de domínio",
|
"encryption_server_enter": "Digite seu nome de domínio",
|
||||||
"encryption_server_desc": "Para usar o protocolo HTTPS, você precisa digitar o nome do servidor que corresponde ao seu certificado SSL.",
|
"encryption_server_desc": "Para usar HTTPS, você precisa inserir o nome do servidor que corresponda ao seu certificado SSL ou certificado curinga. Se o campo não estiver definido, ele aceitará conexões TLS para qualquer domínio.",
|
||||||
"encryption_redirect": "Redirecionar automaticamente para HTTPS",
|
"encryption_redirect": "Redirecionar automaticamente para HTTPS",
|
||||||
"encryption_redirect_desc": "Se marcado, o AdGuard Home irá redirecionar automaticamente os endereços HTTP para HTTPS.",
|
"encryption_redirect_desc": "Se marcado, o AdGuard Home irá redirecionar automaticamente os endereços HTTP para HTTPS.",
|
||||||
"encryption_https": "Porta HTTPS",
|
"encryption_https": "Porta HTTPS",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Editar cliente",
|
"client_edit": "Editar cliente",
|
||||||
"client_identifier": "Identificador",
|
"client_identifier": "Identificador",
|
||||||
"ip_address": "Endereço de IP",
|
"ip_address": "Endereço de IP",
|
||||||
"client_identifier_desc": "Clientes podem ser identificados pelo endereço de IP ou pelo endereço MAC. Observe que o uso do endereço MAC como identificador só é possível se o AdGuard Home também for um <0>servidor DHCP</0>",
|
"client_identifier_desc": "Os clientes podem ser identificados pelo endereço IP, CIDR, Endereço MAC ou um ID de cliente especial (pode ser usado para DoT/DoH/DoQ). <0>Aqui</0> você pode aprender mais sobre como identificar clientes.",
|
||||||
"form_enter_ip": "Digite o endereço de IP",
|
"form_enter_ip": "Digite o endereço de IP",
|
||||||
"form_enter_mac": "Digite o endereço MAC",
|
"form_enter_mac": "Digite o endereço MAC",
|
||||||
"form_enter_id": "Inserir identificador",
|
"form_enter_id": "Inserir identificador",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> suporta <1>DNS-sobre-HTTPS</1>",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> suporta <1>DNS-sobre-HTTPS</1>",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> suporta <1>DNS-sobre-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> suporta <1>DNS-sobre-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Você encontrará mais implementações <0>aqui</0> e <1>aqui</1>.",
|
"setup_dns_privacy_other_5": "Você encontrará mais implementações <0>aqui</0> e <1>aqui</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "configuração para iOS e macOS",
|
||||||
"setup_dns_notice": "Para usar o <1>DNS-sobre-HTTPS</1> ou <1>DNS-sobre-TLS</1>, você precisa <0>configurar a criptografia</0> nas configurações do AdGuard Home.",
|
"setup_dns_notice": "Para usar o <1>DNS-sobre-HTTPS</1> ou <1>DNS-sobre-TLS</1>, você precisa <0>configurar a criptografia</0> nas configurações do AdGuard Home.",
|
||||||
"rewrite_added": "Reescrita de DNS para \"{{key}}\" adicionada com sucesso",
|
"rewrite_added": "Reescrita de DNS para \"{{key}}\" adicionada com sucesso",
|
||||||
"rewrite_deleted": "Reescrita de DNS para \"{{key}}\" excluída com sucesso",
|
"rewrite_deleted": "Reescrita de DNS para \"{{key}}\" excluída com sucesso",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "Endereços de IP: {{ip}}",
|
"check_ip": "Endereços de IP: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Motivo: {{reason}}",
|
"check_reason": "Motivo: {{reason}}",
|
||||||
"check_rule": "Regra: {{rule}}",
|
|
||||||
"check_service": "Nome do serviço: {{service}}",
|
"check_service": "Nome do serviço: {{service}}",
|
||||||
"service_name": "Nome do serviço",
|
"service_name": "Nome do serviço",
|
||||||
"check_not_found": "Não encontrado em suas listas de filtros",
|
"check_not_found": "Não encontrado em suas listas de filtros",
|
||||||
@ -560,7 +567,7 @@
|
|||||||
"filtered": "Filtrado",
|
"filtered": "Filtrado",
|
||||||
"rewritten": "Reescrito",
|
"rewritten": "Reescrito",
|
||||||
"safe_search": "Pesquisa segura",
|
"safe_search": "Pesquisa segura",
|
||||||
"blocklist": "Lista negra",
|
"blocklist": "Lista de bloqueio",
|
||||||
"milliseconds_abbreviation": "ms",
|
"milliseconds_abbreviation": "ms",
|
||||||
"cache_size": "Tamanho do cache",
|
"cache_size": "Tamanho do cache",
|
||||||
"cache_size_desc": "Tamanho do cache do DNS (em bytes)",
|
"cache_size_desc": "Tamanho do cache do DNS (em bytes)",
|
||||||
@ -579,7 +586,7 @@
|
|||||||
"filter_category_general_desc": "Listas que bloqueiam o rastreamento e a publicidade na maioria dos dispositivos",
|
"filter_category_general_desc": "Listas que bloqueiam o rastreamento e a publicidade na maioria dos dispositivos",
|
||||||
"filter_category_security_desc": "Listas especializadas em bloquear domínios de malware, phishing ou fraude",
|
"filter_category_security_desc": "Listas especializadas em bloquear domínios de malware, phishing ou fraude",
|
||||||
"filter_category_regional_desc": "Listas focadas em anúncios regionais e servidores de rastreamento",
|
"filter_category_regional_desc": "Listas focadas em anúncios regionais e servidores de rastreamento",
|
||||||
"filter_category_other_desc": "Outras listas negras",
|
"filter_category_other_desc": "Outras listas de bloqueio",
|
||||||
"setup_config_to_enable_dhcp_server": "Configure a configuração para habilitar o servidor DHCP",
|
"setup_config_to_enable_dhcp_server": "Configure a configuração para habilitar o servidor DHCP",
|
||||||
"original_response": "Resposta original",
|
"original_response": "Resposta original",
|
||||||
"click_to_view_queries": "Clique para ver as consultas",
|
"click_to_view_queries": "Clique para ver as consultas",
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Definições do cliente",
|
"client_settings": "Definições do cliente",
|
||||||
"example_upstream_reserved": "pode especificar um DNS upstream <0>para domínio(s) especifico(s)</0>",
|
"example_upstream_reserved": "Podes especificar um DNS primário <0>para domínio(s) especifico(s)</0>",
|
||||||
"example_upstream_comment": "Tu podes especificar o comentário",
|
"example_upstream_comment": "Tu podes especificar o comentário",
|
||||||
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores upstream",
|
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores upstream",
|
||||||
"parallel_requests": "Solicitações paralelas",
|
"parallel_requests": "Solicitações paralelas",
|
||||||
"load_balancing": "Balanceamento de carga",
|
"load_balancing": "Balanceamento de carga",
|
||||||
"load_balancing_desc": "Consulta um servidor de cada vez. O AdGuard Home usará o algoritmo aleatório ponderado para escolher o servidor, para que o servidor mais rápido seja usado com mais frequência.",
|
"load_balancing_desc": "Consulta um servidor de cada vez. O AdGuard Home usará o algoritmo aleatório ponderado para escolher o servidor, para que o servidor mais rápido seja usado com mais frequência.",
|
||||||
"bootstrap_dns": "Servidores DNS de inicialização",
|
"bootstrap_dns": "Servidores DNS de arranque",
|
||||||
"bootstrap_dns_desc": "Servidores DNS de inicialização são usados para resolver endereços IP dos resolvedores DoH/DoT que especifica como upstreams.",
|
"bootstrap_dns_desc": "Servidores DNS de inicialização são usados para resolver endereços IP dos resolvedores DoH/DoT que especifica como upstreams.",
|
||||||
"check_dhcp_servers": "Verificar por servidores DHCP",
|
"check_dhcp_servers": "Verificar por servidores DHCP",
|
||||||
"save_config": "Guardar definição",
|
"save_config": "Guardar definição",
|
||||||
@ -23,7 +23,7 @@
|
|||||||
"dhcp_leases": "Concessões DHCP",
|
"dhcp_leases": "Concessões DHCP",
|
||||||
"dhcp_static_leases": "Concessões de DHCP estático",
|
"dhcp_static_leases": "Concessões de DHCP estático",
|
||||||
"dhcp_leases_not_found": "Nenhuma concessão DHCP encontrada",
|
"dhcp_leases_not_found": "Nenhuma concessão DHCP encontrada",
|
||||||
"dhcp_config_saved": "Configurações DHCP guardadas com sucesso",
|
"dhcp_config_saved": "Definições DHCP guardadas com sucesso",
|
||||||
"dhcp_ipv4_settings": "Definições DHCP IPv4",
|
"dhcp_ipv4_settings": "Definições DHCP IPv4",
|
||||||
"dhcp_ipv6_settings": "Definições DHCP IPv6",
|
"dhcp_ipv6_settings": "Definições DHCP IPv6",
|
||||||
"form_error_required": "Campo obrigatório",
|
"form_error_required": "Campo obrigatório",
|
||||||
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Formato de endereço IPv4 inválido",
|
"form_error_ip_format": "Formato de endereço IPv4 inválido",
|
||||||
"form_error_mac_format": "Formato do endereço MAC inválido",
|
"form_error_mac_format": "Formato do endereço MAC inválido",
|
||||||
"form_error_client_id_format": "Formato inválido",
|
"form_error_client_id_format": "Formato inválido",
|
||||||
|
"form_error_server_name": "Nome de servidor inválido",
|
||||||
"form_error_positive": "Deve ser maior que 0",
|
"form_error_positive": "Deve ser maior que 0",
|
||||||
"form_error_negative": "Deve ser igual ou superior a 0",
|
"form_error_negative": "Deve ser igual ou superior a 0",
|
||||||
"range_end_error": "Deve ser maior que o início do intervalo",
|
"range_end_error": "Deve ser maior que o início do intervalo",
|
||||||
@ -75,7 +76,7 @@
|
|||||||
"query_log": "Registo de consultas",
|
"query_log": "Registo de consultas",
|
||||||
"compact": "Compacto",
|
"compact": "Compacto",
|
||||||
"nothing_found": "Nada encontrado",
|
"nothing_found": "Nada encontrado",
|
||||||
"faq": "Perguntas frequentes",
|
"faq": "FAQ",
|
||||||
"version": "Versão",
|
"version": "Versão",
|
||||||
"address": "Endereço",
|
"address": "Endereço",
|
||||||
"protocol": "Protocolo",
|
"protocol": "Protocolo",
|
||||||
@ -91,7 +92,7 @@
|
|||||||
"disabled_protection": "Desactivar protecção",
|
"disabled_protection": "Desactivar protecção",
|
||||||
"refresh_statics": "Repor estatísticas",
|
"refresh_statics": "Repor estatísticas",
|
||||||
"dns_query": "Consultas de DNS",
|
"dns_query": "Consultas de DNS",
|
||||||
"blocked_by": "<0>Bloqueado por Filtros</0>",
|
"blocked_by": "<0>Bloqueado por filtros</0>",
|
||||||
"stats_malware_phishing": "Malware/phishing bloqueados",
|
"stats_malware_phishing": "Malware/phishing bloqueados",
|
||||||
"stats_adult": "Sites adultos bloqueados",
|
"stats_adult": "Sites adultos bloqueados",
|
||||||
"stats_query_domain": "Principais domínios consultados",
|
"stats_query_domain": "Principais domínios consultados",
|
||||||
@ -125,18 +126,18 @@
|
|||||||
"no_servers_specified": "Nenhum servidor especificado",
|
"no_servers_specified": "Nenhum servidor especificado",
|
||||||
"general_settings": "Definições gerais",
|
"general_settings": "Definições gerais",
|
||||||
"dns_settings": "Definições de DNS",
|
"dns_settings": "Definições de DNS",
|
||||||
"dns_blocklists": "Listas negra de DNS",
|
"dns_blocklists": "Lista de bloqueio de DNS",
|
||||||
"dns_allowlists": "Listas branca de DNS",
|
"dns_allowlists": "Listas de permissões de DNS",
|
||||||
"dns_blocklists_desc": "O AdGuard Home bloqueará domínios que correspondam às listas negras.",
|
"dns_blocklists_desc": "O AdGuard Home bloqueará domínios que correspondam às listas de bloqueio.",
|
||||||
"dns_allowlists_desc": "Os domínios das listas branca de DNS serão permitidos mesmo que estejam em qualquer uma das listas negra.",
|
"dns_allowlists_desc": "Os domínios das listas de permissões de DNS serão permitidos mesmo que estejam em qualquer uma das listas de bloqueio.",
|
||||||
"custom_filtering_rules": "Regras de filtragem personalizadas",
|
"custom_filtering_rules": "Regras de filtragem personalizadas",
|
||||||
"encryption_settings": "Configurações de criptografia",
|
"encryption_settings": "Definições de criptografia",
|
||||||
"dhcp_settings": "Configurações de DHCP",
|
"dhcp_settings": "Definições de DHCP",
|
||||||
"upstream_dns": "Servidores DNS upstream",
|
"upstream_dns": "Servidores DNS primário",
|
||||||
"upstream_dns_help": "Insira os endereços dos servidores, um por linha. <a>Saber mais</a> sobre a definição de servidores DNS primários.",
|
"upstream_dns_help": "Insira os endereços dos servidores, um por linha. <a>Saber mais</a> sobre a definição de servidores DNS primários.",
|
||||||
"upstream_dns_configured_in_file": "Configurado em {{path}}",
|
"upstream_dns_configured_in_file": "Configurado em {{path}}",
|
||||||
"test_upstream_btn": "Testar upstreams",
|
"test_upstream_btn": "Testar DNS primário",
|
||||||
"upstreams": "Upstreams",
|
"upstreams": "DNS primário",
|
||||||
"apply_btn": "Aplicar",
|
"apply_btn": "Aplicar",
|
||||||
"disabled_filtering_toast": "Filtragem desactivada",
|
"disabled_filtering_toast": "Filtragem desactivada",
|
||||||
"enabled_filtering_toast": "Filtragem activada",
|
"enabled_filtering_toast": "Filtragem activada",
|
||||||
@ -157,22 +158,22 @@
|
|||||||
"delete_table_action": "Apagar",
|
"delete_table_action": "Apagar",
|
||||||
"elapsed": "Tempo decorrido",
|
"elapsed": "Tempo decorrido",
|
||||||
"filters_and_hosts_hint": "O AdGuard Home entende regras básicas de bloqueio de anúncios e a sintaxe de arquivos de hosts.",
|
"filters_and_hosts_hint": "O AdGuard Home entende regras básicas de bloqueio de anúncios e a sintaxe de arquivos de hosts.",
|
||||||
"no_blocklist_added": "Nenhuma lista negra foi adicionada",
|
"no_blocklist_added": "Nenhuma lista de bloqueio foi adicionada",
|
||||||
"no_whitelist_added": "Nenhuma lista branca foi adicionada",
|
"no_whitelist_added": "Nenhuma lista de permissões foi adicionada",
|
||||||
"add_blocklist": "Adicionar lista negra",
|
"add_blocklist": "Adicionar lista de bloqueio",
|
||||||
"add_allowlist": "Adicionar lista branca",
|
"add_allowlist": "Adicionar lista de permissões",
|
||||||
"cancel_btn": "Cancelar",
|
"cancel_btn": "Cancelar",
|
||||||
"enter_name_hint": "Insira o nome",
|
"enter_name_hint": "Insira o nome",
|
||||||
"enter_url_or_path_hint": "Digite a URL ou o local da lista",
|
"enter_url_or_path_hint": "Digite a URL ou o local da lista",
|
||||||
"check_updates_btn": "Verificar actualizações",
|
"check_updates_btn": "Verificar actualizações",
|
||||||
"new_blocklist": "Nova lista negra",
|
"new_blocklist": "Nova lista de bloqueio",
|
||||||
"new_allowlist": "Nova lista branca",
|
"new_allowlist": "Nova lista de permissões",
|
||||||
"edit_blocklist": "Editar lista negra",
|
"edit_blocklist": "Editar lista de bloqueio",
|
||||||
"edit_allowlist": "Editar lista branca",
|
"edit_allowlist": "Editar lista de permissões",
|
||||||
"choose_blocklist": "Escolher as listas negras",
|
"choose_blocklist": "Escolher as listas de bloqueio",
|
||||||
"choose_allowlist": "Escolher as listas brancas",
|
"choose_allowlist": "Escolher as listas de permissões",
|
||||||
"enter_valid_blocklist": "Digite uma URL válida para a lista negra.",
|
"enter_valid_blocklist": "Digite uma URL válida para a lista de bloqueio.",
|
||||||
"enter_valid_allowlist": "Digite uma URL válida para a lista branca.",
|
"enter_valid_allowlist": "Digite uma URL válida para a lista de permissões.",
|
||||||
"form_error_url_format": "Formato da URL inválida",
|
"form_error_url_format": "Formato da URL inválida",
|
||||||
"form_error_url_or_path_format": "URL ou local da lista inválida",
|
"form_error_url_or_path_format": "URL ou local da lista inválida",
|
||||||
"custom_filter_rules": "Regras de filtragem personalizadas",
|
"custom_filter_rules": "Regras de filtragem personalizadas",
|
||||||
@ -185,7 +186,7 @@
|
|||||||
"example_comment_meaning": "apenas um comentário",
|
"example_comment_meaning": "apenas um comentário",
|
||||||
"example_comment_hash": "# Também um comentário",
|
"example_comment_hash": "# Também um comentário",
|
||||||
"example_regex_meaning": "bloquear o acesso aos domínios que correspondam à expressão regular especificada",
|
"example_regex_meaning": "bloquear o acesso aos domínios que correspondam à expressão regular especificada",
|
||||||
"example_upstream_regular": "dNS regular (através do UDP)",
|
"example_upstream_regular": "DNS regular (através do UDP)",
|
||||||
"example_upstream_dot": "<0>DNS-sobre-TLS</0> criptografado",
|
"example_upstream_dot": "<0>DNS-sobre-TLS</0> criptografado",
|
||||||
"example_upstream_doh": "<0>DNS-sobre-HTTPS</0> criptografado",
|
"example_upstream_doh": "<0>DNS-sobre-HTTPS</0> criptografado",
|
||||||
"example_upstream_doq": "<0>DNS-sobre-QUIC</0> criptografado",
|
"example_upstream_doq": "<0>DNS-sobre-QUIC</0> criptografado",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "IP Personalizado",
|
"custom_ip": "IP Personalizado",
|
||||||
"blocking_ipv4": "A bloquear IPv4",
|
"blocking_ipv4": "A bloquear IPv4",
|
||||||
"blocking_ipv6": "A bloquear IPv6",
|
"blocking_ipv6": "A bloquear IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-sobre-HTTPS",
|
"dns_over_https": "DNS-sobre-HTTPS",
|
||||||
"dns_over_tls": "DNS-sobre-TLS",
|
"dns_over_tls": "DNS-sobre-TLS",
|
||||||
|
"dns_over_quic": "DNS-sobre-QUIC",
|
||||||
|
"client_id": "ID do cliente",
|
||||||
|
"client_id_placeholder": "Insira o ID do cliente",
|
||||||
|
"client_id_desc": "Diferentes clientes podem ser identificados por um ID de cliente especial. <a>Aqui</a> você pode aprender mais sobre como identificar clientes.",
|
||||||
"download_mobileconfig_doh": "Transferir .mobileconfig para DNS-sobre-HTTPS",
|
"download_mobileconfig_doh": "Transferir .mobileconfig para DNS-sobre-HTTPS",
|
||||||
"download_mobileconfig_dot": "Transferir .mobileconfig para DNS-sobre-TLS",
|
"download_mobileconfig_dot": "Transferir .mobileconfig para DNS-sobre-TLS",
|
||||||
|
"download_mobileconfig": "Transferir arquivo de configuração",
|
||||||
"plain_dns": "DNS simples",
|
"plain_dns": "DNS simples",
|
||||||
"form_enter_rate_limit": "Insira o limite de taxa",
|
"form_enter_rate_limit": "Insira o limite de taxa",
|
||||||
"rate_limit": "Limite de taxa",
|
"rate_limit": "Limite de taxa",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Fonte",
|
"source_label": "Fonte",
|
||||||
"found_in_known_domain_db": "Encontrado no banco de dados de domínios conhecido.",
|
"found_in_known_domain_db": "Encontrado no banco de dados de domínios conhecido.",
|
||||||
"category_label": "Categoria",
|
"category_label": "Categoria",
|
||||||
"rule_label": "Regra",
|
"rule_label": "Regra(s)",
|
||||||
"list_label": "Lista",
|
"list_label": "Lista",
|
||||||
"unknown_filter": "Filtro desconhecido {{filterId}}",
|
"unknown_filter": "Filtro desconhecido {{filterId}}",
|
||||||
"known_tracker": "Rastreador conhecido",
|
"known_tracker": "Rastreador conhecido",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Definição de criptografia guardada",
|
"encryption_config_saved": "Definição de criptografia guardada",
|
||||||
"encryption_server": "Nome do servidor",
|
"encryption_server": "Nome do servidor",
|
||||||
"encryption_server_enter": "Insira o seu nome de domínio",
|
"encryption_server_enter": "Insira o seu nome de domínio",
|
||||||
"encryption_server_desc": "Para usar o protocolo HTTPS, precisa de inserir o nome do servidor que corresponde ao seu certificado SSL.",
|
"encryption_server_desc": "Para usar HTTPS, você precisa inserir o nome do servidor que corresponda ao seu certificado SSL ou certificado curinga. Se o campo não estiver definido, ele aceitará conexões TLS para qualquer domínio.",
|
||||||
"encryption_redirect": "Redireccionar automaticamente para HTTPS",
|
"encryption_redirect": "Redireccionar automaticamente para HTTPS",
|
||||||
"encryption_redirect_desc": "Se marcado, o AdGuard Home irá redireccionar automaticamente os endereços HTTP para HTTPS.",
|
"encryption_redirect_desc": "Se marcado, o AdGuard Home irá redireccionar automaticamente os endereços HTTP para HTTPS.",
|
||||||
"encryption_https": "Porta HTTPS",
|
"encryption_https": "Porta HTTPS",
|
||||||
@ -338,7 +345,7 @@
|
|||||||
"encryption_dot": "Porta DNS-sobre-TLS",
|
"encryption_dot": "Porta DNS-sobre-TLS",
|
||||||
"encryption_dot_desc": "Se essa porta estiver configurada, o AdGuard Home irá executar o servidor DNS-sobre- TSL nesta porta.",
|
"encryption_dot_desc": "Se essa porta estiver configurada, o AdGuard Home irá executar o servidor DNS-sobre- TSL nesta porta.",
|
||||||
"encryption_doq": "Porta DNS-sobre-QUIC",
|
"encryption_doq": "Porta DNS-sobre-QUIC",
|
||||||
"encryption_doq_desc": "Se esta porta estiver configurada, o AdGuard Home executará um servidor DNS-sobre-QUIC nesta porta. É experimental e pode não ser confiável. Além disso, não há muitos clientes que ofereçam suporte no momento.",
|
"encryption_doq_desc": "Se esta porta estiver configurada, o AdGuard Home executará um servidor DNS-sobre-QUIC nesta porta. É experimental e pode não ser confiável. Além disso, não há demasiados clientes que ofereçam suporte no momento.",
|
||||||
"encryption_certificates": "Certificados",
|
"encryption_certificates": "Certificados",
|
||||||
"encryption_certificates_desc": "Para usar criptografia, precisa de fornecer uma cadeia de certificados SSL válida para o seu domínio. Pode obter um certificado gratuito em <0> {{link}}</0> ou pode comprá-lo numa das autoridades de certificação confiáveis.",
|
"encryption_certificates_desc": "Para usar criptografia, precisa de fornecer uma cadeia de certificados SSL válida para o seu domínio. Pode obter um certificado gratuito em <0> {{link}}</0> ou pode comprá-lo numa das autoridades de certificação confiáveis.",
|
||||||
"encryption_certificates_input": "Copie/cole aqui o seu certificado codificado em PEM.",
|
"encryption_certificates_input": "Copie/cole aqui o seu certificado codificado em PEM.",
|
||||||
@ -362,7 +369,7 @@
|
|||||||
"form_error_port_unsafe": "Esta porta não é segura",
|
"form_error_port_unsafe": "Esta porta não é segura",
|
||||||
"form_error_equal": "Não deve ser igual",
|
"form_error_equal": "Não deve ser igual",
|
||||||
"form_error_password": "As palavras-passe não coincidem",
|
"form_error_password": "As palavras-passe não coincidem",
|
||||||
"reset_settings": "Repor configurações",
|
"reset_settings": "Repor definições",
|
||||||
"update_announcement": "AdGuard Home {{version}} está disponível!<0>Clique aqui</0> para mais informações.",
|
"update_announcement": "AdGuard Home {{version}} está disponível!<0>Clique aqui</0> para mais informações.",
|
||||||
"setup_guide": "Guia de instalação",
|
"setup_guide": "Guia de instalação",
|
||||||
"dns_addresses": "Endereços DNS",
|
"dns_addresses": "Endereços DNS",
|
||||||
@ -386,14 +393,14 @@
|
|||||||
"client_edit": "Editar cliente",
|
"client_edit": "Editar cliente",
|
||||||
"client_identifier": "Identificador",
|
"client_identifier": "Identificador",
|
||||||
"ip_address": "Endereço de IP",
|
"ip_address": "Endereço de IP",
|
||||||
"client_identifier_desc": "Os clientes podem ser identificados pelo endereço de IP, CIDR, ou pelo endereço MAC. Observe que o uso do endereço MAC como identificador só é possível se o AdGuard Home também for um <0>servidor DHCP</0>",
|
"client_identifier_desc": "Os clientes podem ser identificados pelo endereço IP, CIDR, Endereço MAC ou um ID de cliente especial (pode ser usado para DoT/DoH/DoQ). <0>Aqui</0> você pode aprender mais sobre como identificar clientes.",
|
||||||
"form_enter_ip": "Insira IP",
|
"form_enter_ip": "Insira IP",
|
||||||
"form_enter_mac": "Insira o endereço MAC",
|
"form_enter_mac": "Insira o endereço MAC",
|
||||||
"form_enter_id": "Inserir identificador",
|
"form_enter_id": "Inserir identificador",
|
||||||
"form_add_id": "Adicionar identificador",
|
"form_add_id": "Adicionar identificador",
|
||||||
"form_client_name": "Insira o nome do cliente",
|
"form_client_name": "Insira o nome do cliente",
|
||||||
"name": "Nome",
|
"name": "Nome",
|
||||||
"client_global_settings": "Usar configurações globais",
|
"client_global_settings": "Usar definições globais",
|
||||||
"client_deleted": "Cliente \"{{key}}\" excluído com sucesso",
|
"client_deleted": "Cliente \"{{key}}\" excluído com sucesso",
|
||||||
"client_added": "Cliente \"{{key}}\" adicionado com sucesso",
|
"client_added": "Cliente \"{{key}}\" adicionado com sucesso",
|
||||||
"client_updated": "Cliente \"{{key}}\" actualizado com sucesso",
|
"client_updated": "Cliente \"{{key}}\" actualizado com sucesso",
|
||||||
@ -402,7 +409,7 @@
|
|||||||
"list_confirm_delete": "Você tem certeza de que deseja excluir essa lista?",
|
"list_confirm_delete": "Você tem certeza de que deseja excluir essa lista?",
|
||||||
"auto_clients_title": "Clientes (tempo de execução)",
|
"auto_clients_title": "Clientes (tempo de execução)",
|
||||||
"auto_clients_desc": "Dados dos clientes que usam o AdGuard Home, que não são armazenados na definição",
|
"auto_clients_desc": "Dados dos clientes que usam o AdGuard Home, que não são armazenados na definição",
|
||||||
"access_title": "Configurações de acesso",
|
"access_title": "Definições de acesso",
|
||||||
"access_desc": "Aqui pode configurar as regras de acesso para o servidores de DNS do AdGuard Home.",
|
"access_desc": "Aqui pode configurar as regras de acesso para o servidores de DNS do AdGuard Home.",
|
||||||
"access_allowed_title": "Clientes permitidos",
|
"access_allowed_title": "Clientes permitidos",
|
||||||
"access_allowed_desc": "Uma lista de endereços IP ou CIDR. Ao configurar, o AdGuard Home irá permitir solicitações apenas desses endereços de IP.",
|
"access_allowed_desc": "Uma lista de endereços IP ou CIDR. Ao configurar, o AdGuard Home irá permitir solicitações apenas desses endereços de IP.",
|
||||||
@ -410,7 +417,7 @@
|
|||||||
"access_disallowed_desc": "Uma lista de endereços IP ou CIDR. Ao configurar, o AdGuard Home irá descartar as solicitações desses endereços de IP.",
|
"access_disallowed_desc": "Uma lista de endereços IP ou CIDR. Ao configurar, o AdGuard Home irá descartar as solicitações desses endereços de IP.",
|
||||||
"access_blocked_title": "Domínios bloqueados",
|
"access_blocked_title": "Domínios bloqueados",
|
||||||
"access_blocked_desc": "Não confunda isso com os filtros. O AdGuard Home irá descartar as consultas DNS com esses domínios.",
|
"access_blocked_desc": "Não confunda isso com os filtros. O AdGuard Home irá descartar as consultas DNS com esses domínios.",
|
||||||
"access_settings_saved": "Configurações de acesso foram guardadas com sucesso",
|
"access_settings_saved": "Definições de acesso foram guardadas com sucesso",
|
||||||
"updates_checked": "Actualizações verificadas com sucesso",
|
"updates_checked": "Actualizações verificadas com sucesso",
|
||||||
"updates_version_equal": "O AdGuard Home está actualizado",
|
"updates_version_equal": "O AdGuard Home está actualizado",
|
||||||
"check_updates_now": "Verificar actualizações",
|
"check_updates_now": "Verificar actualizações",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> suporta <1>DNS-sobre-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> suporta <1>DNS-sobre-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> suporta <1>DNS-sobre-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> suporta <1>DNS-sobre-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Encontrará mais implementações <0>aqui</0> e <1>aqui</1>.",
|
"setup_dns_privacy_other_5": "Encontrará mais implementações <0>aqui</0> e <1>aqui</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "configuração para iOS e macOS",
|
||||||
"setup_dns_notice": "Para usar o <1>DNS-sobre-HTTPS</1> ou <1>DNS-sobre-TLS</1>, precisa de <0>configurar a criptografia</0> nas configurações do AdGuard Home.",
|
"setup_dns_notice": "Para usar o <1>DNS-sobre-HTTPS</1> ou <1>DNS-sobre-TLS</1>, precisa de <0>configurar a criptografia</0> nas configurações do AdGuard Home.",
|
||||||
"rewrite_added": "Reescrita de DNS para \"{{key}}\" adicionada com sucesso",
|
"rewrite_added": "Reescrita de DNS para \"{{key}}\" adicionada com sucesso",
|
||||||
"rewrite_deleted": "Reescrita de DNS para \"{{key}}\" excluída com sucesso",
|
"rewrite_deleted": "Reescrita de DNS para \"{{key}}\" excluída com sucesso",
|
||||||
@ -487,7 +495,7 @@
|
|||||||
"username_placeholder": "Insira o nome de utilizador",
|
"username_placeholder": "Insira o nome de utilizador",
|
||||||
"password_label": "Palavra-passe",
|
"password_label": "Palavra-passe",
|
||||||
"password_placeholder": "Insira palavra-passe",
|
"password_placeholder": "Insira palavra-passe",
|
||||||
"sign_in": "Entrar",
|
"sign_in": "Iniciar sessão",
|
||||||
"sign_out": "Sair",
|
"sign_out": "Sair",
|
||||||
"forgot_password": "Não se lembra da palavra-passe?",
|
"forgot_password": "Não se lembra da palavra-passe?",
|
||||||
"forgot_password_desc": "Siga <0>estes passos</0> para criar uma nova palavra-passe para a sua conta de utilizador.",
|
"forgot_password_desc": "Siga <0>estes passos</0> para criar uma nova palavra-passe para a sua conta de utilizador.",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "Endereços de IP: {{ip}}",
|
"check_ip": "Endereços de IP: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Motivo: {{reason}}",
|
"check_reason": "Motivo: {{reason}}",
|
||||||
"check_rule": "Regra: {{rule}}",
|
|
||||||
"check_service": "Nome do serviço: {{service}}",
|
"check_service": "Nome do serviço: {{service}}",
|
||||||
"service_name": "Nome do serviço",
|
"service_name": "Nome do serviço",
|
||||||
"check_not_found": "Não encontrado nas tuas listas de filtros",
|
"check_not_found": "Não encontrado nas tuas listas de filtros",
|
||||||
@ -551,7 +558,7 @@
|
|||||||
"validated_with_dnssec": "Validado com DNSSEC",
|
"validated_with_dnssec": "Validado com DNSSEC",
|
||||||
"all_queries": "Todas as consultas",
|
"all_queries": "Todas as consultas",
|
||||||
"show_blocked_responses": "Bloqueado",
|
"show_blocked_responses": "Bloqueado",
|
||||||
"show_whitelisted_responses": "Lista Branca",
|
"show_whitelisted_responses": "Na lista branca",
|
||||||
"show_processed_responses": "Processado",
|
"show_processed_responses": "Processado",
|
||||||
"blocked_safebrowsing": "Bloqueado pela navegação segura",
|
"blocked_safebrowsing": "Bloqueado pela navegação segura",
|
||||||
"blocked_adult_websites": "Sítios adultos bloqueados",
|
"blocked_adult_websites": "Sítios adultos bloqueados",
|
||||||
@ -560,7 +567,7 @@
|
|||||||
"filtered": "Filtrado",
|
"filtered": "Filtrado",
|
||||||
"rewritten": "Reescrito",
|
"rewritten": "Reescrito",
|
||||||
"safe_search": "Pesquisa segura",
|
"safe_search": "Pesquisa segura",
|
||||||
"blocklist": "Lista negra",
|
"blocklist": "Lista de bloqueio",
|
||||||
"milliseconds_abbreviation": "ms",
|
"milliseconds_abbreviation": "ms",
|
||||||
"cache_size": "Tamanho do cache",
|
"cache_size": "Tamanho do cache",
|
||||||
"cache_size_desc": "Tamanho do cache do DNS (em bytes)",
|
"cache_size_desc": "Tamanho do cache do DNS (em bytes)",
|
||||||
@ -575,11 +582,11 @@
|
|||||||
"filter_category_general": "Geral",
|
"filter_category_general": "Geral",
|
||||||
"filter_category_security": "Segurança",
|
"filter_category_security": "Segurança",
|
||||||
"filter_category_regional": "Regional",
|
"filter_category_regional": "Regional",
|
||||||
"filter_category_other": "Outro",
|
"filter_category_other": "Noutro",
|
||||||
"filter_category_general_desc": "Listas que bloqueiam o monitorização e a publicidade na maioria dos dispositivos",
|
"filter_category_general_desc": "Listas que bloqueiam o monitorização e a publicidade na maioria dos dispositivos",
|
||||||
"filter_category_security_desc": "Listas especializadas em bloquear domínios de malware, phishing ou fraude",
|
"filter_category_security_desc": "Listas especializadas em bloquear domínios de malware, phishing ou fraude",
|
||||||
"filter_category_regional_desc": "Listas focadas em anúncios regionais e servidores de monitorização",
|
"filter_category_regional_desc": "Listas focadas em anúncios regionais e servidores de monitorização",
|
||||||
"filter_category_other_desc": "Outras listas negras",
|
"filter_category_other_desc": "Outras listas de bloqueio",
|
||||||
"setup_config_to_enable_dhcp_server": "Defina a definição para habilitar o servidor DHCP",
|
"setup_config_to_enable_dhcp_server": "Defina a definição para habilitar o servidor DHCP",
|
||||||
"original_response": "Resposta original",
|
"original_response": "Resposta original",
|
||||||
"click_to_view_queries": "Clique para ver as consultas",
|
"click_to_view_queries": "Clique para ver as consultas",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Setări client",
|
"client_settings": "Setări client",
|
||||||
"example_upstream_reserved": "Puteți preciza un DNS upstream <0>de domeniu(ii) specific(e)</0>",
|
"example_upstream_reserved": "Puteți preciza un DNS în amonte <0>de domeniu(ii) specific(e)</0>",
|
||||||
"example_upstream_comment": "Puteți specifica comentariul",
|
"example_upstream_comment": "Puteți specifica comentariul",
|
||||||
"upstream_parallel": "Folosiți interogări paralele pentru rezolvări rapide interogând simultan toate serverele în amonte",
|
"upstream_parallel": "Folosiți interogări paralele pentru rezolvări rapide interogând simultan toate serverele în amonte",
|
||||||
"parallel_requests": "Solicitări paralele",
|
"parallel_requests": "Solicitări paralele",
|
||||||
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Format IP invalid",
|
"form_error_ip_format": "Format IP invalid",
|
||||||
"form_error_mac_format": "Format MAC invalid",
|
"form_error_mac_format": "Format MAC invalid",
|
||||||
"form_error_client_id_format": "Format ID de client invalid",
|
"form_error_client_id_format": "Format ID de client invalid",
|
||||||
|
"form_error_server_name": "Nume de server nevalid",
|
||||||
"form_error_positive": "Trebuie să fie mai mare de 0",
|
"form_error_positive": "Trebuie să fie mai mare de 0",
|
||||||
"form_error_negative": "Trebuie să fie egală cu 0 sau mai mare",
|
"form_error_negative": "Trebuie să fie egală cu 0 sau mai mare",
|
||||||
"range_end_error": "Trebuie să fie mai mare decât începutul intervalului",
|
"range_end_error": "Trebuie să fie mai mare decât începutul intervalului",
|
||||||
@ -107,7 +108,7 @@
|
|||||||
"number_of_dns_query_days": "Un număr de interogări DNS procesate în ultima {{count}} zi",
|
"number_of_dns_query_days": "Un număr de interogări DNS procesate în ultima {{count}} zi",
|
||||||
"number_of_dns_query_days_plural": "Un număr de interogări DNS procesate în ultimele {{count}} zile",
|
"number_of_dns_query_days_plural": "Un număr de interogări DNS procesate în ultimele {{count}} zile",
|
||||||
"number_of_dns_query_24_hours": "Un număr de interogări DNS procesate în ultimele 24 de ore",
|
"number_of_dns_query_24_hours": "Un număr de interogări DNS procesate în ultimele 24 de ore",
|
||||||
"number_of_dns_query_blocked_24_hours": "Un număr de solicitări DNS blocate de filtrele de blocare și listele de blocaj de hosts",
|
"number_of_dns_query_blocked_24_hours": "Un număr de solicitări DNS blocate de filtrele de blocare și lista de blocaje din hosts",
|
||||||
"number_of_dns_query_blocked_24_hours_by_sec": "Un număr de solicitări DNS blocate de modulul de securitate de navigare AdGuard",
|
"number_of_dns_query_blocked_24_hours_by_sec": "Un număr de solicitări DNS blocate de modulul de securitate de navigare AdGuard",
|
||||||
"number_of_dns_query_blocked_24_hours_adult": "Un număr de site-uri web pentru adulți blocate",
|
"number_of_dns_query_blocked_24_hours_adult": "Un număr de site-uri web pentru adulți blocate",
|
||||||
"enforced_save_search": "Căutare protejată întărită",
|
"enforced_save_search": "Căutare protejată întărită",
|
||||||
@ -117,7 +118,7 @@
|
|||||||
"block_domain_use_filters_and_hosts": "Blocați domenii folosind filtre și fișiere hosts",
|
"block_domain_use_filters_and_hosts": "Blocați domenii folosind filtre și fișiere hosts",
|
||||||
"filters_block_toggle_hint": "Puteți configura regulile de blocare în setările <a>Filtre</a>.",
|
"filters_block_toggle_hint": "Puteți configura regulile de blocare în setările <a>Filtre</a>.",
|
||||||
"use_adguard_browsing_sec": "Utilizați serviciul Navigarea în Securitate AdGuard",
|
"use_adguard_browsing_sec": "Utilizați serviciul Navigarea în Securitate AdGuard",
|
||||||
"use_adguard_browsing_sec_hint": "AdGuard Home va verifica dacă domeniul este în lista negră a serviciul web de securitate de navigare. Pentru acesta va utiliza un lookup API discret: un prefix scurt al numelui de domeniu SHA256 hash este trimis serverului.",
|
"use_adguard_browsing_sec_hint": "AdGuard Home va verifica dacă domeniul este în lista de blocări a serviciul web de securitate de navigare. Pentru acesta va utiliza un lookup API discret: un prefix scurt al numelui de domeniu SHA256 hash este trimis serverului.",
|
||||||
"use_adguard_parental": "Utilizați Controlul Parental AdGuard",
|
"use_adguard_parental": "Utilizați Controlul Parental AdGuard",
|
||||||
"use_adguard_parental_hint": "AdGuard Home va verifica pentru conținut adult pe domeniu. Utilizează același API discret ca cel utilizat de serviciul de securitate de navigare.",
|
"use_adguard_parental_hint": "AdGuard Home va verifica pentru conținut adult pe domeniu. Utilizează același API discret ca cel utilizat de serviciul de securitate de navigare.",
|
||||||
"enforce_safe_search": "Căutare protejată întărită",
|
"enforce_safe_search": "Căutare protejată întărită",
|
||||||
@ -125,14 +126,14 @@
|
|||||||
"no_servers_specified": "Nu sunt specificate servere",
|
"no_servers_specified": "Nu sunt specificate servere",
|
||||||
"general_settings": "Setări Generale",
|
"general_settings": "Setări Generale",
|
||||||
"dns_settings": "Setări DNS",
|
"dns_settings": "Setări DNS",
|
||||||
"dns_blocklists": "DNS liste blocări",
|
"dns_blocklists": "Liste de blocări DNS",
|
||||||
"dns_allowlists": "DNS liste autorizări",
|
"dns_allowlists": "Listă de DNS-uri autorizate",
|
||||||
"dns_blocklists_desc": "AdGuard Home blochează domenii incluse în liste de blocări.",
|
"dns_blocklists_desc": "AdGuard Home blochează domenii incluse în liste de blocări.",
|
||||||
"dns_allowlists_desc": "Domeniile DNS autorizate vor fi permise, chiar dacă se află pe orice listă de blocări.",
|
"dns_allowlists_desc": "Domeniile DNS autorizate vor fi permise, chiar dacă se află pe orice listă de blocări.",
|
||||||
"custom_filtering_rules": "Reguli filtrare personale",
|
"custom_filtering_rules": "Reguli filtrare personale",
|
||||||
"encryption_settings": "Setări de criptare",
|
"encryption_settings": "Setări de criptare",
|
||||||
"dhcp_settings": "Setări DHCP",
|
"dhcp_settings": "Setări DHCP",
|
||||||
"upstream_dns": "Servere upstream DNS",
|
"upstream_dns": "Servere DNS în amonte",
|
||||||
"upstream_dns_help": "Introduceți adresele serverelor una pe linie. <a>Aflați mai multe</a> despre configurarea serverelor DNS în amonte.",
|
"upstream_dns_help": "Introduceți adresele serverelor una pe linie. <a>Aflați mai multe</a> despre configurarea serverelor DNS în amonte.",
|
||||||
"upstream_dns_configured_in_file": "Configurat în {{path}}",
|
"upstream_dns_configured_in_file": "Configurat în {{path}}",
|
||||||
"test_upstream_btn": "Testați upstreams",
|
"test_upstream_btn": "Testați upstreams",
|
||||||
@ -170,7 +171,7 @@
|
|||||||
"edit_blocklist": "Editare blocare",
|
"edit_blocklist": "Editare blocare",
|
||||||
"edit_allowlist": "Editare autorizare",
|
"edit_allowlist": "Editare autorizare",
|
||||||
"choose_blocklist": "Alegeți liste de blocări",
|
"choose_blocklist": "Alegeți liste de blocări",
|
||||||
"choose_allowlist": "Alegeți liste de permisiuni",
|
"choose_allowlist": "Alegeți liste de autorizări",
|
||||||
"enter_valid_blocklist": "Introduceți un URL valid pentru blocare.",
|
"enter_valid_blocklist": "Introduceți un URL valid pentru blocare.",
|
||||||
"enter_valid_allowlist": "Introduceți un URL valid pentru autorizare.",
|
"enter_valid_allowlist": "Introduceți un URL valid pentru autorizare.",
|
||||||
"form_error_url_format": "Format URL invalid",
|
"form_error_url_format": "Format URL invalid",
|
||||||
@ -192,7 +193,7 @@
|
|||||||
"example_upstream_sdns": "puteți utiliza <0>DNS Stamps</0> pentru rezolvere <1>DNSCrypt</1> sau <2>DNS-over-HTTPS</2>",
|
"example_upstream_sdns": "puteți utiliza <0>DNS Stamps</0> pentru rezolvere <1>DNSCrypt</1> sau <2>DNS-over-HTTPS</2>",
|
||||||
"example_upstream_tcp": "DNS clasic (over TCP)",
|
"example_upstream_tcp": "DNS clasic (over TCP)",
|
||||||
"all_lists_up_to_date_toast": "Toate listele sunt deja la zi",
|
"all_lists_up_to_date_toast": "Toate listele sunt deja la zi",
|
||||||
"updated_upstream_dns_toast": "Serverele DNS upstream aduse la zi",
|
"updated_upstream_dns_toast": "Serverele DNS în amonte aduse la zi",
|
||||||
"dns_test_ok_toast": "Serverele DNS specificate funcționează corect",
|
"dns_test_ok_toast": "Serverele DNS specificate funcționează corect",
|
||||||
"dns_test_not_ok_toast": "Serverul \"{{key}}\": nu a putut fi utilizat, verificați dacă l-ați scris corect",
|
"dns_test_not_ok_toast": "Serverul \"{{key}}\": nu a putut fi utilizat, verificați dacă l-ați scris corect",
|
||||||
"unblock": "Deblocați",
|
"unblock": "Deblocați",
|
||||||
@ -212,7 +213,7 @@
|
|||||||
"empty_response_status": "Gol",
|
"empty_response_status": "Gol",
|
||||||
"show_all_filter_type": "Arată tot",
|
"show_all_filter_type": "Arată tot",
|
||||||
"show_filtered_type": "Arată cele filtrate",
|
"show_filtered_type": "Arată cele filtrate",
|
||||||
"no_logs_found": "Nici un jurnal găsit",
|
"no_logs_found": "Niciun jurnal găsit",
|
||||||
"refresh_btn": "Actualizare",
|
"refresh_btn": "Actualizare",
|
||||||
"previous_btn": "Anterior",
|
"previous_btn": "Anterior",
|
||||||
"next_btn": "Următor",
|
"next_btn": "Următor",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "IP personalizat",
|
"custom_ip": "IP personalizat",
|
||||||
"blocking_ipv4": "Blocarea IPv4",
|
"blocking_ipv4": "Blocarea IPv4",
|
||||||
"blocking_ipv6": "Blocarea IPv6",
|
"blocking_ipv6": "Blocarea IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "ID Client",
|
||||||
|
"client_id_placeholder": "Introduceți ID client",
|
||||||
|
"client_id_desc": "Diferiți clienți pot fi identificați printr-un ID special al clientului. <a>Aici</a> puteți afla mai multe despre cum să identificați clienții.",
|
||||||
"download_mobileconfig_doh": "Descărcați .mobileconfig pentru DNS-over-HTTPS",
|
"download_mobileconfig_doh": "Descărcați .mobileconfig pentru DNS-over-HTTPS",
|
||||||
"download_mobileconfig_dot": "Descărcați .mobileconfig pentru DNS-over-TLS",
|
"download_mobileconfig_dot": "Descărcați .mobileconfig pentru DNS-over-TLS",
|
||||||
|
"download_mobileconfig": "Descărcați fișierul de configurare",
|
||||||
"plain_dns": "DNS simplu",
|
"plain_dns": "DNS simplu",
|
||||||
"form_enter_rate_limit": "Introduceți limita ratei",
|
"form_enter_rate_limit": "Introduceți limita ratei",
|
||||||
"rate_limit": "Limita ratei",
|
"rate_limit": "Limita ratei",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Sursă",
|
"source_label": "Sursă",
|
||||||
"found_in_known_domain_db": "Găsit în baza de date de domenii cunoscută.",
|
"found_in_known_domain_db": "Găsit în baza de date de domenii cunoscută.",
|
||||||
"category_label": "Categorie",
|
"category_label": "Categorie",
|
||||||
"rule_label": "Regulă",
|
"rule_label": "Regulă(reguli)",
|
||||||
"list_label": "Listă",
|
"list_label": "Listă",
|
||||||
"unknown_filter": "Filtru necunoscut {{filterId}}",
|
"unknown_filter": "Filtru necunoscut {{filterId}}",
|
||||||
"known_tracker": "Tracker cunoscut",
|
"known_tracker": "Tracker cunoscut",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Configurația de criptare salvată",
|
"encryption_config_saved": "Configurația de criptare salvată",
|
||||||
"encryption_server": "Nume de server",
|
"encryption_server": "Nume de server",
|
||||||
"encryption_server_enter": "Introduceți numele domeniului",
|
"encryption_server_enter": "Introduceți numele domeniului",
|
||||||
"encryption_server_desc": "Pentru a utiliza HTTPS, trebuie introdus numele serverului care corespunde certificatului SSL.",
|
"encryption_server_desc": "Pentru a utiliza HTTPS, trebuie să introduceți numele serverului care se potrivește cu certificatul SSL sau certificatul wildcard al dvs. În cazul în care câmpul nu este setat, va accepta conexiuni TLS pentru orice domeniu.",
|
||||||
"encryption_redirect": "Redirecționați automat la HTTPS",
|
"encryption_redirect": "Redirecționați automat la HTTPS",
|
||||||
"encryption_redirect_desc": "Dacă este bifat, AdGuard Home vă va redirecționa automat de la adrese HTTP la HTTPS.",
|
"encryption_redirect_desc": "Dacă este bifat, AdGuard Home vă va redirecționa automat de la adrese HTTP la HTTPS.",
|
||||||
"encryption_https": "Port HTTPS",
|
"encryption_https": "Port HTTPS",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Editare client",
|
"client_edit": "Editare client",
|
||||||
"client_identifier": "Identificator",
|
"client_identifier": "Identificator",
|
||||||
"ip_address": "Adresa IP",
|
"ip_address": "Adresa IP",
|
||||||
"client_identifier_desc": "Clienții pot fi identificați prin adresa IP, CIDR, adresa MAC. Vă rugăm să rețineți că utilizarea MAC ca identificator este posibilă numai dacă AdGuard Home este și un <0>server DHCP</0>",
|
"client_identifier_desc": "Clienții pot fi identificați prin adresa IP, CIDR, adresa MAC sau un ID special al clientului (poate fi folosit pentru DoT/DoH/DoQ). <0>Aici</0> puteți afla mai multe despre cum să identificați clienții.",
|
||||||
"form_enter_ip": "Introduceți IP",
|
"form_enter_ip": "Introduceți IP",
|
||||||
"form_enter_mac": "Introduceți MAC",
|
"form_enter_mac": "Introduceți MAC",
|
||||||
"form_enter_id": "Introduceți identificator",
|
"form_enter_id": "Introduceți identificator",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> acceptă <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> acceptă <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> acceptă <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> acceptă <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Veți găsi mai multe implementări <0>aici</0> și <1>aici</1>.",
|
"setup_dns_privacy_other_5": "Veți găsi mai multe implementări <0>aici</0> și <1>aici</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Configurarea iOS și macOS",
|
||||||
"setup_dns_notice": "Pentru a utiliza <1>DNS-over-HTTPS</1> sau <1>DNS-over-TLS</1>, trebuie să <0>configurați Criptarea</0> în setările AdGuard Home.",
|
"setup_dns_notice": "Pentru a utiliza <1>DNS-over-HTTPS</1> sau <1>DNS-over-TLS</1>, trebuie să <0>configurați Criptarea</0> în setările AdGuard Home.",
|
||||||
"rewrite_added": "Rescriere DNS pentru \"{{key}}\" adăugată cu succes",
|
"rewrite_added": "Rescriere DNS pentru \"{{key}}\" adăugată cu succes",
|
||||||
"rewrite_deleted": "Rescriere DNS pentru \"{{key}}\" ștearsă cu succes",
|
"rewrite_deleted": "Rescriere DNS pentru \"{{key}}\" ștearsă cu succes",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "Adrese IP: {{ip}}",
|
"check_ip": "Adrese IP: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Cauza: {{reason}}",
|
"check_reason": "Cauza: {{reason}}",
|
||||||
"check_rule": "Regula: {{rule}}",
|
|
||||||
"check_service": "Nume servici: {{service}}",
|
"check_service": "Nume servici: {{service}}",
|
||||||
"service_name": "Numele serviciului",
|
"service_name": "Numele serviciului",
|
||||||
"check_not_found": "Nu se găsește în listele de filtre",
|
"check_not_found": "Nu se găsește în listele de filtre",
|
||||||
@ -560,7 +567,7 @@
|
|||||||
"filtered": "Filtrate",
|
"filtered": "Filtrate",
|
||||||
"rewritten": "Rescrise",
|
"rewritten": "Rescrise",
|
||||||
"safe_search": "Căutare sigură",
|
"safe_search": "Căutare sigură",
|
||||||
"blocklist": "Lista neagră",
|
"blocklist": "Lista de blocări",
|
||||||
"milliseconds_abbreviation": "ms",
|
"milliseconds_abbreviation": "ms",
|
||||||
"cache_size": "Mărime cache",
|
"cache_size": "Mărime cache",
|
||||||
"cache_size_desc": "Mărime cache DNS (în octeți)",
|
"cache_size_desc": "Mărime cache DNS (în octeți)",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Неверный формат IP-адреса",
|
"form_error_ip_format": "Неверный формат IP-адреса",
|
||||||
"form_error_mac_format": "Некорректный формат MAC",
|
"form_error_mac_format": "Некорректный формат MAC",
|
||||||
"form_error_client_id_format": "Неверный формат ID клиента",
|
"form_error_client_id_format": "Неверный формат ID клиента",
|
||||||
|
"form_error_server_name": "Неверное имя сервера",
|
||||||
"form_error_positive": "Должно быть больше 0",
|
"form_error_positive": "Должно быть больше 0",
|
||||||
"form_error_negative": "Должно быть не меньше 0",
|
"form_error_negative": "Должно быть не меньше 0",
|
||||||
"range_end_error": "Должно превышать начало диапазона",
|
"range_end_error": "Должно превышать начало диапазона",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "Свой IP",
|
"custom_ip": "Свой IP",
|
||||||
"blocking_ipv4": "Блокировка IPv4",
|
"blocking_ipv4": "Блокировка IPv4",
|
||||||
"blocking_ipv6": "Блокировка IPv6",
|
"blocking_ipv6": "Блокировка IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "Идентификатор клиента",
|
||||||
|
"client_id_placeholder": "Введите идентификатор клиента",
|
||||||
|
"client_id_desc": "Различные клиенты могут идентифицироваться по специальному идентификатору клиента. <a>Здесь</a> вы можете узнать больше об идентификации клиентов.",
|
||||||
"download_mobileconfig_doh": "Скачать .mobileconfig для DNS-over-HTTPS",
|
"download_mobileconfig_doh": "Скачать .mobileconfig для DNS-over-HTTPS",
|
||||||
"download_mobileconfig_dot": "Скачать .mobileconfig для DNS-over-TLS",
|
"download_mobileconfig_dot": "Скачать .mobileconfig для DNS-over-TLS",
|
||||||
|
"download_mobileconfig": "Загрузить файл конфигурации",
|
||||||
"plain_dns": "Нешифрованный DNS",
|
"plain_dns": "Нешифрованный DNS",
|
||||||
"form_enter_rate_limit": "Введите rate limit",
|
"form_enter_rate_limit": "Введите rate limit",
|
||||||
"rate_limit": "Rate limit",
|
"rate_limit": "Rate limit",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Источник",
|
"source_label": "Источник",
|
||||||
"found_in_known_domain_db": "Найден в базе известных доменов.",
|
"found_in_known_domain_db": "Найден в базе известных доменов.",
|
||||||
"category_label": "Категория",
|
"category_label": "Категория",
|
||||||
"rule_label": "Правило",
|
"rule_label": "Правило(-а)",
|
||||||
"list_label": "Список",
|
"list_label": "Список",
|
||||||
"unknown_filter": "Неизвестный фильтр {{filterId}}",
|
"unknown_filter": "Неизвестный фильтр {{filterId}}",
|
||||||
"known_tracker": "Известный трекер",
|
"known_tracker": "Известный трекер",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Настройки шифрования сохранены",
|
"encryption_config_saved": "Настройки шифрования сохранены",
|
||||||
"encryption_server": "Имя сервера",
|
"encryption_server": "Имя сервера",
|
||||||
"encryption_server_enter": "Введите ваше доменное имя",
|
"encryption_server_enter": "Введите ваше доменное имя",
|
||||||
"encryption_server_desc": "Для использования HTTPS вам необходимо ввести имя сервера, которое подходит вашему SSL-сертификату.",
|
"encryption_server_desc": "Для использования HTTPS вам необходимо ввести имя сервера, которое подходит вашему SSL-сертификату или сертификату с поддержкой поддоменов. Если это поле не задано, сервер будет принимать TLS-соединения для любого домена.",
|
||||||
"encryption_redirect": "Автоматически перенаправлять на HTTPS",
|
"encryption_redirect": "Автоматически перенаправлять на HTTPS",
|
||||||
"encryption_redirect_desc": "Если включено, AdGuard Home будет автоматически перенаправлять вас с HTTP на HTTPS адрес.",
|
"encryption_redirect_desc": "Если включено, AdGuard Home будет автоматически перенаправлять вас с HTTP на HTTPS адрес.",
|
||||||
"encryption_https": "Порт HTTPS",
|
"encryption_https": "Порт HTTPS",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Редактировать клиента",
|
"client_edit": "Редактировать клиента",
|
||||||
"client_identifier": "Идентификатор",
|
"client_identifier": "Идентификатор",
|
||||||
"ip_address": "IP-адрес",
|
"ip_address": "IP-адрес",
|
||||||
"client_identifier_desc": "Клиенты могут быть идентифицированы по IP-адресу, CIDR или MAC-адресу. Обратите внимание, что использование MAC как идентификатора возможно, только если AdGuard Home также является и <0>DHCP-сервером</0>",
|
"client_identifier_desc": "Клиенты могут быть идентифицированы по IP-адресу, CIDR или MAC-адресу или специальному ID (можно использовать для DoT/DoH/DoQ). <0>Здесь</0> вы можете узнать больше об идентификации клиентов.",
|
||||||
"form_enter_ip": "Введите IP",
|
"form_enter_ip": "Введите IP",
|
||||||
"form_enter_mac": "Введите MAC",
|
"form_enter_mac": "Введите MAC",
|
||||||
"form_enter_id": "Введите идентификатор",
|
"form_enter_id": "Введите идентификатор",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> поддерживает <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> поддерживает <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> поддерживает <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> поддерживает <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Вы можете найти еще варианты <0>тут</0> и <1>тут</1>.",
|
"setup_dns_privacy_other_5": "Вы можете найти еще варианты <0>тут</0> и <1>тут</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Конфигурация для iOS и macOS",
|
||||||
"setup_dns_notice": "Чтобы использовать <1>DNS-over-HTTPS</1> или <1>DNS-over-TLS</1>, вам нужно <0>настроить шифрование</0> в настройках AdGuard Home.",
|
"setup_dns_notice": "Чтобы использовать <1>DNS-over-HTTPS</1> или <1>DNS-over-TLS</1>, вам нужно <0>настроить шифрование</0> в настройках AdGuard Home.",
|
||||||
"rewrite_added": "Правило перенаправления DNS для \"{{key}}\" успешно добавлено",
|
"rewrite_added": "Правило перенаправления DNS для \"{{key}}\" успешно добавлено",
|
||||||
"rewrite_deleted": "Правило перенаправления DNS для \"{{key}}\" успешно удалено",
|
"rewrite_deleted": "Правило перенаправления DNS для \"{{key}}\" успешно удалено",
|
||||||
@ -511,7 +519,7 @@
|
|||||||
"disable_ipv6": "Отключить IPv6",
|
"disable_ipv6": "Отключить IPv6",
|
||||||
"disable_ipv6_desc": "Если эта опция включена, все DNS-запросы адресов IPv6 (тип AAAA) будут игнорироваться.",
|
"disable_ipv6_desc": "Если эта опция включена, все DNS-запросы адресов IPv6 (тип AAAA) будут игнорироваться.",
|
||||||
"fastest_addr": "Самый быстрый IP-адрес",
|
"fastest_addr": "Самый быстрый IP-адрес",
|
||||||
"fastest_addr_desc": "Опросить все DNS-серверы и вернуть самый быстрый IP-адрес из полученных ответов",
|
"fastest_addr_desc": "Опросить все DNS-серверы и вернуть самый быстрый IP-адрес из полученных ответов. Это замедлит DNS-запросы, так как нужно будет дождаться ответов со всех DNS-серверов, но улучшит соединение.",
|
||||||
"autofix_warning_text": "При нажатии \"Исправить\" AdGuard Home настроит вашу систему на использование DNS-сервера AdGuard Home.",
|
"autofix_warning_text": "При нажатии \"Исправить\" AdGuard Home настроит вашу систему на использование DNS-сервера AdGuard Home.",
|
||||||
"autofix_warning_list": "Будут выполняться следующие задачи: <0>Деактивировать системный DNSStubListener</0> <0>Установить адрес сервера DNS на 127.0.0.1</0> <0>Создать символическую ссылку /etc/resolv.conf на /run/systemd/resolve/resolv.conf</0> <0>Остановить DNSStubListener (перезагрузить системную службу)</0>.",
|
"autofix_warning_list": "Будут выполняться следующие задачи: <0>Деактивировать системный DNSStubListener</0> <0>Установить адрес сервера DNS на 127.0.0.1</0> <0>Создать символическую ссылку /etc/resolv.conf на /run/systemd/resolve/resolv.conf</0> <0>Остановить DNSStubListener (перезагрузить системную службу)</0>.",
|
||||||
"autofix_warning_result": "В результате все DNS-запросы от вашей системы будут по умолчанию обрабатываться AdGuard Home.\n",
|
"autofix_warning_result": "В результате все DNS-запросы от вашей системы будут по умолчанию обрабатываться AdGuard Home.\n",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP-адреса: {{ip}}",
|
"check_ip": "IP-адреса: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Причина: {{reason}}",
|
"check_reason": "Причина: {{reason}}",
|
||||||
"check_rule": "Правило: {{rule}}",
|
|
||||||
"check_service": "Название сервиса: {{service}}",
|
"check_service": "Название сервиса: {{service}}",
|
||||||
"service_name": "Имя сервиса",
|
"service_name": "Имя сервиса",
|
||||||
"check_not_found": "Не найдено в вашем списке фильтров",
|
"check_not_found": "Не найдено в вашем списке фильтров",
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "අනුග්රාහක සැකසුම්",
|
"client_settings": "අනුග්රාහක සැකසුම්",
|
||||||
|
"example_upstream_comment": "ඔබට අදහසක් සඳහන් කළ හැකිය",
|
||||||
"parallel_requests": "සමාන්තර ඉල්ලීම්",
|
"parallel_requests": "සමාන්තර ඉල්ලීම්",
|
||||||
"load_balancing": "ධාරිතාව තුලනය",
|
"load_balancing": "ධාරිතාව තුලනය",
|
||||||
"check_dhcp_servers": "ග.ධා.වි.කෙ. සේවාදායකයන් සඳහා පරීක්ෂා කරන්න",
|
"check_dhcp_servers": "ග.ධා.වි.කෙ. සේවාදායකයන් සඳහා පරීක්ෂා කරන්න",
|
||||||
@ -12,13 +13,13 @@
|
|||||||
"dhcp_enable": "ග.ධා.වි.කෙ. සේවාදායකය සබල කරන්න",
|
"dhcp_enable": "ග.ධා.වි.කෙ. සේවාදායකය සබල කරන්න",
|
||||||
"dhcp_disable": "ග.ධා.වි.කෙ. සේවාදායකය අබල කරන්න",
|
"dhcp_disable": "ග.ධා.වි.කෙ. සේවාදායකය අබල කරන්න",
|
||||||
"dhcp_config_saved": "ග.ධා.වි.කෙ. වින්යාසය සාර්ථකව සුරකින ලදි",
|
"dhcp_config_saved": "ග.ධා.වි.කෙ. වින්යාසය සාර්ථකව සුරකින ලදි",
|
||||||
"dhcp_ipv4_settings": "ග.ධා.වි.කෙ. IPv4 සැකසුම්",
|
"dhcp_ipv4_settings": "ග.ධා.වි.කෙ. අයිපීවී 4 සැකසුම්",
|
||||||
"dhcp_ipv6_settings": "ග.ධා.වි.කෙ. IPv6 සැකසුම්",
|
"dhcp_ipv6_settings": "ග.ධා.වි.කෙ. අයිපීවී 6 සැකසුම්",
|
||||||
"form_error_required": "අවශ්ය ක්ෂේත්රයකි",
|
"form_error_required": "අවශ්ය ක්ෂේත්රයකි",
|
||||||
"form_error_ip4_format": "වලංගු නොවන IPv4 ආකෘතියකි",
|
"form_error_ip4_format": "වලංගු නොවන IPv4 ආකෘතියකි",
|
||||||
"form_error_ip6_format": "වලංගු නොවන IPv6 ආකෘතියකි",
|
"form_error_ip6_format": "වලංගු නොවන IPv6 ආකෘතියකි",
|
||||||
"form_error_ip_format": "වලංගු නොවන අ.ජා. කෙ. (IP) ආකෘතියකි",
|
"form_error_ip_format": "වලංගු නොවන අ.ජා. කෙ. (IP) ආකෘතියකි",
|
||||||
"form_error_mac_format": "වලංගු නොවන MAC ආකෘතියකි",
|
"form_error_mac_format": "වලංගු නොවන මා.ප්ර.පා. ආකෘතියකි",
|
||||||
"form_error_client_id_format": "වලංගු නොවන අනුග්රාහක හැඳුනුම් ආකෘතියකි",
|
"form_error_client_id_format": "වලංගු නොවන අනුග්රාහක හැඳුනුම් ආකෘතියකි",
|
||||||
"form_error_positive": "0 ට වඩා වැඩි විය යුතුය",
|
"form_error_positive": "0 ට වඩා වැඩි විය යුතුය",
|
||||||
"form_error_negative": "0 හෝ ඊට වැඩි විය යුතුය",
|
"form_error_negative": "0 හෝ ඊට වැඩි විය යුතුය",
|
||||||
@ -71,7 +72,7 @@
|
|||||||
"dns_query": "ව.නා.ප. (DNS) විමසුම්",
|
"dns_query": "ව.නා.ප. (DNS) විමසුම්",
|
||||||
"blocked_by": "<0>පෙරහන් මගින් අවහිර කරන ලද</0>",
|
"blocked_by": "<0>පෙරහන් මගින් අවහිර කරන ලද</0>",
|
||||||
"stats_malware_phishing": "අවහිර කළ ද්වේශාංග/තතුබෑම්",
|
"stats_malware_phishing": "අවහිර කළ ද්වේශාංග/තතුබෑම්",
|
||||||
"stats_adult": "අවහිර කළ වැඩිහිටි වෙබ් අඩවි",
|
"stats_adult": "අවහිර කළ වැඩිහිටි වියමන අඩවි",
|
||||||
"stats_query_domain": "ජනප්රිය විමසන ලද වසම්",
|
"stats_query_domain": "ජනප්රිය විමසන ලද වසම්",
|
||||||
"for_last_24_hours": "පසුගිය පැය 24 සඳහා",
|
"for_last_24_hours": "පසුගිය පැය 24 සඳහා",
|
||||||
"for_last_days": "පසුගිය දින {{count}} සඳහා",
|
"for_last_days": "පසුගිය දින {{count}} සඳහා",
|
||||||
@ -82,29 +83,29 @@
|
|||||||
"top_clients": "ජනප්රිය අනුග්රාහකයන්",
|
"top_clients": "ජනප්රිය අනුග්රාහකයන්",
|
||||||
"general_statistics": "පොදු සංඛ්යාලේඛන",
|
"general_statistics": "පොදු සංඛ්යාලේඛන",
|
||||||
"number_of_dns_query_blocked_24_hours": "දැන්වීම් වාරණ පෙරහන් සහ ධාරක වාරණ ලැයිස්තු මගින් අවහිර කරන ලද ව.නා.ප. ඉල්ලීම් ගණන",
|
"number_of_dns_query_blocked_24_hours": "දැන්වීම් වාරණ පෙරහන් සහ ධාරක වාරණ ලැයිස්තු මගින් අවහිර කරන ලද ව.නා.ප. ඉල්ලීම් ගණන",
|
||||||
"number_of_dns_query_blocked_24_hours_by_sec": "AdGuard browsing security ඒකකය මගින් අවහිර කරන ලද ව.නා.ප. ඉල්ලීම් ගණන",
|
"number_of_dns_query_blocked_24_hours_by_sec": "ඇඩ්ගාර්ඩ් පිරික්සුම් ආරක්ෂණ ඒකකය මගින් අවහිර කරන ලද ව.නා.ප. ඉල්ලීම් ගණන",
|
||||||
"number_of_dns_query_blocked_24_hours_adult": "අවහිර කළ වැඩිහිටි වෙබ් අඩවි ගණන",
|
"number_of_dns_query_blocked_24_hours_adult": "අවහිර කළ වැඩිහිටි වියමන අඩවි ගණන",
|
||||||
"enforced_save_search": "ආරක්ෂිත සෙවීම බලාත්මක කරන ලද",
|
"enforced_save_search": "ආරක්ෂිත සෙවීම බලාත්මක කරන ලද",
|
||||||
"number_of_dns_query_to_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කළ සෙවුම් යන්ත්ර සඳහා ව.නා.ප. ඉල්ලීම් ගණන",
|
"number_of_dns_query_to_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කළ සෙවුම් යන්ත්ර සඳහා ව.නා.ප. ඉල්ලීම් ගණන",
|
||||||
"average_processing_time": "සාමාන්ය සැකසුම් කාලය",
|
"average_processing_time": "සාමාන්ය සැකසුම් කාලය",
|
||||||
"average_processing_time_hint": "ව.නා.ප. ඉල්ලීමක් සැකසීමේ සාමාන්ය කාලය මිලි තත්පර වලින්",
|
"average_processing_time_hint": "ව.නා.ප. ඉල්ලීමක් සැකසීමේ සාමාන්ය කාලය මිලි තත්පර වලින්",
|
||||||
"block_domain_use_filters_and_hosts": "පෙරහන් සහ ධාරක ගොනු භාවිතා කරමින් වසම් අවහිර කරන්න",
|
"block_domain_use_filters_and_hosts": "පෙරහන් සහ ධාරක ගොනු භාවිතා කරමින් වසම් අවහිර කරන්න",
|
||||||
"filters_block_toggle_hint": "ඔබට අවහිර කිරීමේ නීති <a>පෙරහන්</a> තුළ පිහිටුවිය හැකිය.",
|
"filters_block_toggle_hint": "ඔබට අවහිර කිරීමේ නීති <a>පෙරහන්</a> තුළ පිහිටුවිය හැකිය.",
|
||||||
"use_adguard_browsing_sec": "AdGuard browsing security වෙබ් සේවාව භාවිතා කරන්න",
|
"use_adguard_browsing_sec": "ඇඩ්ගාර්ඩ් පිරික්සුම් ආරක්ෂණ වියමන සේවාව භාවිතා කරන්න",
|
||||||
"use_adguard_parental": "AdGuard parental control වෙබ් සේවාව භාවිතා කරන්න",
|
"use_adguard_parental": "ඇඩ්ගාර්ඩ් දෙමාපිය පාලන වියමන සේවාව භාවිතා කරන්න",
|
||||||
"use_adguard_parental_hint": "වසමේ වැඩිහිටියන්ට අදාල කරුණු අඩංගු දැයි ඇඩ්ගාර්ඩ් හෝම් විසින් පරීක්ෂා කරනු ඇත. එය browsing security වෙබ් සේවාව මෙන් රහස්යතා හිතකාමී යෙ.ක්ර. අ.මු. (API) භාවිතා කරයි.",
|
"use_adguard_parental_hint": "වසමේ වැඩිහිටියන්ට අදාල කරුණු අඩංගු දැයි ඇඩ්ගාර්ඩ් හෝම් විසින් පරීක්ෂා කරනු ඇත. එය පිරික්සුම් ආරක්ෂණ වියමන සේවාව මෙන් රහස්යතා හිතකාමී යෙ.ක්ර. අ.මු. (API) භාවිතා කරයි.",
|
||||||
"enforce_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කරන්න",
|
"enforce_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කරන්න",
|
||||||
"enforce_save_search_hint": "ඇඩ්ගාර්ඩ් හෝම් හට පහත සෙවුම් යන්ත්ර තුළ ආරක්ෂිත සෙවීම බලාත්මක කළ හැකිය: ගූගල්, යූටියුබ්, බින්ග්, ඩක්ඩක්ගෝ, යාන්ඩෙක්ස් සහ පික්සාබේ.",
|
"enforce_save_search_hint": "ඇඩ්ගාර්ඩ් හෝම් හට පහත සෙවුම් යන්ත්ර තුළ ආරක්ෂිත සෙවීම බලාත්මක කළ හැකිය: ගූගල්, යූටියුබ්, බින්ග්, ඩක්ඩක්ගෝ, යාන්ඩෙක්ස් සහ පික්සාබේ.",
|
||||||
"no_servers_specified": "සේවාදායක කිසිවක් නිශ්චිතව දක්වා නැත",
|
"no_servers_specified": "සේවාදායක කිසිවක් නිශ්චිතව දක්වා නැත",
|
||||||
"general_settings": "පොදු සැකසුම්",
|
"general_settings": "පොදු සැකසුම්",
|
||||||
"dns_settings": "DNS සැකසුම්",
|
"dns_settings": "ව.නා.ප. සැකසුම්",
|
||||||
"dns_blocklists": "DNS අවහිර කිරීමේ ලැයිස්තු",
|
"dns_blocklists": "ව.නා.ප. අවහිර කිරීමේ ලැයිස්තු",
|
||||||
"dns_allowlists": "DNS අවසර දීමේ ලැයිස්තු",
|
"dns_allowlists": "ව.නා.ප. අවසර දීමේ ලැයිස්තු",
|
||||||
"dns_blocklists_desc": "ඇඩ්ගාර්ඩ් හෝම් විසින් අවහිර කිරීමේ ලැයිස්තු වලට ගැලපෙන වසම් අවහිර කරනු ඇත.",
|
"dns_blocklists_desc": "ඇඩ්ගාර්ඩ් හෝම් විසින් අවහිර කිරීමේ ලැයිස්තු වලට ගැලපෙන වසම් අවහිර කරනු ඇත.",
|
||||||
"dns_allowlists_desc": "අවසර දීමේ ව.නා.ප. ලැයිස්තුවල වසම් කිසියම් අවහිර කිරීමේ ලැයිස්තුවක අඩංගු වුවද එය නොසලකා හැර අවසර දෙනු ලැබේ.",
|
"dns_allowlists_desc": "අවසර දීමේ ව.නා.ප. ලැයිස්තුවල වසම් කිසියම් අවහිර කිරීමේ ලැයිස්තුවක අඩංගු වුවද එය නොසලකා හැර අවසර දෙනු ලැබේ.",
|
||||||
"custom_filtering_rules": "අභිරුචි පෙරීමේ නීති",
|
"custom_filtering_rules": "අභිරුචි පෙරීමේ නීති",
|
||||||
"encryption_settings": "සංකේතාංකන සැකසුම්",
|
"encryption_settings": "සංකේතාංකන සැකසුම්",
|
||||||
"dhcp_settings": "DHCP සැකසුම්",
|
"dhcp_settings": "ග.ධා.වි.කෙ. සැකසුම්",
|
||||||
"upstream_dns": "Upstream ව.නා.ප. සේවාදායකයන්",
|
"upstream_dns": "Upstream ව.නා.ප. සේවාදායකයන්",
|
||||||
"upstream_dns_help": "පේළියකට එක් සේවාදායක ලිපිනය බැගින් ඇතුළත් කරන්න. upstream ව.නා.ප. (DNS) \n සේවාදායකයන් වින්යාසගත කිරීම ගැන <a>තව දැනගන්න</a>.",
|
"upstream_dns_help": "පේළියකට එක් සේවාදායක ලිපිනය බැගින් ඇතුළත් කරන්න. upstream ව.නා.ප. (DNS) \n සේවාදායකයන් වින්යාසගත කිරීම ගැන <a>තව දැනගන්න</a>.",
|
||||||
"apply_btn": "යොදන්න",
|
"apply_btn": "යොදන්න",
|
||||||
@ -118,7 +119,7 @@
|
|||||||
"enabled_save_search_toast": "ආරක්ෂිත සෙවීම සබල කර ඇත",
|
"enabled_save_search_toast": "ආරක්ෂිත සෙවීම සබල කර ඇත",
|
||||||
"enabled_table_header": "සබල කර ඇත",
|
"enabled_table_header": "සබල කර ඇත",
|
||||||
"name_table_header": "නම",
|
"name_table_header": "නම",
|
||||||
"list_url_table_header": "URL ලැයිස්තුව",
|
"list_url_table_header": "ඒ.ස.නි.(URL) ලැයිස්තුව",
|
||||||
"rules_count_table_header": "නීති ගණන",
|
"rules_count_table_header": "නීති ගණන",
|
||||||
"last_time_updated_table_header": "අවසන් වරට යාවත්කාලීන කරන ලද",
|
"last_time_updated_table_header": "අවසන් වරට යාවත්කාලීන කරන ලද",
|
||||||
"actions_table_header": "ක්රියාමාර්ග",
|
"actions_table_header": "ක්රියාමාර්ග",
|
||||||
@ -133,7 +134,7 @@
|
|||||||
"add_allowlist": "අවසර දීමේ ලැයිස්තුවක් එකතු කරන්න",
|
"add_allowlist": "අවසර දීමේ ලැයිස්තුවක් එකතු කරන්න",
|
||||||
"cancel_btn": "අහෝසි කරන්න",
|
"cancel_btn": "අහෝසි කරන්න",
|
||||||
"enter_name_hint": "නම ඇතුළත් කරන්න",
|
"enter_name_hint": "නම ඇතුළත් කරන්න",
|
||||||
"enter_url_or_path_hint": "ලැයිස්තුවක URL හෝ ස්ථීර මාර්ගයක් ඇතුළත් කරන්න",
|
"enter_url_or_path_hint": "ලැයිස්තුවක ඒ.ස.නි.(URL) හෝ ස්ථීර මාර්ගයක් ඇතුළත් කරන්න",
|
||||||
"check_updates_btn": "යාවත්කාල පරීක්ෂා කරන්න",
|
"check_updates_btn": "යාවත්කාල පරීක්ෂා කරන්න",
|
||||||
"new_blocklist": "නව අවහිර කිරීමේ ලැයිස්තුව",
|
"new_blocklist": "නව අවහිර කිරීමේ ලැයිස්තුව",
|
||||||
"new_allowlist": "නව අවසර දීමේ ලැයිස්තුව",
|
"new_allowlist": "නව අවසර දීමේ ලැයිස්තුව",
|
||||||
@ -141,10 +142,10 @@
|
|||||||
"edit_allowlist": "අවසර දීමේ ලැයිස්තුව සංස්කරණය කරන්න",
|
"edit_allowlist": "අවසර දීමේ ලැයිස්තුව සංස්කරණය කරන්න",
|
||||||
"choose_blocklist": "අවහිර කීරීමේ ලැයිස්තුවක් තෝරන්න",
|
"choose_blocklist": "අවහිර කීරීමේ ලැයිස්තුවක් තෝරන්න",
|
||||||
"choose_allowlist": "අනවහිර කීරීමේ ලැයිස්තුවක් තෝරන්න",
|
"choose_allowlist": "අනවහිර කීරීමේ ලැයිස්තුවක් තෝරන්න",
|
||||||
"enter_valid_blocklist": "අවහිර කිරීමේ ලැයිස්තුවට වලංගු URL ලිපිනයක් ඇතුළත් කරන්න.",
|
"enter_valid_blocklist": "අවහිර කිරීමේ ලැයිස්තුවට වලංගු ඒ.ස.නි.(URL) ලිපිනයක් ඇතුළත් කරන්න.",
|
||||||
"enter_valid_allowlist": "අවසර දීමේ ලැයිස්තුවට වලංගු URL ලිපිනයක් ඇතුළත් කරන්න.",
|
"enter_valid_allowlist": "අවසර දීමේ ලැයිස්තුවට වලංගු ඒ.ස.නි.(URL) ලිපිනයක් ඇතුළත් කරන්න.",
|
||||||
"form_error_url_format": "වලංගු නොවන URL ආකෘතියකි",
|
"form_error_url_format": "වලංගු නොවන ඒ.ස.නි.(URL) ආකෘතියකි",
|
||||||
"form_error_url_or_path_format": "ලැයිස්තුවක වලංගු නොවන URL හෝ ස්ථීර මාර්ගයකි",
|
"form_error_url_or_path_format": "ලැයිස්තුවක වලංගු නොවන ඒ.ස.නි.(URL) හෝ ස්ථීර මාර්ගයකි",
|
||||||
"custom_filter_rules": "අභිරුචි පෙරීමේ නීති",
|
"custom_filter_rules": "අභිරුචි පෙරීමේ නීති",
|
||||||
"custom_filter_rules_hint": "පේළියකට එක් නීතියක් බැගින් ඇතුළත් කරන්න. ඔබට දැන්වීම් අවහිර කිරීමේ නීති හෝ ධාරක ගොනු පද ගැලපුම් භාවිතා කළ හැකිය.",
|
"custom_filter_rules_hint": "පේළියකට එක් නීතියක් බැගින් ඇතුළත් කරන්න. ඔබට දැන්වීම් අවහිර කිරීමේ නීති හෝ ධාරක ගොනු පද ගැලපුම් භාවිතා කළ හැකිය.",
|
||||||
"examples_title": "උදාහරණ",
|
"examples_title": "උදාහරණ",
|
||||||
@ -155,11 +156,11 @@
|
|||||||
"example_comment_meaning": "විස්තර කිරීමක්",
|
"example_comment_meaning": "විස්තර කිරීමක්",
|
||||||
"example_comment_hash": "# එසේම අදහස් දැක්වීමක්",
|
"example_comment_hash": "# එසේම අදහස් දැක්වීමක්",
|
||||||
"example_regex_meaning": "නිශ්චිතව දක්වා ඇති නිත්ය වාක්යවිධියට ගැලපෙන වසම් වෙත පිවිසීම අවහිර කරයි",
|
"example_regex_meaning": "නිශ්චිතව දක්වා ඇති නිත්ය වාක්යවිධියට ගැලපෙන වසම් වෙත පිවිසීම අවහිර කරයි",
|
||||||
"example_upstream_regular": "සාමාන්ය DNS (UDP හරහා)",
|
"example_upstream_regular": "සාමාන්ය ව.නා.ප. (UDP හරහා)",
|
||||||
"example_upstream_dot": "සංකේතාංකනය කළ <0>DNS-over-TLS</0>",
|
"example_upstream_dot": "සංකේතාංකනය කළ <0>DNS-over-TLS</0>",
|
||||||
"example_upstream_doh": "සංකේතාංකනය කළ <0>DNS-over-HTTPS</0>",
|
"example_upstream_doh": "සංකේතාංකනය කළ <0>DNS-over-HTTPS</0>",
|
||||||
"example_upstream_doq": "සංකේතාංකනය කළ <0>DNS-over-QUIC</0>",
|
"example_upstream_doq": "සංකේතාංකනය කළ <0>DNS-over-QUIC</0>",
|
||||||
"example_upstream_tcp": "සාමාන්ය DNS (TCP හරහා)",
|
"example_upstream_tcp": "සාමාන්ය ව.නා.ප. (TCP/ස.පා.කෙ. හරහා) ",
|
||||||
"all_lists_up_to_date_toast": "සියලුම ලැයිස්තු දැනටමත් යාවත්කාලීනයි",
|
"all_lists_up_to_date_toast": "සියලුම ලැයිස්තු දැනටමත් යාවත්කාලීනයි",
|
||||||
"dns_test_ok_toast": "සඳහන් කළ ව.නා.ප. සේවාදායකයන් නිවැරදිව ක්රියා කරයි",
|
"dns_test_ok_toast": "සඳහන් කළ ව.නා.ප. සේවාදායකයන් නිවැරදිව ක්රියා කරයි",
|
||||||
"dns_test_not_ok_toast": "සේවාදායක \"{{key}}\": භාවිතා කළ නොහැකි විය, කරුණාකර ඔබ එය නිවැරදිව ලියා ඇත්දැයි පරීක්ෂා කරන්න",
|
"dns_test_not_ok_toast": "සේවාදායක \"{{key}}\": භාවිතා කළ නොහැකි විය, කරුණාකර ඔබ එය නිවැරදිව ලියා ඇත්දැයි පරීක්ෂා කරන්න",
|
||||||
@ -201,14 +202,16 @@
|
|||||||
"anonymize_client_ip": "අනුග්රාහකයෙහි අ.ජා. කෙ. (IP) නිර්නාමික කරන්න",
|
"anonymize_client_ip": "අනුග්රාහකයෙහි අ.ජා. කෙ. (IP) නිර්නාමික කරන්න",
|
||||||
"anonymize_client_ip_desc": "ලොග සහ සංඛ්යාලේඛන තුළ අනුග්රාහකයේ සම්පූර්ණ අ.ජා. කෙ. ලිපිනය සුරකීමෙන් වලකින්න",
|
"anonymize_client_ip_desc": "ලොග සහ සංඛ්යාලේඛන තුළ අනුග්රාහකයේ සම්පූර්ණ අ.ජා. කෙ. ලිපිනය සුරකීමෙන් වලකින්න",
|
||||||
"dns_config": "ව.නා.ප. සේවාදායක වින්යාසය",
|
"dns_config": "ව.නා.ප. සේවාදායක වින්යාසය",
|
||||||
|
"dns_cache_config": "ව.නා.ප. නිහිත වින්යාසය",
|
||||||
|
"dns_cache_config_desc": "මෙහිදී ඔබට ව.නා.ප. නිහිතය වින්යාසගත කළ හැකිය",
|
||||||
"blocking_mode": "අවහිර කරන ආකාරය",
|
"blocking_mode": "අවහිර කරන ආකාරය",
|
||||||
"default": "සුපුරුදු",
|
"default": "සුපුරුදු",
|
||||||
"nxdomain": "නොපවතින වසම",
|
"nxdomain": "නොපවතින වසම",
|
||||||
"refused": "REFUSED",
|
"refused": "REFUSED",
|
||||||
"null_ip": "අභිශූන්යය අ.ජා. කෙ.",
|
"null_ip": "අභිශූන්යය අ.ජා. කෙ.",
|
||||||
"custom_ip": "අභිරුචි අ.ජා. කෙ.",
|
"custom_ip": "අභිරුචි අ.ජා. කෙ.",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"blocking_ipv4": "අයි.පී.වී.4 අවහිර කිරීම\n",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"blocking_ipv6": "අයි.පී.වී.6 අවහිර කිරීම",
|
||||||
"form_enter_rate_limit": "අනුපාත සීමාව ඇතුළත් කරන්න",
|
"form_enter_rate_limit": "අනුපාත සීමාව ඇතුළත් කරන්න",
|
||||||
"rate_limit": "අනුපාත සීමාව",
|
"rate_limit": "අනුපාත සීමාව",
|
||||||
"edns_enable": "EDNS අනුග්රාහක අනුජාලය සබල කරන්න",
|
"edns_enable": "EDNS අනුග්රාහක අනුජාලය සබල කරන්න",
|
||||||
@ -219,26 +222,26 @@
|
|||||||
"blocking_mode_nxdomain": "නොපවතින වසම (NXDOMAIN): NXDOMAIN කේතය සමඟ ප්රතිචාර දක්වයි",
|
"blocking_mode_nxdomain": "නොපවතින වසම (NXDOMAIN): NXDOMAIN කේතය සමඟ ප්රතිචාර දක්වයි",
|
||||||
"blocking_mode_null_ip": "අභිශූන්යය අ.ජා. කෙ. : ශුන්ය අ.ජා. කෙ. ලිපිනය සමඟ ප්රතිචාර දක්වයි (A සඳහා 0.0.0.0; AAAA සඳහා ::)",
|
"blocking_mode_null_ip": "අභිශූන්යය අ.ජා. කෙ. : ශුන්ය අ.ජා. කෙ. ලිපිනය සමඟ ප්රතිචාර දක්වයි (A සඳහා 0.0.0.0; AAAA සඳහා ::)",
|
||||||
"blocking_mode_custom_ip": "අභිරුචි අන්තර්ජාල කෙටුම්පත: අතින් සැකසූ අ.ජා. කෙ. ලිපිනයක් සමඟ ප්රතිචාර දක්වයි",
|
"blocking_mode_custom_ip": "අභිරුචි අන්තර්ජාල කෙටුම්පත: අතින් සැකසූ අ.ජා. කෙ. ලිපිනයක් සමඟ ප්රතිචාර දක්වයි",
|
||||||
"upstream_dns_client_desc": "ඔබ මෙම ක්ෂේත්රය හිස්ව තබා ගන්නේ නම්, ඇඩ්ගාර්ඩ් හෝම් විසින් <0>DNS සැකසුම්</0> හි වින්යාසගත කර ඇති සේවාදායකයන් භාවිතා කරනු ඇත.",
|
"upstream_dns_client_desc": "ඔබ මෙම ක්ෂේත්රය හිස්ව තබා ගන්නේ නම්, ඇඩ්ගාර්ඩ් හෝම් විසින් <0>ව.නා.ප. සැකසුම්</0> හි වින්යාසගත කර ඇති සේවාදායකයන් භාවිතා කරනු ඇත.",
|
||||||
"tracker_source": "ලුහුබැඳීම් මූලාශ්රය",
|
"tracker_source": "ලුහුබැඳීම් මූලාශ්රය",
|
||||||
"source_label": "මූලාශ්රය",
|
"source_label": "මූලාශ්රය",
|
||||||
"found_in_known_domain_db": "දැනුවත් වසම් දත්ත ගබඩාවේ හමු විය.",
|
"found_in_known_domain_db": "දැනුවත් වසම් දත්ත ගබඩාවේ හමු විය.",
|
||||||
"category_label": "ප්රවර්ගය",
|
"category_label": "ප්රවර්ගය",
|
||||||
"rule_label": "නීතිය",
|
|
||||||
"list_label": "ලැයිස්තුව",
|
"list_label": "ලැයිස්තුව",
|
||||||
"unknown_filter": "{{filterId}} නොදන්නා පෙරහනකි",
|
"unknown_filter": "{{filterId}} නොදන්නා පෙරහනකි",
|
||||||
"known_tracker": "දැනුවත් ලුහුබැඳීමක්",
|
"known_tracker": "දැනුවත් ලුහුබැඳීමක්",
|
||||||
"install_welcome_title": "ඇඩ්ගාර්ඩ් හෝම් වෙත සාදරයෙන් පිළිගනිමු!",
|
"install_welcome_title": "ඇඩ්ගාර්ඩ් හෝම් වෙත සාදරයෙන් පිළිගනිමු!",
|
||||||
"install_welcome_desc": "ඇඩ්ගාර්ඩ් හෝම් යනු ජාලය පුරා ඇති දැන්වීම් සහ ලුහුබැඳීම අවහිර කරන ව.නා.ප. සේවාදායකි. ඔබගේ මුළු ජාලය සහ සියලුම උපාංග පාලනය කිරීමට ඉඩ සලසා දීම එහි පරමාර්ථය යි, එයට අනුග්රාහක පාර්ශවීය වැඩසටහනක් භාවිතා කිරීම අවශ්ය නොවේ.",
|
"install_welcome_desc": "ඇඩ්ගාර්ඩ් හෝම් යනු ජාලය පුරා ඇති දැන්වීම් සහ ලුහුබැඳීම අවහිර කරන ව.නා.ප. සේවාදායකි. ඔබගේ මුළු ජාලය සහ සියලුම උපාංග පාලනය කිරීමට ඉඩ සලසා දීම එහි පරමාර්ථය යි, එයට අනුග්රාහක පාර්ශවීය වැඩසටහනක් භාවිතා කිරීම අවශ්ය නොවේ.",
|
||||||
"install_settings_title": "පරිපාලක වෙබ් අතුරු මුහුණත",
|
"install_settings_title": "පරිපාලක වියමන අතුරු මුහුණත",
|
||||||
"install_settings_listen": "සවන් දෙන අතුරු මුහුණත",
|
"install_settings_listen": "සවන් දෙන අතුරු මුහුණත",
|
||||||
"install_settings_port": "කවුළුව",
|
"install_settings_port": "කවුළුව",
|
||||||
|
"install_settings_interface_link": "ඔබගේ ඇඩ්ගාර්ඩ් හෝම් පරිපාලක වියමන අතුරු මුහුණත පහත ලිපිනයන්ගෙන් ප්රවේශ විය හැකිය:",
|
||||||
"form_error_port": "වලංගු කවුළුවක අගයක් ඇතුළත් කරන්න",
|
"form_error_port": "වලංගු කවුළුවක අගයක් ඇතුළත් කරන්න",
|
||||||
"install_settings_dns": "ව.නා.ප. සේවාදායකය",
|
"install_settings_dns": "ව.නා.ප. සේවාදායකය",
|
||||||
"install_settings_dns_desc": "පහත ලිපිනයන්හි ව.නා.ප. සේවාදායකය භාවිතා කිරීම සඳහා ඔබගේ උපාංග හෝ රවුටරය වින්යාසගත කිරීමට අවශ්ය වනු ඇත:",
|
"install_settings_dns_desc": "පහත ලිපිනයන්හි ව.නා.ප. සේවාදායකය භාවිතා කිරීම සඳහා ඔබගේ උපාංග හෝ මාර්ගකාරකය වින්යාසගත කිරීමට අවශ්ය වනු ඇත:",
|
||||||
"install_settings_all_interfaces": "සියලුම අතුරුමුහුණත්",
|
"install_settings_all_interfaces": "සියලුම අතුරුමුහුණත්",
|
||||||
"install_auth_title": "සත්යාපනය",
|
"install_auth_title": "සත්යාපනය",
|
||||||
"install_auth_desc": "ඔබගේ ඇඩ්ගාර්ඩ් හෝම් පරිපාලක වෙබ් අතුරු මුහුණතට මුරපද සත්යාපනය වින්යාසගත කිරීම අතිශයින් නිර්දේශ කෙරේ. එය ඔබගේ ස්ථානීය ජාලයෙන් පමණක් ප්රවේශ විය හැකි වුවද, එය තව දුරටත් සීමා රහිත ප්රවේශයකින් ආරක්ෂා කර ගැනීම වැදගත් ය.",
|
"install_auth_desc": "ඔබගේ ඇඩ්ගාර්ඩ් හෝම් පරිපාලක වියමන අතුරු මුහුණතට මුරපද සත්යාපනය වින්යාසගත කිරීම අතිශයින් නිර්දේශ කෙරේ. එය ඔබගේ ස්ථානීය ජාලයෙන් පමණක් ප්රවේශ විය හැකි වුවද, එය තව දුරටත් සීමා රහිත ප්රවේශයකින් ආරක්ෂා කර ගැනීම වැදගත් ය.",
|
||||||
"install_auth_username": "පරිශීලක නාමය",
|
"install_auth_username": "පරිශීලක නාමය",
|
||||||
"install_auth_password": "මුරපදය",
|
"install_auth_password": "මුරපදය",
|
||||||
"install_auth_confirm": "මුරපදය තහවුරු කරන්න",
|
"install_auth_confirm": "මුරපදය තහවුරු කරන්න",
|
||||||
@ -251,10 +254,11 @@
|
|||||||
"install_submit_desc": "පිහිටුවීමේ ක්රියා පටිපාටිය අවසන් වී ඇති අතර ඔබ ඇඩ්ගාර්ඩ් හෝම් භාවිතය ආරම්භ කිරීමට සූදානම්ය.",
|
"install_submit_desc": "පිහිටුවීමේ ක්රියා පටිපාටිය අවසන් වී ඇති අතර ඔබ ඇඩ්ගාර්ඩ් හෝම් භාවිතය ආරම්භ කිරීමට සූදානම්ය.",
|
||||||
"install_devices_router": "මාර්ගකාරකය",
|
"install_devices_router": "මාර්ගකාරකය",
|
||||||
"install_devices_router_desc": "මෙම පිහිටුම ඔබගේ නිවසේ මාර්ගකාරකයට සම්බන්ධ සියලුම උපාංග ස්වයංක්රීයව ආවරණය කරන අතර ඔබට ඒවා අතින් වින්යාසගත කිරීමට අවශ්ය නොවනු ඇත.",
|
"install_devices_router_desc": "මෙම පිහිටුම ඔබගේ නිවසේ මාර්ගකාරකයට සම්බන්ධ සියලුම උපාංග ස්වයංක්රීයව ආවරණය කරන අතර ඔබට ඒවා අතින් වින්යාසගත කිරීමට අවශ්ය නොවනු ඇත.",
|
||||||
"install_devices_router_list_1": "ඔබේ මාර්ගකාරකය සඳහා වූ මනාපයන් විවෘත කරන්න. සාමාන්යයෙන්, එය ඔබගේ බ්රව්සරයෙන් URL එකක් හරහා (http://192.168.0.1/ හෝ http://192.168.1.1/ වැනි) පිවිසිය හැකිය. මුරපදය ඇතුළත් කිරීමට ඔබෙන් ඉල්ලා සිටිය හැකිය. ඔබට එය මතක නැතිනම්, බොහෝ විට මාර්ගකාරකයේ බොත්තමක් එබීමෙන් මුරපදය නැවත සැකසිය හැක. සමහර මාර්ගකාරක සඳහා විශේෂිත යෙදුමක් අවශ්ය වන අතර, එය දැනටමත් ඔබේ පරිගණකයේ/දුරකථනයේ ස්ථාපනය කර තිබිය යුතුය.",
|
"install_devices_address": "ඇඩ්ගාර්ඩ් හෝම් ව.නා.ප. සේවාදායකය පහත ලිපිනයන්ට සවන් දෙමින් පවතී",
|
||||||
|
"install_devices_router_list_1": "ඔබේ මාර්ගකාරකය සඳහා වූ මනාපයන් විවෘත කරන්න. සාමාන්යයෙන්, එය ඔබගේ අතිරික්සුවෙන් ඒ.ස.නි.(URL) ක් හරහා (http://192.168.0.1/ හෝ http://192.168.1.1/ වැනි) පිවිසිය හැකිය. මුර පදය ඇතුළත් කිරීමට ඔබෙන් ඉල්ලා සිටිය හැකිය. ඔබට එය මතක නැතිනම්, බොහෝ විට මාර්ගකාරකයේ බොත්තමක් එබීමෙන් මුරපදය නැවත සැකසිය හැක. සමහර මාර්ගකාරක සඳහා විශේෂිත යෙදුමක් අවශ්ය වන අතර, එය දැනටමත් ඔබේ පරිගණකයේ/දුරකථනයේ ස්ථාපනය කර තිබිය යුතුය.",
|
||||||
"install_devices_router_list_2": "ග.ධා.වි.කෙ. (DHCP)/ ව.නා.ප. (DNS) සැකසුම් සොයා ගන්න. ඉලක්කම් කට්ටල දෙකකට හෝ තුනකට ඉඩ දෙන ක්ෂේත්රයක් අසල ඇති ව.නා.ප. අක්ෂර සොයන්න, සෑම එකක්ම ඉලක්කම් එකේ සිට තුන දක්වා කාණ්ඩ හතරකට බෙදා ඇත.",
|
"install_devices_router_list_2": "ග.ධා.වි.කෙ. (DHCP)/ ව.නා.ප. (DNS) සැකසුම් සොයා ගන්න. ඉලක්කම් කට්ටල දෙකකට හෝ තුනකට ඉඩ දෙන ක්ෂේත්රයක් අසල ඇති ව.නා.ප. අක්ෂර සොයන්න, සෑම එකක්ම ඉලක්කම් එකේ සිට තුන දක්වා කාණ්ඩ හතරකට බෙදා ඇත.",
|
||||||
"install_devices_router_list_3": "ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින එහි ඇතුළත් කරන්න.",
|
"install_devices_router_list_3": "ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින එහි ඇතුළත් කරන්න.",
|
||||||
"install_devices_router_list_4": "ඔබට සමහර වර්ගයේ රවුටර වල අභිරුචි ව.නා.ප. (DNS) සේවාදායකයක් සැකසිය නොහැක. මෙම අවස්ථාවේදී ඇඩ්ගාර්ඩ් හෝම් <0>ග.ධා.වි.කෙ. සේවාදායකයක්</0> ලෙස පිහිටුවන්නේ නම් එය උපකාර වනු ඇත. එසේ නොමැතිනම්, ඔබගේ විශේෂිත මාර්ගකාරක මාදිළිය සඳහා වූ ව.නා.ප. සේවාදායකයන් රිසිකරණය කරන්නේ කෙසේද යන්න පිළිබඳ අත්පොත සෙවිය යුතුය.",
|
"install_devices_router_list_4": "ඔබට සමහර වර්ගයේ මාර්ගකාරකය වල අභිරුචි ව.නා.ප. සේවාදායකයක් සැකසිය නොහැක. මෙම අවස්ථාවේදී ඇඩ්ගාර්ඩ් හෝම් <0>ග.ධා.වි.කෙ. සේවාදායකයක්</0> ලෙස පිහිටුවන්නේ නම් එය උපකාර වනු ඇත. එසේ නොමැතිනම්, ඔබගේ විශේෂිත මාර්ගකාරක මාදිළිය සඳහා වූ ව.නා.ප. සේවාදායකයන් රිසිකරණය කරන්නේ කෙසේද යන්න පිළිබඳ අත්පොත සෙවිය යුතුය.",
|
||||||
"install_devices_windows_list_1": "ආරම්භක මෙනුව හෝ වින්ඩෝස් සෙවුම හරහා පාලක පැනලය විවෘත කරන්න.",
|
"install_devices_windows_list_1": "ආරම්භක මෙනුව හෝ වින්ඩෝස් සෙවුම හරහා පාලක පැනලය විවෘත කරන්න.",
|
||||||
"install_devices_windows_list_2": "ජාල සහ අන්තර්ජාල ප්රවර්ගයට ගොස් පසුව ජාල සහ බෙදාගැනීමේ මධ්යස්ථානය වෙත යන්න.",
|
"install_devices_windows_list_2": "ජාල සහ අන්තර්ජාල ප්රවර්ගයට ගොස් පසුව ජාල සහ බෙදාගැනීමේ මධ්යස්ථානය වෙත යන්න.",
|
||||||
"install_devices_windows_list_3": "උපයුක්තකයෙහි සැකසුම් වෙනස් කිරීම තිරයේ වම් පසින් සොයාගෙන එය මත ක්ලික් කරන්න.",
|
"install_devices_windows_list_3": "උපයුක්තකයෙහි සැකසුම් වෙනස් කිරීම තිරයේ වම් පසින් සොයාගෙන එය මත ක්ලික් කරන්න.",
|
||||||
@ -279,7 +283,7 @@
|
|||||||
"open_dashboard": "උපකරණ පුවරුව විවෘත කරන්න",
|
"open_dashboard": "උපකරණ පුවරුව විවෘත කරන්න",
|
||||||
"install_saved": "සාර්ථකව සුරකින ලදි",
|
"install_saved": "සාර්ථකව සුරකින ලදි",
|
||||||
"encryption_title": "සංකේතාංකනය",
|
"encryption_title": "සංකේතාංකනය",
|
||||||
"encryption_desc": "ගුප්තකේතනය (HTTPS/TLS) සඳහා ව.නා.ප. සහ පරිපාලක වෙබ් අතුරු මුහුණත සහය දක්වයි",
|
"encryption_desc": "ගුප්තකේතනය (HTTPS/TLS) සඳහා ව.නා.ප. සහ පරිපාලක වියමන අතුරු මුහුණත සහය දක්වයි",
|
||||||
"encryption_config_saved": "සංකේතාංකන වින්යාසය සුරකින ලදි",
|
"encryption_config_saved": "සංකේතාංකන වින්යාසය සුරකින ලදි",
|
||||||
"encryption_server": "සේවාදායකයේ නම",
|
"encryption_server": "සේවාදායකයේ නම",
|
||||||
"encryption_server_enter": "ඔබගේ වසම් නාමය ඇතුළත් කරන්න",
|
"encryption_server_enter": "ඔබගේ වසම් නාමය ඇතුළත් කරන්න",
|
||||||
@ -314,7 +318,7 @@
|
|||||||
"reset_settings": "සැකසුම් යළි පිහිටුවන්න",
|
"reset_settings": "සැකසුම් යළි පිහිටුවන්න",
|
||||||
"update_announcement": "ඇඩ්ගාර්ඩ් හෝම් {{version}} දැන් ලබා ගත හැකිය! වැඩි විස්තර සඳහා <0>මෙහි ක්ලික් කරන්න</0>.",
|
"update_announcement": "ඇඩ්ගාර්ඩ් හෝම් {{version}} දැන් ලබා ගත හැකිය! වැඩි විස්තර සඳහා <0>මෙහි ක්ලික් කරන්න</0>.",
|
||||||
"setup_guide": "පිහිටුවීමේ මාර්ගෝපදේශය",
|
"setup_guide": "පිහිටුවීමේ මාර්ගෝපදේශය",
|
||||||
"dns_addresses": "DNS ලිපින",
|
"dns_addresses": "ව.නා.ප. ලිපින",
|
||||||
"dns_start": "ව.නා.ප. සේවාදායකය ආරම්භ වෙමින් පවතී",
|
"dns_start": "ව.නා.ප. සේවාදායකය ආරම්භ වෙමින් පවතී",
|
||||||
"dns_status_error": "ව.නා.ප. සේවාදායකයේ තත්වය පරීක්ෂා කිරීමේදී දෝෂයකි",
|
"dns_status_error": "ව.නා.ප. සේවාදායකයේ තත්වය පරීක්ෂා කිරීමේදී දෝෂයකි",
|
||||||
"down": "පහත",
|
"down": "පහත",
|
||||||
@ -335,9 +339,8 @@
|
|||||||
"client_edit": "අනුග්රාහකය සංස්කරණය කරන්න",
|
"client_edit": "අනුග්රාහකය සංස්කරණය කරන්න",
|
||||||
"client_identifier": "හඳුන්වනය",
|
"client_identifier": "හඳුන්වනය",
|
||||||
"ip_address": "අ.ජා. කෙ. (IP) ලිපිනය",
|
"ip_address": "අ.ජා. කෙ. (IP) ලිපිනය",
|
||||||
"client_identifier_desc": "අනුග්රාහකයන් අ.ජා. කෙ. (IP) ලිපිනයක් හෝ මා.ප්ර.පා. (MAC) ලිපිනයක් මගින් හඳුනාගත හැකිය. මා.ප්ර.පා. හඳුන්වනයක් ලෙස භාවිතා කළ හැක්කේ ඇඩ්ගාර්ඩ් හෝම් ද <0>DHCP සේවාදායකයක්</0> නම් පමණක් බව කරුණාවෙන් සලකන්න. ",
|
|
||||||
"form_enter_ip": "අ.ජා. කෙ. (IP) ඇතුළත් කරන්න",
|
"form_enter_ip": "අ.ජා. කෙ. (IP) ඇතුළත් කරන්න",
|
||||||
"form_enter_mac": "MAC ඇතුළත් කරන්න",
|
"form_enter_mac": "මා.ප්ර.පා. (MAC) ඇතුළත් කරන්න",
|
||||||
"form_enter_id": "හඳුන්වනය ඇතුළත් කරන්න",
|
"form_enter_id": "හඳුන්වනය ඇතුළත් කරන්න",
|
||||||
"form_add_id": "හඳුන්වනයක් එක් කරන්න",
|
"form_add_id": "හඳුන්වනයක් එක් කරන්න",
|
||||||
"form_client_name": "අනුග්රාහකයේ නම ඇතුළත් කරන්න",
|
"form_client_name": "අනුග්රාහකයේ නම ඇතුළත් කරන්න",
|
||||||
@ -360,22 +363,20 @@
|
|||||||
"updates_checked": "යාවත්කාලීන කිරීම් සාර්ථකව පරික්ෂා කර ඇත",
|
"updates_checked": "යාවත්කාලීන කිරීම් සාර්ථකව පරික්ෂා කර ඇත",
|
||||||
"updates_version_equal": "ඇඩ්ගාර්ඩ් හෝම් යාවත්කාලීනයි",
|
"updates_version_equal": "ඇඩ්ගාර්ඩ් හෝම් යාවත්කාලීනයි",
|
||||||
"check_updates_now": "යාවත්කාල කිරීම සඳහා දැන් පරීක්ෂා කරන්න",
|
"check_updates_now": "යාවත්කාල කිරීම සඳහා දැන් පරීක්ෂා කරන්න",
|
||||||
"dns_privacy": "DNS රහස්යතා",
|
"dns_privacy": "ව.නා.ප. රහස්යතා",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> තන්තුව භාවිතා කරයි.",
|
"setup_dns_privacy_3": "<0>මෙහි ඔබට භාවිතා කළ හැකි මෘදුකාංග ලැයිස්තුවක් ඇත.</0>",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> තන්තුව භාවිතා කරයි.",
|
"setup_dns_privacy_other_2": "<0>ඩීඑන්එස්ප්රොක්සි</0> දන්නා සියලුම ආරක්ෂිත ව.නා.ප. කෙටුම්පත් සඳහා සහය දක්වයි.",
|
||||||
"setup_dns_privacy_android_2": "<1>DNS-over-HTTPS</1> සහ <1>DNS-over-TLS</1> සඳහා <0>AdGuard for Android</0> සහය දක්වයි.",
|
|
||||||
"setup_dns_privacy_ios_2": "<1>DNS-over-HTTPS</1> සහ <1>DNS-over-TLS</1> පිහිටුවීම් සඳහා <0>AdGuard for iOS</0> සහය දක්වයි.",
|
|
||||||
"setup_dns_privacy_other_2": "<0>dnsproxy</0> දන්නා සියලුම ආරක්ෂිත DNS කෙටුම්පත් සඳහා සහය දක්වයි.",
|
|
||||||
"setup_dns_privacy_other_3": "<1>DNS-over-HTTPS</1> සඳහා <0>dnscrypt-පෙරකලාසිය</0> සහය දක්වයි.",
|
"setup_dns_privacy_other_3": "<1>DNS-over-HTTPS</1> සඳහා <0>dnscrypt-පෙරකලාසිය</0> සහය දක්වයි.",
|
||||||
"setup_dns_privacy_other_4": "<1>DNS-over-HTTPS</1> සඳහා <0>මොසිල්ලා ෆයර්ෆොක්ස්</0> සහය දක්වයි.",
|
"setup_dns_privacy_other_4": "<1>DNS-over-HTTPS</1> සඳහා <0>මොසිල්ලා ෆයර්ෆොක්ස්</0> සහය දක්වයි.",
|
||||||
"setup_dns_notice": "ඔබට <1>DNS-over-HTTPS</1> හෝ <1>DNS-over-TLS</1> භාවිතා කිරීම සඳහා ඇඩ්ගාර්ඩ් හෝම් සැකසුම් තුළ <0>සංකේතාංකනය වින්යාසගත</0> කිරීමට අවශ්ය වේ.",
|
"setup_dns_notice": "ඔබට <1>DNS-over-HTTPS</1> හෝ <1>DNS-over-TLS</1> භාවිතා කිරීම සඳහා ඇඩ්ගාර්ඩ් හෝම් සැකසුම් තුළ <0>සංකේතාංකනය වින්යාසගත</0> කිරීමට අවශ්ය වේ.",
|
||||||
"rewrite_add": "DNS නැවත ලිවීමක් එකතු කරන්න",
|
"rewrite_added": "\"{{key}}\" සඳහා ව.නා.ප. නැවත ලිවීම සාර්ථකව එකතු කරන ලදි",
|
||||||
"rewrite_confirm_delete": "\"{{key}}\" සඳහා DNS නැවත ලිවීම ඉවත් කිරීමට අවශ්ය බව ඔබට විශ්වාසද?",
|
"rewrite_add": "ව.නා.ප. නැවත ලිවීමක් එකතු කරන්න",
|
||||||
|
"rewrite_not_found": "ව.නා.ප. නැවත ලිවීම් හමු නොවීය",
|
||||||
|
"rewrite_confirm_delete": "\"{{key}}\" සඳහා ව.නා.ප. නැවත ලිවීම ඉවත් කිරීමට අවශ්ය බව ඔබට විශ්වාසද?",
|
||||||
"rewrite_desc": "විශේෂිත වසම් නාමයක් සඳහා අභිරුචි ව.නා.ප. ප්රතිචාර පහසුවෙන් වින්යාසගත කිරීමට ඉඩ දෙයි.",
|
"rewrite_desc": "විශේෂිත වසම් නාමයක් සඳහා අභිරුචි ව.නා.ප. ප්රතිචාර පහසුවෙන් වින්යාසගත කිරීමට ඉඩ දෙයි.",
|
||||||
"rewrite_applied": "නැවත ලිවීමේ නීතිය යොදා ඇත",
|
"rewrite_applied": "නැවත ලිවීමේ නීතිය යොදා ඇත",
|
||||||
"rewrite_hosts_applied": "ධාරක ගොනු නීතිය මගින් නැවත ලියා ඇත",
|
"rewrite_hosts_applied": "ධාරක ගොනු නීතිය මගින් නැවත ලියා ඇත",
|
||||||
"dns_rewrites": "DNS නැවත ලිවීම්",
|
"dns_rewrites": "ව.නා.ප. නැවත ලිවීම්",
|
||||||
"form_domain": "වසම ඇතුළත් කරන්න",
|
|
||||||
"form_answer": "අ.ජා. කෙ. (IP) ලිපිනය හෝ වසම ඇතුළත් කරන්න ",
|
"form_answer": "අ.ජා. කෙ. (IP) ලිපිනය හෝ වසම ඇතුළත් කරන්න ",
|
||||||
"form_error_domain_format": "වලංගු නොවන වසම් ආකෘතියකි",
|
"form_error_domain_format": "වලංගු නොවන වසම් ආකෘතියකි",
|
||||||
"form_error_answer_format": "වලංගු නොවන පිළිතුරු ආකෘතියකි",
|
"form_error_answer_format": "වලංගු නොවන පිළිතුරු ආකෘතියකි",
|
||||||
@ -403,6 +404,7 @@
|
|||||||
"domain": "වසම",
|
"domain": "වසම",
|
||||||
"answer": "පිළිතුර",
|
"answer": "පිළිතුර",
|
||||||
"filter_added_successfully": "පෙරහන සාර්ථකව එකතු කරන ලදි",
|
"filter_added_successfully": "පෙරහන සාර්ථකව එකතු කරන ලදි",
|
||||||
|
"filter_removed_successfully": "ලැයිස්තුව සාර්ථකව ඉවත් කරන ලදි",
|
||||||
"filter_updated": "ලැයිස්තුව සාර්ථකව යාවත්කාලීන කර ඇත",
|
"filter_updated": "ලැයිස්තුව සාර්ථකව යාවත්කාලීන කර ඇත",
|
||||||
"statistics_configuration": "සංඛ්යාලේඛන වින්යාසය",
|
"statistics_configuration": "සංඛ්යාලේඛන වින්යාසය",
|
||||||
"statistics_retention": "සංඛ්යාලේඛන රඳවා තබා ගැනීම",
|
"statistics_retention": "සංඛ්යාලේඛන රඳවා තබා ගැනීම",
|
||||||
@ -431,20 +433,24 @@
|
|||||||
"network": "ජාලය",
|
"network": "ජාලය",
|
||||||
"descr": "විස්තරය",
|
"descr": "විස්තරය",
|
||||||
"whois": "Whois",
|
"whois": "Whois",
|
||||||
|
"filtering_rules_learn_more": "ඔබගේ ම ධාරක ලැයිස්තු සෑදීම පිළිබඳව <0>තව දැනගන්න</0>.",
|
||||||
"blocked_by_response": "ප්රතිචාරය අන්. නාමයක් (CNAME) හෝ අ.ජා. කෙ. මගින් අවහිර කර ඇත",
|
"blocked_by_response": "ප්රතිචාරය අන්. නාමයක් (CNAME) හෝ අ.ජා. කෙ. මගින් අවහිර කර ඇත",
|
||||||
"blocked_by_cname_or_ip": "අන්. නාමයක් (CNAME) හෝ අ.ජා. කෙ. මගින් අවහිර කර ඇත",
|
"blocked_by_cname_or_ip": "අන්. නාමයක් (CNAME) හෝ අ.ජා. කෙ. මගින් අවහිර කර ඇත",
|
||||||
"try_again": "නැවත උත්සහා කරන්න",
|
"try_again": "නැවත උත්සහා කරන්න",
|
||||||
"example_rewrite_domain": "මෙම වසම් නාමය සඳහා පමණක් ප්රතිචාර නැවත ලියන්න.",
|
"example_rewrite_domain": "මෙම වසම් නාමය සඳහා පමණක් ප්රතිචාර නැවත ලියන්න.",
|
||||||
"example_rewrite_wildcard": "<0>example.org</0> සහ එහි සියලුම උප වසම් සඳහා ප්රතිචාර නැවත ලියයි.",
|
"example_rewrite_wildcard": "<0>example.org</0> සහ එහි සියලුම උප වසම් සඳහා ප්රතිචාර නැවත ලියයි.",
|
||||||
|
"rewrite_ip_address": "අ.ජා. කෙ. ලිපිනය: මෙම අ.ජා. කෙටුම්පත A හෝ AAAA ප්රතිචාරයකට භාවිතා කරන්න",
|
||||||
"rewrite_domain_name": "වසම් නාමය: අන්. නා. (CNAME) වාර්තාවක් එක් කරන්න",
|
"rewrite_domain_name": "වසම් නාමය: අන්. නා. (CNAME) වාර්තාවක් එක් කරන්න",
|
||||||
"disable_ipv6": "IPv6 අබල කරන්න",
|
"disable_ipv6": "IPv6 අබල කරන්න",
|
||||||
"disable_ipv6_desc": "මෙම අංගය සක්රීය කර ඇත්නම්, IPv6 ලිපින සඳහා වන සියලුම ව.නා.ප. විමසුම් (AAAA වර්ගය) අතහැර දමනු ලැබේ.",
|
"disable_ipv6_desc": "මෙම අංගය සක්රීය කර ඇත්නම්, IPv6 ලිපින සඳහා වන සියලුම ව.නා.ප. විමසුම් (AAAA වර්ගය) අතහැර දමනු ලැබේ.",
|
||||||
"fastest_addr": "වේගවත්ම අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනය",
|
"fastest_addr": "වේගවත්ම අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනය",
|
||||||
|
"fastest_addr_desc": "සියලුම ව.නා.ප. සේවාදායකයන් හරහා විමසා සියලු ප්රතිචාර අතරින් වේගවත්ම අ.ජා. කෙ. ලිපිනය ලබා දෙයි. සියලුම ව.නා.ප. සේවාදායකයන්ගේ ප්රතිචාර සඳහා අප බලා සිටිය යුතු බැවින් මෙය ව.නා.ප. විමසුම් මන්දගාමී කරන නමුත් සමස්ත සම්බන්ධතාවය වැඩි දියුණු කරයි.",
|
||||||
"autofix_warning_text": "ඔබ \"නිරාකරණය කරන්න\" බොත්තම එබුවහොත්, ඔබගේ පද්ධතිය ඇඩ්ගාර්ඩ් හෝම් ව.නා.ප. සේවාදායකය භාවිතා කිරීමට වින්යාසගත කරනු ඇත.",
|
"autofix_warning_text": "ඔබ \"නිරාකරණය කරන්න\" බොත්තම එබුවහොත්, ඔබගේ පද්ධතිය ඇඩ්ගාර්ඩ් හෝම් ව.නා.ප. සේවාදායකය භාවිතා කිරීමට වින්යාසගත කරනු ඇත.",
|
||||||
"tags_title": "හැඳුනුම් සංකේත",
|
"tags_title": "හැඳුනුම් සංකේත",
|
||||||
"tags_desc": "අනුග්රාහකයට අනුරූප වන හැඳුනුම් සංකේත ඔබට තෝරා ගත හැකිය. පෙරහන් නීති වලට හැඳුනුම් සංකේත ඇතුළත් කළ හැකි අතර ඒවා වඩාත් නිවැරදිව යෙදීමට ඔබට ඉඩ සලසයි. <0>වැඩිදුර ඉගෙන ගන්න</0>",
|
"tags_desc": "අනුග්රාහකයට අනුරූප වන හැඳුනුම් සංකේත ඔබට තෝරා ගත හැකිය. පෙරහන් නීති වලට හැඳුනුම් සංකේත ඇතුළත් කළ හැකි අතර ඒවා වඩාත් නිවැරදිව යෙදීමට ඔබට ඉඩ සලසයි. <0>වැඩිදුර ඉගෙන ගන්න</0>",
|
||||||
"form_select_tags": "අනුග්රාහක හැඳුනුම් සංකේත",
|
"form_select_tags": "අනුග්රාහක හැඳුනුම් සංකේත",
|
||||||
"check_title": "පෙරීම පරීක්ෂා කරන්න",
|
"check_title": "පෙරීම පරීක්ෂා කරන්න",
|
||||||
|
"check_desc": "ධාරක නාමය පෙරහන් කර ඇත්දැයි පරීක්ෂා කරන්න",
|
||||||
"check": "පරීක්ෂා කරන්න",
|
"check": "පරීක්ෂා කරන්න",
|
||||||
"form_enter_host": "ධාරක නාමයක් ඇතුළත් කරන්න",
|
"form_enter_host": "ධාරක නාමයක් ඇතුළත් කරන්න",
|
||||||
"filtered_custom_rules": "අභිරුචි පෙරීමේ නීති මගින් පෙරහන් කරන ලදි",
|
"filtered_custom_rules": "අභිරුචි පෙරීමේ නීති මගින් පෙරහන් කරන ලදි",
|
||||||
@ -454,14 +460,14 @@
|
|||||||
"check_ip": "අ.ජා. කෙ. (IP) ලිපින: {{ip}}",
|
"check_ip": "අ.ජා. කෙ. (IP) ලිපින: {{ip}}",
|
||||||
"check_cname": "අන්. නාමය (CNAME): {{cname}}",
|
"check_cname": "අන්. නාමය (CNAME): {{cname}}",
|
||||||
"check_reason": "හේතුව: {{reason}}",
|
"check_reason": "හේතුව: {{reason}}",
|
||||||
"check_rule": "නීතිය: {{rule}}",
|
|
||||||
"check_service": "සේවාවෙහි නම: {{service}}",
|
"check_service": "සේවාවෙහි නම: {{service}}",
|
||||||
|
"service_name": "සේවාවේ නම",
|
||||||
"check_not_found": "ඔබගේ පෙරහන් ලැයිස්තු තුළ සොයා ගත නොහැක",
|
"check_not_found": "ඔබගේ පෙරහන් ලැයිස්තු තුළ සොයා ගත නොහැක",
|
||||||
"client_confirm_block": "{{ip}} අනුග්රාහකය අවහිර කිරීමට අවශ්ය බව ඔබට විශ්වාසද?",
|
"client_confirm_block": "{{ip}} අනුග්රාහකය අවහිර කිරීමට අවශ්ය බව ඔබට විශ්වාසද?",
|
||||||
"client_confirm_unblock": "{{ip}} අනුග්රාහකය අනවහිර කිරීමට අවශ්ය බව ඔබට විශ්වාසද?",
|
"client_confirm_unblock": "{{ip}} අනුග්රාහකය අනවහිර කිරීමට අවශ්ය බව ඔබට විශ්වාසද?",
|
||||||
"client_blocked": "අනුග්රාහකය \"{{ip}}\" සාර්ථකව අවහිර කරන ලදි",
|
"client_blocked": "අනුග්රාහකය \"{{ip}}\" සාර්ථකව අවහිර කරන ලදි",
|
||||||
"client_unblocked": "අනුග්රාහකය \"{{ip}}\" සාර්ථකව අනවහිර කරන ලදි",
|
"client_unblocked": "අනුග්රාහකය \"{{ip}}\" සාර්ථකව අනවහිර කරන ලදි",
|
||||||
"static_ip": "ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනය",
|
"static_ip": "ස්ථිතික අ.ජා. කෙ. ලිපිනය",
|
||||||
"static_ip_desc": "ඇඩ්ගාර්ඩ් හෝම් යනු සේවාදායකයක් බැවින් එය නිසි ලෙස ක්රියා කිරීමට ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනයක් අවශ්ය වේ. එසේ නොමැතිනම්, යම් අවස්ථාවක දී ඔබගේ මාර්ගකාරකය මෙම උපාංගයට වෙනත් අ.ජා. කෙ. ලිපිනයක් ලබා දිය හැකිය.",
|
"static_ip_desc": "ඇඩ්ගාර්ඩ් හෝම් යනු සේවාදායකයක් බැවින් එය නිසි ලෙස ක්රියා කිරීමට ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනයක් අවශ්ය වේ. එසේ නොමැතිනම්, යම් අවස්ථාවක දී ඔබගේ මාර්ගකාරකය මෙම උපාංගයට වෙනත් අ.ජා. කෙ. ලිපිනයක් ලබා දිය හැකිය.",
|
||||||
"set_static_ip": "ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනයක් සකසන්න",
|
"set_static_ip": "ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනයක් සකසන්න",
|
||||||
"install_static_ok": "සුභ තොරතුරක්! ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනය දැනටමත් වින්යාසගත කර ඇත",
|
"install_static_ok": "සුභ තොරතුරක්! ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනය දැනටමත් වින්යාසගත කර ඇත",
|
||||||
@ -470,13 +476,11 @@
|
|||||||
"confirm_static_ip": "ඇඩ්ගාර්ඩ් හෝම් ඔබේ ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනය ලෙස {{ip}} වින්යාසගත කරනු ඇත. ඔබට ඉදිරියට යාමට අවශ්යද?",
|
"confirm_static_ip": "ඇඩ්ගාර්ඩ් හෝම් ඔබේ ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනය ලෙස {{ip}} වින්යාසගත කරනු ඇත. ඔබට ඉදිරියට යාමට අවශ්යද?",
|
||||||
"list_updated": "{{count}} ලැයිස්තුව යාවත්කාලීන කරන ලදි",
|
"list_updated": "{{count}} ලැයිස්තුව යාවත්කාලීන කරන ලදි",
|
||||||
"list_updated_plural": "ලැයිස්තු {{count}} ක් යාවත්කාලීන කරන ලදි",
|
"list_updated_plural": "ලැයිස්තු {{count}} ක් යාවත්කාලීන කරන ලදි",
|
||||||
"dnssec_enable": "DNSSEC සබල කරන්න",
|
|
||||||
"validated_with_dnssec": "DNSSEC සමඟ තහවුරු කර ඇත",
|
|
||||||
"all_queries": "සියලුම විමසුම්",
|
"all_queries": "සියලුම විමසුම්",
|
||||||
"show_blocked_responses": "අවහිර කර ඇත",
|
"show_blocked_responses": "අවහිර කර ඇත",
|
||||||
"show_whitelisted_responses": "සුදු ලැයිස්තුගත කර ඇත",
|
"show_whitelisted_responses": "සුදු ලැයිස්තුගත කර ඇත",
|
||||||
"blocked_safebrowsing": "ආරක්ෂිත සෙවීම මගින් අවහිර කරන ලද",
|
"blocked_safebrowsing": "ආරක්ෂිත සෙවීම මගින් අවහිර කරන ලද",
|
||||||
"blocked_adult_websites": "අවහිර කළ වැඩිහිටි වෙබ් අඩවි",
|
"blocked_adult_websites": "අවහිර කළ වැඩිහිටි වියමන අඩවි",
|
||||||
"blocked_threats": "අවහිර කළ තර්ජන",
|
"blocked_threats": "අවහිර කළ තර්ජන",
|
||||||
"allowed": "අවසර ලත්",
|
"allowed": "අවසර ලත්",
|
||||||
"filtered": "පෙරහන් කරන ලද",
|
"filtered": "පෙරහන් කරන ලද",
|
||||||
@ -484,8 +488,15 @@
|
|||||||
"safe_search": "ආරක්ෂිත සෙවීම",
|
"safe_search": "ආරක්ෂිත සෙවීම",
|
||||||
"blocklist": "අවහිර කිරීමේ ලැයිස්තුව",
|
"blocklist": "අවහිර කිරීමේ ලැයිස්තුව",
|
||||||
"milliseconds_abbreviation": "මිලි තත්.",
|
"milliseconds_abbreviation": "මිලි තත්.",
|
||||||
|
"cache_size": "නිහිතයෙහි ප්රමාණය",
|
||||||
|
"cache_size_desc": "ව.නා.ප. නිහිතයෙහි ප්රමාණය (බයිට වලින්)",
|
||||||
|
"cache_ttl_min_override": "අවම පව. කා. අභිබවන්න",
|
||||||
|
"cache_ttl_max_override": "උපරිම පව. කා. අභිබවන්න",
|
||||||
|
"enter_cache_size": "ව.නා.ප. නිහිතයෙහි ප්රමාණය ඇතුළත් කරන්න (බයිට)",
|
||||||
"enter_cache_ttl_min_override": "අවම පව. කා. (TTL) ඇතුළත් කරන්න",
|
"enter_cache_ttl_min_override": "අවම පව. කා. (TTL) ඇතුළත් කරන්න",
|
||||||
"enter_cache_ttl_max_override": "උපරිම පව. කා. (TTL) ඇතුළත් කරන්න",
|
"enter_cache_ttl_max_override": "උපරිම පව. කා. (TTL) ඇතුළත් කරන්න",
|
||||||
|
"cache_ttl_max_override_desc": "ව.නා.ප. නිහිතයෙහි ඇති ඇතුළත් කිරීම් සඳහා ඉතා වැඩි පවත්නා කාලයක අගයක් (තත්පර) සකසන්න",
|
||||||
|
"ttl_cache_validation": "නිහිතයෙහි අවම පව. කා. (TTL) අගය උපරිම අගයට වඩා අඩු හෝ සමාන විය යුතුය",
|
||||||
"filter_category_general": "පොදු",
|
"filter_category_general": "පොදු",
|
||||||
"filter_category_security": "ආරක්ෂණ",
|
"filter_category_security": "ආරක්ෂණ",
|
||||||
"filter_category_regional": "ප්රාදේශ්රීය",
|
"filter_category_regional": "ප්රාදේශ්රීය",
|
||||||
@ -499,5 +510,6 @@
|
|||||||
"click_to_view_queries": "විමසුම් බැලීමට ඔබන්න",
|
"click_to_view_queries": "විමසුම් බැලීමට ඔබන්න",
|
||||||
"port_53_faq_link": "53 කවුළුව බොහෝ විට \"DNSStubListener\" හෝ \"systemd-resolved\" සේවාවන් භාවිතයට ගනු ලැබේ. කරුණාකර මෙය විසඳන්නේ කෙසේද යන්න පිළිබඳ <0>මෙම උපදෙස්</0> කියවන්න.",
|
"port_53_faq_link": "53 කවුළුව බොහෝ විට \"DNSStubListener\" හෝ \"systemd-resolved\" සේවාවන් භාවිතයට ගනු ලැබේ. කරුණාකර මෙය විසඳන්නේ කෙසේද යන්න පිළිබඳ <0>මෙම උපදෙස්</0> කියවන්න.",
|
||||||
"adg_will_drop_dns_queries": "ඇඩ්ගාර්ඩ් හෝම් විසින් මෙම අනුග්රාහකයේ සියලුම ව.නා.ප. විමසුම් අතහැර දමනු ඇත.",
|
"adg_will_drop_dns_queries": "ඇඩ්ගාර්ඩ් හෝම් විසින් මෙම අනුග්රාහකයේ සියලුම ව.නා.ප. විමසුම් අතහැර දමනු ඇත.",
|
||||||
|
"client_not_in_allowed_clients": "\"අවසර ලත් අනුග්රාහකයින්\" ලැයිස්තුවේ නොමැති නිසා අනුග්රාහකයට අවසර නැත.",
|
||||||
"experimental": "පරීක්ෂණාත්මක"
|
"experimental": "පරීක්ෂණාත්මක"
|
||||||
}
|
}
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Nesprávny formát IPv4",
|
"form_error_ip_format": "Nesprávny formát IPv4",
|
||||||
"form_error_mac_format": "Nesprávny MAC formát",
|
"form_error_mac_format": "Nesprávny MAC formát",
|
||||||
"form_error_client_id_format": "Neplatný formát client ID",
|
"form_error_client_id_format": "Neplatný formát client ID",
|
||||||
|
"form_error_server_name": "Neplatné meno servera",
|
||||||
"form_error_positive": "Musí byť väčšie ako 0",
|
"form_error_positive": "Musí byť väčšie ako 0",
|
||||||
"form_error_negative": "Musí byť číslo 0 alebo viac",
|
"form_error_negative": "Musí byť číslo 0 alebo viac",
|
||||||
"range_end_error": "Musí byť väčšie ako začiatok rozsahu",
|
"range_end_error": "Musí byť väčšie ako začiatok rozsahu",
|
||||||
@ -50,7 +51,7 @@
|
|||||||
"dhcp_table_expires": "Vyprší",
|
"dhcp_table_expires": "Vyprší",
|
||||||
"dhcp_warning": "Ak chcete server DHCP napriek tomu povoliť, uistite sa, že v sieti nie je žiadny iný aktívny DHCP server. V opačnom prípade sa môže prerušiť internet pre už pripojené zariadenia!",
|
"dhcp_warning": "Ak chcete server DHCP napriek tomu povoliť, uistite sa, že v sieti nie je žiadny iný aktívny DHCP server. V opačnom prípade sa môže prerušiť internet pre už pripojené zariadenia!",
|
||||||
"dhcp_error": "Nebolo možné určiť, či je v sieti iný DHCP server.",
|
"dhcp_error": "Nebolo možné určiť, či je v sieti iný DHCP server.",
|
||||||
"dhcp_static_ip_error": "Aby bolo možné používať DHCP server, musí byť nastavená statická IP adresa. Nepodarilo sa určiť, či je toto sieťové rozhranie nakonfigurované pomocou statickej adresy IP. Nastavte statickú adresu IP manuálne.",
|
"dhcp_static_ip_error": "Aby bolo možné používať DHCP server, musí byť nastavená statická IP adresa. Nepodarilo sa určiť, či je toto sieťové rozhranie nakonfigurované pomocou statickej adresy IP. Nastavte statickú IP adresu manuálne.",
|
||||||
"dhcp_dynamic_ip_found": "Váš systém používa dynamickú konfiguráciu IP adresy pre rozhranie <0{{interfaceName}}</0>. Aby bolo možné používať DHCP server, musí byť nastavená statická IP adresa. Vaša aktuálna adresa IP je <0>{{ipAddress}}</0>. Automaticky nastavíme túto IP adresu ako statickú, ak stlačíte tlačidlo Povoliť DHCP.",
|
"dhcp_dynamic_ip_found": "Váš systém používa dynamickú konfiguráciu IP adresy pre rozhranie <0{{interfaceName}}</0>. Aby bolo možné používať DHCP server, musí byť nastavená statická IP adresa. Vaša aktuálna adresa IP je <0>{{ipAddress}}</0>. Automaticky nastavíme túto IP adresu ako statickú, ak stlačíte tlačidlo Povoliť DHCP.",
|
||||||
"dhcp_lease_added": "Statický \"{{key}}\" prenájmu bol úspešne pridaný",
|
"dhcp_lease_added": "Statický \"{{key}}\" prenájmu bol úspešne pridaný",
|
||||||
"dhcp_lease_deleted": "Statický \"{{key}}\" prenájmu bol úspešne vymazaný",
|
"dhcp_lease_deleted": "Statický \"{{key}}\" prenájmu bol úspešne vymazaný",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "Vlastná IP adresa",
|
"custom_ip": "Vlastná IP adresa",
|
||||||
"blocking_ipv4": "Blokovanie IPv4",
|
"blocking_ipv4": "Blokovanie IPv4",
|
||||||
"blocking_ipv6": "Blokovanie IPv6",
|
"blocking_ipv6": "Blokovanie IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "ID klienta",
|
||||||
|
"client_id_placeholder": "Zadať ID klienta",
|
||||||
|
"client_id_desc": "Rôznych klientov možno identifikovať podľa špeciálneho ID klienta. <a>Tu</a> sa dozviete viac o tom, ako identifikovať klientov.",
|
||||||
"download_mobileconfig_doh": "Prevziať .mobileconfig pre DNS-over-HTTPS",
|
"download_mobileconfig_doh": "Prevziať .mobileconfig pre DNS-over-HTTPS",
|
||||||
"download_mobileconfig_dot": "Prevziať .mobileconfig pre DNS-over-TLS",
|
"download_mobileconfig_dot": "Prevziať .mobileconfig pre DNS-over-TLS",
|
||||||
|
"download_mobileconfig": "Stiahnuť konfiguračný súbor",
|
||||||
"plain_dns": "Obyčajné DNS",
|
"plain_dns": "Obyčajné DNS",
|
||||||
"form_enter_rate_limit": "Zadajte rýchlostný limit",
|
"form_enter_rate_limit": "Zadajte rýchlostný limit",
|
||||||
"rate_limit": "Rýchlostný limit",
|
"rate_limit": "Rýchlostný limit",
|
||||||
@ -269,7 +276,6 @@
|
|||||||
"source_label": "Zdroj",
|
"source_label": "Zdroj",
|
||||||
"found_in_known_domain_db": "Nájdené v databáze známych domén.",
|
"found_in_known_domain_db": "Nájdené v databáze známych domén.",
|
||||||
"category_label": "Kategória",
|
"category_label": "Kategória",
|
||||||
"rule_label": "Pravidlo",
|
|
||||||
"list_label": "Zoznam",
|
"list_label": "Zoznam",
|
||||||
"unknown_filter": "Neznámy filter {{filterId}}",
|
"unknown_filter": "Neznámy filter {{filterId}}",
|
||||||
"known_tracker": "Známy sledovač",
|
"known_tracker": "Známy sledovač",
|
||||||
@ -330,7 +336,6 @@
|
|||||||
"encryption_config_saved": "Konfigurácia šifrovania uložená",
|
"encryption_config_saved": "Konfigurácia šifrovania uložená",
|
||||||
"encryption_server": "Meno servera",
|
"encryption_server": "Meno servera",
|
||||||
"encryption_server_enter": "Zadajte meno Vašej domény",
|
"encryption_server_enter": "Zadajte meno Vašej domény",
|
||||||
"encryption_server_desc": "Ak chcete používať HTTPS, musíte zadať meno servera, ktoré zodpovedá Vášmu SSL certifikátu.",
|
|
||||||
"encryption_redirect": "Automaticky presmerovať na HTTPS",
|
"encryption_redirect": "Automaticky presmerovať na HTTPS",
|
||||||
"encryption_redirect_desc": "Ak je táto možnosť začiarknutá, služba AdGuard Home Vás automaticky presmeruje z adresy HTTP na adresy HTTPS.",
|
"encryption_redirect_desc": "Ak je táto možnosť začiarknutá, služba AdGuard Home Vás automaticky presmeruje z adresy HTTP na adresy HTTPS.",
|
||||||
"encryption_https": "HTTPS port",
|
"encryption_https": "HTTPS port",
|
||||||
@ -386,7 +391,6 @@
|
|||||||
"client_edit": "Upraviť klienta",
|
"client_edit": "Upraviť klienta",
|
||||||
"client_identifier": "Identifikátor",
|
"client_identifier": "Identifikátor",
|
||||||
"ip_address": "IP adresa",
|
"ip_address": "IP adresa",
|
||||||
"client_identifier_desc": "Klienti môžu byť identifikovaní podľa IP adresy, CIDR alebo MAC adresy. Upozorňujeme, že používanie MAC ako identifikátora je možné len vtedy, ak je AdGuard Home tiež <0>DHCP server</0>",
|
|
||||||
"form_enter_ip": "Zadajte IP adresu",
|
"form_enter_ip": "Zadajte IP adresu",
|
||||||
"form_enter_mac": "Zadajte MAC adresu",
|
"form_enter_mac": "Zadajte MAC adresu",
|
||||||
"form_enter_id": "Zadajte identifikátor",
|
"form_enter_id": "Zadajte identifikátor",
|
||||||
@ -430,6 +434,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> podporuje <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> podporuje <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> podporuje <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> podporuje <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Viac implementácií nájdete <0>tu</0> a <1>tu</1>.",
|
"setup_dns_privacy_other_5": "Viac implementácií nájdete <0>tu</0> a <1>tu</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Konfigurácia iOS a macOS",
|
||||||
"setup_dns_notice": "Pre použitie <1>DNS-over-HTTPS</1> alebo <1>DNS-over-TLS</1>, potrebujete v nastaveniach AdGuard Home <0>nakonfigurovať šifrovanie</0>.",
|
"setup_dns_notice": "Pre použitie <1>DNS-over-HTTPS</1> alebo <1>DNS-over-TLS</1>, potrebujete v nastaveniach AdGuard Home <0>nakonfigurovať šifrovanie</0>.",
|
||||||
"rewrite_added": "DNS prepísanie pre \"{{key}}\" bolo úspešne pridané",
|
"rewrite_added": "DNS prepísanie pre \"{{key}}\" bolo úspešne pridané",
|
||||||
"rewrite_deleted": "DNS prepísanie pre \"{{key}}\" bolo úspešne vymazané",
|
"rewrite_deleted": "DNS prepísanie pre \"{{key}}\" bolo úspešne vymazané",
|
||||||
@ -529,7 +534,6 @@
|
|||||||
"check_ip": "IP adresy: {{ip}}",
|
"check_ip": "IP adresy: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Dôvod: {{reason}}",
|
"check_reason": "Dôvod: {{reason}}",
|
||||||
"check_rule": "Pravidlo: {{rule}}",
|
|
||||||
"check_service": "Meno služby: {{service}}",
|
"check_service": "Meno služby: {{service}}",
|
||||||
"service_name": "Názov služby",
|
"service_name": "Názov služby",
|
||||||
"check_not_found": "Nenašlo sa vo Vašom zozname filtrov",
|
"check_not_found": "Nenašlo sa vo Vašom zozname filtrov",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Neveljaven format IP",
|
"form_error_ip_format": "Neveljaven format IP",
|
||||||
"form_error_mac_format": "Neveljaven MAC format",
|
"form_error_mac_format": "Neveljaven MAC format",
|
||||||
"form_error_client_id_format": "Neveljaven format ID odjemalca",
|
"form_error_client_id_format": "Neveljaven format ID odjemalca",
|
||||||
|
"form_error_server_name": "Neveljavno ime strežnika",
|
||||||
"form_error_positive": "Mora biti večja od 0",
|
"form_error_positive": "Mora biti večja od 0",
|
||||||
"form_error_negative": "Mora biti enako ali več kot 0",
|
"form_error_negative": "Mora biti enako ali več kot 0",
|
||||||
"range_end_error": "Mora biti večji od začtka razpona",
|
"range_end_error": "Mora biti večji od začtka razpona",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "IP po meri",
|
"custom_ip": "IP po meri",
|
||||||
"blocking_ipv4": "Onemogočanje IPv4",
|
"blocking_ipv4": "Onemogočanje IPv4",
|
||||||
"blocking_ipv6": "Onemogočanje IPv6",
|
"blocking_ipv6": "Onemogočanje IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-prek-HTTPS",
|
"dns_over_https": "DNS-prek-HTTPS",
|
||||||
"dns_over_tls": "DNS-prek-TLS",
|
"dns_over_tls": "DNS-prek-TLS",
|
||||||
|
"dns_over_quic": "DNS-prek-QIUC",
|
||||||
|
"client_id": "ID odjemalca",
|
||||||
|
"client_id_placeholder": "Vnesite ID odjemalca",
|
||||||
|
"client_id_desc": "Različne odjemalce je mogoče prepoznati s posebnim ID-jem odjemalca. <a>Tukaj</a> lahko izveste več o prepoznavanju odjemalcev.",
|
||||||
"download_mobileconfig_doh": "Prenos .mobileconfig za DNS-preko-HTTPS",
|
"download_mobileconfig_doh": "Prenos .mobileconfig za DNS-preko-HTTPS",
|
||||||
"download_mobileconfig_dot": "Prenos .mobileconfig za DNS-preko-TLS",
|
"download_mobileconfig_dot": "Prenos .mobileconfig za DNS-preko-TLS",
|
||||||
|
"download_mobileconfig": "Prenesi nastavitveno datoteko",
|
||||||
"plain_dns": "Navadni DNS",
|
"plain_dns": "Navadni DNS",
|
||||||
"form_enter_rate_limit": "Vnesite omejitev hitrosti",
|
"form_enter_rate_limit": "Vnesite omejitev hitrosti",
|
||||||
"rate_limit": "Omejitev hitrosti",
|
"rate_limit": "Omejitev hitrosti",
|
||||||
@ -269,7 +276,7 @@
|
|||||||
"source_label": "Vir",
|
"source_label": "Vir",
|
||||||
"found_in_known_domain_db": "Najdeno v zbirki podatkov znanih domen.",
|
"found_in_known_domain_db": "Najdeno v zbirki podatkov znanih domen.",
|
||||||
"category_label": "Kategorija",
|
"category_label": "Kategorija",
|
||||||
"rule_label": "Pravilo",
|
"rule_label": "Pravila",
|
||||||
"list_label": "Seznam",
|
"list_label": "Seznam",
|
||||||
"unknown_filter": "Neznan filter {{filterId}}",
|
"unknown_filter": "Neznan filter {{filterId}}",
|
||||||
"known_tracker": "Znan sledilec",
|
"known_tracker": "Znan sledilec",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "Uredi odjemalca",
|
"client_edit": "Uredi odjemalca",
|
||||||
"client_identifier": "Identifikator",
|
"client_identifier": "Identifikator",
|
||||||
"ip_address": "IP naslov",
|
"ip_address": "IP naslov",
|
||||||
"client_identifier_desc": "Odjemalce je mogoče identificirati po naslovu IP, CIDR, MAC naslovu. Upoštevajte, da je uporaba MAC kot identifikatorja mogoča le, če je AdGuard Home tudi <0>strežnik DHCP</0>",
|
"client_identifier_desc": "Odjemalce je mogoče prepoznati po naslovu IP, CIDR, naslovu MAC ali posebnem ID-ju odjemalca (lahko se uporablja za DoT/DoH/DoQ). <0>Tukaj</0> lahko izveste več o prepoznavanju odjemalcev.",
|
||||||
"form_enter_ip": "Vnesite IP",
|
"form_enter_ip": "Vnesite IP",
|
||||||
"form_enter_mac": "Vnesite MAC",
|
"form_enter_mac": "Vnesite MAC",
|
||||||
"form_enter_id": "Vnesi identifikatorja",
|
"form_enter_id": "Vnesi identifikatorja",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> podpira <1>DNS-prek-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> podpira <1>DNS-prek-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> podpira <1>DNS-prek-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> podpira <1>DNS-prek-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Našli boste več izvedb <0>tukaj</0> in <1>tukaj</1>.",
|
"setup_dns_privacy_other_5": "Našli boste več izvedb <0>tukaj</0> in <1>tukaj</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Nastavitve iOS in macOS",
|
||||||
"setup_dns_notice": "Za uporabo <1>DNS-prek-HTTPS</1> ali <1>DNS-prek-TLS</1>, morate <0>konfigurirati šifriranje</0> v nastavitvah AdGuard Home.",
|
"setup_dns_notice": "Za uporabo <1>DNS-prek-HTTPS</1> ali <1>DNS-prek-TLS</1>, morate <0>konfigurirati šifriranje</0> v nastavitvah AdGuard Home.",
|
||||||
"rewrite_added": "Uspešno je dodano DNS prepisovanje za \"{{key}}\"",
|
"rewrite_added": "Uspešno je dodano DNS prepisovanje za \"{{key}}\"",
|
||||||
"rewrite_deleted": "Uspešno je izbrisano DNS prepisovanje za \"{{key}}\"",
|
"rewrite_deleted": "Uspešno je izbrisano DNS prepisovanje za \"{{key}}\"",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP naslovi: {{ip}}",
|
"check_ip": "IP naslovi: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Razlog: {{reason}}",
|
"check_reason": "Razlog: {{reason}}",
|
||||||
"check_rule": "Pravilo: {{rule}}",
|
|
||||||
"check_service": "Ime storitve: {{service}}",
|
"check_service": "Ime storitve: {{service}}",
|
||||||
"service_name": "Ime storitve",
|
"service_name": "Ime storitve",
|
||||||
"check_not_found": "Ni najdeno na vašem seznamu filtrov",
|
"check_not_found": "Ni najdeno na vašem seznamu filtrov",
|
||||||
|
@ -269,7 +269,6 @@
|
|||||||
"source_label": "Izvor",
|
"source_label": "Izvor",
|
||||||
"found_in_known_domain_db": "Pronađeno u poznatim bazama podataka domena.",
|
"found_in_known_domain_db": "Pronađeno u poznatim bazama podataka domena.",
|
||||||
"category_label": "Kategorija",
|
"category_label": "Kategorija",
|
||||||
"rule_label": "Pravilo",
|
|
||||||
"list_label": "Lista",
|
"list_label": "Lista",
|
||||||
"unknown_filter": "Nepoznat filter {{filterId}}",
|
"unknown_filter": "Nepoznat filter {{filterId}}",
|
||||||
"known_tracker": "Poznato praćenje",
|
"known_tracker": "Poznato praćenje",
|
||||||
@ -330,7 +329,6 @@
|
|||||||
"encryption_config_saved": "Konfiguracija šifrovanja je sačuvana",
|
"encryption_config_saved": "Konfiguracija šifrovanja je sačuvana",
|
||||||
"encryption_server": "Ime servera",
|
"encryption_server": "Ime servera",
|
||||||
"encryption_server_enter": "Unesite vaše ime domena",
|
"encryption_server_enter": "Unesite vaše ime domena",
|
||||||
"encryption_server_desc": "Kako biste koristili HTTPS, potrebno je da unesete ime servera koje se podudara sa SSL sertifikatom.",
|
|
||||||
"encryption_redirect": "Automatski preusmeri na HTTPS",
|
"encryption_redirect": "Automatski preusmeri na HTTPS",
|
||||||
"encryption_redirect_desc": "Ako je označeno, AdGuard Home će vas automatski preusmeravati sa HTTP na HTTPS adrese.",
|
"encryption_redirect_desc": "Ako je označeno, AdGuard Home će vas automatski preusmeravati sa HTTP na HTTPS adrese.",
|
||||||
"encryption_https": "HTTPS port",
|
"encryption_https": "HTTPS port",
|
||||||
@ -386,7 +384,6 @@
|
|||||||
"client_edit": "Izmeni klijent",
|
"client_edit": "Izmeni klijent",
|
||||||
"client_identifier": "Identifikator",
|
"client_identifier": "Identifikator",
|
||||||
"ip_address": "IP adresa",
|
"ip_address": "IP adresa",
|
||||||
"client_identifier_desc": "Klijenti mogu da budu prepoznati po IP adresi ili MAC adresi. Imajte na umu da je korišćenje MAC adrese kao identifikatora moguće samo ako je AdGuard Home takođe a <0>DHCP server</0>",
|
|
||||||
"form_enter_ip": "Unesite IP",
|
"form_enter_ip": "Unesite IP",
|
||||||
"form_enter_mac": "Unesite MAC",
|
"form_enter_mac": "Unesite MAC",
|
||||||
"form_enter_id": "Unesite identifikator",
|
"form_enter_id": "Unesite identifikator",
|
||||||
@ -529,7 +526,6 @@
|
|||||||
"check_ip": "IP adrese: {{ip}}",
|
"check_ip": "IP adrese: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Razlog: {{reason}}",
|
"check_reason": "Razlog: {{reason}}",
|
||||||
"check_rule": "Pravilo: {{rule}}",
|
|
||||||
"check_service": "Ime usluge: {{service}}",
|
"check_service": "Ime usluge: {{service}}",
|
||||||
"service_name": "Ime usluge",
|
"service_name": "Ime usluge",
|
||||||
"check_not_found": "Nije pronađeno na vašoj listi filtera",
|
"check_not_found": "Nije pronađeno na vašoj listi filtera",
|
||||||
|
@ -177,7 +177,6 @@
|
|||||||
"source_label": "Källa",
|
"source_label": "Källa",
|
||||||
"found_in_known_domain_db": "Hittad i domändatabas.",
|
"found_in_known_domain_db": "Hittad i domändatabas.",
|
||||||
"category_label": "Kategori",
|
"category_label": "Kategori",
|
||||||
"rule_label": "Regel",
|
|
||||||
"unknown_filter": "Okänt filter {{filterId}}",
|
"unknown_filter": "Okänt filter {{filterId}}",
|
||||||
"install_welcome_title": "Välkommen till AdGuard Home!",
|
"install_welcome_title": "Välkommen till AdGuard Home!",
|
||||||
"install_welcome_desc": "AdGuard Home är en DNS-server för nätverkstäckande annons- och spårningsblockering. Dess syfte är att de dig kontroll över hela nätverket och alla dina enheter, utan behov av att använda klientbaserade program.",
|
"install_welcome_desc": "AdGuard Home är en DNS-server för nätverkstäckande annons- och spårningsblockering. Dess syfte är att de dig kontroll över hela nätverket och alla dina enheter, utan behov av att använda klientbaserade program.",
|
||||||
@ -235,7 +234,6 @@
|
|||||||
"encryption_config_saved": "Krypteringsinställningar sparade",
|
"encryption_config_saved": "Krypteringsinställningar sparade",
|
||||||
"encryption_server": "Servernamn",
|
"encryption_server": "Servernamn",
|
||||||
"encryption_server_enter": "Skriv in ditt domännamn",
|
"encryption_server_enter": "Skriv in ditt domännamn",
|
||||||
"encryption_server_desc": "För att använda HTTPS behöver du skriva in servernamnet som stämmer överens med ditt SSL-certifikat.",
|
|
||||||
"encryption_redirect": "Omdirigera till HTTPS automatiskt",
|
"encryption_redirect": "Omdirigera till HTTPS automatiskt",
|
||||||
"encryption_redirect_desc": "Om bockad kommer AdGuard Home automatiskt att omdirigera dig från HTTP till HTTPS-adresser.",
|
"encryption_redirect_desc": "Om bockad kommer AdGuard Home automatiskt att omdirigera dig från HTTP till HTTPS-adresser.",
|
||||||
"encryption_https": "HTTPS-port",
|
"encryption_https": "HTTPS-port",
|
||||||
@ -287,7 +285,6 @@
|
|||||||
"client_edit": "Redigera klient",
|
"client_edit": "Redigera klient",
|
||||||
"client_identifier": "Identifikator",
|
"client_identifier": "Identifikator",
|
||||||
"ip_address": "IP-adress",
|
"ip_address": "IP-adress",
|
||||||
"client_identifier_desc": "Klienter kan identifieras genom IP-adresser eller MAC-adresser. Notera att användning av MAC som identifierare bara är möjligt om AdGuard Home också är en <0>DHCP-server</0>",
|
|
||||||
"form_enter_ip": "Skriv in IP",
|
"form_enter_ip": "Skriv in IP",
|
||||||
"form_enter_mac": "Skriv in MAC",
|
"form_enter_mac": "Skriv in MAC",
|
||||||
"form_client_name": "Skriv in klientnamn",
|
"form_client_name": "Skriv in klientnamn",
|
||||||
|
@ -200,7 +200,6 @@
|
|||||||
"source_label": "ที่มา",
|
"source_label": "ที่มา",
|
||||||
"found_in_known_domain_db": "พบในฐานข้อมูลโดเมนที่รู้จัก",
|
"found_in_known_domain_db": "พบในฐานข้อมูลโดเมนที่รู้จัก",
|
||||||
"category_label": "ประเภท",
|
"category_label": "ประเภท",
|
||||||
"rule_label": "กฎ",
|
|
||||||
"unknown_filter": "ตัวกรองที่ไม่รู้จัก {{filterId}}",
|
"unknown_filter": "ตัวกรองที่ไม่รู้จัก {{filterId}}",
|
||||||
"install_welcome_title": "ยินดีต้อนรับสู่ AdGuard Home",
|
"install_welcome_title": "ยินดีต้อนรับสู่ AdGuard Home",
|
||||||
"install_welcome_desc": "AdGuard Home เป็นเซิร์ฟเวอร์ DNS ปิดกั้นโฆษณาและติดตามทั่วทั้งเครือข่าย วัตถุประสงค์คือเพื่อให้คุณควบคุมเครือข่ายทั้งหมดและอุปกรณ์ทั้งหมดของคุณและไม่จำเป็นต้องใช้โปรแกรมฝั่งไคลเอ็นต์",
|
"install_welcome_desc": "AdGuard Home เป็นเซิร์ฟเวอร์ DNS ปิดกั้นโฆษณาและติดตามทั่วทั้งเครือข่าย วัตถุประสงค์คือเพื่อให้คุณควบคุมเครือข่ายทั้งหมดและอุปกรณ์ทั้งหมดของคุณและไม่จำเป็นต้องใช้โปรแกรมฝั่งไคลเอ็นต์",
|
||||||
@ -258,7 +257,6 @@
|
|||||||
"encryption_config_saved": "บันทึกการตั้งค่าเข้ารหัสเรียบร้อยแล้ว",
|
"encryption_config_saved": "บันทึกการตั้งค่าเข้ารหัสเรียบร้อยแล้ว",
|
||||||
"encryption_server": "ชื่อเซิร์ฟเวอร์",
|
"encryption_server": "ชื่อเซิร์ฟเวอร์",
|
||||||
"encryption_server_enter": "ป้อนชื่อโดเมน",
|
"encryption_server_enter": "ป้อนชื่อโดเมน",
|
||||||
"encryption_server_desc": "ในการใช้ HTTPS คุณต้องป้อนชื่อเซิร์ฟเวอร์ที่ตรงกับใบรับรอง SSL ของคุณ",
|
|
||||||
"encryption_redirect": "ไปเส้นทาง HTTPS อัตโนมัติ",
|
"encryption_redirect": "ไปเส้นทาง HTTPS อัตโนมัติ",
|
||||||
"encryption_redirect_desc": "หากเลือกตัวเลือกนี้ AdGuard Home จะเปลี่ยนเส้นทางคุณจากที่อยู่ HTTP ไปยัง HTTPS โดยอัตโนมัติ",
|
"encryption_redirect_desc": "หากเลือกตัวเลือกนี้ AdGuard Home จะเปลี่ยนเส้นทางคุณจากที่อยู่ HTTP ไปยัง HTTPS โดยอัตโนมัติ",
|
||||||
"encryption_https": "พอร์ท HTTPS",
|
"encryption_https": "พอร์ท HTTPS",
|
||||||
@ -312,7 +310,6 @@
|
|||||||
"client_edit": "แก้ไขเครื่องลูกข่าย",
|
"client_edit": "แก้ไขเครื่องลูกข่าย",
|
||||||
"client_identifier": "ตรวจสอบโดย",
|
"client_identifier": "ตรวจสอบโดย",
|
||||||
"ip_address": "IP addresses",
|
"ip_address": "IP addresses",
|
||||||
"client_identifier_desc": "ลูกค้าสามารถระบุได้โดยที่อยู่ IP, CIDR, ที่อยู่ MAC โปรดทราบว่าการใช้ MAC เป็นตัวระบุเป็นไปได้ก็ต่อเมื่อ AdGuard Home เป็น <0>เซิร์ฟเวอร์ DHCP</0> ด้วย",
|
|
||||||
"form_enter_ip": "กรอก IP",
|
"form_enter_ip": "กรอก IP",
|
||||||
"form_enter_mac": "กรอก MAC",
|
"form_enter_mac": "กรอก MAC",
|
||||||
"form_enter_id": "ป้อนตัวระบุ",
|
"form_enter_id": "ป้อนตัวระบุ",
|
||||||
|
@ -2,18 +2,20 @@
|
|||||||
"client_settings": "İstemci ayarları",
|
"client_settings": "İstemci ayarları",
|
||||||
"example_upstream_reserved": "<0>Belirli alan adları için</0> DNS üst sunucusu tanımlayabilirsiniz.",
|
"example_upstream_reserved": "<0>Belirli alan adları için</0> DNS üst sunucusu tanımlayabilirsiniz.",
|
||||||
"example_upstream_comment": "Bir yorum belirtebilirsiniz",
|
"example_upstream_comment": "Bir yorum belirtebilirsiniz",
|
||||||
"upstream_parallel": "Tüm üst sunucuları eş zamanlı sorgulayarak çözümü hızlandırmak için paralel sorguları kullan",
|
"upstream_parallel": "Tüm üst sunucuları eş zamanlı sorgulayarak çözümü hızlandırmak için paralel istekleri kullan",
|
||||||
"parallel_requests": "Paralel istekler",
|
"parallel_requests": "Paralel istekler",
|
||||||
|
"load_balancing": "Yük dengeleme",
|
||||||
|
"load_balancing_desc": "Her seferinde bir sunucuyu sorgulayın. AdGuard Home, sunucuyu seçmek için ağırlıklı rastgele algoritmayı kullanacak, böylece en hızlı sunucu daha sık kullanılacak.",
|
||||||
"bootstrap_dns": "DNS Önyükleme sunucuları",
|
"bootstrap_dns": "DNS Önyükleme sunucuları",
|
||||||
"bootstrap_dns_desc": "DNS Önyükleme sunucuları, seçtiğiniz üst sunucuların DoH/DoT çözücülerine ait ip adreslerinin çözülmesi için kullanılır.",
|
"bootstrap_dns_desc": "DNS Önyükleme sunucuları, seçtiğiniz üst sunucuların DoH/DoT çözücülerine ait ip adreslerinin çözülmesi için kullanılır.",
|
||||||
"check_dhcp_servers": "DHCP sunucularını yokla",
|
"check_dhcp_servers": "DHCP sunucularını denetle",
|
||||||
"save_config": "Ayarları kaydet",
|
"save_config": "Yapılandırmayı kaydet",
|
||||||
"enabled_dhcp": "DHCP sunucusu etkinleştirildi",
|
"enabled_dhcp": "DHCP sunucusu etkinleştirildi",
|
||||||
"disabled_dhcp": "DHCP sunucusu devre dışı bırakıldı",
|
"disabled_dhcp": "DHCP sunucusu devre dışı bırakıldı",
|
||||||
"unavailable_dhcp": "DHCP kullanılamıyor",
|
"unavailable_dhcp": "DHCP kullanılamıyor",
|
||||||
"unavailable_dhcp_desc": "AdGuard Home, işletim sisteminizde DHCP sunucusu çalıştıramıyor",
|
"unavailable_dhcp_desc": "AdGuard Home, işletim sisteminizde DHCP sunucusu çalıştıramıyor",
|
||||||
"dhcp_title": "DHCP sunucusu (deneysel!)",
|
"dhcp_title": "DHCP sunucusu (deneysel!)",
|
||||||
"dhcp_description": "Eğer router'ınız DHCP ayarlarını sunmuyorsa AdGuard'ın dahili DHCP sunucusunu kullanabilirsiniz.",
|
"dhcp_description": "Yönlendiriciniz DHCP ayarlarını sağlamıyorsa, AdGuard'ın kendi yerleşik DHCP sunucusunu kullanabilirsiniz.",
|
||||||
"dhcp_enable": "DHCP sunucusunu etkinleştir",
|
"dhcp_enable": "DHCP sunucusunu etkinleştir",
|
||||||
"dhcp_disable": "DHCP sunucusunu devre dışı bırak",
|
"dhcp_disable": "DHCP sunucusunu devre dışı bırak",
|
||||||
"dhcp_not_found": "Yerleşik DHCP sunucusunu etkinleştirmek güvenlidir - Ağ üzerinde herhangi bir aktif DHCP sunucusu bulamadık. Ancak, otomatik testimiz şu anda %100 garanti vermediği için el ile tekrar kontrol etmenizi öneririz.",
|
"dhcp_not_found": "Yerleşik DHCP sunucusunu etkinleştirmek güvenlidir - Ağ üzerinde herhangi bir aktif DHCP sunucusu bulamadık. Ancak, otomatik testimiz şu anda %100 garanti vermediği için el ile tekrar kontrol etmenizi öneririz.",
|
||||||
@ -21,15 +23,16 @@
|
|||||||
"dhcp_leases": "DHCP kiralamaları",
|
"dhcp_leases": "DHCP kiralamaları",
|
||||||
"dhcp_static_leases": "Sabit DHCP kiralamaları",
|
"dhcp_static_leases": "Sabit DHCP kiralamaları",
|
||||||
"dhcp_leases_not_found": "DHCP kiralaması bulunamadı",
|
"dhcp_leases_not_found": "DHCP kiralaması bulunamadı",
|
||||||
"dhcp_config_saved": "DHCP sunucusu ayarı kaydedildi",
|
"dhcp_config_saved": "DHCP sunucusu yapılandırması kaydedildi",
|
||||||
"dhcp_ipv4_settings": "DHCP IPv4 Ayarları",
|
"dhcp_ipv4_settings": "DHCP IPv4 Ayarları",
|
||||||
"dhcp_ipv6_settings": "DHCP IPv6 Ayarları",
|
"dhcp_ipv6_settings": "DHCP IPv6 Ayarları",
|
||||||
"form_error_required": "Gerekli alan",
|
"form_error_required": "Gerekli alan",
|
||||||
"form_error_ip4_format": "Geçersiz IPv4 formatı",
|
"form_error_ip4_format": "Geçersiz IPv4 biçimi",
|
||||||
"form_error_ip6_format": "Geçersiz IPv6 formatı",
|
"form_error_ip6_format": "Geçersiz IPv6 biçimi",
|
||||||
"form_error_ip_format": "Geçersiz IPv4 formatı",
|
"form_error_ip_format": "Geçersiz IP biçimi",
|
||||||
"form_error_mac_format": "Geçersiz MAC biçimi",
|
"form_error_mac_format": "Geçersiz MAC biçimi",
|
||||||
"form_error_client_id_format": "Geçersiz müşteri kimliği formatı",
|
"form_error_client_id_format": "Geçersiz istemci kimliği biçimi",
|
||||||
|
"form_error_server_name": "Geçersiz sunucu adı",
|
||||||
"form_error_positive": "0'dan büyük olmalı",
|
"form_error_positive": "0'dan büyük olmalı",
|
||||||
"form_error_negative": "0 veya daha büyük olmalıdır",
|
"form_error_negative": "0 veya daha büyük olmalıdır",
|
||||||
"range_end_error": "Başlangıç aralığından daha büyük olmalı",
|
"range_end_error": "Başlangıç aralığından daha büyük olmalı",
|
||||||
@ -43,10 +46,10 @@
|
|||||||
"dhcp_interface_select": "DHCP arayüzünü seç",
|
"dhcp_interface_select": "DHCP arayüzünü seç",
|
||||||
"dhcp_hardware_address": "Donanım adresi",
|
"dhcp_hardware_address": "Donanım adresi",
|
||||||
"dhcp_ip_addresses": "IP adresleri",
|
"dhcp_ip_addresses": "IP adresleri",
|
||||||
"ip": "IP Adresi",
|
"ip": "IP",
|
||||||
"dhcp_table_hostname": "Bilgisayar Adı",
|
"dhcp_table_hostname": "Ana bilgisayar Adı",
|
||||||
"dhcp_table_expires": "Geçerlilik Tarihi",
|
"dhcp_table_expires": "Geçerlilik Tarihi",
|
||||||
"dhcp_warning": "Dahili DHCP sunucusunu etkinleştirmek istiyorsanız başka aktif DHCP sunucusu olmadığından emin olun. Aksi takdirde cihazlar internete bağlanamayabilir.",
|
"dhcp_warning": "DHCP sunucusunu yine de etkinleştirmek istiyorsanız, ağınızda başka bir aktif DHCP sunucusu olmadığından emin olun. Aksi takdirde, bağlı cihazlar için interneti kırabilir!",
|
||||||
"dhcp_error": "Ağda başka bir DHCP sunucusu olup olmadığını belirleyemedik.",
|
"dhcp_error": "Ağda başka bir DHCP sunucusu olup olmadığını belirleyemedik.",
|
||||||
"dhcp_static_ip_error": "DHCP sunucusunu kullanmak için statik bir IP adresi ayarlanmalıdır. Bu ağ arayüzünün statik IP adresi kullanılarak yapılandırılıp yapılandırılmadığını belirleyemedik. Lütfen statik bir IP adresini elle ayarlayın.",
|
"dhcp_static_ip_error": "DHCP sunucusunu kullanmak için statik bir IP adresi ayarlanmalıdır. Bu ağ arayüzünün statik IP adresi kullanılarak yapılandırılıp yapılandırılmadığını belirleyemedik. Lütfen statik bir IP adresini elle ayarlayın.",
|
||||||
"dhcp_dynamic_ip_found": "Sisteminiz <0>{{interfaceName}}</0> arayüzü için dinamik IP adresi yapılandırması kullanıyor. DHCP sunucusunu kullanmak için statik bir IP adresi ayarlanmalıdır. Geçerli IP adresiniz <0>{{ipAddress}}</0>. DHCP'yi etkinleştir düğmesine basarsanız bu IP adresini statik IP adresiniz olarak ayarlayacağız.",
|
"dhcp_dynamic_ip_found": "Sisteminiz <0>{{interfaceName}}</0> arayüzü için dinamik IP adresi yapılandırması kullanıyor. DHCP sunucusunu kullanmak için statik bir IP adresi ayarlanmalıdır. Geçerli IP adresiniz <0>{{ipAddress}}</0>. DHCP'yi etkinleştir düğmesine basarsanız bu IP adresini statik IP adresiniz olarak ayarlayacağız.",
|
||||||
@ -59,8 +62,10 @@
|
|||||||
"country": "Ülke",
|
"country": "Ülke",
|
||||||
"city": "Şehir",
|
"city": "Şehir",
|
||||||
"delete_confirm": "\"{{key}}\" silmek istediğinizden emin misiniz?",
|
"delete_confirm": "\"{{key}}\" silmek istediğinizden emin misiniz?",
|
||||||
"form_enter_hostname": "Cihaz ismi girin",
|
"form_enter_hostname": "Ana bilgisayar adı girin",
|
||||||
"error_details": "Hata detayları",
|
"error_details": "Hata detayları",
|
||||||
|
"response_details": "Yanıt ayrıntıları",
|
||||||
|
"request_details": "İstek ayrıntıları",
|
||||||
"client_details": "İstemci detayları",
|
"client_details": "İstemci detayları",
|
||||||
"details": "Detaylar",
|
"details": "Detaylar",
|
||||||
"back": "Geri",
|
"back": "Geri",
|
||||||
@ -69,6 +74,7 @@
|
|||||||
"filters": "Filtreler",
|
"filters": "Filtreler",
|
||||||
"filter": "Filtre",
|
"filter": "Filtre",
|
||||||
"query_log": "Sorgu Günlüğü",
|
"query_log": "Sorgu Günlüğü",
|
||||||
|
"compact": "Kompakt",
|
||||||
"nothing_found": "Hiçbir şey bulunamadı",
|
"nothing_found": "Hiçbir şey bulunamadı",
|
||||||
"faq": "SSS",
|
"faq": "SSS",
|
||||||
"version": "Sürüm",
|
"version": "Sürüm",
|
||||||
@ -76,7 +82,7 @@
|
|||||||
"protocol": "Protokol",
|
"protocol": "Protokol",
|
||||||
"on": "AÇIK",
|
"on": "AÇIK",
|
||||||
"off": "KAPALI",
|
"off": "KAPALI",
|
||||||
"copyright": "Tüm hakları saklıdır",
|
"copyright": "Telif hakkı",
|
||||||
"homepage": "Anasayfa",
|
"homepage": "Anasayfa",
|
||||||
"report_an_issue": "Bir sorun bildir",
|
"report_an_issue": "Bir sorun bildir",
|
||||||
"privacy_policy": "Gizlilik politikası",
|
"privacy_policy": "Gizlilik politikası",
|
||||||
@ -109,7 +115,7 @@
|
|||||||
"number_of_dns_query_to_safe_search": "Güvenli Aramanın zorunlu kıldığı arama motorlarına gönderilen DNS isteklerinin sayısı",
|
"number_of_dns_query_to_safe_search": "Güvenli Aramanın zorunlu kıldığı arama motorlarına gönderilen DNS isteklerinin sayısı",
|
||||||
"average_processing_time": "Ortalama işlem süresi",
|
"average_processing_time": "Ortalama işlem süresi",
|
||||||
"average_processing_time_hint": "Bir DNS isteğinin mili saniye cinsinden ortalama işlem süresi",
|
"average_processing_time_hint": "Bir DNS isteğinin mili saniye cinsinden ortalama işlem süresi",
|
||||||
"block_domain_use_filters_and_hosts": "Filtreleri ve hosts listelerini kullanarak alan adlarını engelle",
|
"block_domain_use_filters_and_hosts": "Filtre ve ana bilgisayar listelerini kullanarak alan adlarını engelle",
|
||||||
"filters_block_toggle_hint": "<a>Filtreler</a> sayfasından engelleme kurallarını ayarlayabilirsiniz.",
|
"filters_block_toggle_hint": "<a>Filtreler</a> sayfasından engelleme kurallarını ayarlayabilirsiniz.",
|
||||||
"use_adguard_browsing_sec": "AdGuard gezinti koruması web hizmetini kullan",
|
"use_adguard_browsing_sec": "AdGuard gezinti koruması web hizmetini kullan",
|
||||||
"use_adguard_browsing_sec_hint": "AdGuard Home, alan adının gezinti koruması web hizmetinde kara listede olup olmadığını kontrol edecek. Kontrol işlemi gizlilik dostu API kullanılarak yapılacak: yalnızca alan adının kısa bir ön eki SHA256 ile şifrelenip sunucuya gönderilecek.",
|
"use_adguard_browsing_sec_hint": "AdGuard Home, alan adının gezinti koruması web hizmetinde kara listede olup olmadığını kontrol edecek. Kontrol işlemi gizlilik dostu API kullanılarak yapılacak: yalnızca alan adının kısa bir ön eki SHA256 ile şifrelenip sunucuya gönderilecek.",
|
||||||
@ -121,9 +127,9 @@
|
|||||||
"general_settings": "Genel ayarlar",
|
"general_settings": "Genel ayarlar",
|
||||||
"dns_settings": "DNS ayarları",
|
"dns_settings": "DNS ayarları",
|
||||||
"dns_blocklists": "DNS engelleme listeleri",
|
"dns_blocklists": "DNS engelleme listeleri",
|
||||||
"dns_allowlists": "DNS izin listeleri",
|
"dns_allowlists": "DNS izin verilen listeleri",
|
||||||
"dns_blocklists_desc": "AdGuard Home, engelleme listeleriyle eşleşen alanları engeller.",
|
"dns_blocklists_desc": "AdGuard Home, engelleme listeleriyle eşleşen alanları engeller.",
|
||||||
"dns_allowlists_desc": "DNS izin listelerindeki alanlara, engelleme listelerinden birinde olsalar bile izin verilir.",
|
"dns_allowlists_desc": "DNS izin verilen listelerindeki alanlara, engelleme listelerinden birinde olsalar bile izin verilir.",
|
||||||
"custom_filtering_rules": "Özel filtreleme kuralları",
|
"custom_filtering_rules": "Özel filtreleme kuralları",
|
||||||
"encryption_settings": "Şifreleme ayarları",
|
"encryption_settings": "Şifreleme ayarları",
|
||||||
"dhcp_settings": "DHCP ayarları",
|
"dhcp_settings": "DHCP ayarları",
|
||||||
@ -131,7 +137,7 @@
|
|||||||
"upstream_dns_help": "Her satıra bir sunucu adresi girin. Üst DNS sunucularını yapılandırma hakkında <a>daha fazla bilgi edinin</a>.",
|
"upstream_dns_help": "Her satıra bir sunucu adresi girin. Üst DNS sunucularını yapılandırma hakkında <a>daha fazla bilgi edinin</a>.",
|
||||||
"upstream_dns_configured_in_file": "{{path}} içinde yapılandırıldı",
|
"upstream_dns_configured_in_file": "{{path}} içinde yapılandırıldı",
|
||||||
"test_upstream_btn": "Üst sunucuyu test et",
|
"test_upstream_btn": "Üst sunucuyu test et",
|
||||||
"upstreams": "Upstreams",
|
"upstreams": "Üst kaynak",
|
||||||
"apply_btn": "Uygula",
|
"apply_btn": "Uygula",
|
||||||
"disabled_filtering_toast": "Filtreleme devre dışı",
|
"disabled_filtering_toast": "Filtreleme devre dışı",
|
||||||
"enabled_filtering_toast": "Filtreleme çalışıyor",
|
"enabled_filtering_toast": "Filtreleme çalışıyor",
|
||||||
@ -151,11 +157,11 @@
|
|||||||
"edit_table_action": "Düzenle",
|
"edit_table_action": "Düzenle",
|
||||||
"delete_table_action": "Sil",
|
"delete_table_action": "Sil",
|
||||||
"elapsed": "Geçen zaman",
|
"elapsed": "Geçen zaman",
|
||||||
"filters_and_hosts_hint": "AdGuard Home temel reklam engelleme kurallarını ve hosts dosyalarının söz dizim kurallarını anlamaktadır.",
|
"filters_and_hosts_hint": "AdGuard Home temel reklam engelleme kuralları ve ana bilgisayar dosyalarının sözdizim kurallarını anlamaktadır.",
|
||||||
"no_blocklist_added": "Hiçbir engelleme listesi eklenmedi",
|
"no_blocklist_added": "Engelleme listesi eklenmedi",
|
||||||
"no_whitelist_added": "İzin verilen listesi eklenmedi",
|
"no_whitelist_added": "İzin verilen listesi eklenmedi",
|
||||||
"add_blocklist": "Engelleme listesi ekle",
|
"add_blocklist": "Engelleme listesi ekle",
|
||||||
"add_allowlist": "İzin listesi ekle",
|
"add_allowlist": "İzin verilen listesine ekle",
|
||||||
"cancel_btn": "İptal",
|
"cancel_btn": "İptal",
|
||||||
"enter_name_hint": "İsim girin",
|
"enter_name_hint": "İsim girin",
|
||||||
"enter_url_or_path_hint": "Bir URL ya da listenin tam yolunu girin",
|
"enter_url_or_path_hint": "Bir URL ya da listenin tam yolunu girin",
|
||||||
@ -168,16 +174,16 @@
|
|||||||
"choose_allowlist": "İzin verilen listelerini seç",
|
"choose_allowlist": "İzin verilen listelerini seç",
|
||||||
"enter_valid_blocklist": "Engelleme listesine geçerli bir URL girin.",
|
"enter_valid_blocklist": "Engelleme listesine geçerli bir URL girin.",
|
||||||
"enter_valid_allowlist": "İzin verilen listesine geçerli bir URL girin.",
|
"enter_valid_allowlist": "İzin verilen listesine geçerli bir URL girin.",
|
||||||
"form_error_url_format": "Geçersiz url biçim",
|
"form_error_url_format": "Geçersiz URL biçimi",
|
||||||
"form_error_url_or_path_format": "Geçersiz URL ya da listenin tam yolu",
|
"form_error_url_or_path_format": "Geçersiz URL ya da listenin tam yolu",
|
||||||
"custom_filter_rules": "Özel filtreleme kuralları",
|
"custom_filter_rules": "Özel filtreleme kuralları",
|
||||||
"custom_filter_rules_hint": "Her satıra bir kural girin. Reklama engelleme kuralı veya hosts dosyası söz dizimi kullanabilirsiniz.",
|
"custom_filter_rules_hint": "Her satıra bir kural girin. Reklama engelleme kuralı veya ana bilgisayar dosyası sözdizimi kullanabilirsiniz.",
|
||||||
"examples_title": "Örnekler",
|
"examples_title": "Örnekler",
|
||||||
"example_meaning_filter_block": "example.org alan adına ve tüm alt alan adlarına olan erişimi engeller",
|
"example_meaning_filter_block": "example.org alan adına ve tüm alt alan adlarına olan erişimi engeller",
|
||||||
"example_meaning_filter_whitelist": "example.org alan adına ve tüm alt alan adlarına olan erişim engelini kaldırır",
|
"example_meaning_filter_whitelist": "example.org alan adına ve tüm alt alan adlarına olan erişim engelini kaldırır",
|
||||||
"example_meaning_host_block": "AdGuard Home bu example.org adresi için 127.0.0.1 adresine yönlendirme yapacaktır (alt alan adları için geçerli değildir)",
|
"example_meaning_host_block": "AdGuard Home bu example.org adresi için 127.0.0.1 adresine yönlendirme yapacaktır (alt alan adları için geçerli değildir)",
|
||||||
"example_comment": "! Buraya bir yorum ekledim",
|
"example_comment": "! Buraya bir yorum ekledim",
|
||||||
"example_comment_meaning": "yorum eklemek",
|
"example_comment_meaning": "sadece bir yorum",
|
||||||
"example_comment_hash": "# Bir yorum daha ekledim",
|
"example_comment_hash": "# Bir yorum daha ekledim",
|
||||||
"example_regex_meaning": "belirtilen düzenli ifadelerle eşleşen alan adlarına erişimi engelle",
|
"example_regex_meaning": "belirtilen düzenli ifadelerle eşleşen alan adlarına erişimi engelle",
|
||||||
"example_upstream_regular": "normal DNS (UDP üzerinden)",
|
"example_upstream_regular": "normal DNS (UDP üzerinden)",
|
||||||
@ -202,6 +208,7 @@
|
|||||||
"domain_or_client": "Alan adı veya istemci",
|
"domain_or_client": "Alan adı veya istemci",
|
||||||
"type_table_header": "Tür",
|
"type_table_header": "Tür",
|
||||||
"response_table_header": "Yanıt",
|
"response_table_header": "Yanıt",
|
||||||
|
"response_code": "Yanıt kodu",
|
||||||
"client_table_header": "İstemci",
|
"client_table_header": "İstemci",
|
||||||
"empty_response_status": "Boş",
|
"empty_response_status": "Boş",
|
||||||
"show_all_filter_type": "Tümünü göster",
|
"show_all_filter_type": "Tümünü göster",
|
||||||
@ -220,9 +227,10 @@
|
|||||||
"query_log_filtered": "{{filter}} tarafından filtrelendi",
|
"query_log_filtered": "{{filter}} tarafından filtrelendi",
|
||||||
"query_log_confirm_clear": "Tüm sorgu günlüğünü temizlemek istediğinizden emin misiniz?",
|
"query_log_confirm_clear": "Tüm sorgu günlüğünü temizlemek istediğinizden emin misiniz?",
|
||||||
"query_log_cleared": "Sorgu günlüğü başarıyla temizlendi",
|
"query_log_cleared": "Sorgu günlüğü başarıyla temizlendi",
|
||||||
"query_log_clear": "Sorgu kayıtlarını temizle",
|
"query_log_updated": "Sorgu günlüğü başarıyla güncellendi",
|
||||||
"query_log_retention": "Sorgu kayıtlarının saklanması",
|
"query_log_clear": "Sorgu günlüklerini temizle",
|
||||||
"query_log_enable": "Günlük kaydını etkinleştir",
|
"query_log_retention": "Sorgu günlüklerinin saklanması",
|
||||||
|
"query_log_enable": "Günlüğü etkinleştir",
|
||||||
"query_log_configuration": "Günlük yapılandırması",
|
"query_log_configuration": "Günlük yapılandırması",
|
||||||
"query_log_disabled": "Sorgu günlüğü devre dışı bırakıldı ve <0>ayarlar</0>da yapılandırılabilir",
|
"query_log_disabled": "Sorgu günlüğü devre dışı bırakıldı ve <0>ayarlar</0>da yapılandırılabilir",
|
||||||
"query_log_strict_search": "Katı arama için çift tırnak işareti kullanın",
|
"query_log_strict_search": "Katı arama için çift tırnak işareti kullanın",
|
||||||
@ -240,14 +248,22 @@
|
|||||||
"custom_ip": "Özel IP",
|
"custom_ip": "Özel IP",
|
||||||
"blocking_ipv4": "IPv4 engelleme",
|
"blocking_ipv4": "IPv4 engelleme",
|
||||||
"blocking_ipv6": "IPv6 engelleme",
|
"blocking_ipv6": "IPv6 engelleme",
|
||||||
"dns_over_https": "DNS üzerinden HTTPS",
|
"dnscrypt": "DNSCrypt",
|
||||||
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "İstemci Kimliği",
|
||||||
|
"client_id_placeholder": "İstemci Kimliği girin",
|
||||||
|
"client_id_desc": "Farklı istemciler, özel bir istemci kimliği ile tanımlanabilir. <a>Burada</a> istemcileri nasıl belirleyeceğiniz hakkında daha fazla bilgi edinebilirsiniz.",
|
||||||
"download_mobileconfig_doh": "DNS-over-HTTPS için .mobileconfig dosyasını indir",
|
"download_mobileconfig_doh": "DNS-over-HTTPS için .mobileconfig dosyasını indir",
|
||||||
"download_mobileconfig_dot": "DNS-over-TLS için .mobileconfig dosyasını indir",
|
"download_mobileconfig_dot": "DNS-over-TLS için .mobileconfig dosyasını indir",
|
||||||
|
"download_mobileconfig": "Yapılandırma dosyasını indir",
|
||||||
|
"plain_dns": "Sade DNS",
|
||||||
"form_enter_rate_limit": "Sıklık limitini girin",
|
"form_enter_rate_limit": "Sıklık limitini girin",
|
||||||
"rate_limit": "Sıklık limiti",
|
"rate_limit": "Sıklık limiti",
|
||||||
"edns_enable": "EDNS İstemci Alt Ağını Etkinleştir",
|
"edns_enable": "EDNS İstemci Alt Ağını Etkinleştir",
|
||||||
"edns_cs_desc": "Etkinleştirilirse, AdGuard Home, istemcilerin alt ağlarını DNS sunucularına gönderir.",
|
"edns_cs_desc": "Etkinleştirilirse, AdGuard Home, istemcilerin alt ağlarını DNS sunucularına gönderir.",
|
||||||
|
"rate_limit_desc": "Tek bir istemcinin yapmasına izin verilen saniye başına istek sayısı (0'a ayarlamak sınırsız anlamına gelir)",
|
||||||
"blocking_ipv4_desc": "Engellenen bir A isteği için geri döndürülecek IP adresi",
|
"blocking_ipv4_desc": "Engellenen bir A isteği için geri döndürülecek IP adresi",
|
||||||
"blocking_ipv6_desc": "Engellenen bir AAAA isteği için geri döndürülecek IP adresi",
|
"blocking_ipv6_desc": "Engellenen bir AAAA isteği için geri döndürülecek IP adresi",
|
||||||
"blocking_mode_default": "Varsayılan: Reklam engelleme stili kuralı tarafından engellendiğinde sıfır IP adresiyle (A için 0.0.0.0; AAAA için) yanıt verin; /etc/hosts-style kuralı tarafından engellendiğinde, kuralda belirtilen IP adresiyle yanıt verin",
|
"blocking_mode_default": "Varsayılan: Reklam engelleme stili kuralı tarafından engellendiğinde sıfır IP adresiyle (A için 0.0.0.0; AAAA için) yanıt verin; /etc/hosts-style kuralı tarafından engellendiğinde, kuralda belirtilen IP adresiyle yanıt verin",
|
||||||
@ -268,17 +284,17 @@
|
|||||||
"install_welcome_desc": "AdGuard Home, ağ genelinde reklam ve izleyicileri engelleyen bir DNS sunucusudur. Tüm ağınızı ve tüm cihazlarınızı kontrol etmenize yarayan bir araçtır, istemci tarafında bir program kullanmanıza gerek duymaz.",
|
"install_welcome_desc": "AdGuard Home, ağ genelinde reklam ve izleyicileri engelleyen bir DNS sunucusudur. Tüm ağınızı ve tüm cihazlarınızı kontrol etmenize yarayan bir araçtır, istemci tarafında bir program kullanmanıza gerek duymaz.",
|
||||||
"install_settings_title": "Yönetici Web Arayüzü",
|
"install_settings_title": "Yönetici Web Arayüzü",
|
||||||
"install_settings_listen": "Dinleme arayüzü",
|
"install_settings_listen": "Dinleme arayüzü",
|
||||||
"install_settings_port": "Port",
|
"install_settings_port": "Bağlantı noktası",
|
||||||
"install_settings_interface_link": "AdGuard Home yönetici web arayüzü sayfanız şu adresten erişilebilir olacaktır:",
|
"install_settings_interface_link": "AdGuard Home yönetici web arayüzü sayfanız şu adresten erişilebilir olacaktır:",
|
||||||
"form_error_port": "Geçerli bir port değeri girin",
|
"form_error_port": "Geçerli bir bağlantı noktası değeri girin",
|
||||||
"install_settings_dns": "DNS sunucusu",
|
"install_settings_dns": "DNS sunucusu",
|
||||||
"install_settings_dns_desc": "Cihazlarınızı veya yönlendiricinizi şu adresteki DNS sunucusunu kullanması için ayarlamanız gerekecek:",
|
"install_settings_dns_desc": "Cihazlarınızı veya yönlendiricinizi şu adresteki DNS sunucusunu kullanması için ayarlamanız gerekecek:",
|
||||||
"install_settings_all_interfaces": "Tüm arayüzler",
|
"install_settings_all_interfaces": "Tüm arayüzler",
|
||||||
"install_auth_title": "Kimlik Doğrulama",
|
"install_auth_title": "Kimlik Doğrulama",
|
||||||
"install_auth_desc": "AdAdGuard Home yönetici web arayüzüne erişim için kullanıcı adı ve şifresi oluşturmanız şiddetle tavsiye edilir. Sadece yerel ağınız erişilebilir olsa bile izinsiz giriş yapılmasını engellemek için şifrenizin olması önemlidir.",
|
"install_auth_desc": "AdAdGuard Home yönetici web arayüzüne erişim için kullanıcı adı ve şifresi oluşturmanız şiddetle tavsiye edilir. Sadece yerel ağınız erişilebilir olsa bile izinsiz giriş yapılmasını engellemek için şifrenizin olması önemlidir.",
|
||||||
"install_auth_username": "Kullanıcı adı",
|
"install_auth_username": "Kullanıcı adı",
|
||||||
"install_auth_password": "Şifre",
|
"install_auth_password": "Parola",
|
||||||
"install_auth_confirm": "Şifreyi onayla",
|
"install_auth_confirm": "Parolayı onayla",
|
||||||
"install_auth_username_enter": "Kullanıcı adı girin",
|
"install_auth_username_enter": "Kullanıcı adı girin",
|
||||||
"install_auth_password_enter": "Şifre girin",
|
"install_auth_password_enter": "Şifre girin",
|
||||||
"install_step": "Adım",
|
"install_step": "Adım",
|
||||||
@ -289,7 +305,7 @@
|
|||||||
"install_devices_router": "Yönlendirici",
|
"install_devices_router": "Yönlendirici",
|
||||||
"install_devices_router_desc": "Bu kurulum evdeki yönlendiricinize bağlı tüm cihazlarınızı otomatik olarak kapsar ve her birini elle ayarlamanız gerekmez.",
|
"install_devices_router_desc": "Bu kurulum evdeki yönlendiricinize bağlı tüm cihazlarınızı otomatik olarak kapsar ve her birini elle ayarlamanız gerekmez.",
|
||||||
"install_devices_address": "AdGuard Home DNS sunucusu şu adresi dinleyecektir",
|
"install_devices_address": "AdGuard Home DNS sunucusu şu adresi dinleyecektir",
|
||||||
"install_devices_router_list_1": "Yönlendiricinizin ayarlarına girin. Genelde internet tarayıcınızdan bir URL vasıtasıyla erişebilirsiniz (http://192.168.0.1/ veya http://192.168.1.1/ gibi). Sizden şifre girmenizi isteyebilir. Hatırlamıyorsanız yönlendiricinizin arkasındaki 'reset' tuşuna basılı tutup fabrika ayarlarına sıfırlayabilirsiniz. Bazı yönlendiriciler belirli uygulamalarla çalışır, bu durumda bilgisayarınıza/telefonunuza kurulması gerekir.",
|
"install_devices_router_list_1": "Yönlendiricinizin ayarlarına girin. Genelde internet tarayıcınızdan bir URL vasıtasıyla erişebilirsiniz (http://192.168.0.1/ veya http://192.168.1.1/ gibi). Sizden parola girmenizi isteyebilir. Hatırlamıyorsanız yönlendiricinizin arkasındaki 'reset' tuşuna basılı tutup fabrika ayarlarına sıfırlayabilirsiniz. Bazı yönlendiriciler belirli uygulamalarla çalışır, bu durumda bilgisayarınıza/telefonunuza kurulması gerekir.",
|
||||||
"install_devices_router_list_2": "DHCP/DNS ayarlarını bulun. DNS satırlarını arayın, genelde iki veya üç tanedir, üç rakam girilebilen dört ayrı grup içeren satırdır.",
|
"install_devices_router_list_2": "DHCP/DNS ayarlarını bulun. DNS satırlarını arayın, genelde iki veya üç tanedir, üç rakam girilebilen dört ayrı grup içeren satırdır.",
|
||||||
"install_devices_router_list_3": "AdGuard Home sunucusunun adresini o kısma yazın.",
|
"install_devices_router_list_3": "AdGuard Home sunucusunun adresini o kısma yazın.",
|
||||||
"install_devices_router_list_4": "Bazı yönlendirici tiplerinde özel bir DNS sunucusu ayarlayamazsınız. Bu durumda AdGuard Home'u bir DHCP sunucu olarak ayarlamanız yardımcı olabilir. Aksi halde, yönlendirici modeliniz için <0>DNS sunucularını</0> elle nasıl özelleştirebileceğinizi aramalısınız.",
|
"install_devices_router_list_4": "Bazı yönlendirici tiplerinde özel bir DNS sunucusu ayarlayamazsınız. Bu durumda AdGuard Home'u bir DHCP sunucu olarak ayarlamanız yardımcı olabilir. Aksi halde, yönlendirici modeliniz için <0>DNS sunucularını</0> elle nasıl özelleştirebileceğinizi aramalısınız.",
|
||||||
@ -313,7 +329,7 @@
|
|||||||
"install_devices_ios_list_3": "Bağlı olduğunuz ağın ismine dokunun.",
|
"install_devices_ios_list_3": "Bağlı olduğunuz ağın ismine dokunun.",
|
||||||
"install_devices_ios_list_4": "DNS alanına AdGuard Home sunucunuzun adreslerini girin.",
|
"install_devices_ios_list_4": "DNS alanına AdGuard Home sunucunuzun adreslerini girin.",
|
||||||
"get_started": "Başlarken",
|
"get_started": "Başlarken",
|
||||||
"next": "İleri",
|
"next": "Sonraki",
|
||||||
"open_dashboard": "Panoyu Aç",
|
"open_dashboard": "Panoyu Aç",
|
||||||
"install_saved": "Başarıyla kaydedildi",
|
"install_saved": "Başarıyla kaydedildi",
|
||||||
"encryption_title": "Şifreleme",
|
"encryption_title": "Şifreleme",
|
||||||
@ -321,7 +337,7 @@
|
|||||||
"encryption_config_saved": "Şifreleme ayarı kaydedildi",
|
"encryption_config_saved": "Şifreleme ayarı kaydedildi",
|
||||||
"encryption_server": "Sunucu adı",
|
"encryption_server": "Sunucu adı",
|
||||||
"encryption_server_enter": "Alan adınızı girin",
|
"encryption_server_enter": "Alan adınızı girin",
|
||||||
"encryption_server_desc": "HTTPS kullanmak için SSL sertifikanızla eşleşen sunucu adını girmeniz gerekir",
|
"encryption_server_desc": "HTTPS kullanmak için, SSL sertifikanız veya joker karakter sertifikanızla eşleşen sunucu adını girmeniz gerekir. Alan ayarlanmazsa, herhangi bir alan adı için TKG bağlantılarını kabul eder.",
|
||||||
"encryption_redirect": "Otomatik olarak HTTPS'e yönlendir",
|
"encryption_redirect": "Otomatik olarak HTTPS'e yönlendir",
|
||||||
"encryption_redirect_desc": "Etkinleştirirseniz AdGuard Home sizi HTTP yerine HTTPS adreslerine yönlendirir.",
|
"encryption_redirect_desc": "Etkinleştirirseniz AdGuard Home sizi HTTP yerine HTTPS adreslerine yönlendirir.",
|
||||||
"encryption_https": "HTTPS bağlantı noktası",
|
"encryption_https": "HTTPS bağlantı noktası",
|
||||||
@ -332,11 +348,11 @@
|
|||||||
"encryption_doq_desc": "Bu bağlantı noktası yapılandırılırsa, AdGuard Home bu bağlantı noktasında DNS-over-QUIC sunucusu çalıştıracaktır. Deneysel ve güvenilir olmayabilir. Ayrıca, şu anda bunu destekleyen çok fazla istemci yok.",
|
"encryption_doq_desc": "Bu bağlantı noktası yapılandırılırsa, AdGuard Home bu bağlantı noktasında DNS-over-QUIC sunucusu çalıştıracaktır. Deneysel ve güvenilir olmayabilir. Ayrıca, şu anda bunu destekleyen çok fazla istemci yok.",
|
||||||
"encryption_certificates": "Sertifikalar",
|
"encryption_certificates": "Sertifikalar",
|
||||||
"encryption_certificates_desc": "Şifrelemeyi kullanmak için alan adınız için geçerli bir SSL sertifika zinciri temin etmeniz gerekir. <0>{{link}}</0> adresinden ücretsiz temin edebilirsiniz veya güvenilir Sertifika Otoritelerinden satın alabilirsiniz.",
|
"encryption_certificates_desc": "Şifrelemeyi kullanmak için alan adınız için geçerli bir SSL sertifika zinciri temin etmeniz gerekir. <0>{{link}}</0> adresinden ücretsiz temin edebilirsiniz veya güvenilir Sertifika Otoritelerinden satın alabilirsiniz.",
|
||||||
"encryption_certificates_input": "PEM formatındaki sertifikalarınızı buraya yapıştırın.",
|
"encryption_certificates_input": "PEM biçimindeki sertifikalarınızı buraya yapıştırın.",
|
||||||
"encryption_status": "Durum",
|
"encryption_status": "Durum",
|
||||||
"encryption_expire": "Bitiş tarihi",
|
"encryption_expire": "Bitiş tarihi",
|
||||||
"encryption_key": "Özel anahtar",
|
"encryption_key": "Özel anahtar",
|
||||||
"encryption_key_input": "Sertifikanızın PEM formatı özel anahtarını buraya yapıştırın.",
|
"encryption_key_input": "Sertifikanızın PEM biçimi özel anahtarını buraya yapıştırın.",
|
||||||
"encryption_enable": "Şifrelemeyi etkinleştir (HTTPS, DNS-over-HTTPS ve DNS-over-TLS)",
|
"encryption_enable": "Şifrelemeyi etkinleştir (HTTPS, DNS-over-HTTPS ve DNS-over-TLS)",
|
||||||
"encryption_enable_desc": "Şifrelemeyi etkinleştirirseniz, AdGuard Home yönetici arayüzü HTTPS üzerinden çalışır ve DNS sunucusu DNS-over-HTTPS ve DNS-over-TLS üzerinden gelen istekleri dinler.",
|
"encryption_enable_desc": "Şifrelemeyi etkinleştirirseniz, AdGuard Home yönetici arayüzü HTTPS üzerinden çalışır ve DNS sunucusu DNS-over-HTTPS ve DNS-over-TLS üzerinden gelen istekleri dinler.",
|
||||||
"encryption_chain_valid": "Sertifika zinciri geçerli",
|
"encryption_chain_valid": "Sertifika zinciri geçerli",
|
||||||
@ -345,12 +361,12 @@
|
|||||||
"encryption_key_invalid": "Bu geçersiz bir {{type}} özel anahtar",
|
"encryption_key_invalid": "Bu geçersiz bir {{type}} özel anahtar",
|
||||||
"encryption_subject": "Konu",
|
"encryption_subject": "Konu",
|
||||||
"encryption_issuer": "Sertifikayı veren",
|
"encryption_issuer": "Sertifikayı veren",
|
||||||
"encryption_hostnames": "Ana bilgisayar isimleri",
|
"encryption_hostnames": "Ana bilgisayar adları",
|
||||||
"encryption_reset": "Şifreleme ayarlarını sıfırlamak istediğinize emin misiniz?",
|
"encryption_reset": "Şifreleme ayarlarını sıfırlamak istediğinize emin misiniz?",
|
||||||
"topline_expiring_certificate": "SSL sertifikanızın süresi dolmak üzere. <0>Şifreleme ayarlarını</0> güncelleyin.",
|
"topline_expiring_certificate": "SSL sertifikanızın süresi dolmak üzere. <0>Şifreleme ayarlarını</0> güncelleyin.",
|
||||||
"topline_expired_certificate": "SSL sertifikanızın süresi dolmuş. <0>Şifreleme ayarlarını</0> güncelleyin.",
|
"topline_expired_certificate": "SSL sertifikanızın süresi dolmuş. <0>Şifreleme ayarlarını</0> güncelleyin.",
|
||||||
"form_error_port_range": "80-65535 aralığında geçerli bir port değeri girin.",
|
"form_error_port_range": "80-65535 aralığında geçerli bir bağlantı noktası değeri girin",
|
||||||
"form_error_port_unsafe": "Bu güvenli olmayan bir port",
|
"form_error_port_unsafe": "Bu güvenli olmayan bir bağlantı noktası",
|
||||||
"form_error_equal": "Aynı olmamalı",
|
"form_error_equal": "Aynı olmamalı",
|
||||||
"form_error_password": "Şifreler uyuşmuyor",
|
"form_error_password": "Şifreler uyuşmuyor",
|
||||||
"reset_settings": "Ayarları sıfırla",
|
"reset_settings": "Ayarları sıfırla",
|
||||||
@ -377,12 +393,13 @@
|
|||||||
"client_edit": "İstemciyi düzenle",
|
"client_edit": "İstemciyi düzenle",
|
||||||
"client_identifier": "Tanımlayıcı",
|
"client_identifier": "Tanımlayıcı",
|
||||||
"ip_address": "IP adresi",
|
"ip_address": "IP adresi",
|
||||||
"client_identifier_desc": "İstemciler IP adresleri veya MAC adresleri ile tanımlanabilir. Lütfen not edin, MAC adresi ile tanımlamayı kullanmak için AdGuard Home'un <0>DHCP Sunucusu</0> olması gerekir.",
|
"client_identifier_desc": "İstemciler IP adresi, CIDR, MAC adresi veya özel bir istemci kimliği ile tanımlanabilir (DoT/DoH/DoQ için kullanılabilir). <0>Burada</0> istemcileri nasıl belirleyeceğiniz hakkında daha fazla bilgi edinebilirsiniz.",
|
||||||
"form_enter_ip": "IP Girin",
|
"form_enter_ip": "IP Girin",
|
||||||
"form_enter_mac": "MAC Girin",
|
"form_enter_mac": "MAC Girin",
|
||||||
"form_enter_id": "Tanımlayıcı girin",
|
"form_enter_id": "Tanımlayıcı girin",
|
||||||
"form_add_id": "Tanımlayıcı ekle",
|
"form_add_id": "Tanımlayıcı ekle",
|
||||||
"form_client_name": "İstemci ismi girin",
|
"form_client_name": "İstemci ismi girin",
|
||||||
|
"name": "İsim",
|
||||||
"client_global_settings": "Genel ayarları kullan",
|
"client_global_settings": "Genel ayarları kullan",
|
||||||
"client_deleted": "\"{{key}}\" istemcisi başarıyla silindi",
|
"client_deleted": "\"{{key}}\" istemcisi başarıyla silindi",
|
||||||
"client_added": "\"{{key}}\" istemcisi başarıyla eklendi",
|
"client_added": "\"{{key}}\" istemcisi başarıyla eklendi",
|
||||||
@ -407,6 +424,8 @@
|
|||||||
"dns_privacy": "DNS Gizliliği",
|
"dns_privacy": "DNS Gizliliği",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> dizesini kullan.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> dizesini kullan.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> dizesini kullan.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> dizesini kullan.",
|
||||||
|
"setup_dns_privacy_3": "<0>İşte kullanabileceğiniz yazılımların bir listesi.</0>",
|
||||||
|
"setup_dns_privacy_4": "Bir iOS 14 veya macOS Big Sur cihazında, DNS ayarlarına <highlight>DNS-over-HTTPS</highlight> veya <highlight>DNS-over-TLS</highlight> sunucuları ekleyen özel '.mobileconfig' dosyasını indirebilirsiniz.",
|
||||||
"setup_dns_privacy_android_1": "Android 9 aslen DNS-over-TLS desteklemektedir. Yapılandırmak için, Ayarlar → Ağ ve internet → Gelişmiş → Özel DNS seçeneğine gidin ve alan adınızı buraya girin.",
|
"setup_dns_privacy_android_1": "Android 9 aslen DNS-over-TLS desteklemektedir. Yapılandırmak için, Ayarlar → Ağ ve internet → Gelişmiş → Özel DNS seçeneğine gidin ve alan adınızı buraya girin.",
|
||||||
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0>, <1>DNS-over-HTTPS</1> ve <1>DNS-over-TLS</1> desteklemektedir.",
|
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0>, <1>DNS-over-HTTPS</1> ve <1>DNS-over-TLS</1> desteklemektedir.",
|
||||||
"setup_dns_privacy_android_3": "<0>Intra</0> Android'e <1>DNS-over-HTTPS</1> desteğini ekler.",
|
"setup_dns_privacy_android_3": "<0>Intra</0> Android'e <1>DNS-over-HTTPS</1> desteğini ekler.",
|
||||||
@ -418,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0>, <1>DNS-over-HTTPS</1> destekler.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0>, <1>DNS-over-HTTPS</1> destekler.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0>, <1>DNS-over-HTTPS</1> desteklemektedir.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0>, <1>DNS-over-HTTPS</1> desteklemektedir.",
|
||||||
"setup_dns_privacy_other_5": "<0>Burada</0> ve <1>burada</1> daha fazla uygulama bulacaksınız.",
|
"setup_dns_privacy_other_5": "<0>Burada</0> ve <1>burada</1> daha fazla uygulama bulacaksınız.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "iOS ve macOS yapılandırması",
|
||||||
"setup_dns_notice": "<1>DNS-over-HTTPS</1> veya <1>DNS-over-TLS</1> kullanmak için, AdGuard Home ayarlarında <0>Şifreleme yapılandırmasını</0> yapmanız gerekir.",
|
"setup_dns_notice": "<1>DNS-over-HTTPS</1> veya <1>DNS-over-TLS</1> kullanmak için, AdGuard Home ayarlarında <0>Şifreleme yapılandırmasını</0> yapmanız gerekir.",
|
||||||
"rewrite_added": "\"{{key}}\" için DNS yeniden yazımı başarıyla eklendi",
|
"rewrite_added": "\"{{key}}\" için DNS yeniden yazımı başarıyla eklendi",
|
||||||
"rewrite_deleted": "\"{{key}}\" için DNS yeniden yazımı başarıyla silindi",
|
"rewrite_deleted": "\"{{key}}\" için DNS yeniden yazımı başarıyla silindi",
|
||||||
@ -426,12 +446,12 @@
|
|||||||
"rewrite_confirm_delete": "\"{{key}}\" için DNS yeniden yazımını silmek istediğinize emin misiniz?",
|
"rewrite_confirm_delete": "\"{{key}}\" için DNS yeniden yazımını silmek istediğinize emin misiniz?",
|
||||||
"rewrite_desc": "Belirli bir alan adı için kolayca özel DNS yanıtı yapılandırmanıza olanak tanır.",
|
"rewrite_desc": "Belirli bir alan adı için kolayca özel DNS yanıtı yapılandırmanıza olanak tanır.",
|
||||||
"rewrite_applied": "Uygulanan Yeniden Yazım kuralı",
|
"rewrite_applied": "Uygulanan Yeniden Yazım kuralı",
|
||||||
"rewrite_hosts_applied": "Host dosyası kuralı tarafından yeniden yazıldı",
|
"rewrite_hosts_applied": "Ana bilgisayar dosyası kuralı tarafından yeniden yazıldı",
|
||||||
"dns_rewrites": "DNS yeniden yazımları",
|
"dns_rewrites": "DNS yeniden yazımları",
|
||||||
"form_domain": "Alan adı girin",
|
"form_domain": "Alan adı girin",
|
||||||
"form_answer": "IP adresini veya alan adı girin",
|
"form_answer": "IP adresini veya alan adı girin",
|
||||||
"form_error_domain_format": "Geçersiz alan adı formatı",
|
"form_error_domain_format": "Geçersiz alan adı biçimi",
|
||||||
"form_error_answer_format": "Geçersiz cevap formatı",
|
"form_error_answer_format": "Geçersiz cevap biçimi",
|
||||||
"configure": "Yapılandır",
|
"configure": "Yapılandır",
|
||||||
"main_settings": "Ana ayarlar",
|
"main_settings": "Ana ayarlar",
|
||||||
"block_services": "Belirli hizmetleri engelle",
|
"block_services": "Belirli hizmetleri engelle",
|
||||||
@ -485,43 +505,45 @@
|
|||||||
"network": "Ağ",
|
"network": "Ağ",
|
||||||
"descr": "Açıklama",
|
"descr": "Açıklama",
|
||||||
"whois": "Whois",
|
"whois": "Whois",
|
||||||
"filtering_rules_learn_more": "Ana makinelere dair kendi kara listelerinizi oluşturmakla alakalı <0>daha fazla bilgi edinin</0>.",
|
"filtering_rules_learn_more": "Kendi ana bilgisayar listelerinizi oluşturma hakkında <0>daha fazla bilgi edinin</0></0>.",
|
||||||
"blocked_by_response": "Cevap olarak CNAME veya IP tarafından engellendi",
|
"blocked_by_response": "Cevap olarak CNAME veya IP tarafından engellendi",
|
||||||
"blocked_by_cname_or_ip": "CNAME veya IP tarafından engellendi",
|
"blocked_by_cname_or_ip": "CNAME veya IP tarafından engellendi",
|
||||||
"try_again": "Tekrar deneyin",
|
"try_again": "Tekrar deneyin",
|
||||||
"domain_desc": "Yeniden yazılmasını istediğiniz alan adını veya joker karakteri girin.",
|
"domain_desc": "Yeniden yazılmasını istediğiniz alan adını veya joker karakteri girin.",
|
||||||
"example_rewrite_domain": "cevapları yalnızca bu alan adı için yeniden yaz.",
|
"example_rewrite_domain": "cevapları yalnızca bu alan adı için yeniden yaz.",
|
||||||
"example_rewrite_wildcard": "tüm <0>example.org</0> alt alanları için cevapları yeniden yaz.",
|
"example_rewrite_wildcard": "tüm <0>example.org</0> alt alanları için cevapları yeniden yaz.",
|
||||||
|
"rewrite_ip_address": "IP adresi: bu IP'yi A veya AAAA yanıtında kullanın",
|
||||||
"rewrite_domain_name": "Alan adı: bir CNAME kaydı ekleyin",
|
"rewrite_domain_name": "Alan adı: bir CNAME kaydı ekleyin",
|
||||||
|
"rewrite_A": "<0>A</0>: özel değer, üst sunucudan gelen <0>A</0> kayıtlarını tut",
|
||||||
|
"rewrite_AAAA": "<0>AAA</0>: özel değer, üst sunucudan gelen <0>AAA</0> kayıtlarını tut",
|
||||||
"disable_ipv6": "IPv6'yı Devre Dışı Bırak",
|
"disable_ipv6": "IPv6'yı Devre Dışı Bırak",
|
||||||
"disable_ipv6_desc": "Bu özelliği etkinleştirirseniz, IPv6 adresleri (AAAA tipi) için gönderilen tüm DNS istekleri cevapsız bırakılacaktır.",
|
"disable_ipv6_desc": "Bu özelliği etkinleştirirseniz, IPv6 adresleri (AAAA tipi) için gönderilen tüm DNS istekleri cevapsız bırakılacaktır.",
|
||||||
"fastest_addr": "En hızlı IP adresi",
|
"fastest_addr": "En hızlı IP adresi",
|
||||||
"fastest_addr_desc": "Tüm DNS sunucularını sorgulayın ve tüm yanıtlar arasından en hızlı IP adresini döndürün. Bu, tüm DNS sunucularından yanıt beklememiz gerektiğinden DNS sorgularını yavaşlatacak ancak genel bağlantıyı iyileştirecektir.",
|
"fastest_addr_desc": "Tüm DNS sunucularını sorgulayın ve tüm yanıtlar arasından en hızlı IP adresini döndürün. Bu, tüm DNS sunucularından yanıt beklememiz gerektiğinden DNS sorgularını yavaşlatacak ancak genel bağlantıyı iyileştirecektir.",
|
||||||
"autofix_warning_text": "\"Düzelt\" i tıklatırsanız, AdGuardHome sisteminizi AdGuardHome DNS sunucusunu kullanacak şekilde yapılandırır.",
|
"autofix_warning_text": "\"Düzelt\" i tıklatırsanız, AdGuardHome sisteminizi AdGuardHome DNS sunucusunu kullanacak şekilde yapılandırır.",
|
||||||
"autofix_warning_list": "Bu görevleri gerçekleştirecektir: <0> sistemi DNSStubListener'ı devre dışı bırakma </0> <0> DNS sunucu adresini 127.0.0.1 olarak ayarlayın </0> <0> /etc/resolv.conf / / run / systemd sembolik bağlantı hedefini değiştirin /resolve/resolv.conf </0> <0> durdur DNSStubListener (sistemde yeniden çözülmüş hizmeti yeniden yükle) </0>",
|
"autofix_warning_list": "Bu görevleri gerçekleştirecek: <0>Sistem DNSStubListener'ı devre dışı bırakın</0> <0>DNS sunucusu adresini 127.0.0.1 olarak ayarlayın</0> <0>/etc/resolv.conf'un sembolik bağlantı hedefini /run/systemd/resolve/resolv.conf ile değiştirin<0> <0>DNSStubListener'ı durdurun (systemd çözümlenmiş hizmeti yeniden yükleyin)</0>",
|
||||||
"autofix_warning_result": "Sonuç olarak, sisteminizden gelen tüm DNS istekleri varsayılan olarak AdGuardHome tarafından işlenir.",
|
"autofix_warning_result": "Sonuç olarak, sisteminizden gelen tüm DNS istekleri varsayılan olarak AdGuard Home tarafından işlenecektir.",
|
||||||
"tags_title": "Etiketler",
|
"tags_title": "Etiketler",
|
||||||
"tags_desc": "İstemciye karşılık gelen etiketleri seçebilirsiniz. Etiketler, filtreleme kurallarına dahil edilebilir ve bunları daha doğru bir şekilde uygulamanıza olanak tanır. <0> Daha fazla bilgi edinin </0>",
|
"tags_desc": "Müşteriye karşılık gelen etiketleri seçebilirsiniz. Etiketler filtreleme kurallarına dahil edilebilir ve bunları daha doğru uygulamanıza olanak tanır. <0>Daha fazla bilgi edinin</0>",
|
||||||
"form_select_tags": "Müşteri etiketlerini seçin",
|
"form_select_tags": "İstemci etiketlerini seçin",
|
||||||
"check_title": "Filtrelemeyi kontrol edin",
|
"check_title": "Filtrelemeyi denetleyin",
|
||||||
"check_desc": "Ana bilgisayar adının filtrelenip filtrelenmediğini kontrol edin",
|
"check_desc": "Ana bilgisayar adının filtrelenip filtrelenmediğini kontrol edin",
|
||||||
"check": "Kontrol",
|
"check": "Denetle",
|
||||||
"form_enter_host": "Bir ana bilgisayar adı girin",
|
"form_enter_host": "Ana bilgisayar adı girin",
|
||||||
"filtered_custom_rules": "Özel filtreleme kurallarına göre filtrelendi",
|
"filtered_custom_rules": "Özel filtreleme kurallarına göre filtrelendi",
|
||||||
"choose_from_list": "Listeden seç",
|
"choose_from_list": "Listeden seç",
|
||||||
"add_custom_list": "Özel bir liste ekle",
|
"add_custom_list": "Özel bir liste ekle",
|
||||||
"host_whitelisted": "Ana makine beyaz listeye alındı",
|
"host_whitelisted": "Ana bilgisayar beyaz listeye eklendi",
|
||||||
"check_ip": "IP adresleri: {{ip}}",
|
"check_ip": "IP adresleri: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Sebep: {{reason}}",
|
"check_reason": "Sebep: {{reason}}",
|
||||||
"check_rule": "Kural: {{rule}}",
|
|
||||||
"check_service": "Hizmet adı: {{service}}",
|
"check_service": "Hizmet adı: {{service}}",
|
||||||
"service_name": "Servis adı",
|
"service_name": "Servis adı",
|
||||||
"check_not_found": "Filtre listelerinizde bulunamadı",
|
"check_not_found": "Filtre listelerinizde bulunamadı",
|
||||||
"client_confirm_block": "\"{{ip}}\" istemcisini engellemek istediğinizden emin misiniz?",
|
"client_confirm_block": "\"{{ip}}\" istemcisini engellemek istediğinizden emin misiniz?",
|
||||||
"client_confirm_unblock": "\"{{ip}}\" istemcisinin engellemesini kaldırmak istediğinizden emin misiniz?",
|
"client_confirm_unblock": "\"{{ip}}\" istemcisinin engellemesini kaldırmak istediğinizden emin misiniz?",
|
||||||
"client_blocked": "\"{{ip}}\" istemcisi başarıyla engellendi",
|
"client_blocked": "\"{{ip}}\" istemcisi başarıyla engellendi",
|
||||||
"client_unblocked": "\"{{ip}}\" müşterisinin engellemesi başarıyla kaldırıldı",
|
"client_unblocked": "\"{{ip}}\" istemcinin engellemesi başarıyla kaldırıldı",
|
||||||
"static_ip": "Statik IP adres",
|
"static_ip": "Statik IP adres",
|
||||||
"static_ip_desc": "AdGuard Home bir sunucudur, bu nedenle düzgün çalışması için statik bir IP adresine ihtiyaç duyar. Aksi takdirde, bir noktada yönlendiriciniz bu cihaza farklı bir IP adresi atayabilir.",
|
"static_ip_desc": "AdGuard Home bir sunucudur, bu nedenle düzgün çalışması için statik bir IP adresine ihtiyaç duyar. Aksi takdirde, bir noktada yönlendiriciniz bu cihaza farklı bir IP adresi atayabilir.",
|
||||||
"set_static_ip": "Statik IP adresi ayarlama",
|
"set_static_ip": "Statik IP adresi ayarlama",
|
||||||
@ -533,6 +555,7 @@
|
|||||||
"list_updated_plural": "{{count}} liste güncellendi",
|
"list_updated_plural": "{{count}} liste güncellendi",
|
||||||
"dnssec_enable": "DNSSEC'i etkinleştir",
|
"dnssec_enable": "DNSSEC'i etkinleştir",
|
||||||
"dnssec_enable_desc": "DNSSEC'i giden DNS sorguları için etkinleştir ve sonucu kontrol et (DNSSEC-etkin sorgulama gerekli)",
|
"dnssec_enable_desc": "DNSSEC'i giden DNS sorguları için etkinleştir ve sonucu kontrol et (DNSSEC-etkin sorgulama gerekli)",
|
||||||
|
"validated_with_dnssec": "DNSSEC ile doğrulandı",
|
||||||
"all_queries": "Tüm sorgular",
|
"all_queries": "Tüm sorgular",
|
||||||
"show_blocked_responses": "Engellendi",
|
"show_blocked_responses": "Engellendi",
|
||||||
"show_whitelisted_responses": "Beyaz listeye eklendi",
|
"show_whitelisted_responses": "Beyaz listeye eklendi",
|
||||||
@ -542,6 +565,7 @@
|
|||||||
"blocked_threats": "Engellenen Tehditler",
|
"blocked_threats": "Engellenen Tehditler",
|
||||||
"allowed": "İzin verildi",
|
"allowed": "İzin verildi",
|
||||||
"filtered": "Filtrelenmiş",
|
"filtered": "Filtrelenmiş",
|
||||||
|
"rewritten": "Yeniden yazılan",
|
||||||
"safe_search": "Güvenli arama",
|
"safe_search": "Güvenli arama",
|
||||||
"blocklist": "Engelleme listesi",
|
"blocklist": "Engelleme listesi",
|
||||||
"milliseconds_abbreviation": "ms",
|
"milliseconds_abbreviation": "ms",
|
||||||
@ -561,10 +585,13 @@
|
|||||||
"filter_category_other": "Diğer",
|
"filter_category_other": "Diğer",
|
||||||
"filter_category_general_desc": "Çoğu cihazda izlemeyi ve reklamları engelleyen listeler",
|
"filter_category_general_desc": "Çoğu cihazda izlemeyi ve reklamları engelleyen listeler",
|
||||||
"filter_category_security_desc": "Kötü amaçlı yazılım, kimlik avı veya dolandırıcılık alanlarını engelleme konusunda özelleştirilmiş listeler",
|
"filter_category_security_desc": "Kötü amaçlı yazılım, kimlik avı veya dolandırıcılık alanlarını engelleme konusunda özelleştirilmiş listeler",
|
||||||
|
"filter_category_regional_desc": "Bölgesel reklamlara ve izleme sunucularına odaklanan listeler",
|
||||||
"filter_category_other_desc": "Diğer engelleme listeleri",
|
"filter_category_other_desc": "Diğer engelleme listeleri",
|
||||||
"setup_config_to_enable_dhcp_server": "DHCP sunucusunu etkinleştirmek için kurulum yapılandırması",
|
"setup_config_to_enable_dhcp_server": "DHCP sunucusunu etkinleştirmek için kurulum yapılandırması",
|
||||||
|
"original_response": "Esas yanıt",
|
||||||
"click_to_view_queries": "Sorguları görmek için tıklayın",
|
"click_to_view_queries": "Sorguları görmek için tıklayın",
|
||||||
"port_53_faq_link": "Port 53 genellikle \"DNSStubListener\" veya \"sistemd-resolved\" hizmetler tarafından kullanılır. Lütfen problemin nasıl çözüleceğine ilişkin <0>bu talimatı</0> okuyun.",
|
"port_53_faq_link": "Port 53 genellikle \"DNSStubListener\" veya \"sistemd-resolved\" hizmetler tarafından kullanılır. Lütfen problemin nasıl çözüleceğine ilişkin <0>bu talimatı</0> okuyun.",
|
||||||
"adg_will_drop_dns_queries": "AdGuard Home, bu istemciden gelen tüm DNS sorgularını iptal eder.",
|
"adg_will_drop_dns_queries": "AdGuard Home, bu istemciden gelen tüm DNS sorgularını iptal eder.",
|
||||||
|
"client_not_in_allowed_clients": "İstemciye \"İzin verilen istemciler\" listesinde olmadığı için izin verilmiyor.",
|
||||||
"experimental": "Deneysel"
|
"experimental": "Deneysel"
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Cài đặt máy khách",
|
"client_settings": "Cài đặt máy khách",
|
||||||
"example_upstream_reserved": "bạn có thể chỉ định DNS ngược tuyến <0>cho một tên miền cụ thể(hoặc nhiều)</0>",
|
"example_upstream_reserved": "bạn có thể chỉ định DNS ngược tuyến <0>cho một tên miền cụ thể(hoặc nhiều)</0>",
|
||||||
|
"example_upstream_comment": "Bạn có thể thêm chú thích cụ thể",
|
||||||
"upstream_parallel": "Sử dụng truy vấn song song để tăng tốc độ giải quyết bằng cách truy vấn đồng thời tất cả các máy chủ ngược tuyến",
|
"upstream_parallel": "Sử dụng truy vấn song song để tăng tốc độ giải quyết bằng cách truy vấn đồng thời tất cả các máy chủ ngược tuyến",
|
||||||
"parallel_requests": "Yêu cầu song song",
|
"parallel_requests": "Yêu cầu song song",
|
||||||
"load_balancing": "Cân bằng tải",
|
"load_balancing": "Cân bằng tải",
|
||||||
@ -31,6 +32,7 @@
|
|||||||
"form_error_ip_format": "Định dạng IPv4 không hợp lệ",
|
"form_error_ip_format": "Định dạng IPv4 không hợp lệ",
|
||||||
"form_error_mac_format": "Định dạng MAC không hợp lệ",
|
"form_error_mac_format": "Định dạng MAC không hợp lệ",
|
||||||
"form_error_client_id_format": "Định dạng client ID không hợp lệ",
|
"form_error_client_id_format": "Định dạng client ID không hợp lệ",
|
||||||
|
"form_error_server_name": "Tên máy chủ không hợp lệ",
|
||||||
"form_error_positive": "Phải lớn hơn 0",
|
"form_error_positive": "Phải lớn hơn 0",
|
||||||
"form_error_negative": "Phải lớn hơn hoặc bằng 0",
|
"form_error_negative": "Phải lớn hơn hoặc bằng 0",
|
||||||
"range_end_error": "Phải lớn hơn khoảng bắt đầu",
|
"range_end_error": "Phải lớn hơn khoảng bắt đầu",
|
||||||
@ -132,6 +134,8 @@
|
|||||||
"encryption_settings": "Cài đặt mã hóa",
|
"encryption_settings": "Cài đặt mã hóa",
|
||||||
"dhcp_settings": "Cài đặt DHCP",
|
"dhcp_settings": "Cài đặt DHCP",
|
||||||
"upstream_dns": "Máy chủ DNS tìm kiếm",
|
"upstream_dns": "Máy chủ DNS tìm kiếm",
|
||||||
|
"upstream_dns_help": "Nhập địa chỉ máy chủ một trên mỗi dòng. <a>Tìm hiểu thêm</a> về cách định cấu hình máy chủ DNS ngược dòng.",
|
||||||
|
"upstream_dns_configured_in_file": "Cấu hình tại {{path}}",
|
||||||
"test_upstream_btn": "Kiểm tra",
|
"test_upstream_btn": "Kiểm tra",
|
||||||
"upstreams": "Nguồn",
|
"upstreams": "Nguồn",
|
||||||
"apply_btn": "Áp dụng",
|
"apply_btn": "Áp dụng",
|
||||||
@ -185,6 +189,7 @@
|
|||||||
"example_upstream_regular": "DNS thông thường (dùng UDP)",
|
"example_upstream_regular": "DNS thông thường (dùng UDP)",
|
||||||
"example_upstream_dot": "được mã hoá <0>DNS-over-TLS</0>",
|
"example_upstream_dot": "được mã hoá <0>DNS-over-TLS</0>",
|
||||||
"example_upstream_doh": "được mã hoá <0>DNS-over-HTTPS</0>",
|
"example_upstream_doh": "được mã hoá <0>DNS-over-HTTPS</0>",
|
||||||
|
"example_upstream_doq": "được mã hoá <0>DNS-over-QUIC</0>",
|
||||||
"example_upstream_sdns": "bạn có thể sử dụng <0>DNS Stamps</0> for <1>DNSCrypt</1> hoặc <2>DNS-over-HTTPS</2> ",
|
"example_upstream_sdns": "bạn có thể sử dụng <0>DNS Stamps</0> for <1>DNSCrypt</1> hoặc <2>DNS-over-HTTPS</2> ",
|
||||||
"example_upstream_tcp": "DNS thông thường(dùng TCP)",
|
"example_upstream_tcp": "DNS thông thường(dùng TCP)",
|
||||||
"all_lists_up_to_date_toast": "Tất cả danh sách đã ở phiên bản mới nhất",
|
"all_lists_up_to_date_toast": "Tất cả danh sách đã ở phiên bản mới nhất",
|
||||||
@ -193,6 +198,10 @@
|
|||||||
"dns_test_not_ok_toast": "Máy chủ \"\"': không thể sử dụng, vui lòng kiểm tra lại",
|
"dns_test_not_ok_toast": "Máy chủ \"\"': không thể sử dụng, vui lòng kiểm tra lại",
|
||||||
"unblock": "Bỏ chặn",
|
"unblock": "Bỏ chặn",
|
||||||
"block": "Chặn",
|
"block": "Chặn",
|
||||||
|
"disallow_this_client": "Không cho phép client này",
|
||||||
|
"allow_this_client": "Cho phép ứng dụng khách này",
|
||||||
|
"block_for_this_client_only": "Chỉ chặn ứng dụng khách này",
|
||||||
|
"unblock_for_this_client_only": "Chỉ hủy chặn ứng dụng khách này",
|
||||||
"time_table_header": "Thời gian",
|
"time_table_header": "Thời gian",
|
||||||
"date": "Ngày",
|
"date": "Ngày",
|
||||||
"domain_name_table_header": "Tên miền",
|
"domain_name_table_header": "Tên miền",
|
||||||
@ -234,19 +243,31 @@
|
|||||||
"blocking_mode": "Chế độ chặn",
|
"blocking_mode": "Chế độ chặn",
|
||||||
"default": "Mặc định",
|
"default": "Mặc định",
|
||||||
"nxdomain": "NXDOMAIN",
|
"nxdomain": "NXDOMAIN",
|
||||||
|
"refused": "REFUSED",
|
||||||
"null_ip": "Địa chỉ IP rỗng",
|
"null_ip": "Địa chỉ IP rỗng",
|
||||||
"custom_ip": "IP tuỳ chỉnh",
|
"custom_ip": "IP tuỳ chỉnh",
|
||||||
"blocking_ipv4": "Chặn IPv4",
|
"blocking_ipv4": "Chặn IPv4",
|
||||||
"blocking_ipv6": "Chặn IPv6",
|
"blocking_ipv6": "Chặn IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "ID khách hàng",
|
||||||
|
"client_id_placeholder": "Nhập ID khách hàng",
|
||||||
|
"client_id_desc": "Các khách hàng khác nhau có thể được xác định bằng một ID khách hàng đặc biệt. <a>Tại đây</a> bạn có thể tìm hiểu thêm về cách xác định khách hàng.",
|
||||||
|
"download_mobileconfig_doh": "Tải xuống .mobileconfig cho DNS-over-HTTPS",
|
||||||
|
"download_mobileconfig_dot": "Tải xuống .mobileconfig cho DNS-over-TLS",
|
||||||
|
"download_mobileconfig": "Tải xuống tệp cấu hình",
|
||||||
"plain_dns": "DNS thuần",
|
"plain_dns": "DNS thuần",
|
||||||
"form_enter_rate_limit": "Nhập giới hạn yêu cầu",
|
"form_enter_rate_limit": "Nhập giới hạn yêu cầu",
|
||||||
"rate_limit": "Giới hạn yêu cầu",
|
"rate_limit": "Giới hạn yêu cầu",
|
||||||
"edns_enable": "Bật mạng con EDNS Client",
|
"edns_enable": "Bật mạng con EDNS Client",
|
||||||
"edns_cs_desc": "Nếu được bật, AdGuard Home sẽ gửi các mạng con của khách hàng đến các máy chủ DNS.",
|
"edns_cs_desc": "Nếu được bật, AdGuard Home sẽ gửi các mạng con của khách hàng đến các máy chủ DNS.",
|
||||||
|
"rate_limit_desc": "Số lượng yêu cầu mỗi giây mà một khách hàng được phép thực hiện (0: không giới hạn)",
|
||||||
"blocking_ipv4_desc": "Địa chỉ IP được trả lại cho một yêu cầu A bị chặn",
|
"blocking_ipv4_desc": "Địa chỉ IP được trả lại cho một yêu cầu A bị chặn",
|
||||||
"blocking_ipv6_desc": "Địa chỉ IP được trả lại cho một yêu cầu AAA bị chặn",
|
"blocking_ipv6_desc": "Địa chỉ IP được trả lại cho một yêu cầu AAA bị chặn",
|
||||||
|
"blocking_mode_default": "Mặc định: Trả lời với NXDOMAIN khi bị chặn bởi quy tắc kiểu Adblock; phản hồi với địa chỉ IP được chỉ định trong quy tắc khi bị chặn bởi quy tắc / etc / hosts-style",
|
||||||
|
"blocking_mode_refused": "REFUSED: Trả lời bằng mã REFUSED",
|
||||||
"blocking_mode_nxdomain": "NXDOMAIN: Phản hổi với mã NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Phản hổi với mã NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "Null IP: Trả lời bằng không địa chỉ IP (0.0.0.0 cho A; :: cho AAAA)",
|
"blocking_mode_null_ip": "Null IP: Trả lời bằng không địa chỉ IP (0.0.0.0 cho A; :: cho AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP tùy chỉnh: Phản hồi với địa chỉ IP đã được tiết lập",
|
"blocking_mode_custom_ip": "IP tùy chỉnh: Phản hồi với địa chỉ IP đã được tiết lập",
|
||||||
@ -255,7 +276,6 @@
|
|||||||
"source_label": "Nguồn",
|
"source_label": "Nguồn",
|
||||||
"found_in_known_domain_db": "Tìm thấy trong cơ sở dữ liệu tên miền",
|
"found_in_known_domain_db": "Tìm thấy trong cơ sở dữ liệu tên miền",
|
||||||
"category_label": "Thể loại",
|
"category_label": "Thể loại",
|
||||||
"rule_label": "Quy tắc",
|
|
||||||
"list_label": "Danh sách",
|
"list_label": "Danh sách",
|
||||||
"unknown_filter": "Bộ lọc không rõ {{filterId}}",
|
"unknown_filter": "Bộ lọc không rõ {{filterId}}",
|
||||||
"known_tracker": "Theo dõi đã biết",
|
"known_tracker": "Theo dõi đã biết",
|
||||||
@ -316,13 +336,14 @@
|
|||||||
"encryption_config_saved": "Đã lưu cấu hình mã hóa",
|
"encryption_config_saved": "Đã lưu cấu hình mã hóa",
|
||||||
"encryption_server": "Tên máy chủ",
|
"encryption_server": "Tên máy chủ",
|
||||||
"encryption_server_enter": "Nhập tên miền của bạn",
|
"encryption_server_enter": "Nhập tên miền của bạn",
|
||||||
"encryption_server_desc": "Để sử dụng HTTPS, bạn cần nhập tên máy chủ phù hợp với chứng chỉ SSL của bạn.",
|
|
||||||
"encryption_redirect": "Tự động chuyển hướng đến HTTPS",
|
"encryption_redirect": "Tự động chuyển hướng đến HTTPS",
|
||||||
"encryption_redirect_desc": "Nếu được chọn, AdGuard Home sẽ tự động chuyển hướng bạn từ địa chỉ HTTP sang địa chỉ HTTPS.",
|
"encryption_redirect_desc": "Nếu được chọn, AdGuard Home sẽ tự động chuyển hướng bạn từ địa chỉ HTTP sang địa chỉ HTTPS.",
|
||||||
"encryption_https": "Cổng HTTPS",
|
"encryption_https": "Cổng HTTPS",
|
||||||
"encryption_https_desc": "Nếu cổng HTTPS được định cấu hình, giao diện quản trị viên AdGuard Home sẽ có thể truy cập thông qua HTTPS và nó cũng sẽ cung cấp DNS-over-HTTPS trên vị trí '/dns-query'.",
|
"encryption_https_desc": "Nếu cổng HTTPS được định cấu hình, giao diện quản trị viên AdGuard Home sẽ có thể truy cập thông qua HTTPS và nó cũng sẽ cung cấp DNS-over-HTTPS trên vị trí '/dns-query'.",
|
||||||
"encryption_dot": "Cổng DNS-over-TLS",
|
"encryption_dot": "Cổng DNS-over-TLS",
|
||||||
"encryption_dot_desc": "Nếu cổng này được định cấu hình, AdGuard Home sẽ chạy máy chủ DNS-over-TLS trên cổng này.",
|
"encryption_dot_desc": "Nếu cổng này được định cấu hình, AdGuard Home sẽ chạy máy chủ DNS-over-TLS trên cổng này.",
|
||||||
|
"encryption_doq": "Cổng DNS-over-QUIC",
|
||||||
|
"encryption_doq_desc": "Nếu cổng này được định cấu hình, AdGuard Home sẽ chạy máy chủ DNS qua QUIC trên cổng này. Đó là thử nghiệm và có thể không đáng tin cậy. Ngoài ra, không có quá nhiều khách hàng hỗ trợ nó vào lúc này.",
|
||||||
"encryption_certificates": "Chứng chỉ",
|
"encryption_certificates": "Chứng chỉ",
|
||||||
"encryption_certificates_desc": "Để sử dụng mã hóa, bạn cần cung cấp chuỗi chứng chỉ SSL hợp lệ cho miền của mình. Bạn có thể nhận chứng chỉ miễn phí trên <0>{{link}}</0> hoặc bạn có thể mua chứng chỉ từ một trong các Cơ Quan Chứng Nhận tin cậy.",
|
"encryption_certificates_desc": "Để sử dụng mã hóa, bạn cần cung cấp chuỗi chứng chỉ SSL hợp lệ cho miền của mình. Bạn có thể nhận chứng chỉ miễn phí trên <0>{{link}}</0> hoặc bạn có thể mua chứng chỉ từ một trong các Cơ Quan Chứng Nhận tin cậy.",
|
||||||
"encryption_certificates_input": "Sao chép/dán chứng chỉ được mã hóa PEM của bạn tại đây.",
|
"encryption_certificates_input": "Sao chép/dán chứng chỉ được mã hóa PEM của bạn tại đây.",
|
||||||
@ -370,7 +391,6 @@
|
|||||||
"client_edit": "Chỉnh Sửa Máy Khách",
|
"client_edit": "Chỉnh Sửa Máy Khách",
|
||||||
"client_identifier": "Định danh",
|
"client_identifier": "Định danh",
|
||||||
"ip_address": "Địa chỉ IP",
|
"ip_address": "Địa chỉ IP",
|
||||||
"client_identifier_desc": "Các máy khách có thể được xác định bằng địa chỉ IP hoặc địa chỉ MAC. Xin lưu ý rằng chỉ có thể sử dụng MAC làm định danh nếu AdGuard Home cũng là <0>máy chủ DHCP</0>",
|
|
||||||
"form_enter_ip": "Nhập IP",
|
"form_enter_ip": "Nhập IP",
|
||||||
"form_enter_mac": "Nhập MAC",
|
"form_enter_mac": "Nhập MAC",
|
||||||
"form_enter_id": "Nhập định danh",
|
"form_enter_id": "Nhập định danh",
|
||||||
@ -401,6 +421,8 @@
|
|||||||
"dns_privacy": "DNS Riêng Tư",
|
"dns_privacy": "DNS Riêng Tư",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
|
||||||
|
"setup_dns_privacy_3": "<0>Đây là danh sách phần mềm bạn có thể sử dụng.</0>",
|
||||||
|
"setup_dns_privacy_4": "Trên thiết bị chạy iOS 14 hoặc macOS Big Sur bạn có thể tải tệp '.mobileconfig' đặc biệt có chứa máy chủ <highlight>DNS-over-HTTPS</highlight> hoặc <highlight>DNS-over-TLS</highlight> trong thiết lập DNS.",
|
||||||
"setup_dns_privacy_android_1": "Android 9 hỗ trợ DNS trên TLS nguyên bản. Để định cấu hình, hãy đi tới Cài đặt → Mạng & internet → Nâng cao → DNS Riêng Tư và nhập tên miền của bạn vào đó.",
|
"setup_dns_privacy_android_1": "Android 9 hỗ trợ DNS trên TLS nguyên bản. Để định cấu hình, hãy đi tới Cài đặt → Mạng & internet → Nâng cao → DNS Riêng Tư và nhập tên miền của bạn vào đó.",
|
||||||
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> hỗ trợ <1>DNS-over-HTTPS</1> và <1>DNS-over-TLS</1>.",
|
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> hỗ trợ <1>DNS-over-HTTPS</1> và <1>DNS-over-TLS</1>.",
|
||||||
"setup_dns_privacy_android_3": "<0>Intra</0> thêm <1>DNS-over-HTTPS</1> hỗ trợ cho Android.",
|
"setup_dns_privacy_android_3": "<0>Intra</0> thêm <1>DNS-over-HTTPS</1> hỗ trợ cho Android.",
|
||||||
@ -412,6 +434,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> hỗ trợ <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> hỗ trợ <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> hỗ trợ <1>DNS-over-HTTPS</1>.",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> hỗ trợ <1>DNS-over-HTTPS</1>.",
|
||||||
"setup_dns_privacy_other_5": "Bạn sẽ tìm thấy nhiều triển khai hơn <0>tại đây</0> và <1>tại đây</1>.",
|
"setup_dns_privacy_other_5": "Bạn sẽ tìm thấy nhiều triển khai hơn <0>tại đây</0> và <1>tại đây</1>.",
|
||||||
|
"setup_dns_privacy_ioc_mac": "Cấu hình iOS và macOS",
|
||||||
"setup_dns_notice": "Để sử dụng <1>DNS-over-HTTPS</1> hoặc <1>DNS-over-TLS</1>, bạn cần <0>định cấu hình Mã hóa</0> trong cài đặt AdGuard Home.",
|
"setup_dns_notice": "Để sử dụng <1>DNS-over-HTTPS</1> hoặc <1>DNS-over-TLS</1>, bạn cần <0>định cấu hình Mã hóa</0> trong cài đặt AdGuard Home.",
|
||||||
"rewrite_added": "DNS viết lại cho \"{{key}}\" đã thêm thành công",
|
"rewrite_added": "DNS viết lại cho \"{{key}}\" đã thêm thành công",
|
||||||
"rewrite_deleted": "DNS viết lại cho \"{{key}}\" đã xóa thành công",
|
"rewrite_deleted": "DNS viết lại cho \"{{key}}\" đã xóa thành công",
|
||||||
@ -511,8 +534,8 @@
|
|||||||
"check_ip": "Địa chỉ IP: {{ip}}",
|
"check_ip": "Địa chỉ IP: {{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "Lý do: {{reason}}",
|
"check_reason": "Lý do: {{reason}}",
|
||||||
"check_rule": "Quy tắc: {{rule}}",
|
|
||||||
"check_service": "Tên dịch vụ: {{service}}",
|
"check_service": "Tên dịch vụ: {{service}}",
|
||||||
|
"service_name": "Tên dịch vụ",
|
||||||
"check_not_found": "Không tìm thấy trong danh sách bộ lọc của bạn",
|
"check_not_found": "Không tìm thấy trong danh sách bộ lọc của bạn",
|
||||||
"client_confirm_block": "Bạn có muốn chặn người dùng {{ip}}?",
|
"client_confirm_block": "Bạn có muốn chặn người dùng {{ip}}?",
|
||||||
"client_confirm_unblock": "Bạn có muốn bỏ chặn người dùng {{ip}}?",
|
"client_confirm_unblock": "Bạn có muốn bỏ chặn người dùng {{ip}}?",
|
||||||
@ -545,6 +568,14 @@
|
|||||||
"milliseconds_abbreviation": "ms",
|
"milliseconds_abbreviation": "ms",
|
||||||
"cache_size": "Kích thước cache",
|
"cache_size": "Kích thước cache",
|
||||||
"cache_size_desc": "Kích thước cache DNS (bytes)",
|
"cache_size_desc": "Kích thước cache DNS (bytes)",
|
||||||
|
"cache_ttl_min_override": "Ghi đè TTL tối thiểu",
|
||||||
|
"cache_ttl_max_override": "Ghi đè TTL tối đa",
|
||||||
|
"enter_cache_size": "Nhập kích thước bộ nhớ cache (byte)",
|
||||||
|
"enter_cache_ttl_min_override": "Nhập TTL tối thiểu (giây)",
|
||||||
|
"enter_cache_ttl_max_override": "Nhập TTL tối đa (giây)",
|
||||||
|
"cache_ttl_min_override_desc": "Mở rộng giá trị thời gian tồn tại ngắn (giây) nhận được từ máy chủ ngược dòng khi phản hồi DNS vào bộ nhớ đệm",
|
||||||
|
"cache_ttl_max_override_desc": "Đặt giá trị thời gian tồn tại tối đa (giây) cho các mục nhập trong bộ nhớ cache DNS",
|
||||||
|
"ttl_cache_validation": "Giá trị TTL trong bộ nhớ cache tối thiểu phải nhỏ hơn hoặc bằng giá trị lớn nhất",
|
||||||
"filter_category_general": "Chung",
|
"filter_category_general": "Chung",
|
||||||
"filter_category_security": "Bảo mật",
|
"filter_category_security": "Bảo mật",
|
||||||
"filter_category_regional": "Khu vực",
|
"filter_category_regional": "Khu vực",
|
||||||
@ -556,5 +587,8 @@
|
|||||||
"setup_config_to_enable_dhcp_server": "Thiết lập cấu hình để bật máy chủ DHCP",
|
"setup_config_to_enable_dhcp_server": "Thiết lập cấu hình để bật máy chủ DHCP",
|
||||||
"original_response": "Phản hồi gốc",
|
"original_response": "Phản hồi gốc",
|
||||||
"click_to_view_queries": "Nhấp để xem truy xuất",
|
"click_to_view_queries": "Nhấp để xem truy xuất",
|
||||||
"port_53_faq_link": "Cổng 53 thường được sử dụng \"DNSStubListener\" hoặc \"systemd-resolved\". Vui lòng đọc <0>hướng dẫn</0> để giải quyết vấn đề này."
|
"port_53_faq_link": "Cổng 53 thường được sử dụng \"DNSStubListener\" hoặc \"systemd-resolved\". Vui lòng đọc <0>hướng dẫn</0> để giải quyết vấn đề này.",
|
||||||
|
"adg_will_drop_dns_queries": "AdGuard Home sẽ loại bỏ tất cả các truy vấn DNS từ ứng dụng khách này.",
|
||||||
|
"client_not_in_allowed_clients": "Ứng dụng khách không được phép vì nó không có trong danh sách \"Ứng dụng khách được phép\".",
|
||||||
|
"experimental": "Thử nghiệm"
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "客户端设置",
|
"client_settings": "客户端设置",
|
||||||
"example_upstream_reserved": "您可以将上游DNS 服务器<0>指定为特定域名</0>",
|
"example_upstream_reserved": "您可以<0>为特定域名</0>指定上游 DNS 服务器",
|
||||||
"example_upstream_comment": "您可以指定注解",
|
"example_upstream_comment": "您可以指定注解",
|
||||||
"upstream_parallel": "通过同时查询所有上游服务器,使用并行请求以加速解析",
|
"upstream_parallel": "通过同时查询所有上游服务器,使用并行请求以加速解析",
|
||||||
"parallel_requests": "并行请求",
|
"parallel_requests": "并行请求",
|
||||||
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "无效的 IPv4 格式",
|
"form_error_ip_format": "无效的 IPv4 格式",
|
||||||
"form_error_mac_format": "无效的 MAC 格式",
|
"form_error_mac_format": "无效的 MAC 格式",
|
||||||
"form_error_client_id_format": "无效的客户端 ID 格式",
|
"form_error_client_id_format": "无效的客户端 ID 格式",
|
||||||
|
"form_error_server_name": "无效的服务器名",
|
||||||
"form_error_positive": "必须大于 0",
|
"form_error_positive": "必须大于 0",
|
||||||
"form_error_negative": "必须大于等于 0",
|
"form_error_negative": "必须大于等于 0",
|
||||||
"range_end_error": "必须大于范围起始值",
|
"range_end_error": "必须大于范围起始值",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "自定义 IP",
|
"custom_ip": "自定义 IP",
|
||||||
"blocking_ipv4": "拦截 IPv4",
|
"blocking_ipv4": "拦截 IPv4",
|
||||||
"blocking_ipv6": "拦截 IPv6",
|
"blocking_ipv6": "拦截 IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "客户端 ID",
|
||||||
|
"client_id_placeholder": "输入客户端 ID",
|
||||||
|
"client_id_desc": "可根据一个特殊的客户端 ID 识别不同客户端。在 <a>这里</a>你可以了解到更多关于如何识别客户端的信息。",
|
||||||
"download_mobileconfig_doh": "下载适用于 DNS-over-HTTPS 的 .mobileconfig",
|
"download_mobileconfig_doh": "下载适用于 DNS-over-HTTPS 的 .mobileconfig",
|
||||||
"download_mobileconfig_dot": "下载适用于 DNS-over-TLS 的 .mobileconfig",
|
"download_mobileconfig_dot": "下载适用于 DNS-over-TLS 的 .mobileconfig",
|
||||||
|
"download_mobileconfig": "下载配置文件",
|
||||||
"plain_dns": "无加密DNS",
|
"plain_dns": "无加密DNS",
|
||||||
"form_enter_rate_limit": "输入限制速率",
|
"form_enter_rate_limit": "输入限制速率",
|
||||||
"rate_limit": "速度限制",
|
"rate_limit": "速度限制",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "加密配置已保存",
|
"encryption_config_saved": "加密配置已保存",
|
||||||
"encryption_server": "服务器名称",
|
"encryption_server": "服务器名称",
|
||||||
"encryption_server_enter": "输入您的域名",
|
"encryption_server_enter": "输入您的域名",
|
||||||
"encryption_server_desc": "若要使用 HTTPS ,您需要输入与 SSL 证书相匹配的服务器名称。",
|
"encryption_server_desc": "为了使用 HTTPS,请您输入与 SSL 证书或通配证书相匹配的服务器名称。如此字段未设置,服务器将要为所有域名接受 TLS 连接。",
|
||||||
"encryption_redirect": "HTTPS 自动重定向",
|
"encryption_redirect": "HTTPS 自动重定向",
|
||||||
"encryption_redirect_desc": "如果勾选此选项,AdGuard Home 将自动将您从 HTTP 重定向到 HTTPS 地址。",
|
"encryption_redirect_desc": "如果勾选此选项,AdGuard Home 将自动将您从 HTTP 重定向到 HTTPS 地址。",
|
||||||
"encryption_https": "HTTPS 端口",
|
"encryption_https": "HTTPS 端口",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "编辑客户端",
|
"client_edit": "编辑客户端",
|
||||||
"client_identifier": "标识符",
|
"client_identifier": "标识符",
|
||||||
"ip_address": "IP 地址",
|
"ip_address": "IP 地址",
|
||||||
"client_identifier_desc": "客户端可通过 IP 地址或 MAC 地址识别。请注意,如 AdGuard Home 也是 <0>DHCP 服务器</0>,则仅能将 MAC 用作标识符",
|
"client_identifier_desc": "客户端可通过 IP 、MAC 地址、CIDR 或特殊 ID(可用于 DoT/DoH/DoQ)被识别。<0>这里</0>您可多了解如何识别客户端。",
|
||||||
"form_enter_ip": "输入 IP",
|
"form_enter_ip": "输入 IP",
|
||||||
"form_enter_mac": "输入 MAC",
|
"form_enter_mac": "输入 MAC",
|
||||||
"form_enter_id": "输入标识符",
|
"form_enter_id": "输入标识符",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> 支持 <1>DNS-over-HTTPS</1>。",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> 支持 <1>DNS-over-HTTPS</1>。",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> 支持 <1>DNS-over-HTTPS</1>。",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> 支持 <1>DNS-over-HTTPS</1>。",
|
||||||
"setup_dns_privacy_other_5": "您可以从 <0>这里</0> 和 <1>这里</1> 找到更多的实施方案。",
|
"setup_dns_privacy_other_5": "您可以从 <0>这里</0> 和 <1>这里</1> 找到更多的实施方案。",
|
||||||
|
"setup_dns_privacy_ioc_mac": "iOS 和 macOS 配置",
|
||||||
"setup_dns_notice": "为了使用 <1>DNS-over-HTTPS</1> 或者 <1>DNS-over-TLS</1> ,您需要在 AdGuard Home 设置中 <0>配置加密</0> 。",
|
"setup_dns_notice": "为了使用 <1>DNS-over-HTTPS</1> 或者 <1>DNS-over-TLS</1> ,您需要在 AdGuard Home 设置中 <0>配置加密</0> 。",
|
||||||
"rewrite_added": "已成功添加 \"{{key}}\" 的 DNS 重写",
|
"rewrite_added": "已成功添加 \"{{key}}\" 的 DNS 重写",
|
||||||
"rewrite_deleted": "已成功删除 \"{{key}}\" 的 DNS 重写",
|
"rewrite_deleted": "已成功删除 \"{{key}}\" 的 DNS 重写",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP地址:{{ip}}",
|
"check_ip": "IP地址:{{ip}}",
|
||||||
"check_cname": "CNAME: {{cname}}",
|
"check_cname": "CNAME: {{cname}}",
|
||||||
"check_reason": "原因:{{reason}}",
|
"check_reason": "原因:{{reason}}",
|
||||||
"check_rule": "规则:{{rule}}",
|
|
||||||
"check_service": "服务名称:{{service}}",
|
"check_service": "服务名称:{{service}}",
|
||||||
"service_name": "服务名称",
|
"service_name": "服务名称",
|
||||||
"check_not_found": "未在您的筛选列表中找到",
|
"check_not_found": "未在您的筛选列表中找到",
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
"client_settings": "用戶端設定",
|
"client_settings": "用戶端設定",
|
||||||
"example_upstream_reserved": "您可以<0>指定網域</0>使用特定 DNS 查詢",
|
"example_upstream_reserved": "您可以<0>指定網域</0>使用特定 DNS 查詢",
|
||||||
"example_upstream_comment": "您可以指定註解",
|
"example_upstream_comment": "您可以指定註解",
|
||||||
"upstream_parallel": "使用平行查詢,同時查詢所有上游伺服器來來加速解析結果",
|
"upstream_parallel": "使用平行查詢,同時查詢所有上游伺服器來加速解析結果",
|
||||||
"parallel_requests": "平行處理",
|
"parallel_requests": "平行處理",
|
||||||
"load_balancing": "負載平衝",
|
"load_balancing": "負載平衡",
|
||||||
"load_balancing_desc": "一次只查詢一個伺服器。AdGuard Home 會使用加權隨機取樣來選擇使用的查詢結果,以確保速度最快的伺服器能被充分運用。",
|
"load_balancing_desc": "一次只查詢一個伺服器。AdGuard Home 會使用加權隨機取樣來選擇使用的查詢結果,以確保速度最快的伺服器能被充分運用。",
|
||||||
"bootstrap_dns": "引導(Boostrap) DNS 伺服器",
|
"bootstrap_dns": "引導(Boostrap) DNS 伺服器",
|
||||||
"bootstrap_dns_desc": "引導(Bootstrap)DNS 伺服器用來解析 DoH/DoT 的域名 IP。",
|
"bootstrap_dns_desc": "Bootstrap DNS 伺服器用於解析您所設定的上游 DoH/DoT 解析器的 IP 地址",
|
||||||
"check_dhcp_servers": "檢查 DHCP 伺服器",
|
"check_dhcp_servers": "檢查 DHCP 伺服器",
|
||||||
"save_config": "儲存設定",
|
"save_config": "儲存設定",
|
||||||
"enabled_dhcp": "DHCP 伺服器已啟動",
|
"enabled_dhcp": "DHCP 伺服器已啟動",
|
||||||
@ -117,9 +117,9 @@
|
|||||||
"block_domain_use_filters_and_hosts": "使用過濾器與 hosts 檔案阻擋網域查詢",
|
"block_domain_use_filters_and_hosts": "使用過濾器與 hosts 檔案阻擋網域查詢",
|
||||||
"filters_block_toggle_hint": "您可在<a>過濾器</a>設定中設定封鎖規則。",
|
"filters_block_toggle_hint": "您可在<a>過濾器</a>設定中設定封鎖規則。",
|
||||||
"use_adguard_browsing_sec": "使用 AdGuard 瀏覽安全網路服務",
|
"use_adguard_browsing_sec": "使用 AdGuard 瀏覽安全網路服務",
|
||||||
"use_adguard_browsing_sec_hint": "AdGuard Home 將檢查查詢網域是否在瀏覽安全服務黑名單內。它使用尊重個人隱私的 API 來進行檢查:會先透過 SHA256 將網域編碼後取簡短前置字串傳送到伺服器核對。",
|
"use_adguard_browsing_sec_hint": "AdGuard Home 將比對查詢網域是否在瀏覽安全服務黑名單內。AdGuard Home 選擇使用尊重個人隱私的 API 進行比對,先透過 SHA256 將網域編碼,取前置字串傳送到伺服器進行比對。",
|
||||||
"use_adguard_parental": "使用 AdGuard 家長監護功能",
|
"use_adguard_parental": "使用 AdGuard 家長監護功能",
|
||||||
"use_adguard_parental_hint": "AdGuard Home 將檢查查詢網域是否含有成人內容。它使用與 AdGuard 瀏覽安全一樣的尊重個人隱私的 API 來進行檢查。",
|
"use_adguard_parental_hint": "AdGuard Home 將比對查詢網域是否含有成人內容。它使用與 AdGuard 瀏覽安全一樣的尊重個人隱私的 API 來進行檢查。",
|
||||||
"enforce_safe_search": "強制使用安全搜尋",
|
"enforce_safe_search": "強制使用安全搜尋",
|
||||||
"enforce_save_search_hint": "AdGuard Home 可在下列搜尋引擎使用強制安全搜尋:Google、YouTube、Bing、DuckDuckGo 和 Yandex。",
|
"enforce_save_search_hint": "AdGuard Home 可在下列搜尋引擎使用強制安全搜尋:Google、YouTube、Bing、DuckDuckGo 和 Yandex。",
|
||||||
"no_servers_specified": "沒有指定的伺服器",
|
"no_servers_specified": "沒有指定的伺服器",
|
||||||
@ -133,8 +133,8 @@
|
|||||||
"encryption_settings": "加密設定",
|
"encryption_settings": "加密設定",
|
||||||
"dhcp_settings": "DHCP 設定",
|
"dhcp_settings": "DHCP 設定",
|
||||||
"upstream_dns": "上游 DNS 伺服器",
|
"upstream_dns": "上游 DNS 伺服器",
|
||||||
"upstream_dns_help": "每行輸入一個伺服器位址。<a>了解更多</a>有關配置上遊 DNS 伺服器的內容",
|
"upstream_dns_help": "每行輸入一個伺服器位址。<a>了解更多</a>有關設定上游 DNS 伺服器的內容",
|
||||||
"upstream_dns_configured_in_file": "被配置在 {{path}}",
|
"upstream_dns_configured_in_file": "設定在 {{path}}",
|
||||||
"test_upstream_btn": "測試上游 DNS",
|
"test_upstream_btn": "測試上游 DNS",
|
||||||
"upstreams": "上游",
|
"upstreams": "上游",
|
||||||
"apply_btn": "套用",
|
"apply_btn": "套用",
|
||||||
@ -188,19 +188,19 @@
|
|||||||
"example_upstream_regular": "一般 DNS(透過 UDP)",
|
"example_upstream_regular": "一般 DNS(透過 UDP)",
|
||||||
"example_upstream_dot": "<0>DNS-over-TLS</0>(流量加密)",
|
"example_upstream_dot": "<0>DNS-over-TLS</0>(流量加密)",
|
||||||
"example_upstream_doh": "<0>DNS-over-HTTPS</0>(流量加密)",
|
"example_upstream_doh": "<0>DNS-over-HTTPS</0>(流量加密)",
|
||||||
"example_upstream_doq": "加密的<0>DNS-over-QUIC</0>",
|
"example_upstream_doq": "加密 <0>DNS-over-QUIC</0>",
|
||||||
"example_upstream_sdns": "您可以使透過 <0>DNS Stamps</0> 來解析 <1>DNSCrypt</1> 或 <2>DNS-over-HTTPS</2>",
|
"example_upstream_sdns": "您可以使透過 <0>DNS Stamps</0> 來解析 <1>DNSCrypt</1> 或 <2>DNS-over-HTTPS</2>",
|
||||||
"example_upstream_tcp": "一般 DNS(透過 TCP)",
|
"example_upstream_tcp": "一般 DNS(透過 TCP)",
|
||||||
"all_lists_up_to_date_toast": "所有清單已經是最新的",
|
"all_lists_up_to_date_toast": "所有清單已更新至最新",
|
||||||
"updated_upstream_dns_toast": "已更新上游 DNS 伺服器",
|
"updated_upstream_dns_toast": "已更新上游 DNS 伺服器",
|
||||||
"dns_test_ok_toast": "設定中的 DNS 上游運作正常",
|
"dns_test_ok_toast": "設定中的 DNS 上游運作正常",
|
||||||
"dns_test_not_ok_toast": "設定中的 \"{{key}}\" DNS 出現錯誤,請檢察拼字",
|
"dns_test_not_ok_toast": "DNS 設定中的 \"{{key}}\" 出現錯誤,請確認是否正確輸入",
|
||||||
"unblock": "解除封鎖",
|
"unblock": "解除封鎖",
|
||||||
"block": "封鎖",
|
"block": "封鎖",
|
||||||
"disallow_this_client": "不允許此用戶端",
|
"disallow_this_client": "不允許此用戶端",
|
||||||
"allow_this_client": "允許此用戶端",
|
"allow_this_client": "允許此用戶端",
|
||||||
"block_for_this_client_only": "僅為此用戶端封鎖",
|
"block_for_this_client_only": "僅封鎖此用戶端",
|
||||||
"unblock_for_this_client_only": "僅為此用戶端解除封鎖",
|
"unblock_for_this_client_only": "僅解除封鎖此用戶端",
|
||||||
"time_table_header": "時間",
|
"time_table_header": "時間",
|
||||||
"date": "日期",
|
"date": "日期",
|
||||||
"domain_name_table_header": "域名",
|
"domain_name_table_header": "域名",
|
||||||
@ -254,7 +254,7 @@
|
|||||||
"plain_dns": "一般未加密 DNS",
|
"plain_dns": "一般未加密 DNS",
|
||||||
"form_enter_rate_limit": "輸入速率限制",
|
"form_enter_rate_limit": "輸入速率限制",
|
||||||
"rate_limit": "速率限制",
|
"rate_limit": "速率限制",
|
||||||
"edns_enable": "編輯 EDNS 用戶端子網路",
|
"edns_enable": "啟用 EDNS Client Subnet",
|
||||||
"edns_cs_desc": "開啟後 AdGuard Home 將會傳送用戶端的子網路給 DNS 伺服器。",
|
"edns_cs_desc": "開啟後 AdGuard Home 將會傳送用戶端的子網路給 DNS 伺服器。",
|
||||||
"rate_limit_desc": "限制單一裝置每秒發出的查詢次數(設定為 0 即表示無限制)",
|
"rate_limit_desc": "限制單一裝置每秒發出的查詢次數(設定為 0 即表示無限制)",
|
||||||
"blocking_ipv4_desc": "回覆指定 IPv4 位址給被封鎖的網域的 A 紀錄查詢",
|
"blocking_ipv4_desc": "回覆指定 IPv4 位址給被封鎖的網域的 A 紀錄查詢",
|
||||||
@ -269,7 +269,6 @@
|
|||||||
"source_label": "來源",
|
"source_label": "來源",
|
||||||
"found_in_known_domain_db": "在已知網域資料庫中找到。",
|
"found_in_known_domain_db": "在已知網域資料庫中找到。",
|
||||||
"category_label": "類別",
|
"category_label": "類別",
|
||||||
"rule_label": "規則",
|
|
||||||
"list_label": "清單",
|
"list_label": "清單",
|
||||||
"unknown_filter": "未知過濾器 {{filterId}}",
|
"unknown_filter": "未知過濾器 {{filterId}}",
|
||||||
"known_tracker": "已知追蹤器",
|
"known_tracker": "已知追蹤器",
|
||||||
@ -330,15 +329,14 @@
|
|||||||
"encryption_config_saved": "加密設定已儲存",
|
"encryption_config_saved": "加密設定已儲存",
|
||||||
"encryption_server": "伺服器名稱",
|
"encryption_server": "伺服器名稱",
|
||||||
"encryption_server_enter": "輸入您的網域名稱",
|
"encryption_server_enter": "輸入您的網域名稱",
|
||||||
"encryption_server_desc": "要使用 HTTPS,您必須輸入與您 SSL 憑證相符的伺服器名稱。",
|
"encryption_redirect": "自動重新導向到 HTTPS",
|
||||||
"encryption_redirect": "自重新導向到 HTTPS",
|
|
||||||
"encryption_redirect_desc": "如果啟用,AdGuard Home 將會自動導向 HTTP 到 HTTPS。",
|
"encryption_redirect_desc": "如果啟用,AdGuard Home 將會自動導向 HTTP 到 HTTPS。",
|
||||||
"encryption_https": "HTTPS 連接埠",
|
"encryption_https": "HTTPS 連接埠",
|
||||||
"encryption_https_desc": "如果已設定 HTTPS,AdGuard Home 網頁管理介面將會使用 HTTPS 來存取,且「/dns-query」也提供 DNS-over-HTTPS 查詢。",
|
"encryption_https_desc": "如果已設定 HTTPS,AdGuard Home 網頁管理介面將會使用 HTTPS 來存取,且「/dns-query」也提供 DNS-over-HTTPS 查詢。",
|
||||||
"encryption_dot": "DNS-over-TLS 連接埠",
|
"encryption_dot": "DNS-over-TLS 連接埠",
|
||||||
"encryption_dot_desc": "如果已設定此連接埠,AdGuard Home 將啟動 DNS-over-TLS 伺服器來監聽請求。",
|
"encryption_dot_desc": "如果已設定此連接埠,AdGuard Home 將啟動 DNS-over-TLS 伺服器來監聽請求。",
|
||||||
"encryption_doq": "DNS-over-QUIC端口",
|
"encryption_doq": "DNS-over-QUIC 連接埠",
|
||||||
"encryption_doq_desc": "如果此端口被配置了, AdGuard Home將會在此端口運行DNS-over-QUIC服務. 這目前還是實驗性的功能,可能不可靠. 另外,目前還沒有大量支持它的客戶端",
|
"encryption_doq_desc": "若設定此連接埠,AdGuard Home 將在此連接埠上運行 DNS-over-QUIC 服務。此功能還是實驗性功能,可能並不可靠。此外目前還沒有太多客戶端支援。",
|
||||||
"encryption_certificates": "憑證",
|
"encryption_certificates": "憑證",
|
||||||
"encryption_certificates_desc": "要使用加密連線,必須擁有一個有效的 SSL 憑證對應您的網域。您可以從<0>{{link}}</0>取得免費的 SSL 憑證或從受信任的 SSL 憑證簽發機構購買。",
|
"encryption_certificates_desc": "要使用加密連線,必須擁有一個有效的 SSL 憑證對應您的網域。您可以從<0>{{link}}</0>取得免費的 SSL 憑證或從受信任的 SSL 憑證簽發機構購買。",
|
||||||
"encryption_certificates_input": "在這裡複製/貼上您的 PEM 憑證。",
|
"encryption_certificates_input": "在這裡複製/貼上您的 PEM 憑證。",
|
||||||
@ -370,7 +368,7 @@
|
|||||||
"dns_status_error": "檢查 DNS 伺服器狀態錯誤",
|
"dns_status_error": "檢查 DNS 伺服器狀態錯誤",
|
||||||
"down": "離線",
|
"down": "離線",
|
||||||
"fix": "修正",
|
"fix": "修正",
|
||||||
"dns_providers": "下列是可以使用的<0>軟體清單</0>。",
|
"dns_providers": "下列為常見的<0> DNS 伺服器</0>。",
|
||||||
"update_now": "立即更新",
|
"update_now": "立即更新",
|
||||||
"update_failed": "自動更新發生錯誤。請嘗試依照<a>以下步驟</a> 來手動更新。",
|
"update_failed": "自動更新發生錯誤。請嘗試依照<a>以下步驟</a> 來手動更新。",
|
||||||
"processing_update": "請稍候,AdGuard Home 正在更新",
|
"processing_update": "請稍候,AdGuard Home 正在更新",
|
||||||
@ -386,14 +384,13 @@
|
|||||||
"client_edit": "編輯用戶端",
|
"client_edit": "編輯用戶端",
|
||||||
"client_identifier": "識別碼",
|
"client_identifier": "識別碼",
|
||||||
"ip_address": "IP 位址",
|
"ip_address": "IP 位址",
|
||||||
"client_identifier_desc": "可通過 IP 地址、CIDR、MAC 地址來辨識使用者裝置。注意:必須使用 AdGuard Home 內建 <0>DHCP 伺服器</0> 才能偵測 MAC 地址。",
|
|
||||||
"form_enter_ip": "輸入 IP",
|
"form_enter_ip": "輸入 IP",
|
||||||
"form_enter_mac": "輸入 MAC 地址",
|
"form_enter_mac": "輸入 MAC 地址",
|
||||||
"form_enter_id": "輸入識別碼",
|
"form_enter_id": "輸入識別碼",
|
||||||
"form_add_id": "新增識別碼",
|
"form_add_id": "新增識別碼",
|
||||||
"form_client_name": "輸入用戶端名稱",
|
"form_client_name": "輸入用戶端名稱",
|
||||||
"name": "名稱",
|
"name": "名稱",
|
||||||
"client_global_settings": "Use global settings",
|
"client_global_settings": "使用全域設定",
|
||||||
"client_deleted": "已刪除「{{key}}」",
|
"client_deleted": "已刪除「{{key}}」",
|
||||||
"client_added": "已新增「{{key}}」",
|
"client_added": "已新增「{{key}}」",
|
||||||
"client_updated": "已更新「{{key}}」",
|
"client_updated": "已更新「{{key}}」",
|
||||||
@ -418,13 +415,13 @@
|
|||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0>使用 <1>{{address}}</1>。",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0>使用 <1>{{address}}</1>。",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0>使用 <1>{{address}}</1>。",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0>使用 <1>{{address}}</1>。",
|
||||||
"setup_dns_privacy_3": "<0>以下是您可以使用軟體的列表</0>",
|
"setup_dns_privacy_3": "<0>以下是您可以使用軟體的列表</0>",
|
||||||
"setup_dns_privacy_4": "在 iOS 14 或 macOS Big Sur 裝置上,您可以下載特定的 '.mobileconfig' 檔案。此檔案將<highlight>DNS-over-HTTPS</highlight> 或 <highlight>DNS-over-TLS</highlight> 伺服器添加至 DNS 設定。",
|
"setup_dns_privacy_4": "在 iOS 14 或 macOS Big Sur 裝置上,您可以下載特定的 '.mobileconfig' 檔案。此檔案將<highlight>DNS-over-HTTPS</highlight> 或 <highlight>DNS-over-TLS</highlight> 伺服器新增至 DNS 設定。",
|
||||||
"setup_dns_privacy_android_1": "Android 9 原生支援 DNS-over-TLS。前網「設定」→「網路 & 網際網路」→「進階」→「私人 DNS」設定。",
|
"setup_dns_privacy_android_1": "Android 9 原生支援 DNS-over-TLS。前往「設定」→「網路 & 網際網路」→「進階」→「私人 DNS」設定。",
|
||||||
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> 支援 <1>DNS-over-HTTPS</1> 與 <1>DNS-over-TLS</1>。",
|
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> 支援 <1>DNS-over-HTTPS</1> 與 <1>DNS-over-TLS</1>。",
|
||||||
"setup_dns_privacy_android_3": "<0>Intra</0> 對 Android 新增支援 <1>DNS-over-HTTPS</1>。",
|
"setup_dns_privacy_android_3": "<0>Intra</0> 對 Android 新增支援 <1>DNS-over-HTTPS</1>。",
|
||||||
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> 支援 <1>DNS-over-HTTPS</1>,若要使用您必須先產生 <2>DNS Stamp</2>。",
|
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> 支援 <1>DNS-over-HTTPS</1>,若要使用您必須先產生 <2>DNS Stamp</2>。",
|
||||||
"setup_dns_privacy_ios_2": "<0>AdGuard for iOS</0> 支援 <1>DNS-over-HTTPS</1> 與 <1>DNS-over-TLS</1> 設定。",
|
"setup_dns_privacy_ios_2": "<0>AdGuard for iOS</0> 支援 <1>DNS-over-HTTPS</1> 與 <1>DNS-over-TLS</1> 設定。",
|
||||||
"setup_dns_privacy_other_title": "其他實作軟體",
|
"setup_dns_privacy_other_title": "其他實作方式",
|
||||||
"setup_dns_privacy_other_1": "AdGuard Home 本身在任何平台都是安全的 DNS 用戶端。",
|
"setup_dns_privacy_other_1": "AdGuard Home 本身在任何平台都是安全的 DNS 用戶端。",
|
||||||
"setup_dns_privacy_other_2": "<0>dnsproxy</0> 支援所有加密 DNS 協定。",
|
"setup_dns_privacy_other_2": "<0>dnsproxy</0> 支援所有加密 DNS 協定。",
|
||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> 支援 <1>DNS-over-HTTPS</1>。",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> 支援 <1>DNS-over-HTTPS</1>。",
|
||||||
@ -440,7 +437,7 @@
|
|||||||
"rewrite_applied": "已套用 DNS 覆寫規則",
|
"rewrite_applied": "已套用 DNS 覆寫規則",
|
||||||
"rewrite_hosts_applied": "由「hosts 檔案」覆寫",
|
"rewrite_hosts_applied": "由「hosts 檔案」覆寫",
|
||||||
"dns_rewrites": "DNS 覆寫",
|
"dns_rewrites": "DNS 覆寫",
|
||||||
"form_domain": "輸入網域名稱或使用萬用字元。",
|
"form_domain": "輸入網域名稱或使用 wildcard 字元。",
|
||||||
"form_answer": "輸入 IP 或網域名稱",
|
"form_answer": "輸入 IP 或網域名稱",
|
||||||
"form_error_domain_format": "網域格式無效",
|
"form_error_domain_format": "網域格式無效",
|
||||||
"form_error_answer_format": "回應格式無效",
|
"form_error_answer_format": "回應格式無效",
|
||||||
@ -497,11 +494,11 @@
|
|||||||
"network": "網路",
|
"network": "網路",
|
||||||
"descr": "描述",
|
"descr": "描述",
|
||||||
"whois": "Whois",
|
"whois": "Whois",
|
||||||
"filtering_rules_learn_more": "<0>進一步了解</0>關於創建自己的「hosts 檔案」",
|
"filtering_rules_learn_more": "<0>進一步了解</0>如何創建自己的「hosts 檔案」",
|
||||||
"blocked_by_response": "回應時被 CNAME 或 IP 封鎖",
|
"blocked_by_response": "回應時被 CNAME 或 IP 封鎖",
|
||||||
"blocked_by_cname_or_ip": "使用 CNAME 或 IP 封鎖",
|
"blocked_by_cname_or_ip": "使用 CNAME 或 IP 封鎖",
|
||||||
"try_again": "再試一次",
|
"try_again": "再試一次",
|
||||||
"domain_desc": "輸入您想要覆寫的網域或萬用字元。",
|
"domain_desc": "輸入您想要覆寫的網域或 wildcard 字元。",
|
||||||
"example_rewrite_domain": "DNS 覆寫只套用在這個域名。",
|
"example_rewrite_domain": "DNS 覆寫只套用在這個域名。",
|
||||||
"example_rewrite_wildcard": "DNS 覆寫會套用在 <0>example.org</0> 及所有子域名。",
|
"example_rewrite_wildcard": "DNS 覆寫會套用在 <0>example.org</0> 及所有子域名。",
|
||||||
"rewrite_ip_address": "IP 位址:使用 A 或 AAAA 紀錄回應",
|
"rewrite_ip_address": "IP 位址:使用 A 或 AAAA 紀錄回應",
|
||||||
@ -509,27 +506,26 @@
|
|||||||
"rewrite_A": "<0>A</0>: 特殊值,將上游查詢結果覆寫 <0>A</0> 紀錄",
|
"rewrite_A": "<0>A</0>: 特殊值,將上游查詢結果覆寫 <0>A</0> 紀錄",
|
||||||
"rewrite_AAAA": "<0>AAAA</0>: 特殊值,將上游查詢結果覆寫 <0>AAAA</0> 紀錄",
|
"rewrite_AAAA": "<0>AAAA</0>: 特殊值,將上游查詢結果覆寫 <0>AAAA</0> 紀錄",
|
||||||
"disable_ipv6": "停用 IPv6",
|
"disable_ipv6": "停用 IPv6",
|
||||||
"disable_ipv6_desc": "開啟此功能後所有,所有對於 IPv6 位址(AAAA)的查詢都會被捨棄。",
|
"disable_ipv6_desc": "開啟此功能後,將捨棄所有對 IPv6 位址(AAAA)的查詢。",
|
||||||
"fastest_addr": "Fastest IP 位址",
|
"fastest_addr": "Fastest IP 位址",
|
||||||
"fastest_addr_desc": "從所有 DNS 伺服器查詢中回應最快的 IP 位址",
|
"fastest_addr_desc": "從所有 DNS 伺服器查詢中回應最快的 IP 位址。但這操作會等待所有 DNS 查詢結果後才能回應,導致速度有所降低,不過同時卻也改善了整體連線品質。",
|
||||||
"autofix_warning_text": "如果您點擊「修復」,AdGuard Home 將更改您的系統 DNS 設定更改為 AdGuard Home DNS 伺服器",
|
"autofix_warning_text": "如果您點擊「修復」,AdGuard Home 將更改您的系統 DNS 設定更改為 AdGuard Home DNS 伺服器",
|
||||||
"autofix_warning_list": "它將執行這些任務:<0>停用系統 DNSStubListener</0> <0>將 DNS 設定為 127.0.0.1</0> <0>更換軟連結將 /etc/resolv.conf 為 /run/systemd/resolve/resolv.conf</0> <0>停止 DNSStubListener(重新載入 systemd-resolved)</0>",
|
"autofix_warning_list": "它將執行這些任務:<0>停用系統 DNSStubListener</0> <0>將 DNS 設定為 127.0.0.1</0> <0>更換軟連結將 /etc/resolv.conf 為 /run/systemd/resolve/resolv.conf</0> <0>停止 DNSStubListener(重新載入 systemd-resolved)</0>",
|
||||||
"autofix_warning_result": "就結論來說 DNS 請求預設由本機的 AdGuard Home 處理。",
|
"autofix_warning_result": "就結論來說 DNS 請求預設由本機的 AdGuard Home 處理。",
|
||||||
"tags_title": "標籤",
|
"tags_title": "標籤",
|
||||||
"tags_desc": "您可以選擇與用戶端相對應的標籤。標籤可已包含在過濾規則內且使用上更精確。\n<0>進一步了解</0>",
|
"tags_desc": "可在此指定用戶端的標籤。標籤可包含在過濾規則內,並且在指定上更為精確。\n<0>進一步了解</0>",
|
||||||
"form_select_tags": "選擇用戶端標籤",
|
"form_select_tags": "選擇用戶端標籤",
|
||||||
"check_title": "過濾檢查",
|
"check_title": "過濾檢查",
|
||||||
"check_desc": "檢查網域是否被封鎖",
|
"check_desc": "檢查網域是否被封鎖",
|
||||||
"check": "檢查",
|
"check": "檢查",
|
||||||
"form_enter_host": "輸入網域",
|
"form_enter_host": "輸入網域",
|
||||||
"filtered_custom_rules": "被自訂過濾規則封鎖",
|
"filtered_custom_rules": "已套用自訂規則",
|
||||||
"choose_from_list": "從清單中選取",
|
"choose_from_list": "從清單中選取",
|
||||||
"add_custom_list": "新增自訂清單",
|
"add_custom_list": "新增自訂清單",
|
||||||
"host_whitelisted": "主機已列入白名單",
|
"host_whitelisted": "主機已列入白名單",
|
||||||
"check_ip": "IP 位址:{{ip}}",
|
"check_ip": "IP 位址:{{ip}}",
|
||||||
"check_cname": "CNAME:{{cname}}",
|
"check_cname": "CNAME:{{cname}}",
|
||||||
"check_reason": "原因:{{reason}}",
|
"check_reason": "原因:{{reason}}",
|
||||||
"check_rule": "規則:{{rule}}",
|
|
||||||
"check_service": "服務名稱:{{service}}",
|
"check_service": "服務名稱:{{service}}",
|
||||||
"service_name": "服務名稱",
|
"service_name": "服務名稱",
|
||||||
"check_not_found": "未在您的過濾清單中找到",
|
"check_not_found": "未在您的過濾清單中找到",
|
||||||
@ -569,7 +565,7 @@
|
|||||||
"enter_cache_size": "輸入快取大小(bytes)",
|
"enter_cache_size": "輸入快取大小(bytes)",
|
||||||
"enter_cache_ttl_min_override": "輸入最小 TTL 值(秒)",
|
"enter_cache_ttl_min_override": "輸入最小 TTL 值(秒)",
|
||||||
"enter_cache_ttl_max_override": "輸入最大 TTL 值(秒)",
|
"enter_cache_ttl_max_override": "輸入最大 TTL 值(秒)",
|
||||||
"cache_ttl_min_override_desc": "快取 DNS 回應時,延長從上遊伺服器收到的 TTL 值 (秒)",
|
"cache_ttl_min_override_desc": "快取 DNS 回應時,延長從上游伺服器收到的 TTL 值 (秒)",
|
||||||
"cache_ttl_max_override_desc": "設定 DNS 快取條目的最大 TTL 值(秒)",
|
"cache_ttl_max_override_desc": "設定 DNS 快取條目的最大 TTL 值(秒)",
|
||||||
"ttl_cache_validation": "最小快取 TTL 值必須小於或等於最大值",
|
"ttl_cache_validation": "最小快取 TTL 值必須小於或等於最大值",
|
||||||
"filter_category_general": "一般",
|
"filter_category_general": "一般",
|
||||||
@ -584,7 +580,7 @@
|
|||||||
"original_response": "原始回應",
|
"original_response": "原始回應",
|
||||||
"click_to_view_queries": "按一下以檢視查詢結果",
|
"click_to_view_queries": "按一下以檢視查詢結果",
|
||||||
"port_53_faq_link": "連接埠 53 經常被「DNSStubListener」或「systemd-resolved」服務佔用。請閱讀下列有關解決<0>這個問題</0>的說明",
|
"port_53_faq_link": "連接埠 53 經常被「DNSStubListener」或「systemd-resolved」服務佔用。請閱讀下列有關解決<0>這個問題</0>的說明",
|
||||||
"adg_will_drop_dns_queries": "AdGuard Home 將要終止所有來自此用戶端的 DNS 查詢。",
|
"adg_will_drop_dns_queries": "AdGuard Home 將停止回應此用戶端的所有 DNS 查詢。",
|
||||||
"client_not_in_allowed_clients": "此用戶端不被允許,它不在\"允許的用戶端\"列表中。",
|
"client_not_in_allowed_clients": "此用戶端不被允許,它不在\"允許的用戶端\"列表中。",
|
||||||
"experimental": "實驗性"
|
"experimental": "實驗性"
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "用戶端設定",
|
"client_settings": "用戶端設定",
|
||||||
"example_upstream_reserved": "您可明確指定<0>用於特定的網域</0>之 DNS 上游",
|
"example_upstream_reserved": "您可<0>對於特定的網域</0>明確指定 DNS 上游",
|
||||||
"example_upstream_comment": "您可明確指定註解",
|
"example_upstream_comment": "您可明確指定註解",
|
||||||
"upstream_parallel": "透過同時地查詢所有上游的伺服器,使用並行的查詢以加速解析網域",
|
"upstream_parallel": "透過同時地查詢所有上游的伺服器,使用並行的查詢以加速解析網域",
|
||||||
"parallel_requests": "並行的請求",
|
"parallel_requests": "並行的請求",
|
||||||
@ -32,6 +32,7 @@
|
|||||||
"form_error_ip_format": "無效的 IP 格式",
|
"form_error_ip_format": "無效的 IP 格式",
|
||||||
"form_error_mac_format": "無效的媒體存取控制(MAC)格式",
|
"form_error_mac_format": "無效的媒體存取控制(MAC)格式",
|
||||||
"form_error_client_id_format": "無效的用戶端 ID 格式",
|
"form_error_client_id_format": "無效的用戶端 ID 格式",
|
||||||
|
"form_error_server_name": "無效的伺服器名稱",
|
||||||
"form_error_positive": "必須大於 0",
|
"form_error_positive": "必須大於 0",
|
||||||
"form_error_negative": "必須等於或大於 0",
|
"form_error_negative": "必須等於或大於 0",
|
||||||
"range_end_error": "必須大於起始範圍",
|
"range_end_error": "必須大於起始範圍",
|
||||||
@ -74,7 +75,7 @@
|
|||||||
"filter": "過濾器",
|
"filter": "過濾器",
|
||||||
"query_log": "查詢記錄",
|
"query_log": "查詢記錄",
|
||||||
"compact": "精簡的",
|
"compact": "精簡的",
|
||||||
"nothing_found": "無什麼被找到",
|
"nothing_found": "沒找到什麼",
|
||||||
"faq": "常見問答集",
|
"faq": "常見問答集",
|
||||||
"version": "版本",
|
"version": "版本",
|
||||||
"address": "位址",
|
"address": "位址",
|
||||||
@ -247,10 +248,16 @@
|
|||||||
"custom_ip": "自訂的 IP",
|
"custom_ip": "自訂的 IP",
|
||||||
"blocking_ipv4": "封鎖 IPv4",
|
"blocking_ipv4": "封鎖 IPv4",
|
||||||
"blocking_ipv6": "封鎖 IPv6",
|
"blocking_ipv6": "封鎖 IPv6",
|
||||||
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
"dns_over_tls": "DNS-over-TLS",
|
"dns_over_tls": "DNS-over-TLS",
|
||||||
|
"dns_over_quic": "DNS-over-QUIC",
|
||||||
|
"client_id": "用戶端 ID",
|
||||||
|
"client_id_placeholder": "輸入用戶端 ID",
|
||||||
|
"client_id_desc": "不同的用戶端可根據特殊的用戶端 ID 被識別。<0>於此</0>,您可了解更多關於如何識別用戶端。",
|
||||||
"download_mobileconfig_doh": "下載用於 DNS-over-HTTPS 的 .mobileconfig",
|
"download_mobileconfig_doh": "下載用於 DNS-over-HTTPS 的 .mobileconfig",
|
||||||
"download_mobileconfig_dot": "下載用於 DNS-over-TLS 的 .mobileconfig",
|
"download_mobileconfig_dot": "下載用於 DNS-over-TLS 的 .mobileconfig",
|
||||||
|
"download_mobileconfig": "下載配置檔案",
|
||||||
"plain_dns": "一般的 DNS",
|
"plain_dns": "一般的 DNS",
|
||||||
"form_enter_rate_limit": "輸入速率限制",
|
"form_enter_rate_limit": "輸入速率限制",
|
||||||
"rate_limit": "速率限制",
|
"rate_limit": "速率限制",
|
||||||
@ -259,7 +266,7 @@
|
|||||||
"rate_limit_desc": "單一的用戶端被允許傳送的每秒請求之數量(設定它為 0 表示無限制的)",
|
"rate_limit_desc": "單一的用戶端被允許傳送的每秒請求之數量(設定它為 0 表示無限制的)",
|
||||||
"blocking_ipv4_desc": "要被返回給已封鎖的 A 請求之 IP 位址",
|
"blocking_ipv4_desc": "要被返回給已封鎖的 A 請求之 IP 位址",
|
||||||
"blocking_ipv6_desc": "要被返回給已封鎖的 AAAA 請求之 IP 位址",
|
"blocking_ipv6_desc": "要被返回給已封鎖的 AAAA 請求之 IP 位址",
|
||||||
"blocking_mode_default": "預設:當被廣告封鎖樣式的規則封鎖時,以零值 IP 位址(0.0.0.0 供 A;:: 供 AAAA)回覆;當被 /etc/hosts 樣式的規則封鎖時,以在該規則中之已明確指定的 IP 位址回覆",
|
"blocking_mode_default": "預設:當被 AdBlock 樣式的規則封鎖時,以零值 IP 位址(0.0.0.0 供 A;:: 供 AAAA)回覆;當被 /etc/hosts 樣式的規則封鎖時,以在該規則中之已明確指定的 IP 位址回覆",
|
||||||
"blocking_mode_refused": "已拒絕(REFUSED):以 REFUSED 碼回覆",
|
"blocking_mode_refused": "已拒絕(REFUSED):以 REFUSED 碼回覆",
|
||||||
"blocking_mode_nxdomain": "不存在的網域(NXDOMAIN):以 NXDOMAIN 碼回覆",
|
"blocking_mode_nxdomain": "不存在的網域(NXDOMAIN):以 NXDOMAIN 碼回覆",
|
||||||
"blocking_mode_null_ip": "無效的 IP:以零值 IP 位址(0.0.0.0 供 A;:: 供 AAAA)回覆",
|
"blocking_mode_null_ip": "無效的 IP:以零值 IP 位址(0.0.0.0 供 A;:: 供 AAAA)回覆",
|
||||||
@ -284,7 +291,7 @@
|
|||||||
"install_settings_dns_desc": "您將需要配置您的裝置或路由器以使用於下列的位址上之 DNS 伺服器:",
|
"install_settings_dns_desc": "您將需要配置您的裝置或路由器以使用於下列的位址上之 DNS 伺服器:",
|
||||||
"install_settings_all_interfaces": "所有的介面",
|
"install_settings_all_interfaces": "所有的介面",
|
||||||
"install_auth_title": "驗證",
|
"install_auth_title": "驗證",
|
||||||
"install_auth_desc": "配置屬於您的 AdGuard Home 管理員網路介面之密碼驗證是被非常建議的。即使它僅在您的區域網路中為可存取的,保護它免於不受限制的存取為仍然重要的。",
|
"install_auth_desc": "我們強烈建議您設定 AdGuard Home 管理員網路介面密碼。即使它僅能在您的區域網路中使用,保護它免於不受限制的存取仍然很重要。",
|
||||||
"install_auth_username": "使用者名稱",
|
"install_auth_username": "使用者名稱",
|
||||||
"install_auth_password": "密碼",
|
"install_auth_password": "密碼",
|
||||||
"install_auth_confirm": "確認密碼",
|
"install_auth_confirm": "確認密碼",
|
||||||
@ -330,7 +337,7 @@
|
|||||||
"encryption_config_saved": "加密配置被儲存",
|
"encryption_config_saved": "加密配置被儲存",
|
||||||
"encryption_server": "伺服器名稱",
|
"encryption_server": "伺服器名稱",
|
||||||
"encryption_server_enter": "輸入您的域名",
|
"encryption_server_enter": "輸入您的域名",
|
||||||
"encryption_server_desc": "為了使用 HTTPS,您需要輸入與您的安全通訊端層(SSL)憑證相符的伺服器名稱。",
|
"encryption_server_desc": "為了使用 HTTPS,您需要輸入與您的安全通訊端層(SSL)憑證或萬用字元憑證相符的伺服器名稱。如果此欄位未被設定,它將接受向任何網域的傳輸層安全性協定(TLS)連線。",
|
||||||
"encryption_redirect": "自動地重新導向到 HTTPS",
|
"encryption_redirect": "自動地重新導向到 HTTPS",
|
||||||
"encryption_redirect_desc": "如果被勾選,AdGuard Home 將自動地重新導向您從 HTTP 到 HTTPS 位址。",
|
"encryption_redirect_desc": "如果被勾選,AdGuard Home 將自動地重新導向您從 HTTP 到 HTTPS 位址。",
|
||||||
"encryption_https": "HTTPS 連接埠",
|
"encryption_https": "HTTPS 連接埠",
|
||||||
@ -386,7 +393,7 @@
|
|||||||
"client_edit": "編輯用戶端",
|
"client_edit": "編輯用戶端",
|
||||||
"client_identifier": "識別碼",
|
"client_identifier": "識別碼",
|
||||||
"ip_address": "IP 位址",
|
"ip_address": "IP 位址",
|
||||||
"client_identifier_desc": "用戶端可被 IP 位址、無類別網域間路由(CIDR)或媒體存取控制(MAC)位址識別。請注意,只要 AdGuard Home 也是<0>動態主機設定協定(DHCP)伺服器</0>,使用 MAC 作為識別碼是可能的",
|
"client_identifier_desc": "用戶端可根據 IP 位址、無類別網域間路由(CIDR)、媒體存取控制(MAC)位址或特殊的用戶端 ID(可被用於 DoT/DoH/DoQ)被識別。<0>於此</0>,您可了解更多關於如何識別用戶端。",
|
||||||
"form_enter_ip": "輸入 IP",
|
"form_enter_ip": "輸入 IP",
|
||||||
"form_enter_mac": "輸入媒體存取控制(MAC)",
|
"form_enter_mac": "輸入媒體存取控制(MAC)",
|
||||||
"form_enter_id": "輸入識別碼",
|
"form_enter_id": "輸入識別碼",
|
||||||
@ -430,6 +437,7 @@
|
|||||||
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> 支援 <1>DNS-over-HTTPS</1>。",
|
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> 支援 <1>DNS-over-HTTPS</1>。",
|
||||||
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> 支援 <1>DNS-over-HTTPS</1>。",
|
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> 支援 <1>DNS-over-HTTPS</1>。",
|
||||||
"setup_dns_privacy_other_5": "在<0>這裡</0>和<1>這裡</1>,您將發現更多的執行。",
|
"setup_dns_privacy_other_5": "在<0>這裡</0>和<1>這裡</1>,您將發現更多的執行。",
|
||||||
|
"setup_dns_privacy_ioc_mac": "iOS 和 macOS 配置",
|
||||||
"setup_dns_notice": "為了使用 <1>DNS-over-HTTPS</1> 或 <1>DNS-over-TLS</1>,您需要在 AdGuard Home 設定裡<0>配置加密</0>。",
|
"setup_dns_notice": "為了使用 <1>DNS-over-HTTPS</1> 或 <1>DNS-over-TLS</1>,您需要在 AdGuard Home 設定裡<0>配置加密</0>。",
|
||||||
"rewrite_added": "對於 \"{{key}}\" 之 DNS 改寫被成功地加入",
|
"rewrite_added": "對於 \"{{key}}\" 之 DNS 改寫被成功地加入",
|
||||||
"rewrite_deleted": "對於 \"{{key}}\" 之 DNS 改寫被成功地刪除",
|
"rewrite_deleted": "對於 \"{{key}}\" 之 DNS 改寫被成功地刪除",
|
||||||
@ -529,7 +537,6 @@
|
|||||||
"check_ip": "IP 位址:{{ip}}",
|
"check_ip": "IP 位址:{{ip}}",
|
||||||
"check_cname": "正規名稱(CNAME):{{cname}}",
|
"check_cname": "正規名稱(CNAME):{{cname}}",
|
||||||
"check_reason": "原因:{{reason}}",
|
"check_reason": "原因:{{reason}}",
|
||||||
"check_rule": "規則:{{rule}}",
|
|
||||||
"check_service": "服務名稱:{{service}}",
|
"check_service": "服務名稱:{{service}}",
|
||||||
"service_name": "服務名稱",
|
"service_name": "服務名稱",
|
||||||
"check_not_found": "未在您的過濾器中被找到",
|
"check_not_found": "未在您的過濾器中被找到",
|
||||||
@ -585,6 +592,6 @@
|
|||||||
"click_to_view_queries": "點擊以檢視查詢",
|
"click_to_view_queries": "點擊以檢視查詢",
|
||||||
"port_53_faq_link": "連接埠 53 常被 \"DNSStubListener\" 或 \"systemd-resolved\" 服務佔用。請閱讀有關如何解決這個的<0>用法說明</0>。",
|
"port_53_faq_link": "連接埠 53 常被 \"DNSStubListener\" 或 \"systemd-resolved\" 服務佔用。請閱讀有關如何解決這個的<0>用法說明</0>。",
|
||||||
"adg_will_drop_dns_queries": "AdGuard Home 將持續排除來自此用戶端之所有的 DNS 查詢。",
|
"adg_will_drop_dns_queries": "AdGuard Home 將持續排除來自此用戶端之所有的 DNS 查詢。",
|
||||||
"client_not_in_allowed_clients": "因為該用戶端不在\"已允許的用戶端\"清單中,它未被允許。",
|
"client_not_in_allowed_clients": "該用戶端未被允許,因為它不在\"已允許的用戶端\"清單中。",
|
||||||
"experimental": "實驗性的"
|
"experimental": "實驗性的"
|
||||||
}
|
}
|
@ -287,7 +287,7 @@ export const getDnsStatus = () => async (dispatch) => {
|
|||||||
try {
|
try {
|
||||||
checkStatus(handleRequestSuccess, handleRequestError);
|
checkStatus(handleRequestSuccess, handleRequestError);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
handleRequestError(error);
|
handleRequestError();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -8,11 +8,11 @@ import {
|
|||||||
import { addErrorToast, addSuccessToast } from './toasts';
|
import { addErrorToast, addSuccessToast } from './toasts';
|
||||||
|
|
||||||
const enrichWithClientInfo = async (logs) => {
|
const enrichWithClientInfo = async (logs) => {
|
||||||
const clientsParams = getParamsForClientsSearch(logs, 'client');
|
const clientsParams = getParamsForClientsSearch(logs, 'client', 'client_id');
|
||||||
|
|
||||||
if (Object.keys(clientsParams).length > 0) {
|
if (Object.keys(clientsParams).length > 0) {
|
||||||
const clients = await apiClient.findClients(clientsParams);
|
const clients = await apiClient.findClients(clientsParams);
|
||||||
return addClientInfo(logs, clients, 'client');
|
return addClientInfo(logs, clients, 'client_id', 'client');
|
||||||
}
|
}
|
||||||
|
|
||||||
return logs;
|
return logs;
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
:root {
|
:root {
|
||||||
--yellow-pale: rgba(247, 181, 0, 0.1);
|
--yellow-pale: rgba(247, 181, 0, 0.1);
|
||||||
--green79: #67B279;
|
--green79: #67b279;
|
||||||
--gray-a5: #a5a5a5;
|
--gray-a5: #a5a5a5;
|
||||||
--gray-d8: #d8d8d8;
|
--gray-d8: #d8d8d8;
|
||||||
--gray-f3: #F3F3F3;
|
--gray-f3: #f3f3f3;
|
||||||
--font-family-monospace: Monaco, Menlo, "Ubuntu Mono", Consolas, source-code-pro, monospace;
|
--font-family-monospace: Monaco, Menlo, "Ubuntu Mono", Consolas, source-code-pro, monospace;
|
||||||
|
--font-size-disable-autozoom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -13,6 +14,13 @@ body {
|
|||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Disable Auto Zoom in Input - Safari on iPhone https://stackoverflow.com/a/6394497 */
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
input, select, textarea {
|
||||||
|
font-size: var(--font-size-disable-autozoom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.status {
|
.status {
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
}
|
}
|
||||||
@ -71,3 +79,11 @@ body {
|
|||||||
.button-action--active {
|
.button-action--active {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ReactModal__Body--open {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.btn-success.disabled {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
@ -9,7 +9,7 @@ import Card from '../ui/Card';
|
|||||||
import Cell from '../ui/Cell';
|
import Cell from '../ui/Cell';
|
||||||
|
|
||||||
import { getPercent, sortIp } from '../../helpers/helpers';
|
import { getPercent, sortIp } from '../../helpers/helpers';
|
||||||
import { BLOCK_ACTIONS, STATUS_COLORS } from '../../helpers/constants';
|
import { BLOCK_ACTIONS, R_CLIENT_ID, STATUS_COLORS } from '../../helpers/constants';
|
||||||
import { toggleClientBlock } from '../../actions/access';
|
import { toggleClientBlock } from '../../actions/access';
|
||||||
import { renderFormattedClientCell } from '../../helpers/renderFormattedClientCell';
|
import { renderFormattedClientCell } from '../../helpers/renderFormattedClientCell';
|
||||||
import { getStats } from '../../actions/stats';
|
import { getStats } from '../../actions/stats';
|
||||||
@ -35,6 +35,10 @@ const CountCell = (row) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const renderBlockingButton = (ip, disallowed, disallowed_rule) => {
|
const renderBlockingButton = (ip, disallowed, disallowed_rule) => {
|
||||||
|
if (R_CLIENT_ID.test(ip)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const processingSet = useSelector((state) => state.access.processingSet);
|
const processingSet = useSelector((state) => state.access.processingSet);
|
||||||
@ -59,17 +63,19 @@ const renderBlockingButton = (ip, disallowed, disallowed_rule) => {
|
|||||||
const text = disallowed ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
|
const text = disallowed ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
|
||||||
|
|
||||||
const isNotInAllowedList = disallowed && disallowed_rule === '';
|
const isNotInAllowedList = disallowed && disallowed_rule === '';
|
||||||
return <div className="table__action pl-4">
|
return (
|
||||||
<button
|
<div className="table__action pl-4">
|
||||||
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className={buttonClass}
|
className={buttonClass}
|
||||||
onClick={isNotInAllowedList ? undefined : onClick}
|
onClick={isNotInAllowedList ? undefined : onClick}
|
||||||
disabled={isNotInAllowedList || processingSet}
|
disabled={isNotInAllowedList || processingSet}
|
||||||
title={t(isNotInAllowedList ? 'client_not_in_allowed_clients' : text)}
|
title={t(isNotInAllowedList ? 'client_not_in_allowed_clients' : text)}
|
||||||
>
|
>
|
||||||
<Trans>{text}</Trans>
|
<Trans>{text}</Trans>
|
||||||
</button>
|
</button>
|
||||||
</div>;
|
</div>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const ClientCell = (row) => {
|
const ClientCell = (row) => {
|
||||||
@ -90,13 +96,14 @@ const Clients = ({
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const topClients = useSelector((state) => state.stats.topClients, shallowEqual);
|
const topClients = useSelector((state) => state.stats.topClients, shallowEqual);
|
||||||
|
|
||||||
return <Card
|
return (
|
||||||
|
<Card
|
||||||
title={t('top_clients')}
|
title={t('top_clients')}
|
||||||
subtitle={subtitle}
|
subtitle={subtitle}
|
||||||
bodyType="card-table"
|
bodyType="card-table"
|
||||||
refresh={refreshButton}
|
refresh={refreshButton}
|
||||||
>
|
>
|
||||||
<ReactTable
|
<ReactTable
|
||||||
data={topClients.map(({
|
data={topClients.map(({
|
||||||
name: ip, count, info, blocked,
|
name: ip, count, info, blocked,
|
||||||
}) => ({
|
}) => ({
|
||||||
@ -107,7 +114,7 @@ const Clients = ({
|
|||||||
}))}
|
}))}
|
||||||
columns={[
|
columns={[
|
||||||
{
|
{
|
||||||
Header: 'IP',
|
Header: <Trans>client_table_header</Trans>,
|
||||||
accessor: 'ip',
|
accessor: 'ip',
|
||||||
sortMethod: sortIp,
|
sortMethod: sortIp,
|
||||||
Cell: ClientCell,
|
Cell: ClientCell,
|
||||||
@ -134,8 +141,9 @@ const Clients = ({
|
|||||||
|
|
||||||
return disallowed ? { className: 'logs__row--red' } : {};
|
return disallowed ? { className: 'logs__row--red' } : {};
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Card>;
|
</Card>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
Clients.propTypes = {
|
Clients.propTypes = {
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dashboard-title__button{
|
.dashboard-title__button {
|
||||||
margin: 0 0.5rem;
|
margin: 0 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@
|
|||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dashboard-title__button{
|
.dashboard-title__button {
|
||||||
margin: 0.5rem 0;
|
margin: 0.5rem 0;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ const Dashboard = ({
|
|||||||
const refreshButton = <button
|
const refreshButton = <button
|
||||||
type="button"
|
type="button"
|
||||||
className="btn btn-icon btn-outline-primary btn-sm"
|
className="btn btn-icon btn-outline-primary btn-sm"
|
||||||
|
title={t('refresh_btn')}
|
||||||
onClick={() => getAllStats()}
|
onClick={() => getAllStats()}
|
||||||
>
|
>
|
||||||
<svg className="icons">
|
<svg className="icons">
|
||||||
|
@ -12,7 +12,7 @@ import {
|
|||||||
checkSafeSearch,
|
checkSafeSearch,
|
||||||
checkSafeBrowsing,
|
checkSafeBrowsing,
|
||||||
checkParental,
|
checkParental,
|
||||||
getFilterName,
|
getRulesToFilterList,
|
||||||
} from '../../../helpers/helpers';
|
} from '../../../helpers/helpers';
|
||||||
import { BLOCK_ACTIONS, FILTERED, FILTERED_STATUS } from '../../../helpers/constants';
|
import { BLOCK_ACTIONS, FILTERED, FILTERED_STATUS } from '../../../helpers/constants';
|
||||||
import { toggleBlocking } from '../../../actions';
|
import { toggleBlocking } from '../../../actions';
|
||||||
@ -41,32 +41,27 @@ const renderBlockingButton = (isFiltered, domain) => {
|
|||||||
</button>;
|
</button>;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getTitle = (reason) => {
|
const getTitle = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const filters = useSelector((state) => state.filtering.filters, shallowEqual);
|
const filters = useSelector((state) => state.filtering.filters, shallowEqual);
|
||||||
const whitelistFilters = useSelector((state) => state.filtering.whitelistFilters, shallowEqual);
|
const whitelistFilters = useSelector((state) => state.filtering.whitelistFilters, shallowEqual);
|
||||||
const filter_id = useSelector((state) => state.filtering.check.filter_id);
|
const rules = useSelector((state) => state.filtering.check.rules, shallowEqual);
|
||||||
|
const reason = useSelector((state) => state.filtering.check.reason);
|
||||||
const filterName = getFilterName(
|
|
||||||
filters,
|
|
||||||
whitelistFilters,
|
|
||||||
filter_id,
|
|
||||||
'filtered_custom_rules',
|
|
||||||
(filter) => (filter?.name ? t('query_log_filtered', { filter: filter.name }) : ''),
|
|
||||||
);
|
|
||||||
|
|
||||||
const getReasonFiltered = (reason) => {
|
const getReasonFiltered = (reason) => {
|
||||||
const filterKey = reason.replace(FILTERED, '');
|
const filterKey = reason.replace(FILTERED, '');
|
||||||
return i18next.t('query_log_filtered', { filter: filterKey });
|
return i18next.t('query_log_filtered', { filter: filterKey });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const ruleAndFilterNames = getRulesToFilterList(rules, filters, whitelistFilters);
|
||||||
|
|
||||||
const REASON_TO_TITLE_MAP = {
|
const REASON_TO_TITLE_MAP = {
|
||||||
[FILTERED_STATUS.NOT_FILTERED_NOT_FOUND]: t('check_not_found'),
|
[FILTERED_STATUS.NOT_FILTERED_NOT_FOUND]: t('check_not_found'),
|
||||||
[FILTERED_STATUS.REWRITE]: t('rewrite_applied'),
|
[FILTERED_STATUS.REWRITE]: t('rewrite_applied'),
|
||||||
[FILTERED_STATUS.REWRITE_HOSTS]: t('rewrite_hosts_applied'),
|
[FILTERED_STATUS.REWRITE_HOSTS]: t('rewrite_hosts_applied'),
|
||||||
[FILTERED_STATUS.FILTERED_BLACK_LIST]: filterName,
|
[FILTERED_STATUS.FILTERED_BLACK_LIST]: ruleAndFilterNames,
|
||||||
[FILTERED_STATUS.NOT_FILTERED_WHITE_LIST]: filterName,
|
[FILTERED_STATUS.NOT_FILTERED_WHITE_LIST]: ruleAndFilterNames,
|
||||||
[FILTERED_STATUS.FILTERED_SAFE_SEARCH]: getReasonFiltered(reason),
|
[FILTERED_STATUS.FILTERED_SAFE_SEARCH]: getReasonFiltered(reason),
|
||||||
[FILTERED_STATUS.FILTERED_SAFE_BROWSING]: getReasonFiltered(reason),
|
[FILTERED_STATUS.FILTERED_SAFE_BROWSING]: getReasonFiltered(reason),
|
||||||
[FILTERED_STATUS.FILTERED_PARENTAL]: getReasonFiltered(reason),
|
[FILTERED_STATUS.FILTERED_PARENTAL]: getReasonFiltered(reason),
|
||||||
@ -78,7 +73,11 @@ const getTitle = (reason) => {
|
|||||||
|
|
||||||
return <>
|
return <>
|
||||||
<div>{t('check_reason', { reason })}</div>
|
<div>{t('check_reason', { reason })}</div>
|
||||||
<div>{filterName}</div>
|
<div>
|
||||||
|
{t('rule_label')}:
|
||||||
|
|
||||||
|
{ruleAndFilterNames}
|
||||||
|
</div>
|
||||||
</>;
|
</>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -86,14 +85,13 @@ const Info = () => {
|
|||||||
const {
|
const {
|
||||||
hostname,
|
hostname,
|
||||||
reason,
|
reason,
|
||||||
rule,
|
|
||||||
service_name,
|
service_name,
|
||||||
cname,
|
cname,
|
||||||
ip_addrs,
|
ip_addrs,
|
||||||
} = useSelector((state) => state.filtering.check, shallowEqual);
|
} = useSelector((state) => state.filtering.check, shallowEqual);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const title = getTitle(reason);
|
const title = getTitle();
|
||||||
|
|
||||||
const className = classNames('card mb-0 p-3', {
|
const className = classNames('card mb-0 p-3', {
|
||||||
'logs__row--red': checkFiltered(reason),
|
'logs__row--red': checkFiltered(reason),
|
||||||
@ -112,7 +110,6 @@ const Info = () => {
|
|||||||
<div>{title}</div>
|
<div>{title}</div>
|
||||||
{!onlyFiltered
|
{!onlyFiltered
|
||||||
&& <>
|
&& <>
|
||||||
{rule && <div>{t('check_rule', { rule })}</div>}
|
|
||||||
{service_name && <div>{t('check_service', { service: service_name })}</div>}
|
{service_name && <div>{t('check_service', { service: service_name })}</div>}
|
||||||
{cname && <div>{t('check_cname', { cname })}</div>}
|
{cname && <div>{t('check_cname', { cname })}</div>}
|
||||||
{ip_addrs && <div>{t('check_ip', { ip: ip_addrs.join(', ') })}</div>}
|
{ip_addrs && <div>{t('check_ip', { ip: ip_addrs.join(', ') })}</div>}
|
||||||
|
@ -46,7 +46,7 @@ const Header = () => {
|
|||||||
<div className="header__column">
|
<div className="header__column">
|
||||||
<div className="d-flex align-items-center">
|
<div className="d-flex align-items-center">
|
||||||
<Link to="/" className="nav-link pl-0 pr-1">
|
<Link to="/" className="nav-link pl-0 pr-1">
|
||||||
<img src={logo} alt="" className="header-brand-img" />
|
<img src={logo} alt="AdGuard Home logo" className="header-brand-img" />
|
||||||
</Link>
|
</Link>
|
||||||
{!processing && isCoreRunning
|
{!processing && isCoreRunning
|
||||||
&& <span className={badgeClass}
|
&& <span className={badgeClass}
|
||||||
|
@ -16,6 +16,7 @@ import { updateLogs } from '../../../actions/queryLogs';
|
|||||||
|
|
||||||
const ClientCell = ({
|
const ClientCell = ({
|
||||||
client,
|
client,
|
||||||
|
client_id,
|
||||||
domain,
|
domain,
|
||||||
info,
|
info,
|
||||||
info: {
|
info: {
|
||||||
@ -33,12 +34,14 @@ const ClientCell = ({
|
|||||||
const autoClient = autoClients.find((autoClient) => autoClient.name === client);
|
const autoClient = autoClients.find((autoClient) => autoClient.name === client);
|
||||||
const source = autoClient?.source;
|
const source = autoClient?.source;
|
||||||
const whoisAvailable = whois_info && Object.keys(whois_info).length > 0;
|
const whoisAvailable = whois_info && Object.keys(whois_info).length > 0;
|
||||||
|
const clientName = name || client_id;
|
||||||
|
const clientInfo = { ...info, name: clientName };
|
||||||
|
|
||||||
const id = nanoid();
|
const id = nanoid();
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
address: client,
|
address: client,
|
||||||
name,
|
name: clientName,
|
||||||
country: whois_info?.country,
|
country: whois_info?.country,
|
||||||
city: whois_info?.city,
|
city: whois_info?.city,
|
||||||
network: whois_info?.orgname,
|
network: whois_info?.orgname,
|
||||||
@ -99,13 +102,20 @@ const ClientCell = ({
|
|||||||
if (options.length === 0) {
|
if (options.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return <>{options.map(({ name, onClick, disabled }) => <button
|
return (
|
||||||
key={name}
|
<>
|
||||||
className="button-action--arrow-option px-4 py-2"
|
{options.map(({ name, onClick, disabled }) => (
|
||||||
onClick={onClick}
|
<button
|
||||||
disabled={disabled}
|
key={name}
|
||||||
>{t(name)}
|
className="button-action--arrow-option px-4 py-2"
|
||||||
</button>)}</>;
|
onClick={onClick}
|
||||||
|
disabled={disabled}
|
||||||
|
>
|
||||||
|
{t(name)}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const content = getOptions(BUTTON_OPTIONS);
|
const content = getOptions(BUTTON_OPTIONS);
|
||||||
@ -125,45 +135,70 @@ const ClientCell = ({
|
|||||||
'button-action__container--detailed': isDetailed,
|
'button-action__container--detailed': isDetailed,
|
||||||
});
|
});
|
||||||
|
|
||||||
return <div className={containerClass}>
|
return (
|
||||||
<button type="button"
|
<div className={containerClass}>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
className={buttonClass}
|
className={buttonClass}
|
||||||
onClick={onClick}
|
onClick={onClick}
|
||||||
disabled={processingRules}
|
disabled={processingRules}
|
||||||
>
|
>
|
||||||
{t(buttonType)}
|
{t(buttonType)}
|
||||||
</button>
|
</button>
|
||||||
{content && <button className={buttonArrowClass} disabled={processingRules}>
|
{content && (
|
||||||
<IconTooltip
|
<button className={buttonArrowClass} disabled={processingRules}>
|
||||||
className='h-100'
|
<IconTooltip
|
||||||
tooltipClass='button-action--arrow-option-container'
|
className="h-100"
|
||||||
xlinkHref='chevron-down'
|
tooltipClass="button-action--arrow-option-container"
|
||||||
triggerClass='button-action--icon'
|
xlinkHref="chevron-down"
|
||||||
content={content} placement="bottom-end" trigger="click"
|
triggerClass="button-action--icon"
|
||||||
onVisibilityChange={setOptionsOpened}
|
content={content}
|
||||||
/>
|
placement="bottom-end"
|
||||||
</button>}
|
trigger="click"
|
||||||
</div>;
|
onVisibilityChange={setOptionsOpened}
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
return <div className="o-hidden h-100 logs__cell logs__cell--client" role="gridcell">
|
return (
|
||||||
<IconTooltip className={hintClass} columnClass='grid grid--limited' tooltipClass='px-5 pb-5 pt-4 mw-75'
|
<div
|
||||||
xlinkHref='question' contentItemClass="contentItemClass" title="client_details"
|
className="o-hidden h-100 logs__cell logs__cell--client"
|
||||||
content={processedData} placement="bottom" />
|
role="gridcell"
|
||||||
<div className={nameClass}>
|
>
|
||||||
<div data-tip={true} data-for={id}>
|
<IconTooltip
|
||||||
{renderFormattedClientCell(client, info, isDetailed, true)}
|
className={hintClass}
|
||||||
|
columnClass="grid grid--limited"
|
||||||
|
tooltipClass="px-5 pb-5 pt-4"
|
||||||
|
xlinkHref="question"
|
||||||
|
contentItemClass="text-truncate key-colon o-hidden"
|
||||||
|
title="client_details"
|
||||||
|
content={processedData}
|
||||||
|
placement="bottom"
|
||||||
|
/>
|
||||||
|
<div className={nameClass}>
|
||||||
|
<div data-tip={true} data-for={id}>
|
||||||
|
{renderFormattedClientCell(client, clientInfo, isDetailed, true)}
|
||||||
|
</div>
|
||||||
|
{isDetailed && clientName && !whoisAvailable && (
|
||||||
|
<div
|
||||||
|
className="detailed-info d-none d-sm-block logs__text"
|
||||||
|
title={clientName}
|
||||||
|
>
|
||||||
|
{clientName}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
{isDetailed && name && !whoisAvailable
|
{renderBlockingButton(isFiltered, domain)}
|
||||||
&& <div className="detailed-info d-none d-sm-block logs__text"
|
|
||||||
title={name}>{name}</div>}
|
|
||||||
</div>
|
</div>
|
||||||
{renderBlockingButton(isFiltered, domain)}
|
);
|
||||||
</div>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ClientCell.propTypes = {
|
ClientCell.propTypes = {
|
||||||
client: propTypes.string.isRequired,
|
client: propTypes.string.isRequired,
|
||||||
|
client_id: propTypes.string,
|
||||||
domain: propTypes.string.isRequired,
|
domain: propTypes.string.isRequired,
|
||||||
info: propTypes.oneOfType([
|
info: propTypes.oneOfType([
|
||||||
propTypes.string,
|
propTypes.string,
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.grid--title {
|
.grid--title {
|
||||||
font-weight: bold;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.grid--title:not(:first-child) {
|
.grid--title:not(:first-child) {
|
||||||
@ -65,12 +65,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.grid .key-colon, .grid .title--border {
|
.grid .key-colon, .grid .title--border {
|
||||||
font-weight: bold;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.grid .key-colon:nth-child(odd)::after {
|
.grid .key-colon:nth-child(odd)::after {
|
||||||
content: ':';
|
content: ":";
|
||||||
}
|
}
|
||||||
|
|
||||||
.grid__one-row {
|
.grid__one-row {
|
||||||
@ -95,7 +95,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.title--border:before {
|
.title--border:before {
|
||||||
content: '';
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
left: 0;
|
||||||
border-top: 0.5px solid var(--gray-d8) !important;
|
border-top: 0.5px solid var(--gray-d8) !important;
|
||||||
|
@ -4,8 +4,9 @@ import classNames from 'classnames';
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import propTypes from 'prop-types';
|
import propTypes from 'prop-types';
|
||||||
import {
|
import {
|
||||||
|
getRulesToFilterList,
|
||||||
formatElapsedMs,
|
formatElapsedMs,
|
||||||
getFilterName,
|
getFilterNames,
|
||||||
getServiceName,
|
getServiceName,
|
||||||
} from '../../../helpers/helpers';
|
} from '../../../helpers/helpers';
|
||||||
import { FILTERED_STATUS, FILTERED_STATUS_TO_META_MAP } from '../../../helpers/constants';
|
import { FILTERED_STATUS, FILTERED_STATUS_TO_META_MAP } from '../../../helpers/constants';
|
||||||
@ -18,8 +19,7 @@ const ResponseCell = ({
|
|||||||
response,
|
response,
|
||||||
status,
|
status,
|
||||||
upstream,
|
upstream,
|
||||||
rule,
|
rules,
|
||||||
filterId,
|
|
||||||
service_name,
|
service_name,
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@ -36,7 +36,6 @@ const ResponseCell = ({
|
|||||||
|
|
||||||
const statusLabel = t(isBlockedByResponse ? 'blocked_by_cname_or_ip' : FILTERED_STATUS_TO_META_MAP[reason]?.LABEL || reason);
|
const statusLabel = t(isBlockedByResponse ? 'blocked_by_cname_or_ip' : FILTERED_STATUS_TO_META_MAP[reason]?.LABEL || reason);
|
||||||
const boldStatusLabel = <span className="font-weight-bold">{statusLabel}</span>;
|
const boldStatusLabel = <span className="font-weight-bold">{statusLabel}</span>;
|
||||||
const filter = getFilterName(filters, whitelistFilters, filterId);
|
|
||||||
|
|
||||||
const renderResponses = (responseArr) => {
|
const renderResponses = (responseArr) => {
|
||||||
if (!responseArr || responseArr.length === 0) {
|
if (!responseArr || responseArr.length === 0) {
|
||||||
@ -57,13 +56,17 @@ const ResponseCell = ({
|
|||||||
install_settings_dns: upstream,
|
install_settings_dns: upstream,
|
||||||
elapsed: formattedElapsedMs,
|
elapsed: formattedElapsedMs,
|
||||||
response_code: status,
|
response_code: status,
|
||||||
...(service_name ? { service_name: getServiceName(service_name) } : { filter }),
|
...(service_name
|
||||||
rule_label: rule,
|
&& { service_name: getServiceName(service_name) }
|
||||||
|
),
|
||||||
|
...(rules.length > 0
|
||||||
|
&& { rule_label: getRulesToFilterList(rules, filters, whitelistFilters) }
|
||||||
|
),
|
||||||
response_table_header: renderResponses(response),
|
response_table_header: renderResponses(response),
|
||||||
original_response: renderResponses(originalResponse),
|
original_response: renderResponses(originalResponse),
|
||||||
};
|
};
|
||||||
|
|
||||||
const content = rule
|
const content = rules.length > 0
|
||||||
? Object.entries(COMMON_CONTENT)
|
? Object.entries(COMMON_CONTENT)
|
||||||
: Object.entries({
|
: Object.entries({
|
||||||
...COMMON_CONTENT,
|
...COMMON_CONTENT,
|
||||||
@ -78,7 +81,8 @@ const ResponseCell = ({
|
|||||||
}
|
}
|
||||||
return getServiceName(service_name);
|
return getServiceName(service_name);
|
||||||
case FILTERED_STATUS.FILTERED_BLACK_LIST:
|
case FILTERED_STATUS.FILTERED_BLACK_LIST:
|
||||||
return filter;
|
case FILTERED_STATUS.NOT_FILTERED_WHITE_LIST:
|
||||||
|
return getFilterNames(rules, filters, whitelistFilters).join(', ');
|
||||||
default:
|
default:
|
||||||
return formattedElapsedMs;
|
return formattedElapsedMs;
|
||||||
}
|
}
|
||||||
@ -113,8 +117,10 @@ ResponseCell.propTypes = {
|
|||||||
response: propTypes.array.isRequired,
|
response: propTypes.array.isRequired,
|
||||||
status: propTypes.string.isRequired,
|
status: propTypes.string.isRequired,
|
||||||
upstream: propTypes.string.isRequired,
|
upstream: propTypes.string.isRequired,
|
||||||
rule: propTypes.string,
|
rules: propTypes.arrayOf(propTypes.shape({
|
||||||
filterId: propTypes.number,
|
text: propTypes.string.isRequired,
|
||||||
|
filter_list_id: propTypes.number.isRequired,
|
||||||
|
})),
|
||||||
service_name: propTypes.string,
|
service_name: propTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,11 +6,11 @@ import propTypes from 'prop-types';
|
|||||||
import {
|
import {
|
||||||
captitalizeWords,
|
captitalizeWords,
|
||||||
checkFiltered,
|
checkFiltered,
|
||||||
|
getRulesToFilterList,
|
||||||
formatDateTime,
|
formatDateTime,
|
||||||
formatElapsedMs,
|
formatElapsedMs,
|
||||||
formatTime,
|
formatTime,
|
||||||
getBlockingClientName,
|
getBlockingClientName,
|
||||||
getFilterName,
|
|
||||||
getServiceName,
|
getServiceName,
|
||||||
processContent,
|
processContent,
|
||||||
} from '../../../helpers/helpers';
|
} from '../../../helpers/helpers';
|
||||||
@ -70,8 +70,8 @@ const Row = memo(({
|
|||||||
upstream,
|
upstream,
|
||||||
type,
|
type,
|
||||||
client_proto,
|
client_proto,
|
||||||
filterId,
|
client_id,
|
||||||
rule,
|
rules,
|
||||||
originalResponse,
|
originalResponse,
|
||||||
status,
|
status,
|
||||||
service_name,
|
service_name,
|
||||||
@ -107,8 +107,6 @@ const Row = memo(({
|
|||||||
|
|
||||||
const sourceData = getSourceData(tracker);
|
const sourceData = getSourceData(tracker);
|
||||||
|
|
||||||
const filter = getFilterName(filters, whitelistFilters, filterId);
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
confirmMessage,
|
confirmMessage,
|
||||||
buttonKey: blockingClientKey,
|
buttonKey: blockingClientKey,
|
||||||
@ -172,13 +170,14 @@ const Row = memo(({
|
|||||||
response_details: 'title',
|
response_details: 'title',
|
||||||
install_settings_dns: upstream,
|
install_settings_dns: upstream,
|
||||||
elapsed: formattedElapsedMs,
|
elapsed: formattedElapsedMs,
|
||||||
filter: rule ? filter : null,
|
...(rules.length > 0
|
||||||
rule_label: rule,
|
&& { rule_label: getRulesToFilterList(rules, filters, whitelistFilters) }
|
||||||
|
),
|
||||||
response_table_header: response?.join('\n'),
|
response_table_header: response?.join('\n'),
|
||||||
response_code: status,
|
response_code: status,
|
||||||
client_details: 'title',
|
client_details: 'title',
|
||||||
ip_address: client,
|
ip_address: client,
|
||||||
name: info?.name,
|
name: info?.name || client_id,
|
||||||
country,
|
country,
|
||||||
city,
|
city,
|
||||||
network,
|
network,
|
||||||
@ -235,8 +234,11 @@ Row.propTypes = {
|
|||||||
upstream: propTypes.string.isRequired,
|
upstream: propTypes.string.isRequired,
|
||||||
type: propTypes.string.isRequired,
|
type: propTypes.string.isRequired,
|
||||||
client_proto: propTypes.string.isRequired,
|
client_proto: propTypes.string.isRequired,
|
||||||
filterId: propTypes.number,
|
client_id: propTypes.string,
|
||||||
rule: propTypes.string,
|
rules: propTypes.arrayOf(propTypes.shape({
|
||||||
|
text: propTypes.string.isRequired,
|
||||||
|
filter_list_id: propTypes.number.isRequired,
|
||||||
|
})),
|
||||||
originalResponse: propTypes.array,
|
originalResponse: propTypes.array,
|
||||||
status: propTypes.string.isRequired,
|
status: propTypes.string.isRequired,
|
||||||
service_name: propTypes.string,
|
service_name: propTypes.string,
|
||||||
|
@ -9,21 +9,18 @@
|
|||||||
--size-response: 150;
|
--size-response: 150;
|
||||||
--size-client: 123;
|
--size-client: 123;
|
||||||
--gray-216: rgba(216, 216, 216, 0.23);
|
--gray-216: rgba(216, 216, 216, 0.23);
|
||||||
--gray-4d: #4D4D4D;
|
--gray-4d: #4d4d4d;
|
||||||
--gray-f3: #F3F3F3;
|
--gray-f3: #f3f3f3;
|
||||||
--gray-8: #888;
|
--gray-8: #888;
|
||||||
--gray-3: #333;
|
--gray-3: #333;
|
||||||
--danger: #DF3812;
|
--danger: #df3812;
|
||||||
--white80: rgba(255, 255, 255, 0.8);
|
--white80: rgba(255, 255, 255, 0.8);
|
||||||
|
--btn-block: #c23814;
|
||||||
--btn-block: #C23814;
|
--btn-block-disabled: #e3b3a6;
|
||||||
--btn-block-disabled: #E3B3A6;
|
--btn-block-active: #a62200;
|
||||||
--btn-block-active: #A62200;
|
|
||||||
|
|
||||||
--btn-unblock: #888888;
|
--btn-unblock: #888888;
|
||||||
--btn-unblock-disabled: #D8D8D8;
|
--btn-unblock-disabled: #d8d8d8;
|
||||||
--btn-unblock-active: #4D4D4D;
|
--btn-unblock-active: #4d4d4d;
|
||||||
|
|
||||||
--option-border-radius: 4px;
|
--option-border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +37,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.logs__text--bold {
|
.logs__text--bold {
|
||||||
font-weight: bold;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logs__time {
|
.logs__time {
|
||||||
@ -87,7 +84,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.custom-select__arrow--left {
|
.custom-select__arrow--left {
|
||||||
background: var(--white) url('../ui/svg/chevron-down.svg') no-repeat;
|
background: var(--white) url("../ui/svg/chevron-down.svg") no-repeat;
|
||||||
background-position: 5px 9px;
|
background-position: 5px 9px;
|
||||||
background-size: 22px;
|
background-size: 22px;
|
||||||
}
|
}
|
||||||
@ -167,12 +164,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.logs__refresh {
|
.logs__refresh {
|
||||||
--size: 2.5rem;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 3px;
|
top: 3px;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
||||||
|
--size: 2.5rem;
|
||||||
width: var(--size);
|
width: var(--size);
|
||||||
height: var(--size);
|
height: var(--size);
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@ -360,7 +358,7 @@
|
|||||||
color: var(--gray-4d);
|
color: var(--gray-4d);
|
||||||
background-color: var(--white80);
|
background-color: var(--white80);
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
font-weight: bold;
|
font-weight: 600;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-top: 21rem;
|
padding-top: 21rem;
|
||||||
display: block;
|
display: block;
|
||||||
@ -431,3 +429,13 @@
|
|||||||
margin-right: 1px;
|
margin-right: 1px;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.filteringRules__rule {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filteringRules__filter {
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: normal;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
@ -282,7 +282,7 @@ let Form = (props) => {
|
|||||||
<div className="form__desc mt-0">
|
<div className="form__desc mt-0">
|
||||||
<Trans
|
<Trans
|
||||||
components={[
|
components={[
|
||||||
<a href="#dhcp" key="0">
|
<a href="https://github.com/AdguardTeam/AdGuardHome/wiki/Clients#idclient" key="0" target="_blank" rel="noopener noreferrer">
|
||||||
link
|
link
|
||||||
</a>,
|
</a>,
|
||||||
]}
|
]}
|
||||||
|
@ -50,7 +50,7 @@ const CertificateStatus = ({
|
|||||||
{dnsNames && (
|
{dnsNames && (
|
||||||
<li>
|
<li>
|
||||||
<Trans>encryption_hostnames</Trans>:
|
<Trans>encryption_hostnames</Trans>:
|
||||||
{dnsNames}
|
{dnsNames.join(', ')}
|
||||||
</li>
|
</li>
|
||||||
)}
|
)}
|
||||||
</Fragment>
|
</Fragment>
|
||||||
@ -65,7 +65,7 @@ CertificateStatus.propTypes = {
|
|||||||
subject: PropTypes.string,
|
subject: PropTypes.string,
|
||||||
issuer: PropTypes.string,
|
issuer: PropTypes.string,
|
||||||
notAfter: PropTypes.string,
|
notAfter: PropTypes.string,
|
||||||
dnsNames: PropTypes.string,
|
dnsNames: PropTypes.arrayOf(PropTypes.string),
|
||||||
};
|
};
|
||||||
|
|
||||||
export default withTranslation()(CertificateStatus);
|
export default withTranslation()(CertificateStatus);
|
||||||
|
@ -12,7 +12,7 @@ import {
|
|||||||
toNumber,
|
toNumber,
|
||||||
} from '../../../helpers/form';
|
} from '../../../helpers/form';
|
||||||
import {
|
import {
|
||||||
validateIsSafePort, validatePort, validatePortQuic, validatePortTLS,
|
validateServerName, validateIsSafePort, validatePort, validatePortQuic, validatePortTLS,
|
||||||
} from '../../../helpers/validators';
|
} from '../../../helpers/validators';
|
||||||
import i18n from '../../../i18n';
|
import i18n from '../../../i18n';
|
||||||
import KeyStatus from './KeyStatus';
|
import KeyStatus from './KeyStatus';
|
||||||
@ -127,6 +127,7 @@ let Form = (props) => {
|
|||||||
placeholder={t('encryption_server_enter')}
|
placeholder={t('encryption_server_enter')}
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
disabled={!isEnabled}
|
disabled={!isEnabled}
|
||||||
|
validate={validateServerName}
|
||||||
/>
|
/>
|
||||||
<div className="form__desc">
|
<div className="form__desc">
|
||||||
<Trans>encryption_server_desc</Trans>
|
<Trans>encryption_server_desc</Trans>
|
||||||
@ -413,7 +414,7 @@ Form.propTypes = {
|
|||||||
valid_key: PropTypes.bool,
|
valid_key: PropTypes.bool,
|
||||||
valid_cert: PropTypes.bool,
|
valid_cert: PropTypes.bool,
|
||||||
valid_pair: PropTypes.bool,
|
valid_pair: PropTypes.bool,
|
||||||
dns_names: PropTypes.string,
|
dns_names: PropTypes.arrayOf(PropTypes.string),
|
||||||
key_type: PropTypes.string,
|
key_type: PropTypes.string,
|
||||||
issuer: PropTypes.string,
|
issuer: PropTypes.string,
|
||||||
subject: PropTypes.string,
|
subject: PropTypes.string,
|
||||||
|
@ -3,27 +3,12 @@ import PropTypes from 'prop-types';
|
|||||||
import { Trans, useTranslation } from 'react-i18next';
|
import { Trans, useTranslation } from 'react-i18next';
|
||||||
import i18next from 'i18next';
|
import i18next from 'i18next';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import Tabs from './Tabs';
|
|
||||||
import Icons from './Icons';
|
|
||||||
import { getPathWithQueryString } from '../../helpers/helpers';
|
|
||||||
|
|
||||||
const MOBILE_CONFIG_LINKS = {
|
import { MOBILE_CONFIG_LINKS } from '../../../helpers/constants';
|
||||||
DOT: '/apple/dot.mobileconfig',
|
|
||||||
DOH: '/apple/doh.mobileconfig',
|
import Tabs from '../Tabs';
|
||||||
};
|
import Icons from '../Icons';
|
||||||
const renderMobileconfigInfo = ({ label, components, server_name }) => <li key={label}>
|
import MobileConfigForm from './MobileConfigForm';
|
||||||
<Trans components={components}>{label}</Trans>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href={getPathWithQueryString(MOBILE_CONFIG_LINKS.DOT, { host: server_name })}
|
|
||||||
download>{i18next.t('download_mobileconfig_dot')}</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href={getPathWithQueryString(MOBILE_CONFIG_LINKS.DOH, { host: server_name })}
|
|
||||||
download>{i18next.t('download_mobileconfig_doh')}</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>;
|
|
||||||
|
|
||||||
const renderLi = ({ label, components }) => <li key={label}>
|
const renderLi = ({ label, components }) => <li key={label}>
|
||||||
<Trans components={components?.map((props) => {
|
<Trans components={components?.map((props) => {
|
||||||
@ -41,49 +26,8 @@ const renderLi = ({ label, components }) => <li key={label}>
|
|||||||
</Trans>
|
</Trans>
|
||||||
</li>;
|
</li>;
|
||||||
|
|
||||||
const getDnsPrivacyList = (server_name) => {
|
const getDnsPrivacyList = () => [
|
||||||
const iosList = [
|
{
|
||||||
{
|
|
||||||
label: 'setup_dns_privacy_ios_2',
|
|
||||||
components: [
|
|
||||||
{
|
|
||||||
key: 0,
|
|
||||||
href: 'https://adguard.com/adguard-ios/overview.html',
|
|
||||||
},
|
|
||||||
<code key="1">text</code>,
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'setup_dns_privacy_ios_1',
|
|
||||||
components: [
|
|
||||||
{
|
|
||||||
key: 0,
|
|
||||||
href: 'https://itunes.apple.com/app/id1452162351',
|
|
||||||
},
|
|
||||||
<code key="1">text</code>,
|
|
||||||
{
|
|
||||||
key: 2,
|
|
||||||
href: 'https://dnscrypt.info/stamps',
|
|
||||||
},
|
|
||||||
|
|
||||||
],
|
|
||||||
}];
|
|
||||||
/* Insert second element if can generate .mobileconfig links */
|
|
||||||
if (server_name) {
|
|
||||||
iosList.splice(1, 0, {
|
|
||||||
label: 'setup_dns_privacy_4',
|
|
||||||
components: {
|
|
||||||
highlight: <code />,
|
|
||||||
},
|
|
||||||
renderComponent: ({ label, components }) => renderMobileconfigInfo({
|
|
||||||
label,
|
|
||||||
components,
|
|
||||||
server_name,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return [{
|
|
||||||
title: 'Android',
|
title: 'Android',
|
||||||
list: [
|
list: [
|
||||||
{
|
{
|
||||||
@ -113,7 +57,32 @@ const getDnsPrivacyList = (server_name) => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'iOS',
|
title: 'iOS',
|
||||||
list: iosList,
|
list: [
|
||||||
|
{
|
||||||
|
label: 'setup_dns_privacy_ios_2',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
key: 0,
|
||||||
|
href: 'https://adguard.com/adguard-ios/overview.html',
|
||||||
|
},
|
||||||
|
<code key="1">text</code>,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'setup_dns_privacy_ios_1',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
key: 0,
|
||||||
|
href: 'https://itunes.apple.com/app/id1452162351',
|
||||||
|
},
|
||||||
|
<code key="1">text</code>,
|
||||||
|
{
|
||||||
|
key: 2,
|
||||||
|
href: 'https://dnscrypt.info/stamps',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'setup_dns_privacy_other_title',
|
title: 'setup_dns_privacy_other_title',
|
||||||
@ -166,20 +135,20 @@ const getDnsPrivacyList = (server_name) => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
};
|
|
||||||
|
|
||||||
const renderDnsPrivacyList = ({ title, list }) => <div className="tab__paragraph" key={title}>
|
const renderDnsPrivacyList = ({ title, list }) => (
|
||||||
<strong><Trans>{title}</Trans></strong>
|
<div className="tab__paragraph" key={title}>
|
||||||
<ul>{list.map(
|
<strong>
|
||||||
({
|
<Trans>{title}</Trans>
|
||||||
label,
|
</strong>
|
||||||
components,
|
<ul>
|
||||||
renderComponent = renderLi,
|
{list.map(({ label, components, renderComponent = renderLi }) => (
|
||||||
}) => renderComponent({ label, components }),
|
renderComponent({ label, components })
|
||||||
)}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
</div>;
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
const getTabs = ({
|
const getTabs = ({
|
||||||
tlsAddress,
|
tlsAddress,
|
||||||
@ -267,8 +236,8 @@ const getTabs = ({
|
|||||||
</Trans>
|
</Trans>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{showDnsPrivacyNotice
|
{showDnsPrivacyNotice ? (
|
||||||
? <div className="tab__paragraph">
|
<div className="tab__paragraph">
|
||||||
<Trans
|
<Trans
|
||||||
components={[
|
components={[
|
||||||
<a
|
<a
|
||||||
@ -285,35 +254,64 @@ const getTabs = ({
|
|||||||
setup_dns_notice
|
setup_dns_notice
|
||||||
</Trans>
|
</Trans>
|
||||||
</div>
|
</div>
|
||||||
: <>
|
) : (
|
||||||
|
<>
|
||||||
<div className="tab__paragraph">
|
<div className="tab__paragraph">
|
||||||
<Trans components={[<p key="0">text</p>]}>
|
<Trans components={[<p key="0">text</p>]}>
|
||||||
setup_dns_privacy_3
|
setup_dns_privacy_3
|
||||||
</Trans>
|
</Trans>
|
||||||
</div>
|
</div>
|
||||||
{getDnsPrivacyList(server_name).map(renderDnsPrivacyList)}
|
{getDnsPrivacyList().map(renderDnsPrivacyList)}
|
||||||
</>}
|
<div>
|
||||||
|
<strong>
|
||||||
|
<Trans>
|
||||||
|
setup_dns_privacy_ioc_mac
|
||||||
|
</Trans>
|
||||||
|
</strong>
|
||||||
|
</div>
|
||||||
|
<div className="mb-3">
|
||||||
|
<Trans components={{ highlight: <code /> }}>
|
||||||
|
setup_dns_privacy_4
|
||||||
|
</Trans>
|
||||||
|
</div>
|
||||||
|
<MobileConfigForm
|
||||||
|
initialValues={{
|
||||||
|
host: server_name,
|
||||||
|
clientId: '',
|
||||||
|
protocol: MOBILE_CONFIG_LINKS.DOH,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>;
|
</div>;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const renderContent = ({ title, list, getTitle }) => <div key={title} label={i18next.t(title)}>
|
const renderContent = ({ title, list, getTitle }) => (
|
||||||
<div className="tab__title">{i18next.t(title)}</div>
|
<div key={title} label={i18next.t(title)}>
|
||||||
<div className="tab__text">
|
<div className="tab__title">
|
||||||
{getTitle?.()}
|
{i18next.t(title)}
|
||||||
{list
|
</div>
|
||||||
&& <ol>{list.map((item) => <li key={item}>
|
<div className="tab__text">
|
||||||
<Trans>{item}</Trans>
|
{getTitle?.()}
|
||||||
</li>)}
|
{list && (
|
||||||
</ol>}
|
<ol>
|
||||||
|
{list.map((item) => (
|
||||||
|
<li key={item}>
|
||||||
|
<Trans>{item}</Trans>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ol>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>;
|
);
|
||||||
|
|
||||||
const Guide = ({ dnsAddresses }) => {
|
const Guide = ({ dnsAddresses }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const server_name = useSelector((state) => state.encryption.server_name);
|
const server_name = useSelector((state) => state.encryption?.server_name);
|
||||||
const tlsAddress = dnsAddresses?.filter((item) => item.includes('tls://')) ?? '';
|
const tlsAddress = dnsAddresses?.filter((item) => item.includes('tls://')) ?? '';
|
||||||
const httpsAddress = dnsAddresses?.filter((item) => item.includes('https://')) ?? '';
|
const httpsAddress = dnsAddresses?.filter((item) => item.includes('https://')) ?? '';
|
||||||
const showDnsPrivacyNotice = httpsAddress.length < 1 && tlsAddress.length < 1;
|
const showDnsPrivacyNotice = httpsAddress.length < 1 && tlsAddress.length < 1;
|
||||||
@ -332,9 +330,14 @@ const Guide = ({ dnsAddresses }) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
<Tabs
|
||||||
|
tabs={tabs}
|
||||||
|
activeTabLabel={activeTabLabel}
|
||||||
|
setActiveTabLabel={setActiveTabLabel}
|
||||||
|
>
|
||||||
|
{activeTab}
|
||||||
|
</Tabs>
|
||||||
<Icons />
|
<Icons />
|
||||||
<Tabs tabs={tabs} activeTabLabel={activeTabLabel}
|
|
||||||
setActiveTabLabel={setActiveTabLabel}>{activeTab}</Tabs>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@ -364,6 +367,4 @@ renderLi.propTypes = {
|
|||||||
components: PropTypes.string,
|
components: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
renderMobileconfigInfo.propTypes = renderLi.propTypes;
|
|
||||||
|
|
||||||
export default Guide;
|
export default Guide;
|
131
client/src/components/ui/Guide/MobileConfigForm.js
Normal file
131
client/src/components/ui/Guide/MobileConfigForm.js
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { Trans } from 'react-i18next';
|
||||||
|
import { useSelector } from 'react-redux';
|
||||||
|
import { Field, reduxForm } from 'redux-form';
|
||||||
|
import i18next from 'i18next';
|
||||||
|
import cn from 'classnames';
|
||||||
|
|
||||||
|
import { getPathWithQueryString } from '../../../helpers/helpers';
|
||||||
|
import { FORM_NAME, MOBILE_CONFIG_LINKS } from '../../../helpers/constants';
|
||||||
|
import {
|
||||||
|
renderInputField,
|
||||||
|
renderSelectField,
|
||||||
|
} from '../../../helpers/form';
|
||||||
|
import {
|
||||||
|
validateClientId,
|
||||||
|
validateServerName,
|
||||||
|
} from '../../../helpers/validators';
|
||||||
|
|
||||||
|
const getDownloadLink = (host, clientId, protocol, invalid) => {
|
||||||
|
if (!host || invalid) {
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="btn btn-success btn-standard btn-large disabled"
|
||||||
|
>
|
||||||
|
<Trans>download_mobileconfig</Trans>
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const linkParams = { host };
|
||||||
|
|
||||||
|
if (clientId) {
|
||||||
|
linkParams.client_id = clientId;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<a
|
||||||
|
href={getPathWithQueryString(protocol, linkParams)}
|
||||||
|
className={cn('btn btn-success btn-standard btn-large')}
|
||||||
|
download
|
||||||
|
>
|
||||||
|
<Trans>download_mobileconfig</Trans>
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const MobileConfigForm = ({ invalid }) => {
|
||||||
|
const formValues = useSelector((state) => state.form[FORM_NAME.MOBILE_CONFIG]?.values);
|
||||||
|
|
||||||
|
if (!formValues) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { host, clientId, protocol } = formValues;
|
||||||
|
|
||||||
|
const githubLink = (
|
||||||
|
<a
|
||||||
|
href="https://github.com/AdguardTeam/AdGuardHome/wiki/Clients#idclient"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
text
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<form onSubmit={(e) => e.preventDefault()}>
|
||||||
|
<div>
|
||||||
|
<div className="form__group form__group--settings">
|
||||||
|
<label htmlFor="host" className="form__label">
|
||||||
|
{i18next.t('dhcp_table_hostname')}
|
||||||
|
</label>
|
||||||
|
<Field
|
||||||
|
name="host"
|
||||||
|
type="text"
|
||||||
|
component={renderInputField}
|
||||||
|
className="form-control"
|
||||||
|
placeholder={i18next.t('form_enter_hostname')}
|
||||||
|
validate={validateServerName}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="form__group form__group--settings">
|
||||||
|
<label htmlFor="clientId" className="form__label form__label--with-desc">
|
||||||
|
{i18next.t('client_id')}
|
||||||
|
</label>
|
||||||
|
<div className="form__desc form__desc--top">
|
||||||
|
<Trans components={{ a: githubLink }}>
|
||||||
|
client_id_desc
|
||||||
|
</Trans>
|
||||||
|
</div>
|
||||||
|
<Field
|
||||||
|
name="clientId"
|
||||||
|
type="text"
|
||||||
|
component={renderInputField}
|
||||||
|
className="form-control"
|
||||||
|
placeholder={i18next.t('client_id_placeholder')}
|
||||||
|
validate={validateClientId}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="form__group form__group--settings">
|
||||||
|
<label htmlFor="protocol" className="form__label">
|
||||||
|
{i18next.t('protocol')}
|
||||||
|
</label>
|
||||||
|
<Field
|
||||||
|
name="protocol"
|
||||||
|
type="text"
|
||||||
|
component={renderSelectField}
|
||||||
|
className="form-control"
|
||||||
|
>
|
||||||
|
<option value={MOBILE_CONFIG_LINKS.DOT}>
|
||||||
|
{i18next.t('dns_over_tls')}
|
||||||
|
</option>
|
||||||
|
<option value={MOBILE_CONFIG_LINKS.DOH}>
|
||||||
|
{i18next.t('dns_over_https')}
|
||||||
|
</option>
|
||||||
|
</Field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{getDownloadLink(host, clientId, protocol, invalid)}
|
||||||
|
</form>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
MobileConfigForm.propTypes = {
|
||||||
|
invalid: PropTypes.bool.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default reduxForm({ form: FORM_NAME.MOBILE_CONFIG })(MobileConfigForm);
|
1
client/src/components/ui/Guide/index.js
Normal file
1
client/src/components/ui/Guide/index.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { default } from './Guide';
|
@ -6,18 +6,21 @@
|
|||||||
|
|
||||||
.icon--24 {
|
.icon--24 {
|
||||||
--size: 1.5rem;
|
--size: 1.5rem;
|
||||||
|
|
||||||
width: var(--size);
|
width: var(--size);
|
||||||
height: var(--size);
|
height: var(--size);
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon--20 {
|
.icon--20 {
|
||||||
--size: 1.25rem;
|
--size: 1.25rem;
|
||||||
|
|
||||||
width: var(--size);
|
width: var(--size);
|
||||||
height: var(--size);
|
height: var(--size);
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon--18 {
|
.icon--18 {
|
||||||
--size: 1.125rem;
|
--size: 1.125rem;
|
||||||
|
|
||||||
width: var(--size);
|
width: var(--size);
|
||||||
height: var(--size);
|
height: var(--size);
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
@ -15,7 +15,7 @@
|
|||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
font-size: 0.9375rem;
|
font-size: var(--font-size-disable-autozoom);
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@ export const R_MAC = /^((([a-fA-F0-9][a-fA-F0-9]+[-]){5}|([a-fA-F0-9][a-fA-F0-9]
|
|||||||
|
|
||||||
export const R_CIDR_IPV6 = /^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$/;
|
export const R_CIDR_IPV6 = /^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$/;
|
||||||
|
|
||||||
|
export const R_DOMAIN = /^([a-zA-Z0-9][a-zA-Z0-9-_]*\.)*[a-zA-Z0-9]*[a-zA-Z0-9-_]*[[a-zA-Z0-9]+$/;
|
||||||
|
|
||||||
export const R_PATH_LAST_PART = /\/[^/]*$/;
|
export const R_PATH_LAST_PART = /\/[^/]*$/;
|
||||||
|
|
||||||
// eslint-disable-next-line no-control-regex
|
// eslint-disable-next-line no-control-regex
|
||||||
@ -21,6 +23,8 @@ export const R_UNIX_ABSOLUTE_PATH = /^(\/[^/\x00]+)+$/;
|
|||||||
// eslint-disable-next-line no-control-regex
|
// eslint-disable-next-line no-control-regex
|
||||||
export const R_WIN_ABSOLUTE_PATH = /^([a-zA-Z]:)?(\\|\/)(?:[^\\/:*?"<>|\x00]+\\)*[^\\/:*?"<>|\x00]*$/;
|
export const R_WIN_ABSOLUTE_PATH = /^([a-zA-Z]:)?(\\|\/)(?:[^\\/:*?"<>|\x00]+\\)*[^\\/:*?"<>|\x00]*$/;
|
||||||
|
|
||||||
|
export const R_CLIENT_ID = /^[a-z0-9-]{1,64}$/;
|
||||||
|
|
||||||
export const HTML_PAGES = {
|
export const HTML_PAGES = {
|
||||||
INSTALL: '/install.html',
|
INSTALL: '/install.html',
|
||||||
LOGIN: '/login.html',
|
LOGIN: '/login.html',
|
||||||
@ -196,92 +200,144 @@ export const FILTERS_URLS = {
|
|||||||
|
|
||||||
export const SERVICES = [
|
export const SERVICES = [
|
||||||
{
|
{
|
||||||
id: 'facebook',
|
id: '9gag',
|
||||||
name: 'Facebook',
|
name: '9Gag',
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'whatsapp',
|
|
||||||
name: 'WhatsApp',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'instagram',
|
|
||||||
name: 'Instagram',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'twitter',
|
|
||||||
name: 'Twitter',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'youtube',
|
|
||||||
name: 'YouTube',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'netflix',
|
|
||||||
name: 'Netflix',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'snapchat',
|
|
||||||
name: 'Snapchat',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'twitch',
|
|
||||||
name: 'Twitch',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'discord',
|
|
||||||
name: 'Discord',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'skype',
|
|
||||||
name: 'Skype',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'amazon',
|
id: 'amazon',
|
||||||
name: 'Amazon',
|
name: 'Amazon',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'ebay',
|
|
||||||
name: 'eBay',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'origin',
|
|
||||||
name: 'Origin',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'cloudflare',
|
id: 'cloudflare',
|
||||||
name: 'Cloudflare',
|
name: 'CloudFlare',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'steam',
|
id: 'dailymotion',
|
||||||
name: 'Steam',
|
name: 'Dailymotion',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'discord',
|
||||||
|
name: 'Discord',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'disneyplus',
|
||||||
|
name: 'Disney+',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'ebay',
|
||||||
|
name: 'EBay',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'epic_games',
|
id: 'epic_games',
|
||||||
name: 'Epic Games',
|
name: 'Epic Games',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'facebook',
|
||||||
|
name: 'Facebook',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'hulu',
|
||||||
|
name: 'Hulu',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'imgur',
|
||||||
|
name: 'Imgur',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'instagram',
|
||||||
|
name: 'Instagram',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'mail_ru',
|
||||||
|
name: 'Mail.ru',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'netflix',
|
||||||
|
name: 'Netflix',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'ok',
|
||||||
|
name: 'OK.ru',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'origin',
|
||||||
|
name: 'Origin',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'pinterest',
|
||||||
|
name: 'Pinterest',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'qq',
|
||||||
|
name: 'QQ',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'reddit',
|
id: 'reddit',
|
||||||
name: 'Reddit',
|
name: 'Reddit',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'ok',
|
id: 'skype',
|
||||||
name: 'OK',
|
name: 'Skype',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'vk',
|
id: 'snapchat',
|
||||||
name: 'VK',
|
name: 'Snapchat',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'mail_ru',
|
id: 'spotify',
|
||||||
name: 'mail.ru',
|
name: 'Spotify',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'steam',
|
||||||
|
name: 'Steam',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'telegram',
|
||||||
|
name: 'Telegram',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'tiktok',
|
id: 'tiktok',
|
||||||
name: 'TikTok',
|
name: 'TikTok',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'qq',
|
id: 'tinder',
|
||||||
name: 'QQ',
|
name: 'Tinder',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'twitch',
|
||||||
|
name: 'Twitch',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'twitter',
|
||||||
|
name: 'Twitter',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'viber',
|
||||||
|
name: 'Viber',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'vimeo',
|
||||||
|
name: 'Vimeo',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'vk',
|
||||||
|
name: 'VK.com',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'wechat',
|
||||||
|
name: 'WeChat',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'weibo',
|
||||||
|
name: 'Weibo',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'whatsapp',
|
||||||
|
name: 'WhatsApp',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'youtube',
|
||||||
|
name: 'YouTube',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -339,6 +395,7 @@ export const FILTERED_STATUS = {
|
|||||||
FILTERED_BLOCKED_SERVICE: 'FilteredBlockedService',
|
FILTERED_BLOCKED_SERVICE: 'FilteredBlockedService',
|
||||||
REWRITE: 'Rewrite',
|
REWRITE: 'Rewrite',
|
||||||
REWRITE_HOSTS: 'RewriteEtcHosts',
|
REWRITE_HOSTS: 'RewriteEtcHosts',
|
||||||
|
REWRITE_RULE: 'RewriteRule',
|
||||||
FILTERED_SAFE_SEARCH: 'FilteredSafeSearch',
|
FILTERED_SAFE_SEARCH: 'FilteredSafeSearch',
|
||||||
FILTERED_SAFE_BROWSING: 'FilteredSafeBrowsing',
|
FILTERED_SAFE_BROWSING: 'FilteredSafeBrowsing',
|
||||||
FILTERED_PARENTAL: 'FilteredParental',
|
FILTERED_PARENTAL: 'FilteredParental',
|
||||||
@ -430,6 +487,10 @@ export const FILTERED_STATUS_TO_META_MAP = {
|
|||||||
LABEL: RESPONSE_FILTER.REWRITTEN.LABEL,
|
LABEL: RESPONSE_FILTER.REWRITTEN.LABEL,
|
||||||
COLOR: QUERY_STATUS_COLORS.BLUE,
|
COLOR: QUERY_STATUS_COLORS.BLUE,
|
||||||
},
|
},
|
||||||
|
[FILTERED_STATUS.REWRITE_RULE]: {
|
||||||
|
LABEL: RESPONSE_FILTER.REWRITTEN.LABEL,
|
||||||
|
COLOR: QUERY_STATUS_COLORS.BLUE,
|
||||||
|
},
|
||||||
[FILTERED_STATUS.FILTERED_SAFE_BROWSING]: {
|
[FILTERED_STATUS.FILTERED_SAFE_BROWSING]: {
|
||||||
LABEL: RESPONSE_FILTER.BLOCKED_THREATS.LABEL,
|
LABEL: RESPONSE_FILTER.BLOCKED_THREATS.LABEL,
|
||||||
COLOR: QUERY_STATUS_COLORS.YELLOW,
|
COLOR: QUERY_STATUS_COLORS.YELLOW,
|
||||||
@ -473,6 +534,7 @@ export const BLOCK_ACTIONS = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const SCHEME_TO_PROTOCOL_MAP = {
|
export const SCHEME_TO_PROTOCOL_MAP = {
|
||||||
|
dnscrypt: 'dnscrypt',
|
||||||
doh: 'dns_over_https',
|
doh: 'dns_over_https',
|
||||||
dot: 'dns_over_tls',
|
dot: 'dns_over_tls',
|
||||||
doq: 'dns_over_quic',
|
doq: 'dns_over_quic',
|
||||||
@ -509,6 +571,7 @@ export const FORM_NAME = {
|
|||||||
INSTALL: 'install',
|
INSTALL: 'install',
|
||||||
LOGIN: 'login',
|
LOGIN: 'login',
|
||||||
CACHE: 'cache',
|
CACHE: 'cache',
|
||||||
|
MOBILE_CONFIG: 'mobileConfig',
|
||||||
...DHCP_FORM_NAMES,
|
...DHCP_FORM_NAMES,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -569,6 +632,7 @@ export const TOAST_TIMEOUTS = {
|
|||||||
export const ADDRESS_TYPES = {
|
export const ADDRESS_TYPES = {
|
||||||
IP: 'IP',
|
IP: 'IP',
|
||||||
CIDR: 'CIDR',
|
CIDR: 'CIDR',
|
||||||
|
CLIENT_ID: 'CLIENT_ID',
|
||||||
UNKNOWN: 'UNKNOWN',
|
UNKNOWN: 'UNKNOWN',
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -580,3 +644,8 @@ export const CACHE_CONFIG_FIELDS = {
|
|||||||
|
|
||||||
export const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
|
export const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
|
||||||
export const COMMENT_LINE_DEFAULT_TOKEN = '#';
|
export const COMMENT_LINE_DEFAULT_TOKEN = '#';
|
||||||
|
|
||||||
|
export const MOBILE_CONFIG_LINKS = {
|
||||||
|
DOT: '/apple/dot.mobileconfig',
|
||||||
|
DOH: '/apple/doh.mobileconfig',
|
||||||
|
};
|
||||||
|
@ -54,11 +54,11 @@
|
|||||||
"homepage": "https://github.com/Perflyst/PiHoleBlocklist",
|
"homepage": "https://github.com/Perflyst/PiHoleBlocklist",
|
||||||
"source": "https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV-AGH.txt"
|
"source": "https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV-AGH.txt"
|
||||||
},
|
},
|
||||||
"malwaredomainlist-com-hosts-list": {
|
"windows-spy-blocker" : {
|
||||||
"name": "MalwareDomainList.com Hosts List",
|
"name": "WindowsSpyBlocker - Hosts spy rules",
|
||||||
"categoryId": "security",
|
"categoryId": "general",
|
||||||
"homepage": "https://www.malwaredomainlist.com/",
|
"homepage": "https://github.com/crazy-max/WindowsSpyBlocker",
|
||||||
"source": "https://www.malwaredomainlist.com/hostslist/hosts.txt"
|
"source": "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt"
|
||||||
},
|
},
|
||||||
"spam404": {
|
"spam404": {
|
||||||
"name": "Spam404",
|
"name": "Spam404",
|
||||||
@ -76,7 +76,7 @@
|
|||||||
"name": "The Big List of Hacked Malware Web Sites",
|
"name": "The Big List of Hacked Malware Web Sites",
|
||||||
"categoryId": "security",
|
"categoryId": "security",
|
||||||
"homepage": "https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites",
|
"homepage": "https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites",
|
||||||
"source": "https://raw.githubusercontent.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites/master/hacked-domains.list"
|
"source": "https://raw.githubusercontent.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites/master/hosts"
|
||||||
},
|
},
|
||||||
"scam-blocklist-by-durable-napkin": {
|
"scam-blocklist-by-durable-napkin": {
|
||||||
"name": "Scam Blocklist by DurableNapkin",
|
"name": "Scam Blocklist by DurableNapkin",
|
||||||
@ -84,6 +84,12 @@
|
|||||||
"homepage": "https://github.com/durablenapkin/scamblocklist",
|
"homepage": "https://github.com/durablenapkin/scamblocklist",
|
||||||
"source": "https://raw.githubusercontent.com/durablenapkin/scamblocklist/master/adguard.txt"
|
"source": "https://raw.githubusercontent.com/durablenapkin/scamblocklist/master/adguard.txt"
|
||||||
},
|
},
|
||||||
|
"urlhaus-filter-online": {
|
||||||
|
"name": "Online Malicious URL Blocklist",
|
||||||
|
"categoryId": "security",
|
||||||
|
"homepage": "https://gitlab.com/curben/urlhaus-filter",
|
||||||
|
"source": "https://curben.gitlab.io/malware-filter/urlhaus-filter-agh-online.txt"
|
||||||
|
},
|
||||||
"NOR-dandelion-sprouts-nordiske-filtre": {
|
"NOR-dandelion-sprouts-nordiske-filtre": {
|
||||||
"name": "NOR: Dandelion Sprouts nordiske filtre",
|
"name": "NOR: Dandelion Sprouts nordiske filtre",
|
||||||
"categoryId": "regional",
|
"categoryId": "regional",
|
||||||
@ -126,12 +132,6 @@
|
|||||||
"homepage": "https://filtri-dns.ga/",
|
"homepage": "https://filtri-dns.ga/",
|
||||||
"source": "https://filtri-dns.ga/filtri.txt"
|
"source": "https://filtri-dns.ga/filtri.txt"
|
||||||
},
|
},
|
||||||
"JPN-280blocker": {
|
|
||||||
"name": "JPN: 280blocker adblock domain lists",
|
|
||||||
"categoryId": "regional",
|
|
||||||
"homepage": "https://280blocker.net/",
|
|
||||||
"source": "https://280blocker.net/files/280blocker_domain.txt"
|
|
||||||
},
|
|
||||||
"IRN-unwanted-iranian-domains": {
|
"IRN-unwanted-iranian-domains": {
|
||||||
"name": "IRN: Unwanted Iranian domains",
|
"name": "IRN: Unwanted Iranian domains",
|
||||||
"categoryId": "regional",
|
"categoryId": "regional",
|
||||||
@ -150,7 +150,13 @@
|
|||||||
"homepage": "https://anti-ad.net/",
|
"homepage": "https://anti-ad.net/",
|
||||||
"source": "https://anti-ad.net/easylist.txt"
|
"source": "https://anti-ad.net/easylist.txt"
|
||||||
},
|
},
|
||||||
"BarbBlock": {
|
"IDN-abpindo": {
|
||||||
|
"name": "IDN: ABPindo",
|
||||||
|
"categoryId": "regional",
|
||||||
|
"homepage": "https://github.com/ABPindo/indonesianadblockrules/",
|
||||||
|
"source": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt"
|
||||||
|
},
|
||||||
|
"barb-block": {
|
||||||
"name": "BarbBlock",
|
"name": "BarbBlock",
|
||||||
"categoryId": "other",
|
"categoryId": "other",
|
||||||
"homepage": "https://github.com/paulgb/BarbBlock/",
|
"homepage": "https://github.com/paulgb/BarbBlock/",
|
||||||
|
@ -4,9 +4,9 @@ import dateFormat from 'date-fns/format';
|
|||||||
import round from 'lodash/round';
|
import round from 'lodash/round';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import i18n from 'i18next';
|
import i18n from 'i18next';
|
||||||
import uniqBy from 'lodash/uniqBy';
|
|
||||||
import ipaddr from 'ipaddr.js';
|
import ipaddr from 'ipaddr.js';
|
||||||
import queryString from 'query-string';
|
import queryString from 'query-string';
|
||||||
|
import React from 'react';
|
||||||
import { getTrackerData } from './trackers/trackers';
|
import { getTrackerData } from './trackers/trackers';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -21,6 +21,7 @@ import {
|
|||||||
DHCP_VALUES_PLACEHOLDERS,
|
DHCP_VALUES_PLACEHOLDERS,
|
||||||
FILTERED,
|
FILTERED,
|
||||||
FILTERED_STATUS,
|
FILTERED_STATUS,
|
||||||
|
R_CLIENT_ID,
|
||||||
SERVICES_ID_NAME_MAP,
|
SERVICES_ID_NAME_MAP,
|
||||||
STANDARD_DNS_PORT,
|
STANDARD_DNS_PORT,
|
||||||
STANDARD_HTTPS_PORT,
|
STANDARD_HTTPS_PORT,
|
||||||
@ -61,6 +62,7 @@ export const normalizeLogs = (logs) => logs.map((log) => {
|
|||||||
answer_dnssec,
|
answer_dnssec,
|
||||||
client,
|
client,
|
||||||
client_proto,
|
client_proto,
|
||||||
|
client_id,
|
||||||
elapsedMs,
|
elapsedMs,
|
||||||
question,
|
question,
|
||||||
reason,
|
reason,
|
||||||
@ -68,6 +70,7 @@ export const normalizeLogs = (logs) => logs.map((log) => {
|
|||||||
time,
|
time,
|
||||||
filterId,
|
filterId,
|
||||||
rule,
|
rule,
|
||||||
|
rules,
|
||||||
service_name,
|
service_name,
|
||||||
original_answer,
|
original_answer,
|
||||||
upstream,
|
upstream,
|
||||||
@ -80,6 +83,15 @@ export const normalizeLogs = (logs) => logs.map((log) => {
|
|||||||
return `${type}: ${value} (ttl=${ttl})`;
|
return `${type}: ${value} (ttl=${ttl})`;
|
||||||
}) : []);
|
}) : []);
|
||||||
|
|
||||||
|
let newRules = rules;
|
||||||
|
/* TODO 'filterId' and 'rule' are deprecated, will be removed in 0.106 */
|
||||||
|
if (rule !== undefined && filterId !== undefined && rules !== undefined && rules.length === 0) {
|
||||||
|
newRules = {
|
||||||
|
filter_list_id: filterId,
|
||||||
|
text: rule,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
time,
|
time,
|
||||||
domain,
|
domain,
|
||||||
@ -88,8 +100,11 @@ export const normalizeLogs = (logs) => logs.map((log) => {
|
|||||||
reason,
|
reason,
|
||||||
client,
|
client,
|
||||||
client_proto,
|
client_proto,
|
||||||
|
client_id,
|
||||||
|
/* TODO 'filterId' and 'rule' are deprecated, will be removed in 0.106 */
|
||||||
filterId,
|
filterId,
|
||||||
rule,
|
rule,
|
||||||
|
rules: newRules,
|
||||||
status,
|
status,
|
||||||
service_name,
|
service_name,
|
||||||
originalAnswer: original_answer,
|
originalAnswer: original_answer,
|
||||||
@ -113,12 +128,21 @@ export const normalizeTopStats = (stats) => (
|
|||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
|
|
||||||
export const addClientInfo = (data, clients, param) => data.map((row) => {
|
export const addClientInfo = (data, clients, ...params) => data.map((row) => {
|
||||||
const clientIp = row[param];
|
let info = '';
|
||||||
const info = clients.find((item) => item[clientIp]) || '';
|
params.find((param) => {
|
||||||
|
const id = row[param];
|
||||||
|
if (id) {
|
||||||
|
const client = clients.find((item) => item[id]) || '';
|
||||||
|
info = client?.[id] ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return info;
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...row,
|
...row,
|
||||||
info: info?.[clientIp] ?? '',
|
info,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -190,7 +214,12 @@ export const getIpList = (interfaces) => Object.values(interfaces)
|
|||||||
.reduce((acc, curr) => acc.concat(curr.ip_addresses), [])
|
.reduce((acc, curr) => acc.concat(curr.ip_addresses), [])
|
||||||
.sort();
|
.sort();
|
||||||
|
|
||||||
export const getDnsAddress = (ip, port = '') => {
|
/**
|
||||||
|
* @param {string} ip
|
||||||
|
* @param {number} [port]
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
export const getDnsAddress = (ip, port = 0) => {
|
||||||
const isStandardDnsPort = port === STANDARD_DNS_PORT;
|
const isStandardDnsPort = port === STANDARD_DNS_PORT;
|
||||||
let address = ip;
|
let address = ip;
|
||||||
|
|
||||||
@ -205,7 +234,12 @@ export const getDnsAddress = (ip, port = '') => {
|
|||||||
return address;
|
return address;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getWebAddress = (ip, port = '') => {
|
/**
|
||||||
|
* @param {string} ip
|
||||||
|
* @param {number} [port]
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
export const getWebAddress = (ip, port = 0) => {
|
||||||
const isStandardWebPort = port === STANDARD_WEB_PORT;
|
const isStandardWebPort = port === STANDARD_WEB_PORT;
|
||||||
let address = `http://${ip}`;
|
let address = `http://${ip}`;
|
||||||
|
|
||||||
@ -391,14 +425,21 @@ export const getPathWithQueryString = (path, params) => {
|
|||||||
return `${path}?${searchParams.toString()}`;
|
return `${path}?${searchParams.toString()}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getParamsForClientsSearch = (data, param) => {
|
export const getParamsForClientsSearch = (data, param, additionalParam) => {
|
||||||
const uniqueClients = uniqBy(data, param);
|
const clients = new Set();
|
||||||
return uniqueClients
|
data.forEach((e) => {
|
||||||
.reduce((acc, item, idx) => {
|
clients.add(e[param]);
|
||||||
const key = `ip${idx}`;
|
if (e[additionalParam]) {
|
||||||
acc[key] = item[param];
|
clients.add(e[additionalParam]);
|
||||||
return acc;
|
}
|
||||||
}, {});
|
});
|
||||||
|
const params = {};
|
||||||
|
const ids = Array.from(clients.values());
|
||||||
|
ids.forEach((id, i) => {
|
||||||
|
params[`ip${i}`] = id;
|
||||||
|
});
|
||||||
|
|
||||||
|
return params;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -511,7 +552,7 @@ export const isIpInCidr = (ip, cidr) => {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param ipOrCidr
|
* @param ipOrCidr
|
||||||
* @returns {'IP' | 'CIDR' | 'UNKNOWN'}
|
* @returns {'IP' | 'CIDR' | 'CLIENT_ID' | 'UNKNOWN'}
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export const findAddressType = (address) => {
|
export const findAddressType = (address) => {
|
||||||
@ -524,6 +565,9 @@ export const findAddressType = (address) => {
|
|||||||
if (cidrMaybe && ipaddr.parseCIDR(address)) {
|
if (cidrMaybe && ipaddr.parseCIDR(address)) {
|
||||||
return ADDRESS_TYPES.CIDR;
|
return ADDRESS_TYPES.CIDR;
|
||||||
}
|
}
|
||||||
|
if (R_CLIENT_ID.test(address)) {
|
||||||
|
return ADDRESS_TYPES.CLIENT_ID;
|
||||||
|
}
|
||||||
|
|
||||||
return ADDRESS_TYPES.UNKNOWN;
|
return ADDRESS_TYPES.UNKNOWN;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -544,20 +588,31 @@ export const separateIpsAndCidrs = (ids) => ids.reduce((acc, curr) => {
|
|||||||
if (addressType === ADDRESS_TYPES.CIDR) {
|
if (addressType === ADDRESS_TYPES.CIDR) {
|
||||||
acc.cidrs.push(curr);
|
acc.cidrs.push(curr);
|
||||||
}
|
}
|
||||||
|
if (addressType === ADDRESS_TYPES.CLIENT_ID) {
|
||||||
|
acc.clientIds.push(curr);
|
||||||
|
}
|
||||||
return acc;
|
return acc;
|
||||||
}, { ips: [], cidrs: [] });
|
}, { ips: [], cidrs: [], clientIds: [] });
|
||||||
|
|
||||||
export const countClientsStatistics = (ids, autoClients) => {
|
export const countClientsStatistics = (ids, autoClients) => {
|
||||||
const { ips, cidrs } = separateIpsAndCidrs(ids);
|
const { ips, cidrs, clientIds } = separateIpsAndCidrs(ids);
|
||||||
|
|
||||||
const ipsCount = ips.reduce((acc, curr) => {
|
const ipsCount = ips.reduce((acc, curr) => {
|
||||||
const count = autoClients[curr] || 0;
|
const count = autoClients[curr] || 0;
|
||||||
return acc + count;
|
return acc + count;
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
|
const clientIdsCount = clientIds.reduce((acc, curr) => {
|
||||||
|
const count = autoClients[curr] || 0;
|
||||||
|
return acc + count;
|
||||||
|
}, 0);
|
||||||
|
|
||||||
const cidrsCount = Object.entries(autoClients)
|
const cidrsCount = Object.entries(autoClients)
|
||||||
.reduce((acc, curr) => {
|
.reduce((acc, curr) => {
|
||||||
const [id, count] = curr;
|
const [id, count] = curr;
|
||||||
|
if (!ipaddr.isValid(id)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (cidrs.some((cidr) => isIpInCidr(id, cidr))) {
|
if (cidrs.some((cidr) => isIpInCidr(id, cidr))) {
|
||||||
// eslint-disable-next-line no-param-reassign
|
// eslint-disable-next-line no-param-reassign
|
||||||
acc += count;
|
acc += count;
|
||||||
@ -565,7 +620,7 @@ export const countClientsStatistics = (ids, autoClients) => {
|
|||||||
return acc;
|
return acc;
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
return ipsCount + cidrsCount;
|
return ipsCount + cidrsCount + clientIdsCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -716,6 +771,75 @@ export const getFilterName = (
|
|||||||
return resolveFilterName(filter);
|
return resolveFilterName(filter);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {array} rules
|
||||||
|
* @param {array} filters
|
||||||
|
* @param {array} whitelistFilters
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
export const getFilterNames = (rules, filters, whitelistFilters) => rules.map(
|
||||||
|
({ filter_list_id }) => getFilterName(filters, whitelistFilters, filter_list_id),
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {array} rules
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
export const getRuleNames = (rules) => rules.map(({ text }) => text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {array} rules
|
||||||
|
* @param {array} filters
|
||||||
|
* @param {array} whitelistFilters
|
||||||
|
* @returns {object}
|
||||||
|
*/
|
||||||
|
export const getFilterNameToRulesMap = (rules, filters, whitelistFilters) => rules.reduce(
|
||||||
|
(acc, { text, filter_list_id }) => {
|
||||||
|
const filterName = getFilterName(filters, whitelistFilters, filter_list_id);
|
||||||
|
|
||||||
|
acc[filterName] = (acc[filterName] || []).concat(text);
|
||||||
|
return acc;
|
||||||
|
}, {},
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {array} rules
|
||||||
|
* @param {array} filters
|
||||||
|
* @param {array} whitelistFilters
|
||||||
|
* @param {object} classes
|
||||||
|
* @returns {JSXElement}
|
||||||
|
*/
|
||||||
|
export const getRulesToFilterList = (rules, filters, whitelistFilters, classes = {
|
||||||
|
list: 'filteringRules',
|
||||||
|
rule: 'filteringRules__rule font-monospace',
|
||||||
|
filter: 'filteringRules__filter',
|
||||||
|
}) => {
|
||||||
|
const filterNameToRulesMap = getFilterNameToRulesMap(rules, filters, whitelistFilters);
|
||||||
|
|
||||||
|
return <dl className={classes.list}>
|
||||||
|
{Object.entries(filterNameToRulesMap).reduce(
|
||||||
|
(acc, [filterName, rulesArr]) => acc
|
||||||
|
.concat(rulesArr.map((rule, i) => <dd key={i} className={classes.rule}>{rule}</dd>))
|
||||||
|
.concat(<dt className={classes.filter} key={classes.filter}>{filterName}</dt>),
|
||||||
|
[],
|
||||||
|
)}
|
||||||
|
</dl>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {array} rules
|
||||||
|
* @param {array} filters
|
||||||
|
* @param {array} whitelistFilters
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
export const getRulesAndFilterNames = (rules, filters, whitelistFilters) => {
|
||||||
|
const filterNameToRulesMap = getFilterNameToRulesMap(rules, filters, whitelistFilters);
|
||||||
|
|
||||||
|
return Object.entries(filterNameToRulesMap).map(
|
||||||
|
([filterName, filterRules]) => filterRules.concat(filterName).join('\n'),
|
||||||
|
).join('\n\n');
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ip {string}
|
* @param ip {string}
|
||||||
* @param gateway_ip {string}
|
* @param gateway_ip {string}
|
||||||
|
@ -31,7 +31,7 @@ const getFormattedWhois = (whois) => {
|
|||||||
* @param {object} info.whois_info
|
* @param {object} info.whois_info
|
||||||
* @param {boolean} [isDetailed]
|
* @param {boolean} [isDetailed]
|
||||||
* @param {boolean} [isLogs]
|
* @param {boolean} [isLogs]
|
||||||
* @returns {JSX.Element}
|
* @returns {JSXElement}
|
||||||
*/
|
*/
|
||||||
export const renderFormattedClientCell = (value, info, isDetailed = false, isLogs = false) => {
|
export const renderFormattedClientCell = (value, info, isDetailed = false, isLogs = false) => {
|
||||||
let whoisContainer = null;
|
let whoisContainer = null;
|
||||||
|
@ -9,6 +9,8 @@ import {
|
|||||||
R_URL_REQUIRES_PROTOCOL,
|
R_URL_REQUIRES_PROTOCOL,
|
||||||
STANDARD_WEB_PORT,
|
STANDARD_WEB_PORT,
|
||||||
UNSAFE_PORTS,
|
UNSAFE_PORTS,
|
||||||
|
R_CLIENT_ID,
|
||||||
|
R_DOMAIN,
|
||||||
} from './constants';
|
} from './constants';
|
||||||
import { getLastIpv4Octet, isValidAbsolutePath } from './form';
|
import { getLastIpv4Octet, isValidAbsolutePath } from './form';
|
||||||
|
|
||||||
@ -16,7 +18,7 @@ import { getLastIpv4Octet, isValidAbsolutePath } from './form';
|
|||||||
// https://redux-form.com/8.3.0/examples/fieldlevelvalidation/
|
// https://redux-form.com/8.3.0/examples/fieldlevelvalidation/
|
||||||
// If the value is valid, the validation function should return undefined.
|
// If the value is valid, the validation function should return undefined.
|
||||||
/**
|
/**
|
||||||
* @param value {string}
|
* @param value {string|number}
|
||||||
* @returns {undefined|string}
|
* @returns {undefined|string}
|
||||||
*/
|
*/
|
||||||
export const validateRequiredValue = (value) => {
|
export const validateRequiredValue = (value) => {
|
||||||
@ -71,12 +73,28 @@ export const validateClientId = (value) => {
|
|||||||
|| R_MAC.test(formattedValue)
|
|| R_MAC.test(formattedValue)
|
||||||
|| R_CIDR.test(formattedValue)
|
|| R_CIDR.test(formattedValue)
|
||||||
|| R_CIDR_IPV6.test(formattedValue)
|
|| R_CIDR_IPV6.test(formattedValue)
|
||||||
|
|| R_CLIENT_ID.test(formattedValue)
|
||||||
)) {
|
)) {
|
||||||
return 'form_error_client_id_format';
|
return 'form_error_client_id_format';
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param value {string}
|
||||||
|
* @returns {undefined|string}
|
||||||
|
*/
|
||||||
|
export const validateServerName = (value) => {
|
||||||
|
if (!value) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
const formattedValue = value ? value.trim() : value;
|
||||||
|
if (formattedValue && !R_DOMAIN.test(formattedValue)) {
|
||||||
|
return 'form_error_server_name';
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param value {string}
|
* @param value {string}
|
||||||
* @returns {undefined|string}
|
* @returns {undefined|string}
|
||||||
|
@ -41,16 +41,13 @@ const AddressList = ({
|
|||||||
AddressList.propTypes = {
|
AddressList.propTypes = {
|
||||||
interfaces: PropTypes.object.isRequired,
|
interfaces: PropTypes.object.isRequired,
|
||||||
address: PropTypes.string.isRequired,
|
address: PropTypes.string.isRequired,
|
||||||
port: PropTypes.oneOfType([
|
port: PropTypes.number.isRequired,
|
||||||
PropTypes.string,
|
|
||||||
PropTypes.number,
|
|
||||||
]),
|
|
||||||
isDns: PropTypes.bool,
|
isDns: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
renderItem.propTypes = {
|
renderItem.propTypes = {
|
||||||
ip: PropTypes.string.isRequired,
|
ip: PropTypes.string.isRequired,
|
||||||
port: PropTypes.string.isRequired,
|
port: PropTypes.number.isRequired,
|
||||||
isDns: PropTypes.bool.isRequired,
|
isDns: PropTypes.bool.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
/* Disable Auto Zoom in Input - Safari on iPhone https://stackoverflow.com/a/6394497 */
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
input, select, textarea {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.setup {
|
.setup {
|
||||||
min-height: calc(100vh - 71px);
|
min-height: calc(100vh - 71px);
|
||||||
line-height: 1.48;
|
line-height: 1.48;
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
/* Disable Auto Zoom in Input - Safari on iPhone https://stackoverflow.com/a/6394497 */
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
input, select, textarea {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.login {
|
.login {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -24,13 +24,7 @@ const access = handleActions(
|
|||||||
|
|
||||||
[actions.setAccessListRequest]: (state) => ({ ...state, processingSet: true }),
|
[actions.setAccessListRequest]: (state) => ({ ...state, processingSet: true }),
|
||||||
[actions.setAccessListFailure]: (state) => ({ ...state, processingSet: false }),
|
[actions.setAccessListFailure]: (state) => ({ ...state, processingSet: false }),
|
||||||
[actions.setAccessListSuccess]: (state) => {
|
[actions.setAccessListSuccess]: (state) => ({ ...state, processingSet: false }),
|
||||||
const newState = {
|
|
||||||
...state,
|
|
||||||
processingSet: false,
|
|
||||||
};
|
|
||||||
return newState;
|
|
||||||
},
|
|
||||||
|
|
||||||
[actions.toggleClientBlockRequest]: (state) => ({ ...state, processingSet: true }),
|
[actions.toggleClientBlockRequest]: (state) => ({ ...state, processingSet: true }),
|
||||||
[actions.toggleClientBlockFailure]: (state) => ({ ...state, processingSet: false }),
|
[actions.toggleClientBlockFailure]: (state) => ({ ...state, processingSet: false }),
|
||||||
|
6
client2/.eslintignore
Normal file
6
client2/.eslintignore
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
scripts
|
||||||
|
node_modules
|
||||||
|
postcss.config.js
|
||||||
|
src/lib/entities
|
||||||
|
src/lib/apis
|
||||||
|
openApi
|
5
client2/.eslintrc
Normal file
5
client2/.eslintrc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"extends": [
|
||||||
|
"./scripts/lint/dev.js"
|
||||||
|
]
|
||||||
|
}
|
18
client2/declaration.d.ts
vendored
Normal file
18
client2/declaration.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
declare module '*.pcss' {
|
||||||
|
const content: {[className: string]: string};
|
||||||
|
export default content;
|
||||||
|
}
|
||||||
|
declare module '*.css' {
|
||||||
|
const content: {[className: string]: string};
|
||||||
|
export default content;
|
||||||
|
}
|
||||||
|
declare module '*.png'
|
||||||
|
declare module '*.jpg'
|
||||||
|
declare let AUTH_TOKEN: string;
|
||||||
|
declare let MAIN_TOKEN: string | undefined;
|
||||||
|
declare let NO_CAPTCHA: boolean | undefined;
|
||||||
|
declare module 'dygraphs';
|
||||||
|
declare module '@novnc/novnc/core/rfb';
|
||||||
|
// cp - CloudPayments script
|
||||||
|
declare let cp: any;
|
||||||
|
declare const DEV: any;
|
89
client2/package.json
Normal file
89
client2/package.json
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"author": "Performix",
|
||||||
|
"private": true,
|
||||||
|
"name": "adguard-home",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"scripts": {
|
||||||
|
"build": "rm -rf ../build2 && yarn install && webpack --config ./scripts/webpack/webpack.config.prod.js",
|
||||||
|
"start": "webpack serve --config ./scripts/webpack/webpack.config.dev.js",
|
||||||
|
"generate": "rm -rf ./src/lib/entities ./src/lib/apis && ts-node --compiler-options '{ \"module\": \"CommonJS\" }' ./scripts/generator/index.ts",
|
||||||
|
"translations:check": "ts-node --compiler-options '{ \"module\": \"CommonJS\" }' ./scripts/plugins/checkTranslations.ts",
|
||||||
|
"lint": "eslint -c ./scripts/lint/prod.js --ext .tsx --ext .ts ./",
|
||||||
|
"go:build": "cd .. && make REBUILD_CLIENT=0 build",
|
||||||
|
"go:run": "sudo ../AdguardHome"
|
||||||
|
},
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@adguard/translate": "^0.2.0",
|
||||||
|
"@ant-design/icons": "^4.4.0",
|
||||||
|
"@sentry/react": "^5.27.0",
|
||||||
|
"antd": "^4.7.2",
|
||||||
|
"classnames": "^2.2.6",
|
||||||
|
"dayjs": "^1.9.3",
|
||||||
|
"formik": "^2.2.0",
|
||||||
|
"mobx": "^6.0.1",
|
||||||
|
"mobx-react-lite": "^3.0.1",
|
||||||
|
"qs": "^6.9.4",
|
||||||
|
"react": "^17.0.0",
|
||||||
|
"react-dom": "^17.0.0",
|
||||||
|
"react-router-dom": "^5.2.0",
|
||||||
|
"recharts": "^2.0.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/classnames": "^2.2.10",
|
||||||
|
"@types/qs": "^6.9.5",
|
||||||
|
"@types/react": "^16.9.53",
|
||||||
|
"@types/react-dom": "^16.9.8",
|
||||||
|
"@types/react-redux": "^7.1.9",
|
||||||
|
"@types/react-router-dom": "^5.1.6",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^4.5.0",
|
||||||
|
"@typescript-eslint/parser": "^4.5.0",
|
||||||
|
"antd-dayjs-webpack-plugin": "^1.0.1",
|
||||||
|
"autoprefixer": "^10.0.1",
|
||||||
|
"connect-history-api-fallback": "^1.6.0",
|
||||||
|
"copy-webpack-plugin": "^6.2.1",
|
||||||
|
"css-loader": "^5.0.0",
|
||||||
|
"eslint": "^7.11.0",
|
||||||
|
"eslint-config-airbnb-base": "^14.2.0",
|
||||||
|
"eslint-config-airbnb-typescript": "^12.0.0",
|
||||||
|
"eslint-import-resolver-typescript": "^2.3.0",
|
||||||
|
"eslint-loader": "^4.0.2",
|
||||||
|
"eslint-plugin-import": "^2.22.1",
|
||||||
|
"eslint-plugin-react": "^7.21.5",
|
||||||
|
"eslint-plugin-react-hooks": "^4.2.0",
|
||||||
|
"file-loader": "^6.1.1",
|
||||||
|
"html-webpack-plugin": "^4.5.0",
|
||||||
|
"http-proxy-middleware": "^1.0.6",
|
||||||
|
"less": "^3.12.2",
|
||||||
|
"less-loader": "^5.0.0",
|
||||||
|
"mini-css-extract-plugin": "^1.1.1",
|
||||||
|
"optimize-css-assets-webpack-plugin": "^5.0.4",
|
||||||
|
"postcss": "^8.1.2",
|
||||||
|
"postcss-calc": "^7.0.5",
|
||||||
|
"postcss-css-variables": "^0.17.0",
|
||||||
|
"postcss-custom-media": "^7.0.8",
|
||||||
|
"postcss-import": "^13.0.0",
|
||||||
|
"postcss-inline-svg": "^4.1.0",
|
||||||
|
"postcss-loader": "^4.0.4",
|
||||||
|
"postcss-mixins": "^7.0.1",
|
||||||
|
"postcss-modules": "^3.2.2",
|
||||||
|
"postcss-nested": "^5.0.1",
|
||||||
|
"postcss-preset-env": "^6.7.0",
|
||||||
|
"postcss-reporter": "^7.0.1",
|
||||||
|
"postcss-variables": "^1.1.1",
|
||||||
|
"style-loader": "^2.0.0",
|
||||||
|
"stylelint": "^13.7.2",
|
||||||
|
"stylelint-webpack-plugin": "^2.1.1",
|
||||||
|
"terser-webpack-plugin": "^5.0.0",
|
||||||
|
"ts-loader": "^8.0.6",
|
||||||
|
"ts-morph": "^8.1.2",
|
||||||
|
"ts-node": "^9.0.0",
|
||||||
|
"typescript": "^4.0.3",
|
||||||
|
"url-loader": "^4.1.1",
|
||||||
|
"webpack": "^5.10.0",
|
||||||
|
"webpack-cli": "^4.2.0",
|
||||||
|
"webpack-dev-server": "^3.11.0",
|
||||||
|
"webpack-merge": "^5.2.0",
|
||||||
|
"yaml": "^1.10.0"
|
||||||
|
}
|
||||||
|
}
|
17
client2/postcss.config.js
Normal file
17
client2/postcss.config.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
module.exports = {
|
||||||
|
plugins: [
|
||||||
|
['postcss-import', {}],
|
||||||
|
['postcss-nested', {}],
|
||||||
|
['postcss-custom-media', {}],
|
||||||
|
['postcss-variables', {}],
|
||||||
|
['postcss-calc', {}],
|
||||||
|
['postcss-mixins', {}],
|
||||||
|
['postcss-preset-env', { stage: 3, features: { 'nesting-rules': true } }],
|
||||||
|
['postcss-reporter', { clearMessages: true }],
|
||||||
|
['postcss-inline-svg', {
|
||||||
|
paths: ['frontend/icons', 'vendor/adguard/utils-bundle/src/Resources/frontend/icons'],
|
||||||
|
svgo: { plugins: [{ cleanupAttrs: true }] }
|
||||||
|
}],
|
||||||
|
['autoprefixer'],
|
||||||
|
]
|
||||||
|
};
|
BIN
client2/public/assets/apple-touch-icon-180x180.png
Normal file
BIN
client2/public/assets/apple-touch-icon-180x180.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
client2/public/assets/favicon.png
Normal file
BIN
client2/public/assets/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
8
client2/public/assets/safari-pinned-tab.svg
Normal file
8
client2/public/assets/safari-pinned-tab.svg
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16pt" height="16pt"
|
||||||
|
viewBox="0 0 16 16" version="1.1">
|
||||||
|
<g id="surface1">
|
||||||
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;"
|
||||||
|
d="M 8 0 C 10.5 0 13.515625 0.574219 16 1.835938 L 15.996094 2.542969 C 15.957031 5.605469 15.410156 11.71875 8 16 C 0.5 11.667969 0.03125 5.460938 0.00390625 2.433594 L 0 1.835938 C 2.484375 0.574219 5.5 0 8 0 Z M 11.769531 4.203125 L 11.761719 4.203125 L 7.890625 8.160156 L 6.433594 6.4375 C 5.738281 5.644531 4.792969 6.25 4.570312 6.40625 L 7.929688 10.285156 L 12.570312 4.136719 C 12.230469 3.867188 11.933594 4.054688 11.769531 4.203125 Z M 11.769531 4.203125 "/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 801 B |
23
client2/public/index.html
Normal file
23
client2/public/index.html
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, shrink-to-fit=no">
|
||||||
|
<meta name="theme-color" content="#000000">
|
||||||
|
<meta name="google" content="notranslate">
|
||||||
|
<meta http-equiv="x-dns-prefetch-control" content="off">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon-180x180.png" />
|
||||||
|
<link rel="mask-icon" href="assets/safari-pinned-tab.svg" color="#67B279">
|
||||||
|
<link rel="icon" type="image/png" href="assets/favicon.png" sizes="48x48">
|
||||||
|
<title>AdGuard Home</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
You need to enable JavaScript to run this app.
|
||||||
|
</noscript>
|
||||||
|
<div id="app"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
22
client2/public/install.html
Normal file
22
client2/public/install.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, shrink-to-fit=no">
|
||||||
|
<meta name="theme-color" content="#000000">
|
||||||
|
<meta name="google" content="notranslate">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon-180x180.png" />
|
||||||
|
<link rel="mask-icon" href="assets/safari-pinned-tab.svg" color="#67B279">
|
||||||
|
<link rel="icon" type="image/png" href="assets/favicon.png" sizes="48x48">
|
||||||
|
<title>Setup AdGuard Home</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
You need to enable JavaScript to run this app.
|
||||||
|
</noscript>
|
||||||
|
<div id="app"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
22
client2/public/login.html
Normal file
22
client2/public/login.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, shrink-to-fit=no">
|
||||||
|
<meta name="theme-color" content="#000000">
|
||||||
|
<meta name="google" content="notranslate">
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon-180x180.png" />
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||||
|
<link rel="mask-icon" href="assets/safari-pinned-tab.svg" color="#67B279">
|
||||||
|
<link rel="icon" type="image/png" href="assets/favicon.png" sizes="48x48">
|
||||||
|
<title>Login</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
You need to enable JavaScript to run this app.
|
||||||
|
</noscript>
|
||||||
|
<div id="app"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
12
client2/scripts/consts.ts
Normal file
12
client2/scripts/consts.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
export const OPEN_API_PATH = '../openapi/openapi.yaml';
|
||||||
|
export const ENT_DIR = './src/lib/entities';
|
||||||
|
export const API_DIR = './src/lib/apis';
|
||||||
|
export const LOCALE_FOLDER_PATH = './src/lib/intl/__locales';
|
||||||
|
export const TRANSLATOR_CLASS_NAME = 'Translator';
|
||||||
|
export const USE_INTL_NAME = 'useIntl';
|
||||||
|
|
||||||
|
export const trimQuotes = (str: string) => {
|
||||||
|
return str.replace(/\'|\"/g, '');
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GENERATOR_ENTITY_ALLIAS = 'Entities/';
|
18
client2/scripts/generator/index.ts
Normal file
18
client2/scripts/generator/index.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import * as fs from 'fs';
|
||||||
|
import * as YAML from 'yaml';
|
||||||
|
import { OPEN_API_PATH } from '../consts';
|
||||||
|
|
||||||
|
import EntitiesGenerator from './src/generateEntities';
|
||||||
|
import ApisGenerator from './src/generateApis';
|
||||||
|
|
||||||
|
|
||||||
|
const generateApi = (openApi: Record<string, any>) => {
|
||||||
|
const ent = new EntitiesGenerator(openApi);
|
||||||
|
ent.save();
|
||||||
|
|
||||||
|
const api = new ApisGenerator(openApi);
|
||||||
|
api.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
const openApiFile = fs.readFileSync(OPEN_API_PATH, 'utf8');
|
||||||
|
generateApi(YAML.parse(openApiFile));
|
317
client2/scripts/generator/src/generateApis.ts
Normal file
317
client2/scripts/generator/src/generateApis.ts
Normal file
@ -0,0 +1,317 @@
|
|||||||
|
/* eslint-disable no-template-curly-in-string */
|
||||||
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
||||||
|
import * as fs from 'fs';
|
||||||
|
import * as path from 'path';
|
||||||
|
import { stringify } from 'qs';
|
||||||
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
|
import * as morph from 'ts-morph';
|
||||||
|
|
||||||
|
import {
|
||||||
|
API_DIR as API_DIR_CONST,
|
||||||
|
GENERATOR_ENTITY_ALLIAS,
|
||||||
|
} from '../../consts';
|
||||||
|
import { toCamel, capitalize, schemaParamParser } from './utils';
|
||||||
|
|
||||||
|
|
||||||
|
const API_DIR = path.resolve(API_DIR_CONST);
|
||||||
|
if (!fs.existsSync(API_DIR)) {
|
||||||
|
fs.mkdirSync(API_DIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
const { Project, QuoteKind } = morph;
|
||||||
|
|
||||||
|
|
||||||
|
class ApiGenerator {
|
||||||
|
project = new Project({
|
||||||
|
tsConfigFilePath: './tsconfig.json',
|
||||||
|
addFilesFromTsConfig: false,
|
||||||
|
manipulationSettings: {
|
||||||
|
quoteKind: QuoteKind.Single,
|
||||||
|
usePrefixAndSuffixTextForRename: false,
|
||||||
|
useTrailingCommas: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
openapi: Record<string, any>;
|
||||||
|
|
||||||
|
serverUrl: string;
|
||||||
|
|
||||||
|
paths: any;
|
||||||
|
|
||||||
|
/* interface Controllers {
|
||||||
|
[controller: string]: {
|
||||||
|
[operationId: string]: { parameters - from opneApi, responses - from opneApi, method }
|
||||||
|
}
|
||||||
|
} */
|
||||||
|
controllers: Record<string, any> = {};
|
||||||
|
|
||||||
|
apis: morph.SourceFile[] = [];
|
||||||
|
|
||||||
|
constructor(openapi: Record<string, any>) {
|
||||||
|
this.openapi = openapi;
|
||||||
|
this.paths = openapi.paths;
|
||||||
|
this.serverUrl = openapi.servers[0].url;
|
||||||
|
|
||||||
|
Object.keys(this.paths).forEach((pathKey) => {
|
||||||
|
Object.keys(this.paths[pathKey]).forEach((method) => {
|
||||||
|
const {
|
||||||
|
tags, operationId, parameters, responses, requestBody, security,
|
||||||
|
} = this.paths[pathKey][method];
|
||||||
|
const controller = toCamel((tags ? tags[0] : pathKey.split('/')[1]).replace('-controller', ''));
|
||||||
|
|
||||||
|
if (this.controllers[controller]) {
|
||||||
|
this.controllers[controller][operationId] = {
|
||||||
|
parameters,
|
||||||
|
responses,
|
||||||
|
method,
|
||||||
|
requestBody,
|
||||||
|
security,
|
||||||
|
pathKey: pathKey.replace(/{/g, '${'),
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
this.controllers[controller] = { [operationId]: {
|
||||||
|
parameters,
|
||||||
|
responses,
|
||||||
|
method,
|
||||||
|
requestBody,
|
||||||
|
security,
|
||||||
|
pathKey: pathKey.replace(/{/g, '${'),
|
||||||
|
} };
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.generateApiFiles();
|
||||||
|
}
|
||||||
|
|
||||||
|
generateApiFiles = () => {
|
||||||
|
Object.keys(this.controllers).forEach(this.generateApiFile);
|
||||||
|
};
|
||||||
|
|
||||||
|
generateApiFile = (cName: string) => {
|
||||||
|
const apiFile = this.project.createSourceFile(`${API_DIR}/${cName}.ts`);
|
||||||
|
apiFile.addStatements([
|
||||||
|
'// This file was autogenerated. Please do not change.',
|
||||||
|
'// All changes will be overwrited on commit.',
|
||||||
|
'',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// const schemaProperties = schemas[schemaName].properties;
|
||||||
|
const importEntities: any[] = [];
|
||||||
|
|
||||||
|
// add api class to file
|
||||||
|
const apiClass = apiFile.addClass({
|
||||||
|
name: `${capitalize(cName)}Api`,
|
||||||
|
isDefaultExport: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// get operations of controller
|
||||||
|
const controllerOperations = this.controllers[cName];
|
||||||
|
const operationList = Object.keys(controllerOperations).sort();
|
||||||
|
// for each operation add fetcher
|
||||||
|
operationList.forEach((operation) => {
|
||||||
|
const {
|
||||||
|
requestBody, responses, parameters, method, pathKey, security,
|
||||||
|
} = controllerOperations[operation];
|
||||||
|
|
||||||
|
const queryParams: any[] = []; // { name, type }
|
||||||
|
const bodyParam: any[] = []; // { name, type }
|
||||||
|
|
||||||
|
let hasResponseBodyType: /* boolean | ReturnType<schemaParamParser> */ false | [string, boolean, boolean, boolean, boolean] = false;
|
||||||
|
let contentType = '';
|
||||||
|
if (parameters) {
|
||||||
|
parameters.forEach((p: any) => {
|
||||||
|
const [
|
||||||
|
pType, isArray, isClass, isImport,
|
||||||
|
] = schemaParamParser(p.schema, this.openapi);
|
||||||
|
|
||||||
|
if (isImport) {
|
||||||
|
importEntities.push({ type: pType, isClass });
|
||||||
|
}
|
||||||
|
if (p.in === 'query') {
|
||||||
|
queryParams.push({
|
||||||
|
name: p.name, type: `${pType}${isArray ? '[]' : ''}`, hasQuestionToken: !p.required });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (queryParams.length > 0) {
|
||||||
|
const imp = apiFile.getImportDeclaration((i) => {
|
||||||
|
return i.getModuleSpecifierValue() === 'qs';
|
||||||
|
}); if (!imp) {
|
||||||
|
apiFile.addImportDeclaration({
|
||||||
|
moduleSpecifier: 'qs',
|
||||||
|
defaultImport: 'qs',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (requestBody) {
|
||||||
|
let content = requestBody.content;
|
||||||
|
const { $ref }: { $ref: string } = requestBody;
|
||||||
|
|
||||||
|
if (!content && $ref) {
|
||||||
|
const name = $ref.split('/').pop() as string;
|
||||||
|
content = this.openapi.components.requestBodies[name].content;
|
||||||
|
}
|
||||||
|
|
||||||
|
[contentType] = Object.keys(content);
|
||||||
|
const data = content[contentType];
|
||||||
|
|
||||||
|
const [
|
||||||
|
pType, isArray, isClass, isImport,
|
||||||
|
] = schemaParamParser(data.schema, this.openapi);
|
||||||
|
|
||||||
|
if (isImport) {
|
||||||
|
importEntities.push({ type: pType, isClass });
|
||||||
|
bodyParam.push({ name: pType.toLowerCase(), type: `${isClass ? 'I' : ''}${pType}${isArray ? '[]' : ''}`, isClass, pType });
|
||||||
|
} else {
|
||||||
|
bodyParam.push({ name: 'data', type: `${pType}${isArray ? '[]' : ''}` });
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (responses['200']) {
|
||||||
|
const { content, headers } = responses['200'];
|
||||||
|
if (content && (content['*/*'] || content['application/json'])) {
|
||||||
|
const { schema, examples } = content['*/*'] || content['application/json'];
|
||||||
|
|
||||||
|
if (!schema) {
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const propType = schemaParamParser(schema, this.openapi);
|
||||||
|
const [pType, , isClass, isImport] = propType;
|
||||||
|
|
||||||
|
if (isImport) {
|
||||||
|
importEntities.push({ type: pType, isClass });
|
||||||
|
}
|
||||||
|
hasResponseBodyType = propType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let returnType = '';
|
||||||
|
if (hasResponseBodyType) {
|
||||||
|
const [pType, isArray, isClass] = hasResponseBodyType as any;
|
||||||
|
let data = `Promise<${isClass ? 'I' : ''}${pType}${isArray ? '[]' : ''}`;
|
||||||
|
returnType = data;
|
||||||
|
} else {
|
||||||
|
returnType = 'Promise<number';
|
||||||
|
}
|
||||||
|
const shouldValidate = bodyParam.filter(b => b.isClass);
|
||||||
|
if (shouldValidate.length > 0) {
|
||||||
|
returnType += ' | string[]';
|
||||||
|
}
|
||||||
|
// append Error to default type return;
|
||||||
|
returnType += ' | Error>';
|
||||||
|
|
||||||
|
const fetcher = apiClass.addMethod({
|
||||||
|
isAsync: true,
|
||||||
|
isStatic: true,
|
||||||
|
name: operation,
|
||||||
|
returnType,
|
||||||
|
});
|
||||||
|
const params = [...queryParams, ...bodyParam].sort((a, b) => (Number(!!a.hasQuestionToken) - Number(!!b.hasQuestionToken)));
|
||||||
|
fetcher.addParameters(params);
|
||||||
|
|
||||||
|
fetcher.setBodyText((w) => {
|
||||||
|
// Add data to URLSearchParams
|
||||||
|
if (contentType === 'text/plain') {
|
||||||
|
bodyParam.forEach((b) => {
|
||||||
|
w.writeLine(`const params = String(${b.name});`);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (shouldValidate.length > 0) {
|
||||||
|
w.writeLine(`const haveError: string[] = [];`);
|
||||||
|
shouldValidate.forEach((b) => {
|
||||||
|
w.writeLine(`const ${b.name}Valid = new ${b.pType}(${b.name});`);
|
||||||
|
w.writeLine(`haveError.push(...${b.name}Valid.validate());`);
|
||||||
|
});
|
||||||
|
w.writeLine(`if (haveError.length > 0) {`);
|
||||||
|
w.writeLine(` return Promise.resolve(haveError);`)
|
||||||
|
w.writeLine(`}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Switch return of fetch in case on queryParams
|
||||||
|
if (queryParams.length > 0) {
|
||||||
|
w.writeLine('const queryParams = {');
|
||||||
|
queryParams.forEach((q) => {
|
||||||
|
w.writeLine(` ${q.name}: ${q.name},`);
|
||||||
|
});
|
||||||
|
w.writeLine('}');
|
||||||
|
w.writeLine(`return await fetch(\`${this.serverUrl}${pathKey}?\${qs.stringify(queryParams, { arrayFormat: 'comma' })}\`, {`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(`return await fetch(\`${this.serverUrl}${pathKey}\`, {`);
|
||||||
|
}
|
||||||
|
// Add method
|
||||||
|
w.writeLine(` method: '${method.toUpperCase()}',`);
|
||||||
|
|
||||||
|
// add Fetch options
|
||||||
|
if (contentType && contentType !== 'multipart/form-data') {
|
||||||
|
w.writeLine(' headers: {');
|
||||||
|
w.writeLine(` 'Content-Type': '${contentType}',`);
|
||||||
|
w.writeLine(' },');
|
||||||
|
}
|
||||||
|
if (contentType) {
|
||||||
|
switch (contentType) {
|
||||||
|
case 'text/plain':
|
||||||
|
w.writeLine(' body: params,');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
w.writeLine(` body: JSON.stringify(${bodyParam.map((b) => b.isClass ? `${b.name}Valid.serialize()` : b.name).join(', ')}),`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle response
|
||||||
|
if (hasResponseBodyType) {
|
||||||
|
w.writeLine('}).then(async (res) => {');
|
||||||
|
w.writeLine(' if (res.status === 200) {');
|
||||||
|
w.writeLine(' return res.json();');
|
||||||
|
} else {
|
||||||
|
w.writeLine('}).then(async (res) => {');
|
||||||
|
w.writeLine(' if (res.status === 200) {');
|
||||||
|
w.writeLine(' return res.status;');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle Error
|
||||||
|
w.writeLine(' } else {');
|
||||||
|
w.writeLine(' return new Error(String(res.status));');
|
||||||
|
w.writeLine(' }');
|
||||||
|
w.writeLine('})');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const imports: any[] = [];
|
||||||
|
const types: string[] = [];
|
||||||
|
importEntities.forEach((i) => {
|
||||||
|
const { type } = i;
|
||||||
|
if (!types.includes(type)) {
|
||||||
|
imports.push(i);
|
||||||
|
types.push(type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
imports.sort((a,b) => a.type > b.type ? 1 : -1).forEach((ie) => {
|
||||||
|
const { type: pType, isClass } = ie;
|
||||||
|
if (isClass) {
|
||||||
|
apiFile.addImportDeclaration({
|
||||||
|
moduleSpecifier: `${GENERATOR_ENTITY_ALLIAS}${pType}`,
|
||||||
|
defaultImport: pType,
|
||||||
|
namedImports: [`I${pType}`],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
apiFile.addImportDeclaration({
|
||||||
|
moduleSpecifier: `${GENERATOR_ENTITY_ALLIAS}${pType}`,
|
||||||
|
namedImports: [pType],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.apis.push(apiFile);
|
||||||
|
};
|
||||||
|
|
||||||
|
save = () => {
|
||||||
|
this.apis.forEach(async (e) => {
|
||||||
|
await e.saveSync();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default ApiGenerator;
|
603
client2/scripts/generator/src/generateEntities.ts
Normal file
603
client2/scripts/generator/src/generateEntities.ts
Normal file
@ -0,0 +1,603 @@
|
|||||||
|
import * as fs from 'fs';
|
||||||
|
import * as path from 'path';
|
||||||
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
|
import * as morph from 'ts-morph';
|
||||||
|
|
||||||
|
import { ENT_DIR } from '../../consts';
|
||||||
|
import { TYPES, toCamel, schemaParamParser, uncapitalize } from './utils';
|
||||||
|
|
||||||
|
const { Project, QuoteKind } = morph;
|
||||||
|
|
||||||
|
|
||||||
|
const EntDir = path.resolve(ENT_DIR);
|
||||||
|
if (!fs.existsSync(EntDir)) {
|
||||||
|
fs.mkdirSync(EntDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
class EntitiesGenerator {
|
||||||
|
project = new Project({
|
||||||
|
tsConfigFilePath: './tsconfig.json',
|
||||||
|
addFilesFromTsConfig: false,
|
||||||
|
manipulationSettings: {
|
||||||
|
quoteKind: QuoteKind.Single,
|
||||||
|
usePrefixAndSuffixTextForRename: false,
|
||||||
|
useTrailingCommas: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
openapi: Record<string, any>;
|
||||||
|
|
||||||
|
schemas: Record<string, any>;
|
||||||
|
|
||||||
|
schemaNames: string[];
|
||||||
|
|
||||||
|
entities: morph.SourceFile[] = [];
|
||||||
|
|
||||||
|
constructor(openapi: Record<string, any>) {
|
||||||
|
this.openapi = openapi;
|
||||||
|
this.schemas = openapi.components.schemas;
|
||||||
|
this.schemaNames = Object.keys(this.schemas);
|
||||||
|
this.generateEntities();
|
||||||
|
}
|
||||||
|
|
||||||
|
generateEntities = () => {
|
||||||
|
this.schemaNames.forEach(this.generateEntity);
|
||||||
|
};
|
||||||
|
|
||||||
|
generateEntity = (sName: string) => {
|
||||||
|
const { properties, type, oneOf } = this.schemas[sName];
|
||||||
|
const notAClass = !properties && TYPES[type as keyof typeof TYPES];
|
||||||
|
|
||||||
|
if (oneOf) {
|
||||||
|
this.generateOneOf(sName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (notAClass) {
|
||||||
|
this.generateEnum(sName);
|
||||||
|
} else {
|
||||||
|
this.generateClass(sName);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
generateEnum = (sName: string) => {
|
||||||
|
const entityFile = this.project.createSourceFile(`${EntDir}/${sName}.ts`);
|
||||||
|
entityFile.addStatements([
|
||||||
|
'// This file was autogenerated. Please do not change.',
|
||||||
|
'// All changes will be overwrited on commit.',
|
||||||
|
'',
|
||||||
|
]);
|
||||||
|
|
||||||
|
const { enum: enumMembers } = this.schemas[sName];
|
||||||
|
entityFile.addEnum({
|
||||||
|
name: sName,
|
||||||
|
members: enumMembers.map((e: string) => ({ name: e.toUpperCase(), value: e })),
|
||||||
|
isExported: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.entities.push(entityFile);
|
||||||
|
};
|
||||||
|
|
||||||
|
generateOneOf = (sName: string) => {
|
||||||
|
const entityFile = this.project.createSourceFile(`${EntDir}/${sName}.ts`);
|
||||||
|
entityFile.addStatements([
|
||||||
|
'// This file was autogenerated. Please do not change.',
|
||||||
|
'// All changes will be overwrited on commit.',
|
||||||
|
'',
|
||||||
|
]);
|
||||||
|
const importEntities: { type: string, isClass: boolean }[] = [];
|
||||||
|
const entities = this.schemas[sName].oneOf.map((elem: any) => {
|
||||||
|
const [
|
||||||
|
pType, isArray, isClass, isImport,
|
||||||
|
] = schemaParamParser(elem, this.openapi);
|
||||||
|
importEntities.push({ type: pType, isClass });
|
||||||
|
return { type: pType, isArray };
|
||||||
|
});
|
||||||
|
entityFile.addTypeAlias({
|
||||||
|
name: sName,
|
||||||
|
isExported: true,
|
||||||
|
type: entities.map((e: any) => e.isArray ? `I${e.type}[]` : `I${e.type}`).join(' | '),
|
||||||
|
})
|
||||||
|
|
||||||
|
// add import
|
||||||
|
importEntities.sort((a, b) => a.type > b.type ? 1 : -1).forEach((ie) => {
|
||||||
|
const { type: pType, isClass } = ie;
|
||||||
|
if (isClass) {
|
||||||
|
entityFile.addImportDeclaration({
|
||||||
|
moduleSpecifier: `./${pType}`,
|
||||||
|
namedImports: [`I${pType}`],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
entityFile.addImportDeclaration({
|
||||||
|
moduleSpecifier: `./${pType}`,
|
||||||
|
namedImports: [pType],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.entities.push(entityFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
generateClass = (sName: string) => {
|
||||||
|
const entityFile = this.project.createSourceFile(`${EntDir}/${sName}.ts`);
|
||||||
|
entityFile.addStatements([
|
||||||
|
'// This file was autogenerated. Please do not change.',
|
||||||
|
'// All changes will be overwrited on commit.',
|
||||||
|
'',
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
const { properties: sProps, required, $ref, additionalProperties } = this.schemas[sName];
|
||||||
|
if ($ref) {
|
||||||
|
const temp = $ref.split('/');
|
||||||
|
const importSchemaName = `${temp[temp.length - 1]}`;
|
||||||
|
entityFile.addImportDeclaration({
|
||||||
|
defaultImport: importSchemaName,
|
||||||
|
moduleSpecifier: `./${importSchemaName}`,
|
||||||
|
namedImports: [`I${importSchemaName}`],
|
||||||
|
});
|
||||||
|
|
||||||
|
entityFile.addTypeAlias({
|
||||||
|
name: `I${sName}`,
|
||||||
|
type: `I${importSchemaName}`,
|
||||||
|
isExported: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
entityFile.addStatements(`export default ${importSchemaName};`);
|
||||||
|
this.entities.push(entityFile);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const importEntities: { type: string, isClass: boolean }[] = [];
|
||||||
|
const entityInterface = entityFile.addInterface({
|
||||||
|
name: `I${sName}`,
|
||||||
|
isExported: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const sortedSProps = Object.keys(sProps || {}).sort();
|
||||||
|
const additionalPropsOnly = additionalProperties && sortedSProps.length === 0;
|
||||||
|
|
||||||
|
// add server response interface to entityFile
|
||||||
|
sortedSProps.forEach((sPropName) => {
|
||||||
|
const [
|
||||||
|
pType, isArray, isClass, isImport, isAdditional
|
||||||
|
] = schemaParamParser(sProps[sPropName], this.openapi);
|
||||||
|
|
||||||
|
if (isImport) {
|
||||||
|
importEntities.push({ type: pType, isClass });
|
||||||
|
}
|
||||||
|
const propertyType = isAdditional
|
||||||
|
? `{ [key: string]: ${isClass ? 'I' : ''}${pType}${isArray ? '[]' : ''} }`
|
||||||
|
: `${isClass ? 'I' : ''}${pType}${isArray ? '[]' : ''}`;
|
||||||
|
entityInterface.addProperty({
|
||||||
|
name: sPropName,
|
||||||
|
type: propertyType,
|
||||||
|
hasQuestionToken: !(
|
||||||
|
(required && required.includes(sPropName)) || sProps[sPropName].required
|
||||||
|
),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (additionalProperties) {
|
||||||
|
const [
|
||||||
|
pType, isArray, isClass, isImport, isAdditional
|
||||||
|
] = schemaParamParser(additionalProperties, this.openapi);
|
||||||
|
|
||||||
|
if (isImport) {
|
||||||
|
importEntities.push({ type: pType, isClass });
|
||||||
|
}
|
||||||
|
const type = isAdditional
|
||||||
|
? `{ [key: string]: ${isClass ? 'I' : ''}${pType}${isArray ? '[]' : ''} }`
|
||||||
|
: `${isClass ? 'I' : ''}${pType}${isArray ? '[]' : ''}`;
|
||||||
|
entityInterface.addIndexSignature({
|
||||||
|
keyName: 'key',
|
||||||
|
keyType: 'string',
|
||||||
|
returnType: additionalPropsOnly ? type : `${type} | undefined`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// add import
|
||||||
|
const imports: { type: string, isClass: boolean }[] = [];
|
||||||
|
const types: string[] = [];
|
||||||
|
importEntities.forEach((i) => {
|
||||||
|
const { type } = i;
|
||||||
|
if (!types.includes(type)) {
|
||||||
|
imports.push(i);
|
||||||
|
types.push(type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
imports.sort((a, b) => a.type > b.type ? 1 : -1).forEach((ie) => {
|
||||||
|
const { type: pType, isClass } = ie;
|
||||||
|
if (isClass) {
|
||||||
|
entityFile.addImportDeclaration({
|
||||||
|
defaultImport: pType,
|
||||||
|
moduleSpecifier: `./${pType}`,
|
||||||
|
namedImports: [`I${pType}`],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
entityFile.addImportDeclaration({
|
||||||
|
moduleSpecifier: `./${pType}`,
|
||||||
|
namedImports: [pType],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const entityClass = entityFile.addClass({
|
||||||
|
name: sName,
|
||||||
|
isDefaultExport: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// addProperties to class;
|
||||||
|
sortedSProps.forEach((sPropName) => {
|
||||||
|
const [pType, isArray, isClass, isImport, isAdditional] = schemaParamParser(sProps[sPropName], this.openapi);
|
||||||
|
|
||||||
|
const isRequred = (required && required.includes(sPropName))
|
||||||
|
|| sProps[sPropName].required;
|
||||||
|
|
||||||
|
const propertyType = isAdditional
|
||||||
|
? `{ [key: string]: ${pType}${isArray ? '[]' : ''}${isRequred ? '' : ' | undefined'} }`
|
||||||
|
: `${pType}${isArray ? '[]' : ''}${isRequred ? '' : ' | undefined'}`;
|
||||||
|
|
||||||
|
entityClass.addProperty({
|
||||||
|
name: `_${sPropName}`,
|
||||||
|
isReadonly: true,
|
||||||
|
type: propertyType,
|
||||||
|
});
|
||||||
|
const getter = entityClass.addGetAccessor({
|
||||||
|
name: toCamel(sPropName),
|
||||||
|
returnType: propertyType,
|
||||||
|
statements: [`return this._${sPropName};`],
|
||||||
|
});
|
||||||
|
const { description, example, minItems, maxItems, maxLength, minLength, maximum, minimum } = sProps[sPropName];
|
||||||
|
if (description || example) {
|
||||||
|
getter.addJsDoc(`${example ? `Description: ${description}` : ''}${example ? `\nExample: ${example}` : ''}`);
|
||||||
|
}
|
||||||
|
if (minItems) {
|
||||||
|
entityClass.addGetAccessor({
|
||||||
|
isStatic: true,
|
||||||
|
name: `${toCamel(sPropName)}MinItems`,
|
||||||
|
statements: [`return ${minItems};`],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (maxItems) {
|
||||||
|
entityClass.addGetAccessor({
|
||||||
|
isStatic: true,
|
||||||
|
name: `${toCamel(sPropName)}MaxItems`,
|
||||||
|
statements: [`return ${maxItems};`],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (typeof minLength === 'number') {
|
||||||
|
entityClass.addGetAccessor({
|
||||||
|
isStatic: true,
|
||||||
|
name: `${toCamel(sPropName)}MinLength`,
|
||||||
|
statements: [`return ${minLength};`],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (maxLength) {
|
||||||
|
entityClass.addGetAccessor({
|
||||||
|
isStatic: true,
|
||||||
|
name: `${toCamel(sPropName)}MaxLength`,
|
||||||
|
statements: [`return ${maxLength};`],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (typeof minimum === 'number') {
|
||||||
|
entityClass.addGetAccessor({
|
||||||
|
isStatic: true,
|
||||||
|
name: `${toCamel(sPropName)}MinValue`,
|
||||||
|
statements: [`return ${minimum};`],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (maximum) {
|
||||||
|
entityClass.addGetAccessor({
|
||||||
|
isStatic: true,
|
||||||
|
name: `${toCamel(sPropName)}MaxValue`,
|
||||||
|
statements: [`return ${maximum};`],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(isArray && isClass) && !isClass) {
|
||||||
|
const isEnum = !isClass && isImport;
|
||||||
|
const isRequired = (required && required.includes(sPropName)) || sProps[sPropName].required;
|
||||||
|
const { maxLength, minLength, maximum, minimum } = sProps[sPropName];
|
||||||
|
const haveValidationFields = maxLength || typeof minLength === 'number' || maximum || typeof minimum === 'number';
|
||||||
|
if (isRequired || haveValidationFields) {
|
||||||
|
const prop = toCamel(sPropName);
|
||||||
|
const validateField = entityClass.addMethod({
|
||||||
|
isStatic: true,
|
||||||
|
name: `${prop}Validate`,
|
||||||
|
returnType: `boolean`,
|
||||||
|
parameters: [{
|
||||||
|
name: prop,
|
||||||
|
type: `${pType}${isArray ? '[]' : ''}${isRequred ? '' : ' | undefined'}`,
|
||||||
|
}],
|
||||||
|
})
|
||||||
|
|
||||||
|
validateField.setBodyText((w) => {
|
||||||
|
w.write('return ');
|
||||||
|
const nonRequiredCall = isRequired ? prop : `!${prop} ? true : ${prop}`;
|
||||||
|
if (pType === 'string') {
|
||||||
|
if (isArray) {
|
||||||
|
w.write(`${nonRequiredCall}.reduce<boolean>((result, p) => result && (typeof p === 'string' && !!p.trim()), true)`);
|
||||||
|
} else {
|
||||||
|
if (typeof minLength === 'number' && maxLength) {
|
||||||
|
w.write(`(${nonRequiredCall}.length >${minLength > 0 ? '=' : ''} ${minLength}) && (${nonRequiredCall}.length <= ${maxLength})`);
|
||||||
|
}
|
||||||
|
if (typeof minLength !== 'number' || !maxLength) {
|
||||||
|
w.write(`${isRequired ? `typeof ${prop} === 'string'` : `!${prop} ? true : typeof ${prop} === 'string'`} && !!${nonRequiredCall}.trim()`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (pType === 'number') {
|
||||||
|
if (isArray) {
|
||||||
|
w.write(`${nonRequiredCall}.reduce<boolean>((result, p) => result && typeof p === 'number', true)`);
|
||||||
|
} else {
|
||||||
|
if (typeof minimum === 'number' && maximum) {
|
||||||
|
w.write(`${isRequired ? `${prop} >= ${minimum} && ${prop} <= ${maximum}` : `!${prop} ? true : ((${prop} >= ${minimum}) && (${prop} <= ${maximum}))`}`);
|
||||||
|
}
|
||||||
|
if (typeof minimum !== 'number' || !maximum) {
|
||||||
|
w.write(`${isRequired ? `typeof ${prop} === 'number'` : `!${prop} ? true : typeof ${prop} === 'number'`}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (pType === 'boolean') {
|
||||||
|
w.write(`${isRequired ? `typeof ${prop} === 'boolean'` : `!${prop} ? true : typeof ${prop} === 'boolean'`}`);
|
||||||
|
} else if (isEnum) {
|
||||||
|
if (isArray){
|
||||||
|
w.write(`${nonRequiredCall}.reduce<boolean>((result, p) => result && Object.keys(${pType}).includes(${prop}), true)`);
|
||||||
|
} else {
|
||||||
|
w.write(`${isRequired ? `Object.keys(${pType}).includes(${prop})` : `!${prop} ? true : typeof ${prop} === 'boolean'`}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
w.write(';');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (additionalProperties) {
|
||||||
|
const [
|
||||||
|
pType, isArray, isClass, isImport, isAdditional
|
||||||
|
] = schemaParamParser(additionalProperties, this.openapi);
|
||||||
|
const type = `Record<string, ${pType}${isArray ? '[]' : ''}>`;
|
||||||
|
|
||||||
|
entityClass.addProperty({
|
||||||
|
name: additionalPropsOnly ? 'data' : `${uncapitalize(pType)}Data`,
|
||||||
|
isReadonly: true,
|
||||||
|
type: type,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// add constructor;
|
||||||
|
const ctor = entityClass.addConstructor({
|
||||||
|
parameters: [{
|
||||||
|
name: 'props',
|
||||||
|
type: `I${sName}`,
|
||||||
|
}],
|
||||||
|
});
|
||||||
|
ctor.setBodyText((w) => {
|
||||||
|
if (additionalProperties) {
|
||||||
|
const [
|
||||||
|
pType, isArray, isClass, isImport, isAdditional
|
||||||
|
] = schemaParamParser(additionalProperties, this.openapi);
|
||||||
|
w.writeLine(`this.${additionalPropsOnly ? 'data' : `${uncapitalize(pType)}Data`} = Object.entries(props).reduce<Record<string, ${pType}>>((prev, [key, value]) => {`);
|
||||||
|
if (isClass) {
|
||||||
|
w.writeLine(` prev[key] = new ${pType}(value!);`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(' prev[key] = value!;')
|
||||||
|
}
|
||||||
|
w.writeLine(' return prev;');
|
||||||
|
w.writeLine('}, {})');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sortedSProps.forEach((sPropName) => {
|
||||||
|
const [
|
||||||
|
pType, isArray, isClass, , isAdditional
|
||||||
|
] = schemaParamParser(sProps[sPropName], this.openapi);
|
||||||
|
const req = (required && required.includes(sPropName))
|
||||||
|
|| sProps[sPropName].required;
|
||||||
|
if (!req) {
|
||||||
|
if ((pType === 'boolean' || pType === 'number' || pType ==='string') && !isClass && !isArray) {
|
||||||
|
w.writeLine(`if (typeof props.${sPropName} === '${pType}') {`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(`if (props.${sPropName}) {`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isAdditional) {
|
||||||
|
if (isArray && isClass) {
|
||||||
|
w.writeLine(`${!req ? ' ' : ''}this._${sPropName} = props.${sPropName}.map((p) => Object.keys(p).reduce((prev, key) => {
|
||||||
|
return { ...prev, [key]: new ${pType}(p[key])};
|
||||||
|
},{}))`);
|
||||||
|
} else if (isClass) {
|
||||||
|
w.writeLine(`${!req ? ' ' : ''}this._${sPropName} = Object.keys(props.${sPropName}).reduce((prev, key) => {
|
||||||
|
return { ...prev, [key]: new ${pType}(props.${sPropName}[key])};
|
||||||
|
},{})`);
|
||||||
|
} else {
|
||||||
|
if (pType === 'string' && !isArray) {
|
||||||
|
w.writeLine(`${!req ? ' ' : ''}this._${sPropName} = Object.keys(props.${sPropName}).reduce((prev, key) => {
|
||||||
|
return { ...prev, [key]: props.${sPropName}[key].trim()};
|
||||||
|
},{})`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(`${!req ? ' ' : ''}this._${sPropName} = Object.keys(props.${sPropName}).reduce((prev, key) => {
|
||||||
|
return { ...prev, [key]: props.${sPropName}[key]};
|
||||||
|
},{})`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (isArray && isClass) {
|
||||||
|
w.writeLine(`${!req ? ' ' : ''}this._${sPropName} = props.${sPropName}.map((p) => new ${pType}(p));`);
|
||||||
|
} else if (isClass) {
|
||||||
|
w.writeLine(`${!req ? ' ' : ''}this._${sPropName} = new ${pType}(props.${sPropName});`);
|
||||||
|
} else {
|
||||||
|
if (pType === 'string' && !isArray) {
|
||||||
|
w.writeLine(`${!req ? ' ' : ''}this._${sPropName} = props.${sPropName}.trim();`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(`${!req ? ' ' : ''}this._${sPropName} = props.${sPropName};`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!req) {
|
||||||
|
w.writeLine('}');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// add serialize method;
|
||||||
|
const serialize = entityClass.addMethod({
|
||||||
|
isStatic: false,
|
||||||
|
name: 'serialize',
|
||||||
|
returnType: `I${sName}`,
|
||||||
|
});
|
||||||
|
serialize.setBodyText((w) => {
|
||||||
|
if (additionalProperties) {
|
||||||
|
const [
|
||||||
|
pType, isArray, isClass, isImport, isAdditional
|
||||||
|
] = schemaParamParser(additionalProperties, this.openapi);
|
||||||
|
w.writeLine(`return Object.entries(this.${additionalPropsOnly ? 'data' : `${uncapitalize(pType)}Data`}).reduce<Record<string, ${isClass ? 'I' : ''}${pType}>>((prev, [key, value]) => {`);
|
||||||
|
if (isClass) {
|
||||||
|
w.writeLine(` prev[key] = value.serialize();`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(' prev[key] = value;')
|
||||||
|
}
|
||||||
|
w.writeLine(' return prev;');
|
||||||
|
w.writeLine('}, {})');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
w.writeLine(`const data: I${sName} = {`);
|
||||||
|
const unReqFields: string[] = [];
|
||||||
|
sortedSProps.forEach((sPropName) => {
|
||||||
|
const req = (required && required.includes(sPropName))
|
||||||
|
|| sProps[sPropName].required;
|
||||||
|
const [, isArray, isClass, , isAdditional] = schemaParamParser(sProps[sPropName], this.openapi);
|
||||||
|
if (!req) {
|
||||||
|
unReqFields.push(sPropName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isAdditional) {
|
||||||
|
if (isArray && isClass) {
|
||||||
|
w.writeLine(` ${sPropName}: this._${sPropName}.map((p) => Object.keys(p).reduce((prev, key) => ({ ...prev, [key]: p[key].serialize() }))),`);
|
||||||
|
} else if (isClass) {
|
||||||
|
w.writeLine(` ${sPropName}: Object.keys(this._${sPropName}).reduce<Record<string, any>>((prev, key) => ({ ...prev, [key]: this._${sPropName}[key].serialize() }), {}),`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(` ${sPropName}: Object.keys(this._${sPropName}).reduce((prev, key) => ({ ...prev, [key]: this._${sPropName}[key] })),`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (isArray && isClass) {
|
||||||
|
w.writeLine(` ${sPropName}: this._${sPropName}.map((p) => p.serialize()),`);
|
||||||
|
} else if (isClass) {
|
||||||
|
w.writeLine(` ${sPropName}: this._${sPropName}.serialize(),`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(` ${sPropName}: this._${sPropName},`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
w.writeLine('};');
|
||||||
|
unReqFields.forEach((sPropName) => {
|
||||||
|
const [, isArray, isClass, , isAdditional] = schemaParamParser(sProps[sPropName], this.openapi);
|
||||||
|
w.writeLine(`if (typeof this._${sPropName} !== 'undefined') {`);
|
||||||
|
if (isAdditional) {
|
||||||
|
if (isArray && isClass) {
|
||||||
|
w.writeLine(` data.${sPropName} = this._${sPropName}.map((p) => Object.keys(p).reduce((prev, key) => ({ ...prev, [key]: p[key].serialize() }), {}));`);
|
||||||
|
} else if (isClass) {
|
||||||
|
w.writeLine(` data.${sPropName} = Object.keys(this._${sPropName}).reduce((prev, key) => ({ ...prev, [key]: this._${sPropName}[key].serialize() }), {});`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(` data.${sPropName} = Object.keys(this._${sPropName}).reduce((prev, key) => ({ ...prev, [key]: this._${sPropName}[key] }), {});`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (isArray && isClass) {
|
||||||
|
w.writeLine(` data.${sPropName} = this._${sPropName}.map((p) => p.serialize());`);
|
||||||
|
} else if (isClass) {
|
||||||
|
w.writeLine(` data.${sPropName} = this._${sPropName}.serialize();`);
|
||||||
|
} else {
|
||||||
|
w.writeLine(` data.${sPropName} = this._${sPropName};`);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
w.writeLine(`}`);
|
||||||
|
});
|
||||||
|
w.writeLine('return data;');
|
||||||
|
});
|
||||||
|
|
||||||
|
// add validate method
|
||||||
|
const validate = entityClass.addMethod({
|
||||||
|
isStatic: false,
|
||||||
|
name: 'validate',
|
||||||
|
returnType: `string[]`,
|
||||||
|
})
|
||||||
|
validate.setBodyText((w) => {
|
||||||
|
if (additionalPropsOnly) {
|
||||||
|
w.writeLine('return []')
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
w.writeLine('const validate = {');
|
||||||
|
Object.keys(sProps || {}).forEach((sPropName) => {
|
||||||
|
const [pType, isArray, isClass, , isAdditional] = schemaParamParser(sProps[sPropName], this.openapi);
|
||||||
|
|
||||||
|
const { maxLength, minLength, maximum, minimum } = sProps[sPropName];
|
||||||
|
|
||||||
|
const isRequired = (required && required.includes(sPropName)) || sProps[sPropName].required;
|
||||||
|
const nonRequiredCall = isRequired ? `this._${sPropName}` : `!this._${sPropName} ? true : this._${sPropName}`;
|
||||||
|
|
||||||
|
if (isArray && isClass) {
|
||||||
|
w.writeLine(` ${sPropName}: ${nonRequiredCall}.reduce((result, p) => result && p.validate().length === 0, true),`);
|
||||||
|
} else if (isClass && !isAdditional) {
|
||||||
|
w.writeLine(` ${sPropName}: ${nonRequiredCall}.validate().length === 0,`);
|
||||||
|
} else {
|
||||||
|
if (pType === 'string') {
|
||||||
|
if (isArray) {
|
||||||
|
w.writeLine(` ${sPropName}: ${nonRequiredCall}.reduce((result, p) => result && typeof p === 'string', true),`);
|
||||||
|
} else {
|
||||||
|
if (typeof minLength === 'number' && maxLength) {
|
||||||
|
w.writeLine(` ${sPropName}: (${nonRequiredCall}.length >${minLength > 0 ? '=' : ''} ${minLength}) && (${nonRequiredCall}.length <= ${maxLength}),`);
|
||||||
|
}
|
||||||
|
if (typeof minLength !== 'number' || !maxLength) {
|
||||||
|
w.writeLine(` ${sPropName}: ${isRequired ? `typeof this._${sPropName} === 'string'` : `!this._${sPropName} ? true : typeof this._${sPropName} === 'string'`} && !this._${sPropName} ? true : this._${sPropName},`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (pType === 'number') {
|
||||||
|
if (isArray) {
|
||||||
|
w.writeLine(` ${sPropName}: ${nonRequiredCall}.reduce((result, p) => result && typeof p === 'number', true),`);
|
||||||
|
} else {
|
||||||
|
if (typeof minimum === 'number' && maximum) {
|
||||||
|
w.writeLine(` ${sPropName}: ${isRequired ? `this._${sPropName} >= ${minimum} && this._${sPropName} <= ${maximum}` : `!this._${sPropName} ? true : ((this._${sPropName} >= ${minimum}) && (this._${sPropName} <= ${maximum}))`},`);
|
||||||
|
}
|
||||||
|
if (typeof minimum !== 'number' || !maximum) {
|
||||||
|
w.writeLine(` ${sPropName}: ${isRequired ? `typeof this._${sPropName} === 'number'` : `!this._${sPropName} ? true : typeof this._${sPropName} === 'number'`},`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (pType === 'boolean') {
|
||||||
|
w.writeLine(` ${sPropName}: ${isRequired ? `typeof this._${sPropName} === 'boolean'` : `!this._${sPropName} ? true : typeof this._${sPropName} === 'boolean'`},`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
w.writeLine('};');
|
||||||
|
w.writeLine('const isError: string[] = [];')
|
||||||
|
w.writeLine('Object.keys(validate).forEach((key) => {');
|
||||||
|
w.writeLine(' if (!(validate as any)[key]) {');
|
||||||
|
w.writeLine(' isError.push(key);');
|
||||||
|
w.writeLine(' }');
|
||||||
|
w.writeLine('});');
|
||||||
|
w.writeLine('return isError;');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// add update method;
|
||||||
|
const update = entityClass.addMethod({
|
||||||
|
isStatic: false,
|
||||||
|
name: 'update',
|
||||||
|
returnType: `${sName}`,
|
||||||
|
});
|
||||||
|
update.addParameter({
|
||||||
|
name: 'props',
|
||||||
|
type: additionalPropsOnly ? `I${sName}` : `Partial<I${sName}>`,
|
||||||
|
});
|
||||||
|
update.setBodyText((w) => { w.writeLine(`return new ${sName}({ ...this.serialize(), ...props });`); });
|
||||||
|
|
||||||
|
this.entities.push(entityFile);
|
||||||
|
};
|
||||||
|
|
||||||
|
save = () => {
|
||||||
|
this.entities.forEach(async (e) => {
|
||||||
|
await e.saveSync();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default EntitiesGenerator;
|
83
client2/scripts/generator/src/utils.ts
Normal file
83
client2/scripts/generator/src/utils.ts
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
const toCamel = (s: string) => {
|
||||||
|
return s.replace(/([-_][a-z])/ig, ($1) => {
|
||||||
|
return $1.toUpperCase()
|
||||||
|
.replace('-', '')
|
||||||
|
.replace('_', '');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const capitalize = (s: string) => {
|
||||||
|
return s[0].toUpperCase() + s.slice(1);
|
||||||
|
};
|
||||||
|
const uncapitalize = (s: string) => {
|
||||||
|
return s[0].toLowerCase() + s.slice(1);
|
||||||
|
};
|
||||||
|
const TYPES = {
|
||||||
|
integer: 'number',
|
||||||
|
float: 'number',
|
||||||
|
number: 'number',
|
||||||
|
string: 'string',
|
||||||
|
boolean: 'boolean',
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param schemaProp: valueof shema.properties[key]
|
||||||
|
* @param openApi: openapi object
|
||||||
|
* @returns [propType - basicType or import one, isArray, isClass, isImport]
|
||||||
|
*/
|
||||||
|
const schemaParamParser = (schemaProp: any, openApi: any): [string, boolean, boolean, boolean, boolean] => {
|
||||||
|
let type = '';
|
||||||
|
let isImport = false;
|
||||||
|
let isClass = false;
|
||||||
|
let isArray = false;
|
||||||
|
let isAdditional = false;
|
||||||
|
|
||||||
|
if (schemaProp.$ref || schemaProp.additionalProperties?.$ref) {
|
||||||
|
const temp = (schemaProp.$ref || schemaProp.additionalProperties?.$ref).split('/');
|
||||||
|
|
||||||
|
if (schemaProp.additionalProperties) {
|
||||||
|
isAdditional = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
type = `${temp[temp.length - 1]}`;
|
||||||
|
|
||||||
|
const cl = openApi ? openApi.components.schemas[type] : {};
|
||||||
|
|
||||||
|
if (cl.$ref) {
|
||||||
|
const link = schemaParamParser(cl, openApi);
|
||||||
|
link.shift();
|
||||||
|
return [type, ...link] as any;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cl.type === 'string' && cl.enum) {
|
||||||
|
isImport = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cl.type === 'object' && !cl.oneOf) {
|
||||||
|
isClass = true;
|
||||||
|
isImport = true;
|
||||||
|
} else if (cl.type === 'array') {
|
||||||
|
const temp: any = schemaParamParser(cl.items, openApi);
|
||||||
|
type = `${temp[0]}`;
|
||||||
|
isArray = true;
|
||||||
|
isClass = isClass || temp[2];
|
||||||
|
isImport = isImport || temp[3];
|
||||||
|
}
|
||||||
|
} else if (schemaProp.type === 'array') {
|
||||||
|
const temp: any = schemaParamParser(schemaProp.items, openApi);
|
||||||
|
type = `${temp[0]}`;
|
||||||
|
isArray = true;
|
||||||
|
isClass = isClass || temp[2];
|
||||||
|
isImport = isImport || temp[3];
|
||||||
|
} else {
|
||||||
|
type = (TYPES as Record<any, string>)[schemaProp.type];
|
||||||
|
}
|
||||||
|
if (!type) {
|
||||||
|
// TODO: Fix bug with Error fields.
|
||||||
|
type = 'any';
|
||||||
|
// throw new Error('Failed to find entity type');
|
||||||
|
}
|
||||||
|
|
||||||
|
return [type, isArray, isClass, isImport, isAdditional];
|
||||||
|
};
|
||||||
|
|
||||||
|
export { TYPES, toCamel, capitalize, uncapitalize, schemaParamParser };
|
226
client2/scripts/helpers/checkTranslations.ts
Normal file
226
client2/scripts/helpers/checkTranslations.ts
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
import * as fs from 'fs';
|
||||||
|
import {
|
||||||
|
Project,
|
||||||
|
VariableStatement,
|
||||||
|
SyntaxKind,
|
||||||
|
Node,
|
||||||
|
Statement,
|
||||||
|
ts,
|
||||||
|
Identifier,
|
||||||
|
SourceFile,
|
||||||
|
} from 'ts-morph';
|
||||||
|
import {
|
||||||
|
LOCALE_FOLDER_PATH,
|
||||||
|
TRANSLATOR_CLASS_NAME,
|
||||||
|
USE_INTL_NAME,
|
||||||
|
trimQuotes,
|
||||||
|
} from '../consts';
|
||||||
|
import { checkForms, AvailableLocales } from '../../src/localization/Translator';
|
||||||
|
|
||||||
|
const project = new Project({
|
||||||
|
tsConfigFilePath: './tsconfig.json',
|
||||||
|
});
|
||||||
|
|
||||||
|
let lang = 'ru';
|
||||||
|
let option = '';
|
||||||
|
|
||||||
|
if (process.argv.length > 2) {
|
||||||
|
lang = process.argv[2];
|
||||||
|
option = process.argv[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
const usedTranslations: string[] = [];
|
||||||
|
const usedPluralTranslations: string[] = [];
|
||||||
|
|
||||||
|
const problemFiles: string[] = [];
|
||||||
|
const sourceFiles = project.getSourceFiles();
|
||||||
|
const sourceFilesWithIntl = sourceFiles.filter((sf) => {
|
||||||
|
return !!sf.getImportDeclarations().find((id) => {
|
||||||
|
return !!id.getNamedImports().find((ni) => ni.getName() === USE_INTL_NAME)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
const getFileUsedIntl = (statements: Statement<ts.Statement>[]) => {
|
||||||
|
statements.forEach((s) => {
|
||||||
|
if (s instanceof VariableStatement) {
|
||||||
|
s.forEachDescendant((node) => {
|
||||||
|
let intVariableDeclaration: Identifier = null;
|
||||||
|
switch (node.getKind()) {
|
||||||
|
case SyntaxKind.VariableDeclaration:
|
||||||
|
if (node.getSymbol()) {
|
||||||
|
const name = node.getSymbol().getName();
|
||||||
|
const callExp = node.getChildren().find((n) => n.getKind() === SyntaxKind.CallExpression);
|
||||||
|
if (callExp) {
|
||||||
|
const callExpIden = callExp.getChildren().find(n => n.getKind() === SyntaxKind.Identifier);
|
||||||
|
if (callExpIden && callExpIden.getSymbol().getName() === USE_INTL_NAME) {
|
||||||
|
intVariableDeclaration = node as Identifier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (intVariableDeclaration) {
|
||||||
|
intVariableDeclaration.findReferencesAsNodes().forEach((fr) => {
|
||||||
|
if (fr instanceof Node) {
|
||||||
|
const parent = fr.getParentIfKind(SyntaxKind.PropertyAccessExpression);
|
||||||
|
if (parent && (parent.getName() === 'getMessage' || parent.getName() === 'getPlural')) {
|
||||||
|
const syntaxList = parent.getNextSiblings().find((n) => n.getKind() === SyntaxKind.SyntaxList);
|
||||||
|
if (syntaxList) {
|
||||||
|
const id = syntaxList.getChildren()[0];
|
||||||
|
if (id && id.getKind() !== SyntaxKind.StringLiteral) {
|
||||||
|
problemFiles.push(fr.getSourceFile().getFilePath());
|
||||||
|
}
|
||||||
|
if (id) {
|
||||||
|
usedTranslations.push(trimQuotes(id.getText()));
|
||||||
|
if (parent.getName() === 'getPlural') {
|
||||||
|
usedPluralTranslations.push(trimQuotes(id.getText()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const getFileUsedTranslations = (file: SourceFile) => {
|
||||||
|
const namedImport = file.getImportDeclarations().find((id) => !!id.getNamedImports().find((ni) => ni.getName() === TRANSLATOR_CLASS_NAME));
|
||||||
|
if (namedImport) {
|
||||||
|
const identifier = namedImport.getImportClause().getNamedImports().find((iden) => iden.getName() === TRANSLATOR_CLASS_NAME);
|
||||||
|
const translateReferences = identifier.getNodeProperty('name').findReferencesAsNodes();
|
||||||
|
if (translateReferences.length > 0) {
|
||||||
|
translateReferences.forEach((identifierNode) => {
|
||||||
|
if (identifierNode.getParentIfKind(SyntaxKind.TypeReference)) {
|
||||||
|
const translatorVariable = identifierNode.getParent().getPreviousSibling().getPreviousSiblingIfKind(SyntaxKind.Identifier);
|
||||||
|
if (translatorVariable) {
|
||||||
|
translatorVariable.findReferencesAsNodes().forEach((node) => {
|
||||||
|
const parent = node.getParentIfKind(SyntaxKind.PropertyAccessExpression);
|
||||||
|
if (parent && (parent.getName() === 'getMessage' || parent.getName() === 'getPlural')) {
|
||||||
|
|
||||||
|
const syntaxList = parent.getNextSiblings().find((n) => n.getKind() === SyntaxKind.SyntaxList);
|
||||||
|
if (syntaxList) {
|
||||||
|
const id = syntaxList.getChildren()[0];
|
||||||
|
if (id && id.getKind() !== SyntaxKind.StringLiteral) {
|
||||||
|
problemFiles.push(parent.getSourceFile().getFilePath());
|
||||||
|
}
|
||||||
|
if (id) {
|
||||||
|
usedTranslations.push(trimQuotes(id.getText()));
|
||||||
|
if (parent.getName() === 'getPlural') {
|
||||||
|
usedPluralTranslations.push(trimQuotes(id.getText()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sourceFilesWithIntl.forEach((file) => {
|
||||||
|
getFileUsedIntl(file.getStatements());
|
||||||
|
})
|
||||||
|
|
||||||
|
const sourceFilesWithTranslator = project.getSourceFiles().filter((sf) => {
|
||||||
|
return !!sf.getImportDeclarations().find((id) => {
|
||||||
|
return !!id.getNamedImports().find((ni) => ni.getName() === TRANSLATOR_CLASS_NAME)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
sourceFilesWithTranslator.forEach((file) => {
|
||||||
|
getFileUsedTranslations(file);
|
||||||
|
})
|
||||||
|
const filteredUsedTranslations = Array.from(new Set(usedTranslations));
|
||||||
|
const filteredUsedPluralTranslations = Array.from(new Set(usedPluralTranslations));
|
||||||
|
|
||||||
|
if (problemFiles.length) {
|
||||||
|
console.warn(`\n============== Files where translation id provided not as string ==============\n`);
|
||||||
|
console.log(problemFiles.join('\n'));
|
||||||
|
process.exit(255);
|
||||||
|
}
|
||||||
|
|
||||||
|
const allFiles = fs.readdirSync(LOCALE_FOLDER_PATH);
|
||||||
|
// Use ru or needed language
|
||||||
|
const translationFile = allFiles.find((file) => file.includes(`${lang}.json`));
|
||||||
|
|
||||||
|
if (!translationFile) {
|
||||||
|
console.error('File not found');
|
||||||
|
process.exit(255);
|
||||||
|
}
|
||||||
|
|
||||||
|
const translationsObject = JSON.parse(fs.readFileSync(`./src/lib/intl/__locales/${translationFile}`, { flag: 'r+' }) as unknown as string);
|
||||||
|
const translations = {
|
||||||
|
locale: translationFile,
|
||||||
|
messages: Object.keys(translationsObject),
|
||||||
|
};
|
||||||
|
|
||||||
|
const someMessagesNotFound: string[] = [];
|
||||||
|
const notUsed: string[] = [];
|
||||||
|
const notFound: string[] = [];
|
||||||
|
const checkLocaleMessages = (locale: string, messages: string[]) => {
|
||||||
|
filteredUsedTranslations.forEach(f => {
|
||||||
|
if (!messages.includes(f)) {
|
||||||
|
notFound.push(f);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
messages.forEach(t => {
|
||||||
|
if (!filteredUsedTranslations.includes(t)) {
|
||||||
|
notUsed.push(t);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (notFound.length > 0) {
|
||||||
|
someMessagesNotFound.push(locale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const render = (data: string[], title: string) => {
|
||||||
|
console.log(`============ ${title} ============`);
|
||||||
|
console.table(data);
|
||||||
|
console.log(`============ ${title} ============`);
|
||||||
|
}
|
||||||
|
|
||||||
|
checkLocaleMessages(translations.locale, translations.messages);
|
||||||
|
|
||||||
|
const checkPluralForm = () => {
|
||||||
|
const pluralFormWrong: string[] = [];
|
||||||
|
filteredUsedPluralTranslations.forEach((id) => {
|
||||||
|
const message = translationsObject[id];
|
||||||
|
if (!checkForms(message, lang as AvailableLocales, id)) {
|
||||||
|
pluralFormWrong.push(id)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return pluralFormWrong;
|
||||||
|
}
|
||||||
|
|
||||||
|
const plural = checkPluralForm();
|
||||||
|
if (!option && (someMessagesNotFound.length || plural.length > 0 )) {
|
||||||
|
someMessagesNotFound.forEach(locale => console.error(`\nSome translatins for ${locale} was not found!\n`));
|
||||||
|
plural.forEach(id => console.error(`\nTranslation with id: "${id}" - have wrong number of plural forms!\n`));
|
||||||
|
process.exit(255);
|
||||||
|
}
|
||||||
|
if (option) {
|
||||||
|
switch (option) {
|
||||||
|
case '--show-missing': {
|
||||||
|
render(notFound, 'NotFound')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case '--show-unused': {
|
||||||
|
render(notUsed, 'notUsed')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case '--check-plurals': {
|
||||||
|
render(plural, 'Wrong Plural Form')
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
if (someMessagesNotFound.length) {
|
||||||
|
someMessagesNotFound.forEach(locale => console.error(`\nSome translatins for ${locale} was not found!\n\n`));
|
||||||
|
process.exit(255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user