Resolve conflict

This commit is contained in:
ArtemBaskal 2020-07-03 16:58:23 +03:00
commit c12309a1b2
114 changed files with 4241 additions and 1444 deletions

View File

@ -1204,8 +1204,9 @@ When a new DNS request is received and processed, we store information about thi
"QH":"...", // target host name without the last dot "QH":"...", // target host name without the last dot
"QT":"...", // question type "QT":"...", // question type
"QC":"...", // question class "QC":"...", // question class
"Answer":"...", "CP":"" | "doh", // client connection protocol
"OrigAnswer":"...", "Answer":"base64 data",
"OrigAnswer":"base64 data",
"Result":{ "Result":{
"IsFiltered":true, "IsFiltered":true,
"Reason":3, "Reason":3,
@ -1238,16 +1239,28 @@ Request:
GET /control/querylog GET /control/querylog
?older_than=2006-01-02T15:04:05.999999999Z07:00 ?older_than=2006-01-02T15:04:05.999999999Z07:00
&filter_domain=... &search=...
&filter_client=... &response_status="..."
&filter_question_type=A | AAAA
&filter_response_status= | filtered
`older_than` setting is used for paging. UI uses an empty value for `older_than` on the first request and gets the latest log entries. To get the older entries, UI sets `older_than` to the `oldest` value from the server's response. `older_than` setting is used for paging. UI uses an empty value for `older_than` on the first request and gets the latest log entries. To get the older entries, UI sets `older_than` to the `oldest` value from the server's response.
If "filter" settings are set, server returns only entries that match the specified request. If search settings are set, server returns only entries that match the specified request.
For `filter.domain` and `filter.client` the server matches substrings by default: `adguard.com` matches `www.adguard.com`. Strict matching can be enabled by enclosing the value in double quotes: `"adguard.com"` matches `adguard.com` but doesn't match `www.adguard.com`. `search`:
match by domain name or client IP address.
The server matches substrings by default: e.g. `adguard.com` matches `www.adguard.com`.
Strict matching can be enabled by enclosing the value in double quotes: e.g. `"adguard.com"` matches `adguard.com` but doesn't match `www.adguard.com`.
`response_status`:
* all
* filtered - all kinds of filtering
* blocked - blocked or blocked service
* blocked_safebrowsing - blocked by safebrowsing
* blocked_parental - blocked by parental control
* whitelisted - whitelisted
* rewritten - all kinds of rewrites
* safe_search - enforced safe search
* processed - not blocked, not white-listed entries
Response: Response:
@ -1270,8 +1283,10 @@ Response:
} }
... ...
], ],
"upstream":"...", // Upstream URL starting with tcp://, tls://, https://, or with an IP address
"answer_dnssec": true, "answer_dnssec": true,
"client":"127.0.0.1", "client":"127.0.0.1",
"client_proto": "" (plain) | "doh" | "dot",
"elapsedMs":"0.098403", "elapsedMs":"0.098403",
"filterId":1, "filterId":1,
"question":{ "question":{
@ -1291,6 +1306,8 @@ Response:
The most recent entries are at the top of list. The most recent entries are at the top of list.
If there are no more older entries, `"oldest":""` is returned.
### API: Set querylog parameters ### API: Set querylog parameters

View File

@ -132,7 +132,20 @@ AdGuard Home provides a lot of features out-of-the-box with no need to install a
It depends. 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). 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). "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).
**Known limitations**
Here are some examples of what cannot be blocked by a DNS-level blocker:
* YouTube, Twitch ads
* Facebook, Twitter, Instagram sponsored posts
Essentially, any advertising that shares a domain with content cannot be blocked by a DNS-level blocker.
Is there a chance to handle this in the future? DNS will never be enough to do this. Our only option is to use a content blocking proxy like what we do in the standalone AdGuard applications. We're [going to bring](https://github.com/AdguardTeam/AdGuardHome/issues/1228) this feature support to AdGuard Home in the future. Unfortunately, even in this case, there still will be cases when this won't be enough or would require quite complicated configuration.
<a id="how-to-build"></a> <a id="how-to-build"></a>
## How to build from source ## How to build from source

82
client/package-lock.json generated vendored
View File

@ -4498,6 +4498,15 @@
"sha.js": "^2.4.8" "sha.js": "^2.4.8"
} }
}, },
"create-react-context": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz",
"integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==",
"requires": {
"gud": "^1.0.0",
"warning": "^4.0.3"
}
},
"cross-env": { "cross-env": {
"version": "7.0.2", "version": "7.0.2",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz",
@ -4800,7 +4809,6 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
"integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
"dev": true,
"requires": { "requires": {
"is-arguments": "^1.0.4", "is-arguments": "^1.0.4",
"is-date-object": "^1.0.1", "is-date-object": "^1.0.1",
@ -4836,7 +4844,6 @@
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"requires": { "requires": {
"object-keys": "^1.0.12" "object-keys": "^1.0.12"
} }
@ -5264,7 +5271,6 @@
"version": "1.17.5", "version": "1.17.5",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
"integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
"dev": true,
"requires": { "requires": {
"es-to-primitive": "^1.2.1", "es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1", "function-bind": "^1.1.1",
@ -5283,7 +5289,6 @@
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
"requires": { "requires": {
"is-callable": "^1.1.4", "is-callable": "^1.1.4",
"is-date-object": "^1.0.1", "is-date-object": "^1.0.1",
@ -6706,8 +6711,7 @@
"function-bind": { "function-bind": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
"dev": true
}, },
"functional-red-black-tree": { "functional-red-black-tree": {
"version": "1.0.1", "version": "1.0.1",
@ -6989,6 +6993,11 @@
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"gud": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz",
"integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw=="
},
"handle-thing": { "handle-thing": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
@ -7021,7 +7030,6 @@
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": { "requires": {
"function-bind": "^1.1.1" "function-bind": "^1.1.1"
} }
@ -7034,8 +7042,7 @@
"has-symbols": { "has-symbols": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
"dev": true
}, },
"has-value": { "has-value": {
"version": "1.0.0", "version": "1.0.0",
@ -7759,8 +7766,7 @@
"is-arguments": { "is-arguments": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
"integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
"dev": true
}, },
"is-arrayish": { "is-arrayish": {
"version": "0.2.1", "version": "0.2.1",
@ -7785,8 +7791,7 @@
"is-callable": { "is-callable": {
"version": "1.1.5", "version": "1.1.5",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
"integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="
"dev": true
}, },
"is-ci": { "is-ci": {
"version": "2.0.0", "version": "2.0.0",
@ -7820,8 +7825,7 @@
"is-date-object": { "is-date-object": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
"dev": true
}, },
"is-decimal": { "is-decimal": {
"version": "1.0.4", "version": "1.0.4",
@ -7974,7 +7978,6 @@
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
"integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
"dev": true,
"requires": { "requires": {
"has": "^1.0.3" "has": "^1.0.3"
} }
@ -8000,7 +8003,6 @@
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
"integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
"dev": true,
"requires": { "requires": {
"has-symbols": "^1.0.1" "has-symbols": "^1.0.1"
} }
@ -11117,14 +11119,12 @@
"object-inspect": { "object-inspect": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
"integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
"dev": true
}, },
"object-is": { "object-is": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
"integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
"dev": true,
"requires": { "requires": {
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.5" "es-abstract": "^1.17.5"
@ -11133,8 +11133,7 @@
"object-keys": { "object-keys": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
"dev": true
}, },
"object-visit": { "object-visit": {
"version": "1.0.1", "version": "1.0.1",
@ -11149,7 +11148,6 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
"dev": true,
"requires": { "requires": {
"define-properties": "^1.1.2", "define-properties": "^1.1.2",
"function-bind": "^1.1.1", "function-bind": "^1.1.1",
@ -11630,6 +11628,11 @@
"find-up": "^2.1.0" "find-up": "^2.1.0"
} }
}, },
"popper.js": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
},
"portfinder": { "portfinder": {
"version": "1.0.26", "version": "1.0.26",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
@ -12300,6 +12303,29 @@
"raf": "^3.1.0" "raf": "^3.1.0"
} }
}, },
"react-popper": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.7.tgz",
"integrity": "sha512-nmqYTx7QVjCm3WUZLeuOomna138R1luC4EqkW3hxJUrAe+3eNz3oFCLYdnPwILfn0mX1Ew2c3wctrjlUMYYUww==",
"requires": {
"@babel/runtime": "^7.1.2",
"create-react-context": "^0.3.0",
"deep-equal": "^1.1.1",
"popper.js": "^1.14.4",
"prop-types": "^15.6.1",
"typed-styles": "^0.0.7",
"warning": "^4.0.2"
}
},
"react-popper-tooltip": {
"version": "2.11.1",
"resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-2.11.1.tgz",
"integrity": "sha512-04A2f24GhyyMicKvg/koIOQ5BzlrRbKiAgP6L+Pdj1MVX3yJ1NeZ8+EidndQsbejFT55oW1b++wg2Z8KlAyhfQ==",
"requires": {
"@babel/runtime": "^7.9.2",
"react-popper": "^1.3.7"
}
},
"react-redux": { "react-redux": {
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz",
@ -12616,7 +12642,6 @@
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
"integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
"dev": true,
"requires": { "requires": {
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1" "es-abstract": "^1.17.0-next.1"
@ -13876,7 +13901,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
"integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
"dev": true,
"requires": { "requires": {
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.5" "es-abstract": "^1.17.5"
@ -13886,7 +13910,6 @@
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
"integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
"dev": true,
"requires": { "requires": {
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.5", "es-abstract": "^1.17.5",
@ -13897,7 +13920,6 @@
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
"integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
"dev": true,
"requires": { "requires": {
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.5", "es-abstract": "^1.17.5",
@ -13908,7 +13930,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
"integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
"dev": true,
"requires": { "requires": {
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.5" "es-abstract": "^1.17.5"
@ -14908,6 +14929,11 @@
"mime-types": "~2.1.24" "mime-types": "~2.1.24"
} }
}, },
"typed-styles": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz",
"integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q=="
},
"typedarray": { "typedarray": {
"version": "0.0.6", "version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",

2
client/package.json vendored
View File

@ -7,6 +7,7 @@
"watch": "cross-env BUILD_ENV=dev webpack --config webpack.dev.js --watch", "watch": "cross-env BUILD_ENV=dev webpack --config webpack.dev.js --watch",
"build-prod": "cross-env BUILD_ENV=prod webpack --config webpack.prod.js", "build-prod": "cross-env BUILD_ENV=prod webpack --config webpack.prod.js",
"lint": "eslint src", "lint": "eslint src",
"lint:fix": "eslint src --fix",
"test": "jest", "test": "jest",
"test:watch": "jest --watch" "test:watch": "jest --watch"
}, },
@ -26,6 +27,7 @@
"react-dom": "^16.13.1", "react-dom": "^16.13.1",
"react-i18next": "^11.4.0", "react-i18next": "^11.4.0",
"react-modal": "^3.11.2", "react-modal": "^3.11.2",
"react-popper-tooltip": "^2.11.1",
"react-redux": "^7.2.0", "react-redux": "^7.2.0",
"react-redux-loading-bar": "^4.6.0", "react-redux-loading-bar": "^4.6.0",
"react-router-dom": "^5.2.0", "react-router-dom": "^5.2.0",

View File

@ -28,6 +28,9 @@
"dhcp_table_hostname": "Име на устройство", "dhcp_table_hostname": "Име на устройство",
"dhcp_table_expires": "История", "dhcp_table_expires": "История",
"dhcp_warning": "Ако искате да използвате вградения DHCP сървър, трябва да няма друг активен DHCP в мрежата Ви!", "dhcp_warning": "Ако искате да използвате вградения DHCP сървър, трябва да няма друг активен DHCP в мрежата Ви!",
"city": "Град",
"response_details": "Подробности за отговора",
"request_details": "Поискайте подробности",
"back": "Назад", "back": "Назад",
"dashboard": "Табло", "dashboard": "Табло",
"settings": "Настройки", "settings": "Настройки",
@ -35,7 +38,8 @@
"query_log": "История на заявките", "query_log": "История на заявките",
"faq": "ЧЗВ", "faq": "ЧЗВ",
"version": "версия", "version": "версия",
"address": "адрес", "address": "Адрес",
"protocol": "Протокол",
"on": "ВКЛЮЧЕНО", "on": "ВКЛЮЧЕНО",
"off": "ИЗКЛЮЧЕНО", "off": "ИЗКЛЮЧЕНО",
"copyright": "Авторско право", "copyright": "Авторско право",
@ -97,6 +101,7 @@
"filters_and_hosts_hint": "AdGuard Home разбира adblock и host синтаксис.", "filters_and_hosts_hint": "AdGuard Home разбира adblock и host синтаксис.",
"cancel_btn": "Откажи", "cancel_btn": "Откажи",
"enter_name_hint": "Въведи име", "enter_name_hint": "Въведи име",
"check_updates_btn": "Провери за актуализация",
"custom_filter_rules": "Местни правила за филтриране", "custom_filter_rules": "Местни правила за филтриране",
"custom_filter_rules_hint": "Въвеждайте всяко правило на нов ред. Може да използвате adblock или hosts файлов синтаксис.", "custom_filter_rules_hint": "Въвеждайте всяко правило на нов ред. Може да използвате adblock или hosts файлов синтаксис.",
"examples_title": "Примери", "examples_title": "Примери",
@ -106,6 +111,7 @@
"example_comment": "! Това е коментар", "example_comment": "! Това е коментар",
"example_comment_meaning": "пример за коментар", "example_comment_meaning": "пример за коментар",
"example_comment_hash": "# Това е също коментар", "example_comment_hash": "# Това е също коментар",
"example_regex_meaning": "блокирай достъп до домейни който съвпадат със следното",
"example_upstream_regular": "класически DNS (UDP протокол)", "example_upstream_regular": "класически DNS (UDP протокол)",
"example_upstream_dot": "криптиран <a href='https://en.wikipedia.org/wiki/DNS_over_TLS' target='_blank'>DNS-върху-TLS</a>", "example_upstream_dot": "криптиран <a href='https://en.wikipedia.org/wiki/DNS_over_TLS' target='_blank'>DNS-върху-TLS</a>",
"example_upstream_doh": "криптиран <a href='https://en.wikipedia.org/wiki/DNS_over_HTTPS' target='_blank'>DNS-върху-HTTPS</a>", "example_upstream_doh": "криптиран <a href='https://en.wikipedia.org/wiki/DNS_over_HTTPS' target='_blank'>DNS-върху-HTTPS</a>",
@ -114,9 +120,10 @@
"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_test_not_ok_toast": "Сървър \"{{key}}\": не работи, моля проверете дали е въведен коректно",
"unblock_btn": "Отблокирай", "unblock": "Отблокирай",
"block_btn": "Блокирай", "block": "Блокирай",
"time_table_header": "Време", "time_table_header": "Време",
"date": "Дата",
"domain_name_table_header": "Име на домейн", "domain_name_table_header": "Име на домейн",
"type_table_header": "Тип", "type_table_header": "Тип",
"response_table_header": "Отговор", "response_table_header": "Отговор",
@ -134,6 +141,7 @@
"updated_custom_filtering_toast": "Обновени местни правила за филтриране", "updated_custom_filtering_toast": "Обновени местни правила за филтриране",
"rule_removed_from_custom_filtering_toast": "Премахнато от местни правила за филтриране", "rule_removed_from_custom_filtering_toast": "Премахнато от местни правила за филтриране",
"rule_added_to_custom_filtering_toast": "Добавено до местни правила за филтриране", "rule_added_to_custom_filtering_toast": "Добавено до местни правила за филтриране",
"plain_dns": "Обикновен DNS",
"source_label": "Източник", "source_label": "Източник",
"found_in_known_domain_db": "Намерен в списъците с домейни.", "found_in_known_domain_db": "Намерен в списъците с домейни.",
"category_label": "Категория", "category_label": "Категория",
@ -226,5 +234,7 @@
"form_error_equal": "Не трябва да съвпада", "form_error_equal": "Не трябва да съвпада",
"form_error_password": "Паролата не съвпада", "form_error_password": "Паролата не съвпада",
"reset_settings": "Изтрий всички настройки", "reset_settings": "Изтрий всички настройки",
"update_announcement": "Има нова AdGuard Home {{version}}! <0>Цъкни тук</0> за повече информация." "update_announcement": "Има нова AdGuard Home {{version}}! <0>Цъкни тук</0> за повече информация.",
"disable_ipv6": "Изключете IPv6 протокола",
"show_blocked_responses": "Блокирано"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "Můžete zadat DNS upstream <0>pro konkrétní doménu(y)</0>", "example_upstream_reserved": "Můžete zadat DNS upstream <0>pro konkrétní doménu(y)</0>",
"upstream_parallel": "Použijte paralelní požadavky na urychlení řešení simultánním dotazováním na všechny navazující servery", "upstream_parallel": "Použijte paralelní požadavky na urychlení řešení simultánním dotazováním na všechny navazující servery",
"parallel_requests": "Paralelní požadavky", "parallel_requests": "Paralelní požadavky",
"load_balancing": "Optimalizace vytížení",
"load_balancing_desc": "Optimalizovaný dotaz na server. AdGuard Home použije vážený náhodný algoritmus k výběru serveru, takže nejrychlejší server bude používán častěji.",
"bootstrap_dns": "Bootstrap DNS servery", "bootstrap_dns": "Bootstrap DNS servery",
"bootstrap_dns_desc": "Servery Bootstrap DNS se používají k řešení IP adres DoH/DoT, které zadáváte jako upstreamy.", "bootstrap_dns_desc": "Servery Bootstrap DNS se používají k řešení IP adres DoH/DoT, které zadáváte jako upstreamy.",
"check_dhcp_servers": "Zkontrolovat DHCP servery", "check_dhcp_servers": "Zkontrolovat DHCP servery",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Vybrat rozhraní DHCP", "dhcp_interface_select": "Vybrat rozhraní DHCP",
"dhcp_hardware_address": "Hardwarová adresa", "dhcp_hardware_address": "Hardwarová adresa",
"dhcp_ip_addresses": "IP adresa", "dhcp_ip_addresses": "IP adresa",
"ip": "IP adresa",
"dhcp_table_hostname": "Název hostitele", "dhcp_table_hostname": "Název hostitele",
"dhcp_table_expires": "Vyprší", "dhcp_table_expires": "Vyprší",
"dhcp_warning": "Pokud chcete server DHCP povolit, ujistěte se, že ve Vaší síti není žádný aktivní server DHCP. V opačném případě může dojít k přerušení internetu pro připojená zařízení!", "dhcp_warning": "Pokud chcete server DHCP povolit, ujistěte se, že ve Vaší síti není žádný aktivní server DHCP. V opačném případě může dojít k přerušení internetu pro připojená zařízení!",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "Nebyly nalezeny žádné statické pronájmy DHCP", "dhcp_static_leases_not_found": "Nebyly nalezeny žádné statické pronájmy DHCP",
"dhcp_add_static_lease": "Přidat statický pronájem", "dhcp_add_static_lease": "Přidat statický pronájem",
"dhcp_reset": "Opravdu chcete resetovat konfiguraci DHCP?", "dhcp_reset": "Opravdu chcete resetovat konfiguraci DHCP?",
"country": "Země",
"city": "Město",
"delete_confirm": "Opravdu chcete odstranit \"{{key}}\"?", "delete_confirm": "Opravdu chcete odstranit \"{{key}}\"?",
"form_enter_hostname": "Zadejte název hostitele", "form_enter_hostname": "Zadejte název hostitele",
"error_details": "Podrobnosti chyby", "error_details": "Podrobnosti chyby",
"response_details": "Detail odpovědi",
"request_details": "Detail požadavku",
"client_details": "Detaily klienta",
"details": "Detaily",
"back": "Zpět", "back": "Zpět",
"dashboard": "Hlavní panel", "dashboard": "Hlavní panel",
"settings": "Nastavení", "settings": "Nastavení",
"filters": "Filtry", "filters": "Filtry",
"filter": "Filtr",
"query_log": "Protokol dotazů", "query_log": "Protokol dotazů",
"compact": "Kompaktní",
"nothing_found": "Nic nebylo nalezeno",
"faq": "FAQ", "faq": "FAQ",
"version": "Verze", "version": "Verze",
"address": "adresa", "address": "Adresa",
"protocol": "Protokol",
"on": "ZAPNUTO", "on": "ZAPNUTO",
"off": "VYPNUTO", "off": "VYPNUTO",
"copyright": "Autorská práva", "copyright": "Autorská práva",
@ -113,7 +126,7 @@
"custom_filtering_rules": "Vlastní pravidla filtrování", "custom_filtering_rules": "Vlastní pravidla filtrování",
"encryption_settings": "Nastavení šifrování", "encryption_settings": "Nastavení šifrování",
"dhcp_settings": "Nastavení DHCP", "dhcp_settings": "Nastavení DHCP",
"upstream_dns": "Upstream DNS servery", "upstream_dns": "Odchozí DNS servery",
"upstream_dns_hint": "Pokud toto pole ponecháte prázdné, AdGuard Home použije <a href='https://www.quad9.net/' target='_blank'>Quad9</a> jako upstream.", "upstream_dns_hint": "Pokud toto pole ponecháte prázdné, AdGuard Home použije <a href='https://www.quad9.net/' target='_blank'>Quad9</a> jako upstream.",
"test_upstream_btn": "Test upstreamů", "test_upstream_btn": "Test upstreamů",
"upstreams": "Odesláno", "upstreams": "Odesláno",
@ -132,8 +145,10 @@
"rules_count_table_header": "Počet pravidel", "rules_count_table_header": "Počet pravidel",
"last_time_updated_table_header": "Čas poslední aktualizace", "last_time_updated_table_header": "Čas poslední aktualizace",
"actions_table_header": "Akce", "actions_table_header": "Akce",
"request_table_header": "Požadavek",
"edit_table_action": "Upravit", "edit_table_action": "Upravit",
"delete_table_action": "Vymazat", "delete_table_action": "Vymazat",
"elapsed": "Uplynulý čas",
"filters_and_hosts_hint": "AdGuard Home zná základní pravidla blokování reklam a syntaxe hostsitelských souborů.", "filters_and_hosts_hint": "AdGuard Home zná základní pravidla blokování reklam a syntaxe hostsitelských souborů.",
"no_blocklist_added": "Nebyl přidán žádný seznam blokovaných", "no_blocklist_added": "Nebyl přidán žádný seznam blokovaných",
"no_whitelist_added": "Nebyl přidán žádný seznam povolených", "no_whitelist_added": "Nebyl přidán žádný seznam povolených",
@ -170,12 +185,15 @@
"updated_upstream_dns_toast": "Aktualizované upstream DNS servery", "updated_upstream_dns_toast": "Aktualizované upstream DNS servery",
"dns_test_ok_toast": "Specifikované DNS servery pracují správně", "dns_test_ok_toast": "Specifikované DNS servery pracují správně",
"dns_test_not_ok_toast": "Server \"{{key}}\": nemohl být použit, zkontrolujte, zda jste ho správně napsali", "dns_test_not_ok_toast": "Server \"{{key}}\": nemohl být použit, zkontrolujte, zda jste ho správně napsali",
"unblock_btn": "Odblokovat", "unblock": "Odblokovat",
"block_btn": "Blokovat", "block": "Blokovat",
"time_table_header": "Čas", "time_table_header": "Čas",
"date": "Datum",
"domain_name_table_header": "Název domény", "domain_name_table_header": "Název domény",
"domain_or_client": "Doména nebo klient",
"type_table_header": "Typ", "type_table_header": "Typ",
"response_table_header": "Odezva", "response_table_header": "Odezva",
"response_code": "Kód odezvy",
"client_table_header": "Klient", "client_table_header": "Klient",
"empty_response_status": "Prázdná", "empty_response_status": "Prázdná",
"show_all_filter_type": "Zobrazit vše", "show_all_filter_type": "Zobrazit vše",
@ -194,6 +212,7 @@
"query_log_filtered": "Filtrováno pomocí {{filter}}", "query_log_filtered": "Filtrováno pomocí {{filter}}",
"query_log_confirm_clear": "Opravdu chcete vymazat celý protokol dotazů?", "query_log_confirm_clear": "Opravdu chcete vymazat celý protokol dotazů?",
"query_log_cleared": "Protokol dotazů byl úspěšně vymazán", "query_log_cleared": "Protokol dotazů byl úspěšně vymazán",
"query_log_updated": "Protokol dotazů byl úspěšně aktualizován",
"query_log_clear": "Vymazat protokoly dotazů", "query_log_clear": "Vymazat protokoly dotazů",
"query_log_retention": "Uchování protokolů dotazů", "query_log_retention": "Uchování protokolů dotazů",
"query_log_enable": "Povolit protokol", "query_log_enable": "Povolit protokol",
@ -211,6 +230,9 @@
"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",
"dns_over_https": "DNS přes HTTPS",
"dns_over_tls": "DNS přes TLS",
"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",
"edns_enable": "Povolit klientskou podsíť EDNS", "edns_enable": "Povolit klientskou podsíť EDNS",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "Nulová IP: Odezva s nulovou IP adresou (0.0.0.0 pro A; :: pro AAAA)", "blocking_mode_null_ip": "Nulová IP: Odezva s nulovou IP adresou (0.0.0.0 pro A; :: pro AAAA)",
"blocking_mode_custom_ip": "Vlastní IP. odezva s ručně nastavenou IP adresou", "blocking_mode_custom_ip": "Vlastní IP. odezva s ručně nastavenou IP adresou",
"upstream_dns_client_desc": "Pokud toto pole ponecháte prázdné, AdGuard Home použije servery nakonfigurované v<0>DNS nastavení</0>.", "upstream_dns_client_desc": "Pokud toto pole ponecháte prázdné, AdGuard Home použije servery nakonfigurované v<0>DNS nastavení</0>.",
"tracker_source": "Zdroj slídiče",
"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": "Pravidlo",
"list_label": "Seznam", "list_label": "Seznam",
"unknown_filter": "Neznámý filtr {{filterId}}", "unknown_filter": "Neznámý filtr {{filterId}}",
"known_tracker": "Známý slídič",
"install_welcome_title": "Vítejte v AdGuard Home!", "install_welcome_title": "Vítejte v AdGuard Home!",
"install_welcome_desc": "AdGuard Home je síťový DNS server pro blokování reklam a slídičů. Jeho cílem je, abyste ovládali celou Vaši síť a všechny Vaše zařízení, přičemž se nevyžaduje použití jakéhokoliv programu na straně klienta.", "install_welcome_desc": "AdGuard Home je síťový DNS server pro blokování reklam a slídičů. Jeho cílem je, abyste ovládali celou Vaši síť a všechny Vaše zařízení, přičemž se nevyžaduje použití jakéhokoliv programu na straně klienta.",
"install_settings_title": "Administrátorské webové rozhraní", "install_settings_title": "Administrátorské webové rozhraní",
@ -257,7 +281,7 @@
"install_devices_router_list_1": "Otevřete předvolby pro router. Obvykle k němu můžete přistupovat z prohlížeče prostřednictvím adresy URL (např. http://192.168.0.1/ nebo http://192.168.1.1/). Můžete být vyzváni k zadání hesla. Pokud si ho nepamatujete, můžete heslo resetovat stisknutím tlačítka na samotném routeru. Některé routery vyžadují specifickou aplikaci, která by v takovém případě měla být již nainstalována v počítači/telefonu.", "install_devices_router_list_1": "Otevřete předvolby pro router. Obvykle k němu můžete přistupovat z prohlížeče prostřednictvím adresy URL (např. http://192.168.0.1/ nebo http://192.168.1.1/). Můžete být vyzváni k zadání hesla. Pokud si ho nepamatujete, můžete heslo resetovat stisknutím tlačítka na samotném routeru. Některé routery vyžadují specifickou aplikaci, která by v takovém případě měla být již nainstalována v počítači/telefonu.",
"install_devices_router_list_2": "Vyhledejte nastavení DHCP/DNS. Hledejte zkratku DNS vedle pole, které umožňuje vložit dvě nebo tři sady čísel, každé rozděleno do čtyř skupin s jedním až třemi číslicemi.", "install_devices_router_list_2": "Vyhledejte nastavení DHCP/DNS. Hledejte zkratku DNS vedle pole, které umožňuje vložit dvě nebo tři sady čísel, každé rozděleno do čtyř skupin s jedním až třemi číslicemi.",
"install_devices_router_list_3": "Zadejte adresy Vašeho serveru AdGuard Home.", "install_devices_router_list_3": "Zadejte adresy Vašeho serveru AdGuard Home.",
"install_devices_router_list_4": "Na některých typech routerů nemůžete nastavit vlastní DNS server. V tomto případě může AdGuard Home pomoct pokud jej nastavíte jako DHCP server. V ostatních případech byste si v manuálu k Vašemu routeru měli zjistit, jak nastavit vlastní DNS servery.", "install_devices_router_list_4": "Na některých typech routerů nemůžete nastavit vlastní DNS server. V tomto případě může AdGuard Home pomoci, pokud jej nastavíte jako <0>DHCP server</0>. V ostatních případech byste si v manuálu k Vašemu routeru měli zjistit, jak nastavit vlastní DNS servery.",
"install_devices_windows_list_1": "Otevřete ovládací panel prostřednictvím nabídky Start nebo vyhledání v systému Windows.", "install_devices_windows_list_1": "Otevřete ovládací panel prostřednictvím nabídky Start nebo vyhledání v systému Windows.",
"install_devices_windows_list_2": "Přejděte na kategorii Síť a Internet a poté na Centrum sítí a sdílení.", "install_devices_windows_list_2": "Přejděte na kategorii Síť a Internet a poté na Centrum sítí a sdílení.",
"install_devices_windows_list_3": "Na levé straně obrazovky najděte možnost Změnit nastavení adaptéru a klepněte na něj.", "install_devices_windows_list_3": "Na levé straně obrazovky najděte možnost Změnit nastavení adaptéru a klepněte na něj.",
@ -346,6 +370,7 @@
"form_enter_id": "Zadejte identifikátor", "form_enter_id": "Zadejte identifikátor",
"form_add_id": "Přidat identifikátor", "form_add_id": "Přidat identifikátor",
"form_client_name": "Zadejte název klienta", "form_client_name": "Zadejte název klienta",
"name": "Název",
"client_global_settings": "Použít globální nastavení", "client_global_settings": "Použít globální nastavení",
"client_deleted": "Klient \"{{key}}\" byl úspěšně odstraněn", "client_deleted": "Klient \"{{key}}\" byl úspěšně odstraněn",
"client_added": "Klient \"{{key}}\" byl úspěšně přidán", "client_added": "Klient \"{{key}}\" byl úspěšně přidán",
@ -445,6 +470,7 @@
"location": "Umístění", "location": "Umístění",
"orgname": "Název organizace", "orgname": "Název organizace",
"netname": "Název sítě", "netname": "Název sítě",
"network": "Síť",
"descr": "Popis", "descr": "Popis",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Další informace</0> o vytváření vlastních seznamů hostitelů.", "filtering_rules_learn_more": "<0>Další informace</0> o vytváření vlastních seznamů hostitelů.",
@ -456,7 +482,7 @@
"disable_ipv6": "Zakázat IPv6", "disable_ipv6": "Zakázat IPv6",
"disable_ipv6_desc": "Pokud je tato funkce povolena, budou všechny dotazy DNS pro adresy IPv6 (typ AAAA) zrušeny.", "disable_ipv6_desc": "Pokud je tato funkce povolena, budou všechny dotazy DNS pro adresy IPv6 (typ AAAA) zrušeny.",
"fastest_addr": "Nejrychlejší IP adresa", "fastest_addr": "Nejrychlejší IP adresa",
"fastest_addr_desc": "Dotazovat všechny DNS servery a vrátit nejrychlejší IP adresu ze všech odpovědí", "fastest_addr_desc": "Dotazovat všechny DNS servery a vrátit nejrychlejší IP adresu ze všech odpovědí. To zpomalí dotazy DNS, protože musíme čekat na odpovědi ze všech serverů DNS, ale celková konektivita se zlepší.",
"autofix_warning_text": "Pokud kliknete na „Opravit“, AdGuard Home nakonfiguruje váš systém tak, aby používal DNS server AdGuard Home.", "autofix_warning_text": "Pokud kliknete na „Opravit“, AdGuard Home nakonfiguruje váš systém tak, aby používal DNS server AdGuard Home.",
"autofix_warning_list": "Jsou prováděny následující úlohy: <0>Deaktivace systému DNSStubListener</0> <0>Nastavení adresy serveru DNS na 127.0.0.1</0> <0>Nahrazení cíle symbolického odkazu z /etc/resolv.conf do /run/systemd/resolve/resolv.conf</0> <0>Zastavení služby DNSStubListener (znovu načtení služby systemd-resolved)</0>", "autofix_warning_list": "Jsou prováděny následující úlohy: <0>Deaktivace systému DNSStubListener</0> <0>Nastavení adresy serveru DNS na 127.0.0.1</0> <0>Nahrazení cíle symbolického odkazu z /etc/resolv.conf do /run/systemd/resolve/resolv.conf</0> <0>Zastavení služby DNSStubListener (znovu načtení služby systemd-resolved)</0>",
"autofix_warning_result": "Výsledkem je, že všechny požadavky DNS z vašeho systému jsou ve výchozím nastavení zpracovány službou AdGuard Home.", "autofix_warning_result": "Výsledkem je, že všechny požadavky DNS z vašeho systému jsou ve výchozím nastavení zpracovány službou AdGuard Home.",
@ -489,5 +515,19 @@
"list_updated": "Byl aktualizován {{count}} seznam", "list_updated": "Byl aktualizován {{count}} seznam",
"list_updated_plural": "Aktualizované seznamy: {{count}}", "list_updated_plural": "Aktualizované seznamy: {{count}}",
"dnssec_enable": "Zapnout DNSSEC", "dnssec_enable": "Zapnout DNSSEC",
"dnssec_enable_desc": "Nastavte příznak DNSSEC v následujících DNS dotazech a zkontrolujte výsledek (je potřebný překladač se zapnutým DNSSEC)" "dnssec_enable_desc": "Nastavte příznak DNSSEC v následujících DNS dotazech a zkontrolujte výsledek (je potřebný překladač se zapnutým DNSSEC)",
"validated_with_dnssec": "Ověřeno pomocí DNSSEC",
"show_all_responses": "Všechny odpovědi",
"show_blocked_responses": "Zablokované",
"show_whitelisted_responses": "Povolené",
"show_processed_responses": "Zpracovaný",
"blocked_safebrowsing": "Blokované bezpečné prohlížení",
"blocked_adult_websites": "Blokované stránky pro dospělé",
"blocked_threats": "Blokované hrozby",
"allowed": "Povoleno",
"filtered": "Filtrováno",
"rewritten": "Přepsáno",
"safe_search": "Bezpečné vyhledávání",
"blocklist": "Zakázaný",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "Du kan specificere DNS upstream <0>for det(de) specifikke domæne(r)</0>", "example_upstream_reserved": "Du kan specificere DNS upstream <0>for det(de) specifikke domæne(r)</0>",
"upstream_parallel": "Brug parallelle forespørgsler til at fremskynde behandlingen ved samtidig at spørge alle upstream servere", "upstream_parallel": "Brug parallelle forespørgsler til at fremskynde behandlingen ved samtidig at spørge alle upstream servere",
"parallel_requests": "Parallelle forespørgsler", "parallel_requests": "Parallelle forespørgsler",
"load_balancing": "Belastningsfordeling",
"load_balancing_desc": "Forespørg en server ad gangen. AdGuard Home bruger den vægtede tilfældige algoritme til at vælge serveren, så den hurtigste server bliver brugt oftere.",
"bootstrap_dns": "Bootstrap DNS-servere", "bootstrap_dns": "Bootstrap DNS-servere",
"bootstrap_dns_desc": "Bootstrap DNS-servere bliver brugt til at behandle IP-adresser af de DoH/DoT resolvere, som du angiver som upstream.", "bootstrap_dns_desc": "Bootstrap DNS-servere bliver brugt til at behandle IP-adresser af de DoH/DoT resolvere, som du angiver som upstream.",
"check_dhcp_servers": "Tjek for DHCP-servere", "check_dhcp_servers": "Tjek for DHCP-servere",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Vælg DHCP-interface", "dhcp_interface_select": "Vælg DHCP-interface",
"dhcp_hardware_address": "Hardware-adresse", "dhcp_hardware_address": "Hardware-adresse",
"dhcp_ip_addresses": "IP-adresser", "dhcp_ip_addresses": "IP-adresser",
"ip": "IP",
"dhcp_table_hostname": "Værtsnavn", "dhcp_table_hostname": "Værtsnavn",
"dhcp_table_expires": "Udløber", "dhcp_table_expires": "Udløber",
"dhcp_warning": "Hvis du vil aktivere DHCP-serveren alligevel, skal du sørge for, at der ikke er nogen anden aktiv DHCP-server på dit netværk. Ellers kan det ødelægge internettet for tilsluttede enheder!", "dhcp_warning": "Hvis du vil aktivere DHCP-serveren alligevel, skal du sørge for, at der ikke er nogen anden aktiv DHCP-server på dit netværk. Ellers kan det ødelægge internettet for tilsluttede enheder!",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "Ingen DHCP static leases fundet", "dhcp_static_leases_not_found": "Ingen DHCP static leases fundet",
"dhcp_add_static_lease": "Tilføj static lease", "dhcp_add_static_lease": "Tilføj static lease",
"dhcp_reset": "Er du sikker på, at du vil nulstille DHCP-konfigurationen?", "dhcp_reset": "Er du sikker på, at du vil nulstille DHCP-konfigurationen?",
"country": "Land",
"city": "By",
"delete_confirm": "Er du sikker på, at du vil slette \"{{key}}\"?", "delete_confirm": "Er du sikker på, at du vil slette \"{{key}}\"?",
"form_enter_hostname": "Indtast værtsnavn", "form_enter_hostname": "Indtast værtsnavn",
"error_details": "Fejloplysninger", "error_details": "Fejloplysninger",
"response_details": "Svardetaljer",
"request_details": "Anmod om detaljer",
"client_details": "Klientoplysninger",
"details": "Detaljer",
"back": "Tilbage", "back": "Tilbage",
"dashboard": "Kontrolpanel", "dashboard": "Kontrolpanel",
"settings": "Indstillinger", "settings": "Indstillinger",
"filters": "Filtre", "filters": "Filtre",
"filter": "Filter",
"query_log": "Forespørgselslog", "query_log": "Forespørgselslog",
"compact": "Kompakt",
"nothing_found": "Intet blev fundet",
"faq": "FAQ", "faq": "FAQ",
"version": "Version", "version": "Version",
"address": "adresse", "address": "Adresse",
"protocol": "Protokol",
"on": "TÆNDT", "on": "TÆNDT",
"off": "SLUKKET", "off": "SLUKKET",
"copyright": "Copyright", "copyright": "Copyright",
@ -132,8 +145,10 @@
"rules_count_table_header": "Antal regler", "rules_count_table_header": "Antal regler",
"last_time_updated_table_header": "Sidst opdateret", "last_time_updated_table_header": "Sidst opdateret",
"actions_table_header": "Handlinger", "actions_table_header": "Handlinger",
"request_table_header": "Forespørgsel",
"edit_table_action": "Rediger", "edit_table_action": "Rediger",
"delete_table_action": "Slet", "delete_table_action": "Slet",
"elapsed": "Varighed",
"filters_and_hosts_hint": "AdGuard Home forstår de grundlæggende annonceblokeringsregler og værtsfilsyntaks.", "filters_and_hosts_hint": "AdGuard Home forstår de grundlæggende annonceblokeringsregler og værtsfilsyntaks.",
"no_blocklist_added": "Ingen blokeringslister tilføjet", "no_blocklist_added": "Ingen blokeringslister tilføjet",
"no_whitelist_added": "Ingen lister over tilladte tilføjet", "no_whitelist_added": "Ingen lister over tilladte tilføjet",
@ -170,12 +185,15 @@
"updated_upstream_dns_toast": "Opdaterede upstream DNS-servere", "updated_upstream_dns_toast": "Opdaterede upstream DNS-servere",
"dns_test_ok_toast": "De angivne DNS-servere fungerer korrekt", "dns_test_ok_toast": "De angivne DNS-servere fungerer korrekt",
"dns_test_not_ok_toast": "Server \"{{key}}\": kunne ikke bruges, kontroller venligst at du har skrevet det korrekt", "dns_test_not_ok_toast": "Server \"{{key}}\": kunne ikke bruges, kontroller venligst at du har skrevet det korrekt",
"unblock_btn": "Fjern blokering", "unblock": "Fjern blokering",
"block_btn": "Bloker", "block": "Bloker",
"time_table_header": "Tid", "time_table_header": "Tid",
"date": "Dato",
"domain_name_table_header": "Domænenavn", "domain_name_table_header": "Domænenavn",
"domain_or_client": "Domæne eller klient",
"type_table_header": "Type", "type_table_header": "Type",
"response_table_header": "Svar", "response_table_header": "Svar",
"response_code": "Responskode",
"client_table_header": "Klient", "client_table_header": "Klient",
"empty_response_status": "Tom", "empty_response_status": "Tom",
"show_all_filter_type": "Vis alle", "show_all_filter_type": "Vis alle",
@ -194,6 +212,7 @@
"query_log_filtered": "Filtreret af {{filter}}", "query_log_filtered": "Filtreret af {{filter}}",
"query_log_confirm_clear": "Er du sikker på, at du vil rydde hele forespørgselsloggen?", "query_log_confirm_clear": "Er du sikker på, at du vil rydde hele forespørgselsloggen?",
"query_log_cleared": "Forespørgselsloggen er blevet ryddet", "query_log_cleared": "Forespørgselsloggen er blevet ryddet",
"query_log_updated": "Forespørgselsloggen er blevet opdateret",
"query_log_clear": "Ryd forespørgselslogfiler", "query_log_clear": "Ryd forespørgselslogfiler",
"query_log_retention": "Opbevaring af forespørgselslogfiler", "query_log_retention": "Opbevaring af forespørgselslogfiler",
"query_log_enable": "Aktivér log", "query_log_enable": "Aktivér log",
@ -211,6 +230,9 @@
"custom_ip": "Tilpasset IP", "custom_ip": "Tilpasset IP",
"blocking_ipv4": "IPv4-blokering", "blocking_ipv4": "IPv4-blokering",
"blocking_ipv6": "IPv6-blokering", "blocking_ipv6": "IPv6-blokering",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"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",
"edns_enable": "Aktiver EDNS Client Subnet", "edns_enable": "Aktiver EDNS Client Subnet",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "Null IP: Svar med nul IP-adresse (0.0.0.0 for A; :: for AAAA)", "blocking_mode_null_ip": "Null IP: Svar med nul IP-adresse (0.0.0.0 for A; :: for AAAA)",
"blocking_mode_custom_ip": "Brugerdefineret IP: Svar med en manuelt indstillet IP-adresse", "blocking_mode_custom_ip": "Brugerdefineret IP: Svar med en manuelt indstillet IP-adresse",
"upstream_dns_client_desc": "Hvis du lader dette felt være tomt, vil AdGuard Home bruge de servere, der er konfigureret i <0>DNS-indstillingerne</0>.", "upstream_dns_client_desc": "Hvis du lader dette felt være tomt, vil AdGuard Home bruge de servere, der er konfigureret i <0>DNS-indstillingerne</0>.",
"tracker_source": "Tracker-kilde",
"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",
"list_label": "Liste", "list_label": "Liste",
"unknown_filter": "Ukendt filter {{filterId}}", "unknown_filter": "Ukendt filter {{filterId}}",
"known_tracker": "Kendt tracker",
"install_welcome_title": "Velkommen til AdGuard Home!", "install_welcome_title": "Velkommen til AdGuard Home!",
"install_welcome_desc": "AdGuard Home er en netværksbaseret annonce-og-tracker blokerende DNS-server. Formålet er at lade dig kontrollere hele dit netværk og alle dine enheder, og det kræver ikke at man bruger klientsoftware.", "install_welcome_desc": "AdGuard Home er en netværksbaseret annonce-og-tracker blokerende DNS-server. Formålet er at lade dig kontrollere hele dit netværk og alle dine enheder, og det kræver ikke at man bruger klientsoftware.",
"install_settings_title": "Administrator Webgrænseflade", "install_settings_title": "Administrator Webgrænseflade",
@ -257,7 +281,7 @@
"install_devices_router_list_1": "Åbn præferencerne for din router. Normalt kan du få adgang til den fra din browser via en URL (som http://192.168.0.1/ eller http://192.168.1.1/). Du bliver muligvis bedt om at indtaste adgangskoden. Hvis du ikke kan huske den, kan du ofte nulstille adgangskoden ved at trykke på en knap på selve routeren. Nogle routere kræver et bestemt program, som i det tilfælde allerede skulle være installeret på din computer/telefon.", "install_devices_router_list_1": "Åbn præferencerne for din router. Normalt kan du få adgang til den fra din browser via en URL (som http://192.168.0.1/ eller http://192.168.1.1/). Du bliver muligvis bedt om at indtaste adgangskoden. Hvis du ikke kan huske den, kan du ofte nulstille adgangskoden ved at trykke på en knap på selve routeren. Nogle routere kræver et bestemt program, som i det tilfælde allerede skulle være installeret på din computer/telefon.",
"install_devices_router_list_2": "Find DHCP/DNS-indstillingerne. Kig efter DNS-bogstaverne ved siden af et felt, der tillader to eller tre sæt tal, hver opdelt i fire grupper med et til tre cifre.", "install_devices_router_list_2": "Find DHCP/DNS-indstillingerne. Kig efter DNS-bogstaverne ved siden af et felt, der tillader to eller tre sæt tal, hver opdelt i fire grupper med et til tre cifre.",
"install_devices_router_list_3": "Indtast dine AdGuard Home serveradresser der.", "install_devices_router_list_3": "Indtast dine AdGuard Home serveradresser der.",
"install_devices_router_list_4": "Du kan ikke opsætte en tilpasset DNS-server på nogle typer routere. I dette tilfælde kan det hjælpe, hvis du konfigurerer AdGuard Home som en DHCP-server. Du kan ellers søge efter manualen om, hvordan du tilpasser DNS-servere til din bestemte routermodel.", "install_devices_router_list_4": "Du kan ikke opsætte en tilpasset DNS-server på nogle typer routere. I dette tilfælde kan det hjælpe, hvis du konfigurerer AdGuard Home som en <0>DHCP-server</0>. Du kan ellers søge efter manualen om, hvordan du tilpasser DNS-servere til din bestemte routermodel.",
"install_devices_windows_list_1": "Åbn Kontrolpanel gennem menuen Start eller Windows søgning.", "install_devices_windows_list_1": "Åbn Kontrolpanel gennem menuen Start eller Windows søgning.",
"install_devices_windows_list_2": "Gå til Netværk og internet kategorien og derefter til Netværks- og delingscenter.", "install_devices_windows_list_2": "Gå til Netværk og internet kategorien og derefter til Netværks- og delingscenter.",
"install_devices_windows_list_3": "På venstre side af skærmen finder du Skift adapterindstillinger og klik på den.", "install_devices_windows_list_3": "På venstre side af skærmen finder du Skift adapterindstillinger og klik på den.",
@ -346,6 +370,7 @@
"form_enter_id": "Indtast identifikator", "form_enter_id": "Indtast identifikator",
"form_add_id": "Tilføj identifikator", "form_add_id": "Tilføj identifikator",
"form_client_name": "Indtast klientnavn", "form_client_name": "Indtast klientnavn",
"name": "Navn",
"client_global_settings": "Brug globale indstillinger", "client_global_settings": "Brug globale indstillinger",
"client_deleted": "Klient \"{{key}}\" succesfuldt slettet", "client_deleted": "Klient \"{{key}}\" succesfuldt slettet",
"client_added": "Klient \"{{key}}\" succesfuldt tilføjet", "client_added": "Klient \"{{key}}\" succesfuldt tilføjet",
@ -445,6 +470,7 @@
"location": "Placering", "location": "Placering",
"orgname": "Organisationens navn", "orgname": "Organisationens navn",
"netname": "Netværksnavn", "netname": "Netværksnavn",
"network": "Netværk",
"descr": "Beskrivelse", "descr": "Beskrivelse",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Lær mere</0> om at oprette dine egne værtslister.", "filtering_rules_learn_more": "<0>Lær mere</0> om at oprette dine egne værtslister.",
@ -456,7 +482,7 @@
"disable_ipv6": "Deaktiver IPv6", "disable_ipv6": "Deaktiver IPv6",
"disable_ipv6_desc": "Hvis denne funktion er aktiveret, slettes alle DNS-forespørgsler til IPv6-adresser (type AAAA).", "disable_ipv6_desc": "Hvis denne funktion er aktiveret, slettes alle DNS-forespørgsler til IPv6-adresser (type AAAA).",
"fastest_addr": "Hurtigste IP-adresse", "fastest_addr": "Hurtigste IP-adresse",
"fastest_addr_desc": "Forespørg alle DNS-servere, og returner den hurtigste IP-adresse blandt alle svar", "fastest_addr_desc": "Forespørg alle DNS-servere, og returner den hurtigste IP-adresse blandt alle svar. Dette vil gøre DNS-forespørgslerne langsommere, da vi er nødt til at vente på svar fra alle DNS-servere, men forbedrer samlet set forbindelsen.",
"autofix_warning_text": "Hvis du klikker på \"Reparer\", vil AdGuardHome konfigurere dit system til at bruge AdGuardHome DNS-server.", "autofix_warning_text": "Hvis du klikker på \"Reparer\", vil AdGuardHome konfigurere dit system til at bruge AdGuardHome DNS-server.",
"autofix_warning_list": "Den vil udføre disse opgaver: <0>Deaktivering af DNSStubListener systemet</0> <0>Indstille DNS-serveradressen til 127.0.0.1</0> <0>Erstatte det symbolske linkmål for /etc/resolv.conf til /run/systemd/resolve/resolv.conf</0> <0>Stop DNSStubListener (genindlæs systemd-løst tjeneste)</0>", "autofix_warning_list": "Den vil udføre disse opgaver: <0>Deaktivering af DNSStubListener systemet</0> <0>Indstille DNS-serveradressen til 127.0.0.1</0> <0>Erstatte det symbolske linkmål for /etc/resolv.conf til /run/systemd/resolve/resolv.conf</0> <0>Stop DNSStubListener (genindlæs systemd-løst tjeneste)</0>",
"autofix_warning_result": "Som et resultat behandles alle DNS-anmodninger fra dit system som standard af AdGuard Home.", "autofix_warning_result": "Som et resultat behandles alle DNS-anmodninger fra dit system som standard af AdGuard Home.",
@ -489,5 +515,19 @@
"list_updated": "{{count}} liste opdateret", "list_updated": "{{count}} liste opdateret",
"list_updated_plural": "{{count}} lister opdateret", "list_updated_plural": "{{count}} lister opdateret",
"dnssec_enable": "Aktivér DNSSEC", "dnssec_enable": "Aktivér DNSSEC",
"dnssec_enable_desc": "Sæt DNSSEC-flag i de udgående DNS-forespørgsler, og kontroller resultatet (DNSSEC-aktiveret resolver er krævet)" "dnssec_enable_desc": "Sæt DNSSEC-flag i de udgående DNS-forespørgsler, og kontroller resultatet (DNSSEC-aktiveret resolver er krævet)",
"validated_with_dnssec": "Valideret med DNSSEC",
"show_all_responses": "Alle svar",
"show_blocked_responses": "Blokeret",
"show_whitelisted_responses": "Hvidlistet",
"show_processed_responses": "Behandlet",
"blocked_safebrowsing": "Blokeret af Safebrowsing",
"blocked_adult_websites": "Blokerede Websteder for Voksne",
"blocked_threats": "Blokerede Trusler",
"allowed": "Tilladt",
"filtered": "Filtreret",
"rewritten": "Omskrevet",
"safe_search": "Sikker søgning",
"blocklist": "Blokeringsliste",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "Sie können DNS-Upstream <0>für bestimmte Domain(s)</0> angeben", "example_upstream_reserved": "Sie können DNS-Upstream <0>für bestimmte Domain(s)</0> angeben",
"upstream_parallel": "Parallele Abfragen verwenden, um die Lösung zu beschleunigen, indem Sie alle Upstream-Server gleichzeitig abfragen", "upstream_parallel": "Parallele Abfragen verwenden, um die Lösung zu beschleunigen, indem Sie alle Upstream-Server gleichzeitig abfragen",
"parallel_requests": "Parallele Abfragen", "parallel_requests": "Parallele Abfragen",
"load_balancing": "Lastverteilung",
"load_balancing_desc": "Einen Server nach dem anderen abfragen. AdGuard Home verwendet den gewichteten Zufallsalgorithmus, um den Server so auszuwählen, dass der schnellste Server häufiger verwendet wird.",
"bootstrap_dns": "Bootstrap DNS-Server starten", "bootstrap_dns": "Bootstrap DNS-Server starten",
"bootstrap_dns_desc": "Bootstrap-DNS-Server werden verwendet, um IP-Adressen der DoH/DoT-Resolver aufzulösen, die Sie als Upstreams angeben.", "bootstrap_dns_desc": "Bootstrap-DNS-Server werden verwendet, um IP-Adressen der DoH/DoT-Resolver aufzulösen, die Sie als Upstreams angeben.",
"check_dhcp_servers": "Auf DHCP-Server prüfen", "check_dhcp_servers": "Auf DHCP-Server prüfen",
@ -37,6 +39,7 @@
"dhcp_interface_select": "DHCP-Benutzeroberfläche auswählen", "dhcp_interface_select": "DHCP-Benutzeroberfläche auswählen",
"dhcp_hardware_address": "Hardware-Adresse", "dhcp_hardware_address": "Hardware-Adresse",
"dhcp_ip_addresses": "IP-Adressen", "dhcp_ip_addresses": "IP-Adressen",
"ip": "IP",
"dhcp_table_hostname": "Hostname", "dhcp_table_hostname": "Hostname",
"dhcp_table_expires": "Läuft ab", "dhcp_table_expires": "Läuft ab",
"dhcp_warning": "Wenn Sie den DHCP-Server trotzdem aktivieren möchten, stellen Sie sicher, dass sich in Ihrem Netzwerk kein anderer aktiver DHCP-Server befindet. Andernfalls kann es bei angeschlossenen Geräten zu einem Ausfall des Internets kommen!", "dhcp_warning": "Wenn Sie den DHCP-Server trotzdem aktivieren möchten, stellen Sie sicher, dass sich in Ihrem Netzwerk kein anderer aktiver DHCP-Server befindet. Andernfalls kann es bei angeschlossenen Geräten zu einem Ausfall des Internets kommen!",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "Keine statischen DHCP-Leases gefunden", "dhcp_static_leases_not_found": "Keine statischen DHCP-Leases gefunden",
"dhcp_add_static_lease": "Statischen Lease hinzufügen", "dhcp_add_static_lease": "Statischen Lease hinzufügen",
"dhcp_reset": "Möchten Sie die DHCP-Konfiguration wirklich zurücksetzen?", "dhcp_reset": "Möchten Sie die DHCP-Konfiguration wirklich zurücksetzen?",
"country": "Land",
"city": "Stadt",
"delete_confirm": "Möchten Sie „{{key}}” wirklich löschen?", "delete_confirm": "Möchten Sie „{{key}}” wirklich löschen?",
"form_enter_hostname": "Gerätenamen eingeben", "form_enter_hostname": "Gerätenamen eingeben",
"error_details": "Fehlerdetails", "error_details": "Fehlerdetails",
"response_details": "Einzelheiten der Antwort",
"request_details": "Einzelheiten der Anfrage",
"client_details": "Einzelheiten des Clients",
"details": "Details",
"back": "Zurück", "back": "Zurück",
"dashboard": "Übersicht", "dashboard": "Übersicht",
"settings": "Einstellungen", "settings": "Einstellungen",
"filters": "Filter", "filters": "Filter",
"filter": "Filter",
"query_log": "Anfragenprotokoll", "query_log": "Anfragenprotokoll",
"compact": "Kompakt",
"nothing_found": "Nichts gefunden\n",
"faq": "FAQ", "faq": "FAQ",
"version": "Version", "version": "Version",
"address": "Adresse", "address": "Adresse",
"protocol": "Protokoll",
"on": "AN", "on": "AN",
"off": "AUS", "off": "AUS",
"copyright": "Urheberrecht", "copyright": "Urheberrecht",
@ -132,8 +145,10 @@
"rules_count_table_header": "Anzahl Regeln", "rules_count_table_header": "Anzahl Regeln",
"last_time_updated_table_header": "Letztes Update", "last_time_updated_table_header": "Letztes Update",
"actions_table_header": "Aktionen", "actions_table_header": "Aktionen",
"request_table_header": "Anfrage",
"edit_table_action": "Bearbeiten", "edit_table_action": "Bearbeiten",
"delete_table_action": "Löschen", "delete_table_action": "Löschen",
"elapsed": "Verstrichen",
"filters_and_hosts_hint": "AdGuard Home versteht grundlegende Werbefilterregeln und Host-Datei-Syntax.", "filters_and_hosts_hint": "AdGuard Home versteht grundlegende Werbefilterregeln und Host-Datei-Syntax.",
"no_blocklist_added": "Keine Sperrliste hinzugefügt", "no_blocklist_added": "Keine Sperrliste hinzugefügt",
"no_whitelist_added": "Keine Freigabeliste hinzugefügt", "no_whitelist_added": "Keine Freigabeliste hinzugefügt",
@ -170,12 +185,15 @@
"updated_upstream_dns_toast": "Upstream-DNS-Server wurden aktualisiert", "updated_upstream_dns_toast": "Upstream-DNS-Server wurden aktualisiert",
"dns_test_ok_toast": "Angegebene DNS-Server arbeiten ordnungsgemäß", "dns_test_ok_toast": "Angegebene DNS-Server arbeiten ordnungsgemäß",
"dns_test_not_ok_toast": "Server \"{{key}}\": konnte nicht verwendet werden, bitte überprüfen Sie die korrekte Schreibweise", "dns_test_not_ok_toast": "Server \"{{key}}\": konnte nicht verwendet werden, bitte überprüfen Sie die korrekte Schreibweise",
"unblock_btn": "Entblocken", "unblock": "Entsperren",
"block_btn": "Blockieren", "block": "Blockieren",
"time_table_header": "Zeit", "time_table_header": "Zeit",
"date": "Datum",
"domain_name_table_header": "Domainname", "domain_name_table_header": "Domainname",
"domain_or_client": "Domain oder Client",
"type_table_header": "Typ", "type_table_header": "Typ",
"response_table_header": "Antwort", "response_table_header": "Antwort",
"response_code": "Antwortcode",
"client_table_header": "Client", "client_table_header": "Client",
"empty_response_status": "Leer", "empty_response_status": "Leer",
"show_all_filter_type": "Alle anzeigen", "show_all_filter_type": "Alle anzeigen",
@ -194,6 +212,7 @@
"query_log_filtered": "Gefiltert nach {{filter}}", "query_log_filtered": "Gefiltert nach {{filter}}",
"query_log_confirm_clear": "Möchten Sie wirklich das Abfrageprotokoll vollständig löschen?", "query_log_confirm_clear": "Möchten Sie wirklich das Abfrageprotokoll vollständig löschen?",
"query_log_cleared": "Das Abfrageprotokoll wurde erfolgreich gelöscht", "query_log_cleared": "Das Abfrageprotokoll wurde erfolgreich gelöscht",
"query_log_updated": "Das Abfrageprotokoll wurde erfolgreich aktualisiert",
"query_log_clear": "Abfrageprotokolle leeren", "query_log_clear": "Abfrageprotokolle leeren",
"query_log_retention": "Abfrageprotokolle aufbewahren", "query_log_retention": "Abfrageprotokolle aufbewahren",
"query_log_enable": "Protokoll aktivieren", "query_log_enable": "Protokoll aktivieren",
@ -211,6 +230,9 @@
"custom_ip": "Benutzerdefinierte IP", "custom_ip": "Benutzerdefinierte IP",
"blocking_ipv4": "IPv4-Sperren", "blocking_ipv4": "IPv4-Sperren",
"blocking_ipv6": "IPv6-Sperren", "blocking_ipv6": "IPv6-Sperren",
"dns_over_https": "DNS-over-HTTPS (DNS-Abrage über HTTPS)",
"dns_over_tls": "DNS-over-TLS (DNS-Abrage über TLS)",
"plain_dns": "Einfaches DNS",
"form_enter_rate_limit": "Begrenzungswert eingeben", "form_enter_rate_limit": "Begrenzungswert eingeben",
"rate_limit": "Begrenzungswert", "rate_limit": "Begrenzungswert",
"edns_enable": "EDNS Client Subnetz aktivieren", "edns_enable": "EDNS Client Subnetz aktivieren",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "Null-IP: Antworten mit Null-IP-Adresse (0.0.0.0.0 für A; :: für AAAA)", "blocking_mode_null_ip": "Null-IP: Antworten mit Null-IP-Adresse (0.0.0.0.0 für A; :: für AAAA)",
"blocking_mode_custom_ip": "Benutzerdefinierte IP: Mit einer manuell eingestellten IP-Adresse antworten", "blocking_mode_custom_ip": "Benutzerdefinierte IP: Mit einer manuell eingestellten IP-Adresse antworten",
"upstream_dns_client_desc": "Wenn Sie dieses Feld leer lassen, verwendet AdGuard Home die Server, die in den <0>DNS-Einstellungen</0> konfiguriert sind.", "upstream_dns_client_desc": "Wenn Sie dieses Feld leer lassen, verwendet AdGuard Home die Server, die in den <0>DNS-Einstellungen</0> konfiguriert sind.",
"tracker_source": "Tracker-Quelle",
"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",
"list_label": "Liste", "list_label": "Liste",
"unknown_filter": "Unbekannter Filter {{filterId}}", "unknown_filter": "Unbekannter Filter {{filterId}}",
"known_tracker": "Bekannte Tracker",
"install_welcome_title": "Willkommen bei AdGuard Home!", "install_welcome_title": "Willkommen bei AdGuard Home!",
"install_welcome_desc": "AdGuard Home ist ein netzwerkweiter Werbung- und Tracking sperrender DNS-Server. Sein Zweck ist es, Ihnen die Kontrolle über Ihr gesamtes Netzwerk und alle Ihre Geräte zu ermöglichen, und es ist nicht erforderlich, eine clientseitige Anwendung zu verwenden.", "install_welcome_desc": "AdGuard Home ist ein netzwerkweiter Werbung- und Tracking sperrender DNS-Server. Sein Zweck ist es, Ihnen die Kontrolle über Ihr gesamtes Netzwerk und alle Ihre Geräte zu ermöglichen, und es ist nicht erforderlich, eine clientseitige Anwendung zu verwenden.",
"install_settings_title": "Admin Weboberfläche", "install_settings_title": "Admin Weboberfläche",
@ -257,7 +281,7 @@
"install_devices_router_list_1": "Öffnen Sie die Einstellungen für Ihren Router. In der Regel können Sie von Ihrem Browser aus über eine URL (wie http://192.168.0.1/ oder http://192.168.1.1/) darauf zugreifen. Möglicherweise werden Sie aufgefordert, das Passwort einzugeben. Wenn Sie sich nicht mehr daran erinnern, können Sie das Passwort oft durch Drücken einer Taste auf dem Router selbst zurücksetzen. Einige Router benötigen eine bestimmte Anwendung, die in diesem Fall bereits auf Ihrem Computer/Telefon installiert sein sollte.", "install_devices_router_list_1": "Öffnen Sie die Einstellungen für Ihren Router. In der Regel können Sie von Ihrem Browser aus über eine URL (wie http://192.168.0.1/ oder http://192.168.1.1/) darauf zugreifen. Möglicherweise werden Sie aufgefordert, das Passwort einzugeben. Wenn Sie sich nicht mehr daran erinnern, können Sie das Passwort oft durch Drücken einer Taste auf dem Router selbst zurücksetzen. Einige Router benötigen eine bestimmte Anwendung, die in diesem Fall bereits auf Ihrem Computer/Telefon installiert sein sollte.",
"install_devices_router_list_2": "DHCP/DNS-Einstellungen suchen. Suchen Sie nach den DNS-Buchstaben neben einem Feld, das zwei oder drei Zahlensätze erlaubt, die jeweils in vier Gruppen von ein bis drei Ziffern unterteilt sind.", "install_devices_router_list_2": "DHCP/DNS-Einstellungen suchen. Suchen Sie nach den DNS-Buchstaben neben einem Feld, das zwei oder drei Zahlensätze erlaubt, die jeweils in vier Gruppen von ein bis drei Ziffern unterteilt sind.",
"install_devices_router_list_3": "Geben Sie dort Ihre AdGuard Home Server-Adressen ein.", "install_devices_router_list_3": "Geben Sie dort Ihre AdGuard Home Server-Adressen ein.",
"install_devices_router_list_4": "Sie können auf einigen Routern keine beliebigen DNS-Server festlegen. In diesem Fall kann es hilfreich sein, dass Sie AdGuard Home als DHCP-Server festlegen. Andernfalls sollten Sie nach einer Bedienungsanleitung zum Anpassen des DNS-Server für Ihr Router-Modell suchen.", "install_devices_router_list_4": "Sie können auf einigen Routern keine beliebigen DNS-Server festlegen. In diesem Fall kann es hilfreich sein, dass Sie AdGuard Home als <0>DHCP-Server</0> festlegen. Andernfalls sollten Sie nach einer Bedienungsanleitung zum Anpassen des DNS-Server für Ihr Router-Modell suchen.",
"install_devices_windows_list_1": "Öffnen Sie die Systemsteuerung über das Startmenü oder die Windows-Suche.", "install_devices_windows_list_1": "Öffnen Sie die Systemsteuerung über das Startmenü oder die Windows-Suche.",
"install_devices_windows_list_2": "Öffnen Sie die Kategorie „Netzwerk und Internet” und dann „Netzwerk- und Freigabecenter”.", "install_devices_windows_list_2": "Öffnen Sie die Kategorie „Netzwerk und Internet” und dann „Netzwerk- und Freigabecenter”.",
"install_devices_windows_list_3": "Suchen Sie auf der linken Seite des Bildschirms nach „Adaptereinstellungen ändern” und klicken Sie darauf.", "install_devices_windows_list_3": "Suchen Sie auf der linken Seite des Bildschirms nach „Adaptereinstellungen ändern” und klicken Sie darauf.",
@ -346,6 +370,7 @@
"form_enter_id": "Kennung eingeben", "form_enter_id": "Kennung eingeben",
"form_add_id": "Kennung hinzufügen", "form_add_id": "Kennung hinzufügen",
"form_client_name": "Clientnamen eingeben", "form_client_name": "Clientnamen eingeben",
"name": "Name",
"client_global_settings": "Allgemeine Einstellungen nutzen", "client_global_settings": "Allgemeine Einstellungen nutzen",
"client_deleted": "Client „{{key}}” erfolgreich entfernt", "client_deleted": "Client „{{key}}” erfolgreich entfernt",
"client_added": "Client „{{key}}” erfolgreich hinzugefügt", "client_added": "Client „{{key}}” erfolgreich hinzugefügt",
@ -445,6 +470,7 @@
"location": "Ort", "location": "Ort",
"orgname": "Name der Organisation", "orgname": "Name der Organisation",
"netname": "Netzwerkname", "netname": "Netzwerkname",
"network": "Netzwerk",
"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.",
@ -489,5 +515,19 @@
"list_updated": "{{count}} Liste aktualisiert", "list_updated": "{{count}} Liste aktualisiert",
"list_updated_plural": "{{count}} Listen aktualisiert", "list_updated_plural": "{{count}} Listen aktualisiert",
"dnssec_enable": "DNSSEC aktivieren", "dnssec_enable": "DNSSEC aktivieren",
"dnssec_enable_desc": "DNSSEC-Flag in den ausgehenden DNS-Abfragen mitsenden und das Ergebnis überprüfen (DNSSEC-fähiger Resolver erforderlich)" "dnssec_enable_desc": "DNSSEC-Flag in den ausgehenden DNS-Abfragen mitsenden und das Ergebnis überprüfen (DNSSEC-fähiger Resolver erforderlich)",
"validated_with_dnssec": "Bestätigt mit DNSSEC",
"show_all_responses": "Alle Antworten",
"show_blocked_responses": "Gesperrt",
"show_whitelisted_responses": "Auf der Positivliste",
"show_processed_responses": "Verarbeitet",
"blocked_safebrowsing": "Durch Internetsicherheit gesperrt",
"blocked_adult_websites": "Gesperrte jugendgefährdende Webseiten",
"blocked_threats": "Gesperrte Bedrohungen",
"allowed": "Zugelassen",
"filtered": "Gefiltert",
"rewritten": "Umgeschrieben",
"safe_search": "Sichere Suche",
"blocklist": "Sperrliste",
"milliseconds_abbreviation": "ms"
} }

View File

@ -39,6 +39,7 @@
"dhcp_interface_select": "Select DHCP interface", "dhcp_interface_select": "Select DHCP interface",
"dhcp_hardware_address": "Hardware address", "dhcp_hardware_address": "Hardware address",
"dhcp_ip_addresses": "IP addresses", "dhcp_ip_addresses": "IP addresses",
"ip": "IP",
"dhcp_table_hostname": "Hostname", "dhcp_table_hostname": "Hostname",
"dhcp_table_expires": "Expires", "dhcp_table_expires": "Expires",
"dhcp_warning": "If you want to enable DHCP server anyway, make sure that there is no other active DHCP server in your network. Otherwise, it can break the Internet for connected devices!", "dhcp_warning": "If you want to enable DHCP server anyway, make sure that there is no other active DHCP server in your network. Otherwise, it can break the Internet for connected devices!",
@ -51,17 +52,27 @@
"dhcp_static_leases_not_found": "No DHCP static leases found", "dhcp_static_leases_not_found": "No DHCP static leases found",
"dhcp_add_static_lease": "Add static lease", "dhcp_add_static_lease": "Add static lease",
"dhcp_reset": "Are you sure you want to reset DHCP config?", "dhcp_reset": "Are you sure you want to reset DHCP config?",
"country": "Country",
"city": "City",
"delete_confirm": "Are you sure you want to delete \"{{key}}\"?", "delete_confirm": "Are you sure you want to delete \"{{key}}\"?",
"form_enter_hostname": "Enter hostname", "form_enter_hostname": "Enter hostname",
"error_details": "Error details", "error_details": "Error details",
"response_details": "Response details",
"request_details": "Request details",
"client_details": "Client details",
"details": "Details",
"back": "Back", "back": "Back",
"dashboard": "Dashboard", "dashboard": "Dashboard",
"settings": "Settings", "settings": "Settings",
"filters": "Filters", "filters": "Filters",
"filter": "Filter",
"query_log": "Query Log", "query_log": "Query Log",
"compact": "Compact",
"nothing_found": "Nothing found",
"faq": "FAQ", "faq": "FAQ",
"version": "Version", "version": "Version",
"address": "address", "address": "Address",
"protocol": "Protocol",
"on": "ON", "on": "ON",
"off": "OFF", "off": "OFF",
"copyright": "Copyright", "copyright": "Copyright",
@ -134,8 +145,10 @@
"rules_count_table_header": "Rules count", "rules_count_table_header": "Rules count",
"last_time_updated_table_header": "Last time updated", "last_time_updated_table_header": "Last time updated",
"actions_table_header": "Actions", "actions_table_header": "Actions",
"request_table_header": "Request",
"edit_table_action": "Edit", "edit_table_action": "Edit",
"delete_table_action": "Delete", "delete_table_action": "Delete",
"elapsed": "Elapsed",
"filters_and_hosts_hint": "AdGuard Home understands basic adblock rules and hosts files syntax.", "filters_and_hosts_hint": "AdGuard Home understands basic adblock rules and hosts files syntax.",
"no_blocklist_added": "No blocklists added", "no_blocklist_added": "No blocklists added",
"no_whitelist_added": "No allowlists added", "no_whitelist_added": "No allowlists added",
@ -172,12 +185,15 @@
"updated_upstream_dns_toast": "Updated the upstream DNS servers", "updated_upstream_dns_toast": "Updated the upstream DNS servers",
"dns_test_ok_toast": "Specified DNS servers are working correctly", "dns_test_ok_toast": "Specified DNS servers are working correctly",
"dns_test_not_ok_toast": "Server \"{{key}}\": could not be used, please check that you've written it correctly", "dns_test_not_ok_toast": "Server \"{{key}}\": could not be used, please check that you've written it correctly",
"unblock_btn": "Unblock", "unblock": "Unblock",
"block_btn": "Block", "block": "Block",
"time_table_header": "Time", "time_table_header": "Time",
"date": "Date",
"domain_name_table_header": "Domain name", "domain_name_table_header": "Domain name",
"domain_or_client": "Domain or client",
"type_table_header": "Type", "type_table_header": "Type",
"response_table_header": "Response", "response_table_header": "Response",
"response_code": "Response code",
"client_table_header": "Client", "client_table_header": "Client",
"empty_response_status": "Empty", "empty_response_status": "Empty",
"show_all_filter_type": "Show all", "show_all_filter_type": "Show all",
@ -196,6 +212,7 @@
"query_log_filtered": "Filtered by {{filter}}", "query_log_filtered": "Filtered by {{filter}}",
"query_log_confirm_clear": "Are you sure you want to clear the entire query log?", "query_log_confirm_clear": "Are you sure you want to clear the entire query log?",
"query_log_cleared": "The query log has been successfully cleared", "query_log_cleared": "The query log has been successfully cleared",
"query_log_updated": "The query log has been successfully updated",
"query_log_clear": "Clear query logs", "query_log_clear": "Clear query logs",
"query_log_retention": "Query logs retention", "query_log_retention": "Query logs retention",
"query_log_enable": "Enable log", "query_log_enable": "Enable log",
@ -215,6 +232,9 @@
"custom_ip": "Custom IP", "custom_ip": "Custom IP",
"blocking_ipv4": "Blocking IPv4", "blocking_ipv4": "Blocking IPv4",
"blocking_ipv6": "Blocking IPv6", "blocking_ipv6": "Blocking IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"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",
"edns_enable": "Enable EDNS Client Subnet", "edns_enable": "Enable EDNS Client Subnet",
@ -227,12 +247,14 @@
"blocking_mode_null_ip": "Null IP: Respond with zero IP address (0.0.0.0 for A; :: for AAAA)", "blocking_mode_null_ip": "Null IP: Respond with zero IP address (0.0.0.0 for A; :: for AAAA)",
"blocking_mode_custom_ip": "Custom IP: Respond with a manually set IP address", "blocking_mode_custom_ip": "Custom IP: Respond with a manually set IP address",
"upstream_dns_client_desc": "If you keep this field empty, AdGuard Home will use the servers configured in the <0>DNS settings</0>.", "upstream_dns_client_desc": "If you keep this field empty, AdGuard Home will use the servers configured in the <0>DNS settings</0>.",
"tracker_source": "Tracker source",
"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",
"list_label": "List", "list_label": "List",
"unknown_filter": "Unknown filter {{filterId}}", "unknown_filter": "Unknown filter {{filterId}}",
"known_tracker": "Known tracker",
"install_welcome_title": "Welcome to AdGuard Home!", "install_welcome_title": "Welcome to AdGuard Home!",
"install_welcome_desc": "AdGuard Home is a network-wide ad-and-tracker blocking DNS server. Its purpose is to let you control your entire network and all your devices, and it does not require using a client-side program.", "install_welcome_desc": "AdGuard Home is a network-wide ad-and-tracker blocking DNS server. Its purpose is to let you control your entire network and all your devices, and it does not require using a client-side program.",
"install_settings_title": "Admin Web Interface", "install_settings_title": "Admin Web Interface",
@ -350,6 +372,7 @@
"form_enter_id": "Enter identifier", "form_enter_id": "Enter identifier",
"form_add_id": "Add identifier", "form_add_id": "Add identifier",
"form_client_name": "Enter client name", "form_client_name": "Enter client name",
"name": "Name",
"client_global_settings": "Use global settings", "client_global_settings": "Use global settings",
"client_deleted": "Client \"{{key}}\" successfully deleted", "client_deleted": "Client \"{{key}}\" successfully deleted",
"client_added": "Client \"{{key}}\" successfully added", "client_added": "Client \"{{key}}\" successfully added",
@ -449,6 +472,7 @@
"location": "Location", "location": "Location",
"orgname": "Organization name", "orgname": "Organization name",
"netname": "Network name", "netname": "Network name",
"network": "Network",
"descr": "Description", "descr": "Description",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Learn more</0> about creating your own hosts lists.", "filtering_rules_learn_more": "<0>Learn more</0> about creating your own hosts lists.",
@ -494,6 +518,21 @@
"list_updated_plural": "{{count}} lists updated", "list_updated_plural": "{{count}} lists updated",
"dnssec_enable": "Enable DNSSEC", "dnssec_enable": "Enable DNSSEC",
"dnssec_enable_desc": "Set DNSSEC flag in the outcoming DNS queries and check the result (DNSSEC-enabled resolver is required)", "dnssec_enable_desc": "Set DNSSEC flag in the outcoming DNS queries and check the result (DNSSEC-enabled resolver is required)",
"validated_with_dnssec": "Validated with DNSSEC",
"show_all_responses": "All responses",
"show_blocked_responses": "Blocked",
"show_whitelisted_responses": "Whitelisted",
"show_processed_responses": "Processed",
"blocked_safebrowsing": "Blocked by Safebrowsing",
"blocked_adult_websites": "Blocked Adult Websites",
"blocked_threats": "Blocked Threats",
"allowed": "Allowed",
"filtered": "Filtered",
"rewritten": "Rewritten",
"safe_search": "Safe search",
"blocklist": "Blocklist",
"milliseconds_abbreviation": "ms",
"dnssec_enable_desc": "Set DNSSEC flag in the outcoming DNS queries and check the result (DNSSEC-enabled resolver is required)",
"cache_size": "Cache size", "cache_size": "Cache size",
"cache_size_desc": "DNS cache size (in bytes)", "cache_size_desc": "DNS cache size (in bytes)",
"cache_ttl_min_override": "Override minimum TTL", "cache_ttl_min_override": "Override minimum TTL",

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "puedes especificar el DNS de subida <0>para un dominio específico</0>", "example_upstream_reserved": "puedes especificar el DNS de subida <0>para un dominio específico</0>",
"upstream_parallel": "Usar peticiones paralelas para acelerar la resolución al consultar simultáneamente a todos los servidores de subida", "upstream_parallel": "Usar peticiones paralelas para acelerar la resolución al consultar simultáneamente a todos los servidores de subida",
"parallel_requests": "Peticiones paralelas", "parallel_requests": "Peticiones paralelas",
"load_balancing": "Balanceo de carga",
"load_balancing_desc": "Consulta un servidor a la vez. AdGuard Home utilizará el algoritmo aleatorio ponderado para elegir el servidor más rápido y sea utilizado con más frecuencia.",
"bootstrap_dns": "Servidores DNS de arranque", "bootstrap_dns": "Servidores DNS de arranque",
"bootstrap_dns_desc": "Los servidores DNS de arranque se utilizan para resolver las direcciones IP de los resolutores DoH/DoT que usted especifique como DNS de subida.", "bootstrap_dns_desc": "Los servidores DNS de arranque se utilizan para resolver las direcciones IP de los resolutores DoH/DoT que usted especifique como DNS de subida.",
"check_dhcp_servers": "Comprobar si hay servidores DHCP", "check_dhcp_servers": "Comprobar si hay servidores DHCP",
@ -10,7 +12,7 @@
"enabled_dhcp": "Servidor DHCP habilitado", "enabled_dhcp": "Servidor DHCP habilitado",
"disabled_dhcp": "Servidor DHCP deshabilitado", "disabled_dhcp": "Servidor DHCP deshabilitado",
"dhcp_title": "Servidor DHCP (experimental)", "dhcp_title": "Servidor DHCP (experimental)",
"dhcp_description": "Si tu router no proporciona la configuración DHCP, puede utilizar el propio servidor DHCP incorporado de AdGuard.", "dhcp_description": "Si tu router no proporciona la configuración DHCP, puedes utilizar el propio servidor DHCP incorporado de AdGuard.",
"dhcp_enable": "Habilitar servidor DHCP", "dhcp_enable": "Habilitar servidor DHCP",
"dhcp_disable": "Deshabilitar servidor DHCP", "dhcp_disable": "Deshabilitar servidor DHCP",
"dhcp_not_found": "Es seguro habilitar el servidor DHCP incorporado. No se ha encontrado ningún servidor DHCP activo en la red, sin embargo le recomendamos que lo vuelva a comprobar manualmente, ya que nuestra prueba automática no ofrece actualmente una garantía del 100 %.", "dhcp_not_found": "Es seguro habilitar el servidor DHCP incorporado. No se ha encontrado ningún servidor DHCP activo en la red, sin embargo le recomendamos que lo vuelva a comprobar manualmente, ya que nuestra prueba automática no ofrece actualmente una garantía del 100 %.",
@ -37,29 +39,40 @@
"dhcp_interface_select": "Seleccione la interfaz DHCP", "dhcp_interface_select": "Seleccione la interfaz DHCP",
"dhcp_hardware_address": "Dirección MAC", "dhcp_hardware_address": "Dirección MAC",
"dhcp_ip_addresses": "Direcciones IP", "dhcp_ip_addresses": "Direcciones IP",
"ip": "IP",
"dhcp_table_hostname": "Nombre del host", "dhcp_table_hostname": "Nombre del host",
"dhcp_table_expires": "Expira", "dhcp_table_expires": "Expira",
"dhcp_warning": "Si de todos modos desea habilitar el servidor DHCP, asegúrese de que no hay otro servidor DHCP activo en tu red. ¡De lo contrario, puede 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 establezca 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 presiona 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",
"dhcp_new_static_lease": "Nueva asignación estática", "dhcp_new_static_lease": "Nueva asignación estática",
"dhcp_static_leases_not_found": "No se han encontrado asignaciones DHCP estáticas", "dhcp_static_leases_not_found": "No se han encontrado asignaciones DHCP estáticas",
"dhcp_add_static_lease": "Añadir asignación estática", "dhcp_add_static_lease": "Añadir asignación estática",
"dhcp_reset": "¿Está seguro de que desea restablecer la configuración DHCP?", "dhcp_reset": "¿Está seguro de que desea restablecer la configuración DHCP?",
"country": "País",
"city": "Ciudad",
"delete_confirm": "¿Está seguro de que desea eliminar \"{{key}}\"?", "delete_confirm": "¿Está seguro de que desea eliminar \"{{key}}\"?",
"form_enter_hostname": "Ingresa el nombre del host", "form_enter_hostname": "Ingresa el nombre del host",
"error_details": "Detalles del error", "error_details": "Detalles del error",
"response_details": "Detalles de la respuesta",
"request_details": "Detalles de la petición",
"client_details": "Detalles del cliente",
"details": "Detalles",
"back": "Atrás", "back": "Atrás",
"dashboard": "Panel de control", "dashboard": "Panel de control",
"settings": "Configuración", "settings": "Configuración",
"filters": "Filtros", "filters": "Filtros",
"filter": "Filtro",
"query_log": "Registro de consultas", "query_log": "Registro de consultas",
"compact": "Compacto",
"nothing_found": "No se ha encontrado nada",
"faq": "Preguntas frecuentes", "faq": "Preguntas frecuentes",
"version": "Versión", "version": "Versión",
"address": "dirección", "address": "Dirección",
"protocol": "Protocolo",
"on": "Activo", "on": "Activo",
"off": "Inactivo", "off": "Inactivo",
"copyright": "Copyright", "copyright": "Copyright",
@ -85,7 +98,7 @@
"top_clients": "Clientes más frecuentes", "top_clients": "Clientes más frecuentes",
"no_clients_found": "No se han encontrado clientes", "no_clients_found": "No se han encontrado clientes",
"general_statistics": "Estadísticas generales", "general_statistics": "Estadísticas generales",
"number_of_dns_query_days": "Número de consultas DNS procesadas durante los últimos {{count}} días", "number_of_dns_query_days": "Número de consultas DNS procesadas durante el último {{count}} día",
"number_of_dns_query_days_plural": "Número de consultas DNS procesadas durante los últimos {{count}} días", "number_of_dns_query_days_plural": "Número de consultas DNS procesadas durante los últimos {{count}} días",
"number_of_dns_query_24_hours": "Número de consultas DNS procesadas durante las últimas 24 horas", "number_of_dns_query_24_hours": "Número de consultas DNS procesadas durante las últimas 24 horas",
"number_of_dns_query_blocked_24_hours": "Número de peticiones DNS bloqueadas por los filtros y listas de bloqueo de hosts", "number_of_dns_query_blocked_24_hours": "Número de peticiones DNS bloqueadas por los filtros y listas de bloqueo de hosts",
@ -96,7 +109,7 @@
"average_processing_time": "Tiempo promedio de procesamiento", "average_processing_time": "Tiempo promedio de procesamiento",
"average_processing_time_hint": "Tiempo promedio en milisegundos al procesar una petición DNS", "average_processing_time_hint": "Tiempo promedio en milisegundos al procesar una petición DNS",
"block_domain_use_filters_and_hosts": "Bloquear dominios usando filtros y archivos hosts", "block_domain_use_filters_and_hosts": "Bloquear dominios usando filtros y archivos hosts",
"filters_block_toggle_hint": "Puede configurar las reglas de bloqueo en la configuración de <a href='#filters'>filtros</a>.", "filters_block_toggle_hint": "Puedes configurar las reglas de bloqueo en la configuración de <a href='#filters'>filtros</a>.",
"use_adguard_browsing_sec": "Usar el servicio web de seguridad de navegación de AdGuard", "use_adguard_browsing_sec": "Usar el servicio web de seguridad de navegación de AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home comprobará si el dominio está en la lista negra del servicio web de seguridad de navegación. Utilizará la API de búsqueda amigable con la privacidad para realizar la comprobación: solo se envía al servidor un prefijo corto del nombre de dominio con hash SHA256.", "use_adguard_browsing_sec_hint": "AdGuard Home comprobará si el dominio está en la lista negra del servicio web de seguridad de navegación. Utilizará la API de búsqueda amigable con la privacidad para realizar la comprobación: solo se envía al servidor un prefijo corto del nombre de dominio con hash SHA256.",
"use_adguard_parental": "Usar el control parental de AdGuard", "use_adguard_parental": "Usar el control parental de AdGuard",
@ -114,14 +127,14 @@
"encryption_settings": "Configuración de cifrado", "encryption_settings": "Configuración de cifrado",
"dhcp_settings": "Configuración DHCP", "dhcp_settings": "Configuración DHCP",
"upstream_dns": "Servidores DNS de subida", "upstream_dns": "Servidores DNS de subida",
"upstream_dns_hint": "Si mantiene este campo vacío, AdGuard Home utilizará <a href='https://www.quad9.net/' target='_blank'>Quad9</a> como DNS de subida.", "upstream_dns_hint": "Si se mantiene este campo vacío, AdGuard Home utilizará <a href='https://www.quad9.net/' target='_blank'>Quad9</a> como DNS de subida.",
"test_upstream_btn": "Probar DNS de subida", "test_upstream_btn": "Probar DNS de subida",
"upstreams": "DNS de subida", "upstreams": "DNS de subida",
"apply_btn": "Aplicar", "apply_btn": "Aplicar",
"disabled_filtering_toast": "Filtrado deshabilitado", "disabled_filtering_toast": "Filtrado deshabilitado",
"enabled_filtering_toast": "Filtrado habilitado", "enabled_filtering_toast": "Filtrado habilitado",
"disabled_safe_browsing_toast": "Búsqueda segura deshabilitada", "disabled_safe_browsing_toast": "Navegación segura deshabilitada",
"enabled_safe_browsing_toast": "Búsqueda segura habilitada", "enabled_safe_browsing_toast": "Navegación segura habilitada",
"disabled_parental_toast": "Control parental deshabilitado", "disabled_parental_toast": "Control parental deshabilitado",
"enabled_parental_toast": "Control parental habilitado", "enabled_parental_toast": "Control parental habilitado",
"disabled_safe_search_toast": "Búsqueda segura deshabilitada", "disabled_safe_search_toast": "Búsqueda segura deshabilitada",
@ -132,8 +145,10 @@
"rules_count_table_header": "Número de reglas", "rules_count_table_header": "Número de reglas",
"last_time_updated_table_header": "Última actualización", "last_time_updated_table_header": "Última actualización",
"actions_table_header": "Acciones", "actions_table_header": "Acciones",
"request_table_header": "Petición",
"edit_table_action": "Editar", "edit_table_action": "Editar",
"delete_table_action": "Eliminar", "delete_table_action": "Eliminar",
"elapsed": "Transcurrido",
"filters_and_hosts_hint": "AdGuard Home entiende las reglas básicas de bloqueo y la sintaxis de los archivos hosts.", "filters_and_hosts_hint": "AdGuard Home entiende las reglas básicas de bloqueo y la sintaxis de los archivos hosts.",
"no_blocklist_added": "No se han añadido listas de bloqueo", "no_blocklist_added": "No se han añadido listas de bloqueo",
"no_whitelist_added": "No se han añadido listas de permitido", "no_whitelist_added": "No se han añadido listas de permitido",
@ -169,13 +184,16 @@
"all_lists_up_to_date_toast": "Todas las listas ya están actualizadas", "all_lists_up_to_date_toast": "Todas las listas ya están actualizadas",
"updated_upstream_dns_toast": "Servidores DNS de subida actualizados", "updated_upstream_dns_toast": "Servidores DNS de subida actualizados",
"dns_test_ok_toast": "Los servidores DNS especificados funcionan correctamente", "dns_test_ok_toast": "Los servidores DNS especificados funcionan correctamente",
"dns_test_not_ok_toast": "Servidor \"{{key}}\": no se puede utilizar, por favor revise si lo ha escrito correctamente", "dns_test_not_ok_toast": "Servidor \"{{key}}\": no se puede utilizar, por favor revisa si lo has escrito correctamente",
"unblock_btn": "Desbloquear", "unblock": "Desbloquear",
"block_btn": "Bloquear", "block": "Bloquear",
"time_table_header": "Hora", "time_table_header": "Hora",
"date": "Fecha",
"domain_name_table_header": "Nombre del dominio", "domain_name_table_header": "Nombre del dominio",
"domain_or_client": "Dominio o cliente",
"type_table_header": "Tipo", "type_table_header": "Tipo",
"response_table_header": "Respuesta", "response_table_header": "Respuesta",
"response_code": "Código de respuesta",
"client_table_header": "Cliente", "client_table_header": "Cliente",
"empty_response_status": "Vacío", "empty_response_status": "Vacío",
"show_all_filter_type": "Mostrar todo", "show_all_filter_type": "Mostrar todo",
@ -194,6 +212,7 @@
"query_log_filtered": "Filtrado por {{filter}}", "query_log_filtered": "Filtrado por {{filter}}",
"query_log_confirm_clear": "¿Está seguro de que desea borrar todo el registro de consultas?", "query_log_confirm_clear": "¿Está seguro de que desea borrar todo el registro de consultas?",
"query_log_cleared": "El registro de consultas se ha borrado correctamente", "query_log_cleared": "El registro de consultas se ha borrado correctamente",
"query_log_updated": "El registro de consultas se ha actualizado correctamente",
"query_log_clear": "Borrar registros de consultas", "query_log_clear": "Borrar registros de consultas",
"query_log_retention": "Retención de registros de consultas", "query_log_retention": "Retención de registros de consultas",
"query_log_enable": "Habilitar registro", "query_log_enable": "Habilitar registro",
@ -211,6 +230,9 @@
"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",
"dns_over_https": "DNS mediante HTTPS",
"dns_over_tls": "DNS mediante TLS",
"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",
"edns_enable": "Habilitar subred de cliente EDNS", "edns_enable": "Habilitar subred de cliente EDNS",
@ -222,13 +244,15 @@
"blocking_mode_nxdomain": "NXDOMAIN: Responde con el código NXDOMAIN", "blocking_mode_nxdomain": "NXDOMAIN: Responde con el código NXDOMAIN",
"blocking_mode_null_ip": "IP nulo: Responde con dirección IP cero (0.0.0.0 para A; :: para AAAA)", "blocking_mode_null_ip": "IP nulo: Responde con dirección IP cero (0.0.0.0 para A; :: para AAAA)",
"blocking_mode_custom_ip": "IP personalizada: Responde con una dirección IP establecida manualmente", "blocking_mode_custom_ip": "IP personalizada: Responde con una dirección IP establecida manualmente",
"upstream_dns_client_desc": "Si mantiene este campo vacío, AdGuard Home utilizará los servidores configurados en la <0>configuración del DNS</0>.", "upstream_dns_client_desc": "Si se mantiene este campo vacío, AdGuard Home utilizará los servidores configurados en la <0>configuración del DNS</0>.",
"tracker_source": "Fuente del rastreador",
"source_label": "Fuente", "source_label": "Fuente",
"found_in_known_domain_db": "Encontrado en la base de datos de dominios conocidos.", "found_in_known_domain_db": "Encontrado en la base de datos de dominios conocidos.",
"category_label": "Categoría", "category_label": "Categoría",
"rule_label": "Regla", "rule_label": "Regla",
"list_label": "Lista", "list_label": "Lista",
"unknown_filter": "Filtro desconocido {{filterId}}", "unknown_filter": "Filtro desconocido {{filterId}}",
"known_tracker": "Rastreador conocido",
"install_welcome_title": "¡Bienvenido a AdGuard Home!", "install_welcome_title": "¡Bienvenido a AdGuard Home!",
"install_welcome_desc": "AdGuard Home es un servidor DNS para bloqueo de anuncios y rastreadores a nivel de red. Su propósito es permitirte controlar toda tu red y todos tus dispositivos, y no requiere el uso de un programa del lado del cliente.", "install_welcome_desc": "AdGuard Home es un servidor DNS para bloqueo de anuncios y rastreadores a nivel de red. Su propósito es permitirte controlar toda tu red y todos tus dispositivos, y no requiere el uso de un programa del lado del cliente.",
"install_settings_title": "Interfaz web de administración", "install_settings_title": "Interfaz web de administración",
@ -257,7 +281,7 @@
"install_devices_router_list_1": "Abre las preferencias de tu router. Por lo general, puedes acceder a él desde tu navegador a través de una URL (como http://192.168.0.1/ o http://192.168.1.1/). Es posible que se te pida que ingreses la contraseña. Si no lo recuerdas, a menudo puedes restablecer la contraseña presionando un botón en el router. Algunos routers requieren una aplicación específica, que en ese caso ya debería estar instalada en tu computadora/teléfono.", "install_devices_router_list_1": "Abre las preferencias de tu router. Por lo general, puedes acceder a él desde tu navegador a través de una URL (como http://192.168.0.1/ o http://192.168.1.1/). Es posible que se te pida que ingreses la contraseña. Si no lo recuerdas, a menudo puedes restablecer la contraseña presionando un botón en el router. Algunos routers requieren una aplicación específica, que en ese caso ya debería estar instalada en tu computadora/teléfono.",
"install_devices_router_list_2": "Busca la configuración de DHCP/DNS. Busca las letras DNS junto a un campo que permita ingresar dos o tres grupos de números, cada uno dividido en cuatro grupos de uno a tres dígitos.", "install_devices_router_list_2": "Busca la configuración de DHCP/DNS. Busca las letras DNS junto a un campo que permita ingresar dos o tres grupos de números, cada uno dividido en cuatro grupos de uno a tres dígitos.",
"install_devices_router_list_3": "Ingresa las direcciones de tu servidor AdGuard Home allí.", "install_devices_router_list_3": "Ingresa las direcciones de tu servidor AdGuard Home allí.",
"install_devices_router_list_4": "No se puede configurar un servidor DNS personalizado en algunos tipos de routers. En este caso puede ayudar si configuras AdGuard Home como un servidor DHCP. De lo contrario, deberías buscar el manual sobre cómo personalizar los servidores DNS para tu modelo de router en particular.", "install_devices_router_list_4": "No se puede configurar un servidor DNS personalizado en algunos tipos de routers. En este caso puede ayudar si configuras AdGuard Home como un <0>servidor DHCP</0>. De lo contrario, deberías buscar el manual sobre cómo personalizar los servidores DNS para tu modelo de router en particular.",
"install_devices_windows_list_1": "Abre el Panel de control a través del menú Inicio o en el buscador de Windows.", "install_devices_windows_list_1": "Abre el Panel de control a través del menú Inicio o en el buscador de Windows.",
"install_devices_windows_list_2": "Ve a la categoría Redes e Internet, luego a Centro de redes y recursos compartidos.", "install_devices_windows_list_2": "Ve a la categoría Redes e Internet, luego a Centro de redes y recursos compartidos.",
"install_devices_windows_list_3": "En el lado izquierdo de la pantalla, busca Cambiar configuración del adaptador y luego haz clic en él.", "install_devices_windows_list_3": "En el lado izquierdo de la pantalla, busca Cambiar configuración del adaptador y luego haz clic en él.",
@ -346,6 +370,7 @@
"form_enter_id": "Ingresa el identificador", "form_enter_id": "Ingresa el identificador",
"form_add_id": "Añadir identificador", "form_add_id": "Añadir identificador",
"form_client_name": "Ingresa el nombre del cliente", "form_client_name": "Ingresa el nombre del cliente",
"name": "Nombre",
"client_global_settings": "Usar configuración global", "client_global_settings": "Usar configuración global",
"client_deleted": "Cliente \"{{key}}\" eliminado correctamente", "client_deleted": "Cliente \"{{key}}\" eliminado correctamente",
"client_added": "Cliente \"{{key}}\" añadido correctamente", "client_added": "Cliente \"{{key}}\" añadido correctamente",
@ -356,7 +381,7 @@
"auto_clients_title": "Clientes (activos)", "auto_clients_title": "Clientes (activos)",
"auto_clients_desc": "Datos de los clientes que utilizan AdGuard Home, pero no se almacenan en la configuración", "auto_clients_desc": "Datos de los clientes que utilizan AdGuard Home, pero no se almacenan en la configuración",
"access_title": "Configuración de acceso", "access_title": "Configuración de acceso",
"access_desc": "Aquí puede configurar las reglas de acceso para el servidor DNS de AdGuard Home.", "access_desc": "Aquí puedes configurar las reglas de acceso para el servidor DNS de AdGuard Home.",
"access_allowed_title": "Clientes permitidos", "access_allowed_title": "Clientes permitidos",
"access_allowed_desc": "Lista de CIDR o direcciones IP. Si está configurado, AdGuard Home solo aceptará peticiones de estas direcciones IP.", "access_allowed_desc": "Lista de CIDR o direcciones IP. Si está configurado, AdGuard Home solo aceptará peticiones de estas direcciones IP.",
"access_disallowed_title": "Clientes no permitidos", "access_disallowed_title": "Clientes no permitidos",
@ -382,7 +407,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á más implementaciones <0>aquí</0> y <1>aquí</1>.", "setup_dns_privacy_other_5": "Encontrará más implementaciones <0>aquí</0> y <1>aquí</1>.",
"setup_dns_notice": "Para utilizar <1>DNS mediante HTTPS</1> o <1>DNS mediante TLS</1>, debe <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",
"rewrite_add": "Añadir reescritura DNS", "rewrite_add": "Añadir reescritura DNS",
@ -445,6 +470,7 @@
"location": "Ubicación", "location": "Ubicación",
"orgname": "Nombre de la organización", "orgname": "Nombre de la organización",
"netname": "Nombre de la red", "netname": "Nombre de la red",
"network": "Red",
"descr": "Descripción", "descr": "Descripción",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Más información</0> sobre cómo crear tus propias listas de hosts.", "filtering_rules_learn_more": "<0>Más información</0> sobre cómo crear tus propias listas de hosts.",
@ -456,12 +482,12 @@
"disable_ipv6": "Deshabilitar IPv6", "disable_ipv6": "Deshabilitar IPv6",
"disable_ipv6_desc": "Si esta función está habilitada, se eliminarán todas las consultas DNS para direcciones IPv6 (tipo AAAA).", "disable_ipv6_desc": "Si esta función está habilitada, se eliminarán todas las consultas DNS para direcciones IPv6 (tipo AAAA).",
"fastest_addr": "Dirección IP más rápida", "fastest_addr": "Dirección IP más rápida",
"fastest_addr_desc": "Consulta todos los servidores DNS y devuelve la dirección IP más rápida de todas las respuestas", "fastest_addr_desc": "Consulta todos los servidores DNS y devuelve la dirección IP más rápida de todas las respuestas. Esto ralentizará las consultas DNS, y se debe esperar las respuestas de todos los servidores DNS, pero mejora la conectividad general.",
"autofix_warning_text": "Si hace clic en \"Corregir\", AdGuard Home configurará tu sistema para utilizar el servidor DNS de AdGuard Home.", "autofix_warning_text": "Si haces clic en \"Corregir\", AdGuard Home configurará tu sistema para utilizar el servidor DNS de AdGuard Home.",
"autofix_warning_list": "Realizará estas tareas: <0>Deshabilitar el sistema DNSStubListener</0> <0>Establecer la dirección del servidor DNS en 127.0.0.1</0> <0>Reemplazar el destino del enlace simbólico de /etc/resolv.conf por /run/systemd/resolve/resolv.conf</0> <0>Detener DNSStubListener (recargar el servicio systemd-resolved)</0>", "autofix_warning_list": "Realizará estas tareas: <0>Deshabilitar el sistema DNSStubListener</0> <0>Establecer la dirección del servidor DNS en 127.0.0.1</0> <0>Reemplazar el destino del enlace simbólico de /etc/resolv.conf por /run/systemd/resolve/resolv.conf</0> <0>Detener DNSStubListener (recargar el servicio systemd-resolved)</0>",
"autofix_warning_result": "Como resultado, todas las peticiones DNS de tu sistema serán procesadas por AdGuard Home de manera predeterminada.", "autofix_warning_result": "Como resultado, todas las peticiones DNS de tu sistema serán procesadas por AdGuard Home de manera predeterminada.",
"tags_title": "Etiquetas", "tags_title": "Etiquetas",
"tags_desc": "Puede seleccionar las etiquetas que correspondan al cliente. Las etiquetas pueden ser incluidas en las reglas de filtrado y te permiten aplicarlas con mayor precisión. <0>Más información</0>", "tags_desc": "Puedes seleccionar las etiquetas que correspondan al cliente. Las etiquetas pueden ser incluidas en las reglas de filtrado y te permiten aplicarlas con mayor precisión. <0>Más información</0>",
"form_select_tags": "Seleccione las etiquetas del cliente", "form_select_tags": "Seleccione las etiquetas del cliente",
"check_title": "Comprobar filtrado", "check_title": "Comprobar filtrado",
"check_desc": "Comprueba si el nombre del host está siendo filtrado", "check_desc": "Comprueba si el nombre del host está siendo filtrado",
@ -483,11 +509,25 @@
"static_ip_desc": "AdGuard Home es un servidor, por lo que necesita una dirección IP estática para funcionar correctamente. De lo contrario, en algún momento tu router puede asignar una dirección IP diferente a este dispositivo.", "static_ip_desc": "AdGuard Home es un servidor, por lo que necesita una dirección IP estática para funcionar correctamente. De lo contrario, en algún momento tu router puede asignar una dirección IP diferente a este dispositivo.",
"set_static_ip": "Establecer una dirección IP estática", "set_static_ip": "Establecer una dirección IP estática",
"install_static_ok": "¡Buenas noticias! La dirección IP estática ya está configurada", "install_static_ok": "¡Buenas noticias! La dirección IP estática ya está configurada",
"install_static_error": "AdGuard Home no puede configurarlo automáticamente para esta interfaz de red. Busque instrucciones sobre cómo hacer esto manualmente.", "install_static_error": "AdGuard Home no puede configurarlo automáticamente para esta interfaz de red. Busca instrucciones sobre cómo hacer esto manualmente.",
"install_static_configure": "Hemos detectado que utiliza una dirección IP dinámica: <0>{{ip}}</0>. ¿Deseas usarla como tu dirección estática?", "install_static_configure": "Hemos detectado que utilizas una dirección IP dinámica: <0>{{ip}}</0>. ¿Deseas usarla como tu dirección estática?",
"confirm_static_ip": "AdGuard Home configurará {{ip}} para ser tu dirección IP estática. ¿Desea continuar?", "confirm_static_ip": "AdGuard Home configurará {{ip}} para ser tu dirección IP estática. ¿Desea continuar?",
"list_updated": "{{count}} lista actualizada", "list_updated": "{{count}} lista actualizada",
"list_updated_plural": "{{count}} listas actualizadas", "list_updated_plural": "{{count}} listas actualizadas",
"dnssec_enable": "Habilitar DNSSEC", "dnssec_enable": "Habilitar DNSSEC",
"dnssec_enable_desc": "Establece el indicador DNSSEC en las consultas DNS salientes y comprueba el resultado (se requiere un resolutor habilitado para DNSSEC)" "dnssec_enable_desc": "Establece el indicador DNSSEC en las consultas DNS salientes y comprueba el resultado (se requiere un resolutor habilitado para DNSSEC)",
"validated_with_dnssec": "Validado con DNSSEC",
"show_all_responses": "Todas las respuestas",
"show_blocked_responses": "Bloqueado",
"show_whitelisted_responses": "En lista blanca",
"show_processed_responses": "Procesado",
"blocked_safebrowsing": "Bloqueado por navegación segura",
"blocked_adult_websites": "Sitios web para adultos bloqueado",
"blocked_threats": "Amenazas bloqueadas",
"allowed": "Permitido",
"filtered": "Filtrado",
"rewritten": "Reescrito",
"safe_search": "Búsqueda segura",
"blocklist": "Lista de bloqueo",
"milliseconds_abbreviation": "ms"
} }

View File

@ -37,6 +37,7 @@
"dhcp_interface_select": "رابط DHCP را انتخاب کنید", "dhcp_interface_select": "رابط DHCP را انتخاب کنید",
"dhcp_hardware_address": "آدرس سخت افزار", "dhcp_hardware_address": "آدرس سخت افزار",
"dhcp_ip_addresses": "آدرس آی پی", "dhcp_ip_addresses": "آدرس آی پی",
"ip": "IP",
"dhcp_table_hostname": "نام میزبان", "dhcp_table_hostname": "نام میزبان",
"dhcp_table_expires": "انقضاء", "dhcp_table_expires": "انقضاء",
"dhcp_warning": "اگر میخواهید DHCP سرور توکار را فعال کنید،مطمئن شوید DHCP سرور دیگری فعال نباشد.در غیر اینصورت،آن دسترسی به اینترنت را برای دستگاه های وصل شده قطع می کند!", "dhcp_warning": "اگر میخواهید DHCP سرور توکار را فعال کنید،مطمئن شوید DHCP سرور دیگری فعال نباشد.در غیر اینصورت،آن دسترسی به اینترنت را برای دستگاه های وصل شده قطع می کند!",
@ -49,17 +50,25 @@
"dhcp_static_leases_not_found": "هیچ اجاره DHCP ایستا یافت نشد", "dhcp_static_leases_not_found": "هیچ اجاره DHCP ایستا یافت نشد",
"dhcp_add_static_lease": "افزودن اجاره ایستا", "dhcp_add_static_lease": "افزودن اجاره ایستا",
"dhcp_reset": "آیا میخواهید پیکربندی DHCP را ریست کنید؟", "dhcp_reset": "آیا میخواهید پیکربندی DHCP را ریست کنید؟",
"country": "کشور",
"city": "شهر",
"delete_confirm": "آیا میخواهید \"{{key}}\" را حذف کنید؟", "delete_confirm": "آیا میخواهید \"{{key}}\" را حذف کنید؟",
"form_enter_hostname": "نام میزبان را وارد کنید", "form_enter_hostname": "نام میزبان را وارد کنید",
"error_details": "جزئیات خطا", "error_details": "جزئیات خطا",
"response_details": "جزئیات پاسخ",
"request_details": "درخواست جزئیات",
"client_details": "جزئیات کلاینت",
"details": "جزئیات",
"back": "قبلی", "back": "قبلی",
"dashboard": "داشبورد", "dashboard": "داشبورد",
"settings": "تنظيمات", "settings": "تنظيمات",
"filters": "فيلترها", "filters": "فيلترها",
"filter": "فیلتر",
"query_log": "جستار وقایع", "query_log": "جستار وقایع",
"faq": "پرسش و پاسخ", "faq": "پرسش و پاسخ",
"version": "نسخه", "version": "نسخه",
"address": "آدرس", "address": "آدرس",
"protocol": "پروتکل",
"on": "روشن", "on": "روشن",
"off": "خاموش", "off": "خاموش",
"copyright": "حق مالکیت", "copyright": "حق مالکیت",
@ -132,8 +141,10 @@
"rules_count_table_header": "تعداد دستور", "rules_count_table_header": "تعداد دستور",
"last_time_updated_table_header": "زمان آخرین بروزرسانی", "last_time_updated_table_header": "زمان آخرین بروزرسانی",
"actions_table_header": "اقدامات", "actions_table_header": "اقدامات",
"request_table_header": "درخواست",
"edit_table_action": "ويرايش", "edit_table_action": "ويرايش",
"delete_table_action": "حذف", "delete_table_action": "حذف",
"elapsed": "سپری شده",
"filters_and_hosts_hint": "AdGuard Home دستورات پایه مسدودساز تبلیغ و نحو فایل های میزبان را درک می کند.", "filters_and_hosts_hint": "AdGuard Home دستورات پایه مسدودساز تبلیغ و نحو فایل های میزبان را درک می کند.",
"no_blocklist_added": "به لیست سیاه اضافه نشد", "no_blocklist_added": "به لیست سیاه اضافه نشد",
"no_whitelist_added": "به لیست مجاز اضافه نشد", "no_whitelist_added": "به لیست مجاز اضافه نشد",
@ -170,10 +181,12 @@
"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_test_not_ok_toast": "سرور \"{{key}}\": نمیتواند مورد استفاده قرار گیرد،لطفا بررسی کنید آن را بدرستی نوشته اید",
"unblock_btn": "باز کن", "unblock": "رفع انسداد",
"block_btn": "مسدود کن", "block": "مسدود کردن",
"time_table_header": "زمان", "time_table_header": "زمان",
"date": "تاریخ",
"domain_name_table_header": "نام دامنه", "domain_name_table_header": "نام دامنه",
"domain_or_client": "دامنه یا کلاینت",
"type_table_header": "نوع", "type_table_header": "نوع",
"response_table_header": "پاسخ", "response_table_header": "پاسخ",
"client_table_header": "کلاینت", "client_table_header": "کلاینت",
@ -211,6 +224,8 @@
"custom_ip": "آی پی دستی", "custom_ip": "آی پی دستی",
"blocking_ipv4": "مسدودسازی IPv4", "blocking_ipv4": "مسدودسازی IPv4",
"blocking_ipv6": "مسدودسازی IPv6", "blocking_ipv6": "مسدودسازی IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"form_enter_rate_limit": "میزان محدودیت را وارد کنید", "form_enter_rate_limit": "میزان محدودیت را وارد کنید",
"rate_limit": "میزان محدودیت", "rate_limit": "میزان محدودیت",
"edns_enable": "فعالسازی زیرشبکه کلاینت EDNS", "edns_enable": "فعالسازی زیرشبکه کلاینت EDNS",
@ -229,6 +244,7 @@
"rule_label": "دستور", "rule_label": "دستور",
"list_label": "لیست", "list_label": "لیست",
"unknown_filter": "فیلتر ناشناخته {{filterId}}", "unknown_filter": "فیلتر ناشناخته {{filterId}}",
"known_tracker": "ردیاب های شناخته شده",
"install_welcome_title": "به AdGuard Home خوش آمدید!", "install_welcome_title": "به AdGuard Home خوش آمدید!",
"install_welcome_desc": "AdGuard Home یک شبکه گسترده و ردیاب و مسدوساز تبلیغ با سرور DNS است.هدف آن این است که به شما اجازه کنترل کل شبکه و همه دستگاه های شما را بدهد و آن نیازی به برنامه سمت-کاربر ندارد.", "install_welcome_desc": "AdGuard Home یک شبکه گسترده و ردیاب و مسدوساز تبلیغ با سرور DNS است.هدف آن این است که به شما اجازه کنترل کل شبکه و همه دستگاه های شما را بدهد و آن نیازی به برنامه سمت-کاربر ندارد.",
"install_settings_title": "رابط وب آدمین", "install_settings_title": "رابط وب آدمین",
@ -346,6 +362,7 @@
"form_enter_id": "خطای احرازکننده", "form_enter_id": "خطای احرازکننده",
"form_add_id": "افزودن احرازکننده", "form_add_id": "افزودن احرازکننده",
"form_client_name": "نام کلاینت را وارد کنید", "form_client_name": "نام کلاینت را وارد کنید",
"name": "نام",
"client_global_settings": "استفاده از تنظیمات سراسری", "client_global_settings": "استفاده از تنظیمات سراسری",
"client_deleted": "کلاینت \"{{key}}\" را با موفقیت حذف کرد", "client_deleted": "کلاینت \"{{key}}\" را با موفقیت حذف کرد",
"client_added": "کلاینت \"{{key}}\" را با موفقیت اضافه کرد", "client_added": "کلاینت \"{{key}}\" را با موفقیت اضافه کرد",
@ -445,6 +462,7 @@
"location": "مکان", "location": "مکان",
"orgname": "نام سازمان", "orgname": "نام سازمان",
"netname": "نام شبکه", "netname": "نام شبکه",
"network": "شبکه",
"descr": "توضيحات", "descr": "توضيحات",
"whois": "هوئیز", "whois": "هوئیز",
"filtering_rules_learn_more": "درباره ایجاد لیست سیاه میزبان برای خود <0>بیشتر بدانید</0>.", "filtering_rules_learn_more": "درباره ایجاد لیست سیاه میزبان برای خود <0>بیشتر بدانید</0>.",
@ -489,5 +507,19 @@
"list_updated": "{{count}} لیست بروز رسانی شد", "list_updated": "{{count}} لیست بروز رسانی شد",
"list_updated_plural": "{{count}} لیست بروز رسانی شد", "list_updated_plural": "{{count}} لیست بروز رسانی شد",
"dnssec_enable": "فعالسازی DNSSEC", "dnssec_enable": "فعالسازی DNSSEC",
"dnssec_enable_desc": "تنظیم نشان DNSSEC در جستارهای حاصل DNS و بررسی نتیجه (تفکیک کننده DNSSEC-فعال شده نیاز است)" "dnssec_enable_desc": "تنظیم نشان DNSSEC در جستارهای حاصل DNS و بررسی نتیجه (تفکیک کننده DNSSEC-فعال شده نیاز است)",
"validated_with_dnssec": "معتبر سازی با DNSSEC",
"show_all_responses": "همه پاسخ ها",
"show_blocked_responses": "مسدود شده",
"show_whitelisted_responses": "لیست سفید",
"show_processed_responses": "پردازش شده",
"blocked_safebrowsing": "بستن وب گردی اَمن",
"blocked_adult_websites": "وبسایت غیراخلاقی مسدود شده",
"blocked_threats": "تهدیدات مسدود شده",
"allowed": "اجازه داده شده",
"filtered": "فیلتر شده",
"rewritten": "بازنویسی شده",
"safe_search": "جستجوی اَمن",
"blocklist": "لیست سیاه",
"milliseconds_abbreviation": "هـ ثـ"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "Vous pouvez spécifier un DNS en amont <0>pour un/des domaine(s) spécifique(s)</0>", "example_upstream_reserved": "Vous pouvez spécifier un DNS en amont <0>pour un/des domaine(s) spécifique(s)</0>",
"upstream_parallel": "Utiliser des requêtes parallèles pour accélérer la résolution en requêtant simultanément tous les serveurs upstream", "upstream_parallel": "Utiliser des requêtes parallèles pour accélérer la résolution en requêtant simultanément tous les serveurs upstream",
"parallel_requests": "Demandes en parallèle", "parallel_requests": "Demandes en parallèle",
"load_balancing": "Équilibrage de charge",
"load_balancing_desc": "Interroger un serveur à la fois. AdGuard Home utilisera lalgorithme aléatoire pondéré pour choisir le serveur afin que celui le plus rapide soit utilisé plus souvent.",
"bootstrap_dns": "Serveurs DNS d'amorçage", "bootstrap_dns": "Serveurs DNS d'amorçage",
"bootstrap_dns_desc": "Les serveurs DNS d'amorçage sont utilisés pour résoudre les adresses IP des résolveurs DoH/DoT que vous spécifiez comme upstream.", "bootstrap_dns_desc": "Les serveurs DNS d'amorçage sont utilisés pour résoudre les adresses IP des résolveurs DoH/DoT que vous spécifiez comme upstream.",
"check_dhcp_servers": "Rechercher les serveurs DHCP", "check_dhcp_servers": "Rechercher les serveurs DHCP",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Sélectionner l'interface du serveur DHCP", "dhcp_interface_select": "Sélectionner l'interface du serveur DHCP",
"dhcp_hardware_address": "Adresse de la machine", "dhcp_hardware_address": "Adresse de la machine",
"dhcp_ip_addresses": "Adresses IP", "dhcp_ip_addresses": "Adresses IP",
"ip": "IP",
"dhcp_table_hostname": "Nom de machine", "dhcp_table_hostname": "Nom de machine",
"dhcp_table_expires": "Expire le", "dhcp_table_expires": "Expire le",
"dhcp_warning": "Si vous souhaitez tout de même activer le serveur DHCP, assurez-vous qu'il n'y a d'autre serveur DHCP actif sur votre réseau. Sinon, cela peut faire dysfonctionner Internet sur tous les appareils connectés au réseau !", "dhcp_warning": "Si vous souhaitez tout de même activer le serveur DHCP, assurez-vous qu'il n'y a d'autre serveur DHCP actif sur votre réseau. Sinon, cela peut faire dysfonctionner Internet sur tous les appareils connectés au réseau !",
@ -49,17 +52,25 @@
"dhcp_static_leases_not_found": "Aucun bail statique DHCP trouvé", "dhcp_static_leases_not_found": "Aucun bail statique DHCP trouvé",
"dhcp_add_static_lease": "Ajoutez un bail statique", "dhcp_add_static_lease": "Ajoutez un bail statique",
"dhcp_reset": "Voulez-vous vraiment réinitialiser votre configuration DHCP ?", "dhcp_reset": "Voulez-vous vraiment réinitialiser votre configuration DHCP ?",
"country": "Pays",
"city": "Ville",
"delete_confirm": "Voulez-vous vraiment supprimer \"{{key}}\" ?", "delete_confirm": "Voulez-vous vraiment supprimer \"{{key}}\" ?",
"form_enter_hostname": "Saisissez un nom d'hôte", "form_enter_hostname": "Saisissez un nom d'hôte",
"error_details": "Détails des erreurs", "error_details": "Détails des erreurs",
"response_details": "Détails de la réponse",
"request_details": "Demander des détails",
"client_details": "Détails du client",
"details": "Détails",
"back": "Retour", "back": "Retour",
"dashboard": "Tableau de bord", "dashboard": "Tableau de bord",
"settings": "Paramètres", "settings": "Paramètres",
"filters": "Filtres", "filters": "Filtres",
"filter": "Filtre",
"query_log": "Journal des requêtes", "query_log": "Journal des requêtes",
"faq": "FAQ", "faq": "FAQ",
"version": "version", "version": "version",
"address": "addresse", "address": "Addresse",
"protocol": "Protocole",
"on": "Activé", "on": "Activé",
"off": "Éteint", "off": "Éteint",
"copyright": "Copyright", "copyright": "Copyright",
@ -132,8 +143,10 @@
"rules_count_table_header": "Nombre des règles", "rules_count_table_header": "Nombre des règles",
"last_time_updated_table_header": "Dernière mise à jour", "last_time_updated_table_header": "Dernière mise à jour",
"actions_table_header": "Actions", "actions_table_header": "Actions",
"request_table_header": "Requête",
"edit_table_action": "Modifier", "edit_table_action": "Modifier",
"delete_table_action": "Supprimer", "delete_table_action": "Supprimer",
"elapsed": "Écoulé",
"filters_and_hosts_hint": "AdGuard Home comprend les règles basiques de blocage ainsi que la syntaxe des fichiers hosts.", "filters_and_hosts_hint": "AdGuard Home comprend les règles basiques de blocage ainsi que la syntaxe des fichiers hosts.",
"no_blocklist_added": "Aucune liste de blocage ajoutée", "no_blocklist_added": "Aucune liste de blocage ajoutée",
"no_whitelist_added": "Aucune liste dautorisation ajoutée", "no_whitelist_added": "Aucune liste dautorisation ajoutée",
@ -170,10 +183,12 @@
"updated_upstream_dns_toast": "Les serveurs DNS upstream sont mis à jour", "updated_upstream_dns_toast": "Les serveurs DNS upstream sont mis à jour",
"dns_test_ok_toast": "Les serveurs DNS spécifiés fonctionnent correctement", "dns_test_ok_toast": "Les serveurs DNS spécifiés fonctionnent correctement",
"dns_test_not_ok_toast": "Impossible d'utiliser le serveur \"{{key}}\": veuillez vérifier si le nom saisi est bien correct", "dns_test_not_ok_toast": "Impossible d'utiliser le serveur \"{{key}}\": veuillez vérifier si le nom saisi est bien correct",
"unblock_btn": "Débloquer", "unblock": "Débloquer",
"block_btn": "Bloquer", "block": "Bloquer",
"time_table_header": "Temps", "time_table_header": "Temps",
"date": "Date",
"domain_name_table_header": "Nom de domaine", "domain_name_table_header": "Nom de domaine",
"domain_or_client": "Domaine ou client",
"type_table_header": "Type", "type_table_header": "Type",
"response_table_header": "Réponse", "response_table_header": "Réponse",
"client_table_header": "Client", "client_table_header": "Client",
@ -211,6 +226,9 @@
"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",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"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",
"edns_enable": "Activer le sous-réseau du client EDNS", "edns_enable": "Activer le sous-réseau du client EDNS",
@ -229,6 +247,7 @@
"rule_label": "Règle", "rule_label": "Règle",
"list_label": "Liste", "list_label": "Liste",
"unknown_filter": "Filtre inconnu {{filterId}}", "unknown_filter": "Filtre inconnu {{filterId}}",
"known_tracker": "Pisteur connu",
"install_welcome_title": "Bienvenue sur AdGuard Home !", "install_welcome_title": "Bienvenue sur AdGuard Home !",
"install_welcome_desc": "AdGuard Home est un seveur DNS pour bloquer les pubs et traceurs sur tout un réseau. Son but est de vous donner le contrôle sur l'ensemble de votre réseau et tous vos appareils sans programme côté client supplémentaire.", "install_welcome_desc": "AdGuard Home est un seveur DNS pour bloquer les pubs et traceurs sur tout un réseau. Son but est de vous donner le contrôle sur l'ensemble de votre réseau et tous vos appareils sans programme côté client supplémentaire.",
"install_settings_title": "Interface web administrateur", "install_settings_title": "Interface web administrateur",
@ -257,7 +276,7 @@
"install_devices_router_list_1": "Ouvrez les préférences de votre routeur. Normalement, vous pouvez y accéder depuis votre navigateur Web via une URL (exemple http://192.168.0.1/ ou http://192.168.1.1/). Vous devrez peut-être saisir le mot de passe. Si vous ne vous en rappelez plus, vous pouvez le réinitialiser en appuyant sur le bouton du routeur. Certains routeurs fonctionnent sous une application spécifique, qui devrait être déjà installée sur votre ordinateur/téléphone.", "install_devices_router_list_1": "Ouvrez les préférences de votre routeur. Normalement, vous pouvez y accéder depuis votre navigateur Web via une URL (exemple http://192.168.0.1/ ou http://192.168.1.1/). Vous devrez peut-être saisir le mot de passe. Si vous ne vous en rappelez plus, vous pouvez le réinitialiser en appuyant sur le bouton du routeur. Certains routeurs fonctionnent sous une application spécifique, qui devrait être déjà installée sur votre ordinateur/téléphone.",
"install_devices_router_list_2": "Trouvez les paramètres DHCP/DNS. Recherchez les lettres DNS près d'une zone qui permet la saisie de 2 ou 3 blocs de chiffres, chacun composé de 4 parties de 1 à 3 chiffres.", "install_devices_router_list_2": "Trouvez les paramètres DHCP/DNS. Recherchez les lettres DNS près d'une zone qui permet la saisie de 2 ou 3 blocs de chiffres, chacun composé de 4 parties de 1 à 3 chiffres.",
"install_devices_router_list_3": "Saisissez vos adresses de serveur AdGuard Home ici.", "install_devices_router_list_3": "Saisissez vos adresses de serveur AdGuard Home ici.",
"install_devices_router_list_4": "Vous ne pouvez pas définir un serveur DNS personnalisé sur certains types de routeurs. Dans ce cas, cela peut être utile si vous configurez AdGuard Home en tant que serveur DHCP. Sinon, vous devez rechercher le manuel sur la façon de personnaliser les serveurs DNS pour votre modèle de routeur particulier.", "install_devices_router_list_4": "Vous ne pouvez pas définir un serveur DNS personnalisé sur certains types de routeurs. Dans ce cas, cela peut être utile si vous configurez AdGuard Home en tant que <0>serveur DHCP</0>. Sinon, vous devez rechercher le manuel sur la façon de personnaliser les serveurs DNS pour votre modèle de routeur particulier.",
"install_devices_windows_list_1": "Ouvrez votre Panneau de configuration depuis le menu Démarrer ou la recherche Windows.", "install_devices_windows_list_1": "Ouvrez votre Panneau de configuration depuis le menu Démarrer ou la recherche Windows.",
"install_devices_windows_list_2": "Allez dans la catégorie Réseau et Internet et ensuite dans le Centre Réseau et Partage.", "install_devices_windows_list_2": "Allez dans la catégorie Réseau et Internet et ensuite dans le Centre Réseau et Partage.",
"install_devices_windows_list_3": "Sur la partie gauche de l'écran, recherchez Modifier les paramètres de la carte et cliquez dessus.", "install_devices_windows_list_3": "Sur la partie gauche de l'écran, recherchez Modifier les paramètres de la carte et cliquez dessus.",
@ -346,6 +365,7 @@
"form_enter_id": "Entrer identifiant", "form_enter_id": "Entrer identifiant",
"form_add_id": "Ajouter identifiant", "form_add_id": "Ajouter identifiant",
"form_client_name": "Saisissez le nom du client", "form_client_name": "Saisissez le nom du client",
"name": "Nom",
"client_global_settings": "Utiliser les paramètres généraux", "client_global_settings": "Utiliser les paramètres généraux",
"client_deleted": "Le client \"{{key}}\" a été supprimé avec succès", "client_deleted": "Le client \"{{key}}\" a été supprimé avec succès",
"client_added": "Le client \"{{key}}\" a été ajouté", "client_added": "Le client \"{{key}}\" a été ajouté",
@ -361,6 +381,7 @@
"access_allowed_desc": "Une liste d'adresses IP ou CIDR. Si configuré, AdGuard Home acceptera uniquement les requêtes provenant de ces adresses IP.", "access_allowed_desc": "Une liste d'adresses IP ou CIDR. Si configuré, AdGuard Home acceptera uniquement les requêtes provenant de ces adresses IP.",
"access_disallowed_title": "Clients non autorisés", "access_disallowed_title": "Clients non autorisés",
"access_disallowed_desc": "Une liste d'adresses IP ou CIDR. Si configuré, AdGuard Home bloquera les requêtes provenant de ces adresses IP.", "access_disallowed_desc": "Une liste d'adresses IP ou CIDR. Si configuré, AdGuard Home bloquera les requêtes provenant de ces adresses IP.",
"access_blocked_title": "Domaines interdits",
"access_blocked_desc": "Ne confondez pas ceci avec les filtres. AdGuard Home ignorera les requêtes DNS portant sur les domaines ci-dessous.", "access_blocked_desc": "Ne confondez pas ceci avec les filtres. AdGuard Home ignorera les requêtes DNS portant sur les domaines ci-dessous.",
"access_settings_saved": "Paramètres d'accès enregistrés avec succès", "access_settings_saved": "Paramètres d'accès enregistrés avec succès",
"updates_checked": "Mises à jour vérifiées", "updates_checked": "Mises à jour vérifiées",
@ -444,6 +465,7 @@
"location": "Localisation", "location": "Localisation",
"orgname": "Nom de l'organisation", "orgname": "Nom de l'organisation",
"netname": "Nom du réseau", "netname": "Nom du réseau",
"network": "Réseau",
"descr": "Description", "descr": "Description",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Apprenez-en plus</0> à propos de la création de vos propres listes de blocage dhôtes.", "filtering_rules_learn_more": "<0>Apprenez-en plus</0> à propos de la création de vos propres listes de blocage dhôtes.",
@ -488,5 +510,19 @@
"list_updated": "{{count}} liste mise à jour", "list_updated": "{{count}} liste mise à jour",
"list_updated_plural": "{{count}} listes mises à jour", "list_updated_plural": "{{count}} listes mises à jour",
"dnssec_enable": "Activer DNSSEC", "dnssec_enable": "Activer DNSSEC",
"dnssec_enable_desc": "Définir lindicateur DNSSEC dans les requêtes DNS sortantes et vérifier le résultat (résolveur compatible DNSSEC requis)" "dnssec_enable_desc": "Définir lindicateur DNSSEC dans les requêtes DNS sortantes et vérifier le résultat (résolveur compatible DNSSEC requis)",
"validated_with_dnssec": "Validé avec DNSSEC",
"show_all_responses": "Toutes les réponses",
"show_blocked_responses": "Bloqué",
"show_whitelisted_responses": "Ajouté à la liste blanche",
"show_processed_responses": "Traité",
"blocked_safebrowsing": "Navigation sécurisée bloquée",
"blocked_adult_websites": "Sites à contenu adulte bloqués",
"blocked_threats": "Menaces bloquées",
"allowed": "Autorisé",
"filtered": "Filtré",
"rewritten": "Réécrit",
"safe_search": "Recherche sécurisée",
"blocklist": "Liste de blocage",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "VI možete odrediti DNS upstream-ove <0>za određene domene</0>", "example_upstream_reserved": "VI možete odrediti DNS upstream-ove <0>za određene domene</0>",
"upstream_parallel": "Koristi paralelne upite kako bi ubrzali rješavanje istovremenim ispitavanjem svih upstream poslužitelja", "upstream_parallel": "Koristi paralelne upite kako bi ubrzali rješavanje istovremenim ispitavanjem svih upstream poslužitelja",
"parallel_requests": "Paralelni zahtjevi", "parallel_requests": "Paralelni zahtjevi",
"load_balancing": "Load-balancing",
"load_balancing_desc": "Šaljite upite po jednom poslužitelju u isto vrijeme. AdGuard Home će koristiti ponderirani slučajni algoritam za odabir poslužitelja, tako da će se najbrži poslužitelj češće koristiti.",
"bootstrap_dns": "Bootstrap DNS poslužitelji", "bootstrap_dns": "Bootstrap DNS poslužitelji",
"bootstrap_dns_desc": "Bootstrap DNS poslužitelji koriste se za rezolvanje IP adresa DoH/DoT rezolvera koje navedete kao upstreams.", "bootstrap_dns_desc": "Bootstrap DNS poslužitelji koriste se za rezolvanje IP adresa DoH/DoT rezolvera koje navedete kao upstreams.",
"check_dhcp_servers": "Provjera DHCP poslužitelja", "check_dhcp_servers": "Provjera DHCP poslužitelja",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Odaberite DHCP sučelje", "dhcp_interface_select": "Odaberite DHCP sučelje",
"dhcp_hardware_address": "Adresa hardvera", "dhcp_hardware_address": "Adresa hardvera",
"dhcp_ip_addresses": "IP adrese", "dhcp_ip_addresses": "IP adrese",
"ip": "IP",
"dhcp_table_hostname": "Naziv računala", "dhcp_table_hostname": "Naziv računala",
"dhcp_table_expires": "Istječe", "dhcp_table_expires": "Istječe",
"dhcp_warning": "Ako svejedno želite omogućiti DHCP poslužitelj, provjerite da nema drugog aktivnog DHCP poslužitelja na vašoj mreži. Inače može pokvariti Internet za ostale povezane uređaje!", "dhcp_warning": "Ako svejedno želite omogućiti DHCP poslužitelj, provjerite da nema drugog aktivnog DHCP poslužitelja na vašoj mreži. Inače može pokvariti Internet za ostale povezane uređaje!",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "Nisu pronađeni statični DHCP leases", "dhcp_static_leases_not_found": "Nisu pronađeni statični DHCP leases",
"dhcp_add_static_lease": "Dodaj static lease", "dhcp_add_static_lease": "Dodaj static lease",
"dhcp_reset": "Jeste li sigurni da želite poništiti DHCP postavke?", "dhcp_reset": "Jeste li sigurni da želite poništiti DHCP postavke?",
"country": "Država",
"city": "Grad",
"delete_confirm": "Jeste li sigurni da želite ukloniti \"{{key}}\"?", "delete_confirm": "Jeste li sigurni da želite ukloniti \"{{key}}\"?",
"form_enter_hostname": "Unesite naziv računala", "form_enter_hostname": "Unesite naziv računala",
"error_details": "Detalji o pogrešci", "error_details": "Detalji o pogrešci",
"response_details": "Detalji odgovora",
"request_details": "Detalji zahtjeva",
"client_details": "Detalji o klijentu",
"details": "Detalji",
"back": "Natrag", "back": "Natrag",
"dashboard": "Upravljačka ploča", "dashboard": "Upravljačka ploča",
"settings": "Postavke", "settings": "Postavke",
"filters": "Filtri", "filters": "Filtri",
"filter": "Filtar",
"query_log": "Zapisnik upita", "query_log": "Zapisnik upita",
"compact": "Kompaktno",
"nothing_found": "Nema rezultata",
"faq": "ČPP", "faq": "ČPP",
"version": "Verzija", "version": "Verzija",
"address": "adresa", "address": "Adresa",
"protocol": "Protokol",
"on": "UKLJUČENO", "on": "UKLJUČENO",
"off": "ISKLJUČENO", "off": "ISKLJUČENO",
"copyright": "Autorsko pravo", "copyright": "Autorsko pravo",
@ -132,8 +145,10 @@
"rules_count_table_header": "Broj pravila", "rules_count_table_header": "Broj pravila",
"last_time_updated_table_header": "Zadnje ažurirano", "last_time_updated_table_header": "Zadnje ažurirano",
"actions_table_header": "Radnje", "actions_table_header": "Radnje",
"request_table_header": "Zahtjev",
"edit_table_action": "Uredi", "edit_table_action": "Uredi",
"delete_table_action": "Ukloni", "delete_table_action": "Ukloni",
"elapsed": "Proteklo",
"filters_and_hosts_hint": "AdGuard Home razumije osnovna pravila blokiranja oglasa i sintaksu hosts datoteka.", "filters_and_hosts_hint": "AdGuard Home razumije osnovna pravila blokiranja oglasa i sintaksu hosts datoteka.",
"no_blocklist_added": "Nema dodanih popisa blokiranih", "no_blocklist_added": "Nema dodanih popisa blokiranih",
"no_whitelist_added": "Nema dodanih popisa omogućenih", "no_whitelist_added": "Nema dodanih popisa omogućenih",
@ -170,12 +185,15 @@
"updated_upstream_dns_toast": "Ažurirani su upstream DNS poslužitelji", "updated_upstream_dns_toast": "Ažurirani su upstream DNS poslužitelji",
"dns_test_ok_toast": "Odabrani DNS poslužitelji su trenutno aktivni", "dns_test_ok_toast": "Odabrani DNS poslužitelji su trenutno aktivni",
"dns_test_not_ok_toast": "\"{{key}}\" poslužitelja: ne može se upotrijebiti, provjerite jeste li to ispravno napisali", "dns_test_not_ok_toast": "\"{{key}}\" poslužitelja: ne može se upotrijebiti, provjerite jeste li to ispravno napisali",
"unblock_btn": "Odblokiraj", "unblock": "Odblokiraj",
"block_btn": "Blokiraj", "block": "Blokiraj",
"time_table_header": "Vrijeme", "time_table_header": "Vrijeme",
"date": "Datum",
"domain_name_table_header": "Naziv domene", "domain_name_table_header": "Naziv domene",
"domain_or_client": "Domena ili klijent",
"type_table_header": "Vrsta", "type_table_header": "Vrsta",
"response_table_header": "Odgovor", "response_table_header": "Odgovor",
"response_code": "Responzivni kod",
"client_table_header": "Klijent", "client_table_header": "Klijent",
"empty_response_status": "Prazno", "empty_response_status": "Prazno",
"show_all_filter_type": "Prikaži sve", "show_all_filter_type": "Prikaži sve",
@ -194,6 +212,7 @@
"query_log_filtered": "Filtrirao {{filter}}", "query_log_filtered": "Filtrirao {{filter}}",
"query_log_confirm_clear": "Jeste li sigurni da želite ukloniti zapise upita?", "query_log_confirm_clear": "Jeste li sigurni da želite ukloniti zapise upita?",
"query_log_cleared": "Zapisnik upita je uspješno uklonjen", "query_log_cleared": "Zapisnik upita je uspješno uklonjen",
"query_log_updated": "Zapisnik upita je uspješno ažuriran",
"query_log_clear": "Očisti zapisnik upita", "query_log_clear": "Očisti zapisnik upita",
"query_log_retention": "Spremanje zapisnika upita", "query_log_retention": "Spremanje zapisnika upita",
"query_log_enable": "Omogući zapise", "query_log_enable": "Omogući zapise",
@ -211,6 +230,9 @@
"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",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"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",
"edns_enable": "Omogući EDNS Client Subnet", "edns_enable": "Omogući EDNS Client Subnet",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "Nuliran IP: Odgovor s nuliranom IP adresom (0.0.0.0 za A; :: za AAAA)", "blocking_mode_null_ip": "Nuliran IP: Odgovor s nuliranom IP adresom (0.0.0.0 za A; :: za AAAA)",
"blocking_mode_custom_ip": "Prilagođeni IP: Odgovor s ručno postavljenom IP adresom", "blocking_mode_custom_ip": "Prilagođeni IP: Odgovor s ručno postavljenom IP adresom",
"upstream_dns_client_desc": "Ako ovo polje ostane prazno, AdGuard Home će upotrijebiti poslužitelje postavljene u <0>DNS postavkama</0>.", "upstream_dns_client_desc": "Ako ovo polje ostane prazno, AdGuard Home će upotrijebiti poslužitelje postavljene u <0>DNS postavkama</0>.",
"tracker_source": "Izvor pratitelja",
"source_label": "Izvor", "source_label": "Izvor",
"found_in_known_domain_db": "Pronađeno u bazi poznatih domena.", "found_in_known_domain_db": "Pronađeno u bazi poznatih domena.",
"category_label": "Kategorija", "category_label": "Kategorija",
"rule_label": "Pravilo", "rule_label": "Pravilo",
"list_label": "Popis", "list_label": "Popis",
"unknown_filter": "Nepoznati filtar {{filterId}}", "unknown_filter": "Nepoznati filtar {{filterId}}",
"known_tracker": "Poznati pratitelj",
"install_welcome_title": "Dobrodošli u AdGuard Home!", "install_welcome_title": "Dobrodošli u AdGuard Home!",
"install_welcome_desc": "AdGuard Home je DNS poslužitelj za blokiranje oglasa i pratitelja na cijeloj mreži. Njegova je svrha omogućiti vam upravljanje cijelom mrežom i svim svojim uređajima, a da to ne zahtijeva korištenje programa na strani klijenta.", "install_welcome_desc": "AdGuard Home je DNS poslužitelj za blokiranje oglasa i pratitelja na cijeloj mreži. Njegova je svrha omogućiti vam upravljanje cijelom mrežom i svim svojim uređajima, a da to ne zahtijeva korištenje programa na strani klijenta.",
"install_settings_title": "Administratorsko web sučelje", "install_settings_title": "Administratorsko web sučelje",
@ -257,7 +281,7 @@
"install_devices_router_list_1": "Otvorite postavke za router. Obično mu možete pristupiti iz preglednika putem URL-a (kao što je http://192.168.0.1/ ili http://192.168.1.1/). Od vas će se možda tražiti da unesete lozinku. Ako je se ne sjećate, lozinku možete često poništiti pritiskom na dumge na samom routeru. Neki routeri trebaju određenu aplikaciju, koja bi u tom slučaju trebala biti već instalirana na vašem računalu/telefonu.", "install_devices_router_list_1": "Otvorite postavke za router. Obično mu možete pristupiti iz preglednika putem URL-a (kao što je http://192.168.0.1/ ili http://192.168.1.1/). Od vas će se možda tražiti da unesete lozinku. Ako je se ne sjećate, lozinku možete često poništiti pritiskom na dumge na samom routeru. Neki routeri trebaju određenu aplikaciju, koja bi u tom slučaju trebala biti već instalirana na vašem računalu/telefonu.",
"install_devices_router_list_2": "Pronađite DHCP/DNS postavke. Potražite DNS slova pored polja koje dopušta dva ili tri skupa brojeva, svaki razdvojen u četiri skupine od jedne do tri znamenke.", "install_devices_router_list_2": "Pronađite DHCP/DNS postavke. Potražite DNS slova pored polja koje dopušta dva ili tri skupa brojeva, svaki razdvojen u četiri skupine od jedne do tri znamenke.",
"install_devices_router_list_3": "Unesite adresu AdGuard Home poslužitelja ovdje.", "install_devices_router_list_3": "Unesite adresu AdGuard Home poslužitelja ovdje.",
"install_devices_router_list_4": "Ne možete postaviti prilagođeni DNS poslužitelj na nekim vrstama routera. U ovom slučaju, može vam pomoći ako postavite AdGuard Home kao DHCP poslužitelj. U suprotnom, trebali biste potražiti priručnik o tome kako prilagoditi DNS poslužitelje za vaš određeni model routera.", "install_devices_router_list_4": "Ne možete postaviti prilagođeni DNS poslužitelj na nekim vrstama routera. U ovom slučaju, može vam pomoći ako postavite AdGuard Home kao <0>DHCP poslužitelj</0>. U suprotnom, trebali biste potražiti priručnik o tome kako prilagoditi DNS poslužitelje za vaš određeni model routera.",
"install_devices_windows_list_1": "Otvorite Upravljačku ploču putem Start izbornika ili Windows pretrage.", "install_devices_windows_list_1": "Otvorite Upravljačku ploču putem Start izbornika ili Windows pretrage.",
"install_devices_windows_list_2": "Idite na kategoriju Mreža i Internet i odaberite Centar za mreže i zajedničko korištenje.", "install_devices_windows_list_2": "Idite na kategoriju Mreža i Internet i odaberite Centar za mreže i zajedničko korištenje.",
"install_devices_windows_list_3": "Na lijevoj strani zaslona pronađite Promjeni postavke adaptera i pritisnite na to.", "install_devices_windows_list_3": "Na lijevoj strani zaslona pronađite Promjeni postavke adaptera i pritisnite na to.",
@ -346,6 +370,7 @@
"form_enter_id": "Unesi identifikator", "form_enter_id": "Unesi identifikator",
"form_add_id": "Dodaj identifikator", "form_add_id": "Dodaj identifikator",
"form_client_name": "Unesite naziv klijenta", "form_client_name": "Unesite naziv klijenta",
"name": "Naziv",
"client_global_settings": "Koristi globalne postavke", "client_global_settings": "Koristi globalne postavke",
"client_deleted": "Klijent \"{{key}}\" je uspješno uklonjen", "client_deleted": "Klijent \"{{key}}\" je uspješno uklonjen",
"client_added": "Klijent \"{{key}}\" je uspješno dodan", "client_added": "Klijent \"{{key}}\" je uspješno dodan",
@ -445,6 +470,7 @@
"location": "Lokacija", "location": "Lokacija",
"orgname": "Naziv organizacije", "orgname": "Naziv organizacije",
"netname": "Naziv mreže", "netname": "Naziv mreže",
"network": "Mreža",
"descr": "Opis", "descr": "Opis",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Saznajte više</0> o stvaranju vlastitog popisa poslužitelja.", "filtering_rules_learn_more": "<0>Saznajte više</0> o stvaranju vlastitog popisa poslužitelja.",
@ -456,7 +482,7 @@
"disable_ipv6": "Onemogući IPv6", "disable_ipv6": "Onemogući IPv6",
"disable_ipv6_desc": "Ukoliko je ova značajka omogućena, svi DNS upiti za IPv6 adrese (AAAA tip) će biti odbačeni.", "disable_ipv6_desc": "Ukoliko je ova značajka omogućena, svi DNS upiti za IPv6 adrese (AAAA tip) će biti odbačeni.",
"fastest_addr": "Najbrža IP adresa", "fastest_addr": "Najbrža IP adresa",
"fastest_addr_desc": "Ispitajte sve DNS poslužitelje i vratite najbržu IP adresu među svim odgovorima", "fastest_addr_desc": "Ispitajte sve DNS poslužitelje i vratite najbržu IP adresu među svim odgovorima. Ovo će usporiti DNS upite jer moramo čekati odgovore sa svih DNS poslužitelja, ali će poboljšati cjelokupnu povezanost.",
"autofix_warning_text": "Ako pritisnete \"Popravi\", AdGuard Home će postaviti vaš sustav da koristi AdGuardHome DNS poslužitelj.", "autofix_warning_text": "Ako pritisnete \"Popravi\", AdGuard Home će postaviti vaš sustav da koristi AdGuardHome DNS poslužitelj.",
"autofix_warning_list": "Izvodi sljedeće radnje: <0>Deaktiviraj DNSStubListener sustav</0> <0>Postavi adresu DNS poslužitelja na 127.0.0.1</0> <0>Zamijeni simbolički cilj veze iz /etc/resolv.conf u /run/systemd/resolve/resolv.conf</0> <0>Zaustavi DNSStubListener (ponovno pokreni systemd-resolved uslugu)</0>", "autofix_warning_list": "Izvodi sljedeće radnje: <0>Deaktiviraj DNSStubListener sustav</0> <0>Postavi adresu DNS poslužitelja na 127.0.0.1</0> <0>Zamijeni simbolički cilj veze iz /etc/resolv.conf u /run/systemd/resolve/resolv.conf</0> <0>Zaustavi DNSStubListener (ponovno pokreni systemd-resolved uslugu)</0>",
"autofix_warning_result": "Kao rezultat toga, sve DNS zahtjeve iz vašeg sustava će AdGuard Home obraditi prema zadanim postavkama.", "autofix_warning_result": "Kao rezultat toga, sve DNS zahtjeve iz vašeg sustava će AdGuard Home obraditi prema zadanim postavkama.",
@ -489,5 +515,19 @@
"list_updated": "{{count}} popis ažuriran", "list_updated": "{{count}} popis ažuriran",
"list_updated_plural": "{{count}} popisa ažurirana", "list_updated_plural": "{{count}} popisa ažurirana",
"dnssec_enable": "Omogući DNSSEC", "dnssec_enable": "Omogući DNSSEC",
"dnssec_enable_desc": "Omogućite DNSSEC u izlaznim DNS upitima i provjerite rezultat (potreban je resolver s omogućenim DNSSEC-om)" "dnssec_enable_desc": "Omogućite DNSSEC u izlaznim DNS upitima i provjerite rezultat (potreban je resolver s omogućenim DNSSEC-om)",
"validated_with_dnssec": "Potvrđeno s DNSSEC-om",
"show_all_responses": "Svi odgovori",
"show_blocked_responses": "Blokirano",
"show_whitelisted_responses": "Na popisu dopuštenih",
"show_processed_responses": "Obrađeno",
"blocked_safebrowsing": "Blokirano s Sigurnom pretragom",
"blocked_adult_websites": "Blokirane web stranice za odrasle",
"blocked_threats": "Blokirane prijetnje",
"allowed": "Dopušteno",
"filtered": "Filtrirano",
"rewritten": "Prepisano",
"safe_search": "Sigurno pretraživanje",
"blocklist": "Popis neželjenih",
"milliseconds_abbreviation": "ms"
} }

View File

@ -37,6 +37,7 @@
"dhcp_interface_select": "Pilih antarmuka DHCP", "dhcp_interface_select": "Pilih antarmuka DHCP",
"dhcp_hardware_address": "Alamat perangkat keras", "dhcp_hardware_address": "Alamat perangkat keras",
"dhcp_ip_addresses": "Alamat IP", "dhcp_ip_addresses": "Alamat IP",
"ip": "IP",
"dhcp_table_hostname": "Nama host", "dhcp_table_hostname": "Nama host",
"dhcp_table_expires": "Kadaluwarsa", "dhcp_table_expires": "Kadaluwarsa",
"dhcp_warning": "Jika anda ingin mengaktifkan server DHCP bawaan, pastikan tidak ada server DHCP lain yang aktif. Jika tidak, akan memutus koneksi internet pada perangkat yang telah terhubung!", "dhcp_warning": "Jika anda ingin mengaktifkan server DHCP bawaan, pastikan tidak ada server DHCP lain yang aktif. Jika tidak, akan memutus koneksi internet pada perangkat yang telah terhubung!",
@ -49,17 +50,23 @@
"dhcp_static_leases_not_found": "DHCP static lease tidak ditemukan", "dhcp_static_leases_not_found": "DHCP static lease tidak ditemukan",
"dhcp_add_static_lease": "Tambah static lease", "dhcp_add_static_lease": "Tambah static lease",
"dhcp_reset": "Apakah anda yakin ingin mengatur ulang konfigurasi DHCP anda?", "dhcp_reset": "Apakah anda yakin ingin mengatur ulang konfigurasi DHCP anda?",
"country": "Negara",
"delete_confirm": "Apakah anda yakin ingin menghapus \"{{key}}\"?", "delete_confirm": "Apakah anda yakin ingin menghapus \"{{key}}\"?",
"form_enter_hostname": "Masukkan hostname", "form_enter_hostname": "Masukkan hostname",
"error_details": "Detail kesalahan", "error_details": "Detail kesalahan",
"request_details": "Detai permintaan",
"client_details": "Detail klien",
"details": "Detail",
"back": "Kembali", "back": "Kembali",
"dashboard": "Beranda", "dashboard": "Beranda",
"settings": "Pengaturan", "settings": "Pengaturan",
"filters": "Penyaring", "filters": "Penyaring",
"filter": "Filter",
"query_log": "Catatan Kueri", "query_log": "Catatan Kueri",
"faq": "Tanya Jawab", "faq": "Tanya Jawab",
"version": "versi", "version": "versi",
"address": "alamat", "address": "Alamat",
"protocol": "Protokol",
"on": "HIDUP", "on": "HIDUP",
"off": "MATI", "off": "MATI",
"copyright": "Hak cipta", "copyright": "Hak cipta",
@ -107,6 +114,7 @@
"general_settings": "Pengaturan umum", "general_settings": "Pengaturan umum",
"dns_settings": "Pengaturan DNS", "dns_settings": "Pengaturan DNS",
"dns_blocklists": "Daftar blokir DNS", "dns_blocklists": "Daftar blokir DNS",
"custom_filtering_rules": "Aturan penyaringan khusus",
"encryption_settings": "Pengaturan enkripsi", "encryption_settings": "Pengaturan enkripsi",
"dhcp_settings": "Pengaturan DHCP", "dhcp_settings": "Pengaturan DHCP",
"upstream_dns": "Server DNS hulu", "upstream_dns": "Server DNS hulu",
@ -126,8 +134,10 @@
"rules_count_table_header": "Jumlah Aturan", "rules_count_table_header": "Jumlah Aturan",
"last_time_updated_table_header": "Terakhir diperbaharui", "last_time_updated_table_header": "Terakhir diperbaharui",
"actions_table_header": "Aksi", "actions_table_header": "Aksi",
"request_table_header": "Permintaan",
"edit_table_action": "Ubah", "edit_table_action": "Ubah",
"delete_table_action": "Hapus", "delete_table_action": "Hapus",
"elapsed": "Berlalu",
"filters_and_hosts_hint": "AdGuard Home memahami aturan dasar adblock dan sintak file hosts.", "filters_and_hosts_hint": "AdGuard Home memahami aturan dasar adblock dan sintak file hosts.",
"cancel_btn": "Batal", "cancel_btn": "Batal",
"enter_name_hint": "Masukkan nama", "enter_name_hint": "Masukkan nama",
@ -152,10 +162,12 @@
"updated_upstream_dns_toast": "Server DNS hulu terbarui", "updated_upstream_dns_toast": "Server DNS hulu terbarui",
"dns_test_ok_toast": "Server DNS yang ditentukan bekerja dengan benar", "dns_test_ok_toast": "Server DNS yang ditentukan bekerja dengan benar",
"dns_test_not_ok_toast": "Server \"{{key}}\": tidak dapat digunakan, mohon cek bahwa Anda telah menulisnya dengan benar", "dns_test_not_ok_toast": "Server \"{{key}}\": tidak dapat digunakan, mohon cek bahwa Anda telah menulisnya dengan benar",
"unblock_btn": "Buka Blokir", "unblock": "Buka Blokir",
"block_btn": "Blokir", "block": "Blok",
"time_table_header": "Waktu", "time_table_header": "Waktu",
"date": "Tanggal",
"domain_name_table_header": "Nama domain", "domain_name_table_header": "Nama domain",
"domain_or_client": "Domain atau klien",
"type_table_header": "Tipe", "type_table_header": "Tipe",
"response_table_header": "Respon", "response_table_header": "Respon",
"client_table_header": "Klien", "client_table_header": "Klien",
@ -184,8 +196,11 @@
"query_log_strict_search": "Gunakan tanda kutip ganda untuk pencarian ketat", "query_log_strict_search": "Gunakan tanda kutip ganda untuk pencarian ketat",
"query_log_retention_confirm": "Apakah Anda yakin ingin mengubah retensi kueri log? Jika Anda menurunkan nilai interval, beberapa data akan hilang", "query_log_retention_confirm": "Apakah Anda yakin ingin mengubah retensi kueri log? Jika Anda menurunkan nilai interval, beberapa data akan hilang",
"blocking_mode": "Mode blokir", "blocking_mode": "Mode blokir",
"default": "Standar",
"blocking_ipv4": "Blokiran IPv4", "blocking_ipv4": "Blokiran IPv4",
"blocking_ipv6": "Blokiran IPv6", "blocking_ipv6": "Blokiran IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"edns_cs_desc": "Apabila dinyalakan, AdGuard Home akan mengirim subnet klien ke server-server DNS.", "edns_cs_desc": "Apabila dinyalakan, AdGuard Home akan mengirim subnet klien ke server-server DNS.",
"rate_limit_desc": "Jumlah permintaan per detik yang diperbolehkan untuk satu klien (0: tidak terbatas)", "rate_limit_desc": "Jumlah permintaan per detik yang diperbolehkan untuk satu klien (0: tidak terbatas)",
"blocking_mode_custom_ip": "IP kustom: respon dengan alamat IP yang diset secara manual", "blocking_mode_custom_ip": "IP kustom: respon dengan alamat IP yang diset secara manual",
@ -194,6 +209,7 @@
"category_label": "Kategori", "category_label": "Kategori",
"rule_label": "Aturan", "rule_label": "Aturan",
"unknown_filter": "Penyaringan {{filterId}} tidak dikenal", "unknown_filter": "Penyaringan {{filterId}} tidak dikenal",
"known_tracker": "Pelacak yang dikenal",
"install_welcome_title": "Selamat datang di AdGuard Home!", "install_welcome_title": "Selamat datang di AdGuard Home!",
"install_welcome_desc": "AdGuard Home adalah sebuah server DNS pemblokiran iklan dan pelacak di jaringan. Tujuannya adalah memungkinkan anda mengkontrol seluruh jaringan dan semua perangkat anda, dan ini tidak membutuhkan aplikasi tambahan di klien", "install_welcome_desc": "AdGuard Home adalah sebuah server DNS pemblokiran iklan dan pelacak di jaringan. Tujuannya adalah memungkinkan anda mengkontrol seluruh jaringan dan semua perangkat anda, dan ini tidak membutuhkan aplikasi tambahan di klien",
"install_settings_title": "Antarmuka Halaman Admin", "install_settings_title": "Antarmuka Halaman Admin",
@ -222,7 +238,7 @@
"install_devices_router_list_1": "Buka preferensi untuk router Anda. Biasanya, Anda dapat mengaksesnya dari browser Anda melalui URL (seperti http://192.168.0.1/ atau http://192.168.1.1/). Anda mungkin diminta memasukkan kata sandi. Jika Anda tidak mengingatnya, Anda dapat mengatur ulang kata sandi dengan menekan tombol atur ulang (reset) pada router. Beberapa router ada yang memerlukan aplikasi tertentu, dalam hal ini harus sudah diinstal pada komputer / telepon Anda.", "install_devices_router_list_1": "Buka preferensi untuk router Anda. Biasanya, Anda dapat mengaksesnya dari browser Anda melalui URL (seperti http://192.168.0.1/ atau http://192.168.1.1/). Anda mungkin diminta memasukkan kata sandi. Jika Anda tidak mengingatnya, Anda dapat mengatur ulang kata sandi dengan menekan tombol atur ulang (reset) pada router. Beberapa router ada yang memerlukan aplikasi tertentu, dalam hal ini harus sudah diinstal pada komputer / telepon Anda.",
"install_devices_router_list_2": "Temukan pengaturan DHCP / DNS. Cari huruf DNS di sebelah bidang yang memungkinkan dua atau tiga set angka, masing-masing dipecah menjadi empat grup dengan satu hingga tiga digit.", "install_devices_router_list_2": "Temukan pengaturan DHCP / DNS. Cari huruf DNS di sebelah bidang yang memungkinkan dua atau tiga set angka, masing-masing dipecah menjadi empat grup dengan satu hingga tiga digit.",
"install_devices_router_list_3": "Masukkan alamat server AdGuard Home disana", "install_devices_router_list_3": "Masukkan alamat server AdGuard Home disana",
"install_devices_router_list_4": "Anda tidak dapat menyetel server DNS kustom pada beberapa tipe router. Dalam hal ini mungkin membantu jika Anda mengatur AdGuard Home sebagai server DHCP. Jika tidak, Anda harus mencari petunjuk tentang cara mengkustomisasi server DNS untuk model router khusus Anda.", "install_devices_router_list_4": "Anda tidak dapat menyetel server DNS kustom pada beberapa tipe router. Dalam hal ini mungkin membantu jika Anda mengatur AdGuard Home sebagai <0>server DHCP</0>. Jika tidak, Anda harus mencari petunjuk tentang cara mengkustomisasi server DNS untuk model router khusus Anda.",
"install_devices_windows_list_1": "Buka Panel Kontrol melalui menu Start atau pencarian Windows.", "install_devices_windows_list_1": "Buka Panel Kontrol melalui menu Start atau pencarian Windows.",
"install_devices_windows_list_2": "Masuk ke kategori Jaringan dan Internet (Network and Internet) dan kemudian ke Pusat Jaringan dan Berbagi (Network and Sharing Center).", "install_devices_windows_list_2": "Masuk ke kategori Jaringan dan Internet (Network and Internet) dan kemudian ke Pusat Jaringan dan Berbagi (Network and Sharing Center).",
"install_devices_windows_list_3": "Di sisi kiri layar temukan Ubah pengaturan adaptor dan klik.", "install_devices_windows_list_3": "Di sisi kiri layar temukan Ubah pengaturan adaptor dan klik.",
@ -309,6 +325,7 @@
"form_enter_ip": "Masukkan IP", "form_enter_ip": "Masukkan IP",
"form_enter_mac": "Masukkan MAC", "form_enter_mac": "Masukkan MAC",
"form_client_name": "Masukkan nama klien", "form_client_name": "Masukkan nama klien",
"name": "Nama",
"client_global_settings": "Gunakan pengaturan global", "client_global_settings": "Gunakan pengaturan global",
"client_deleted": "Klien \"{{key}}\" berhasil dihapus", "client_deleted": "Klien \"{{key}}\" berhasil dihapus",
"client_added": "Klien \"{{key}}\" berhasil ditambahkan", "client_added": "Klien \"{{key}}\" berhasil ditambahkan",
@ -406,6 +423,7 @@
"location": "Lokasi", "location": "Lokasi",
"orgname": "Nama organisasi", "orgname": "Nama organisasi",
"netname": "Nama jaringan", "netname": "Nama jaringan",
"network": "Jaringan",
"descr": "Deskripsi", "descr": "Deskripsi",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Pelajari lebih lanjut</0> tentang membuat daftar hitam host Anda sendiri.", "filtering_rules_learn_more": "<0>Pelajari lebih lanjut</0> tentang membuat daftar hitam host Anda sendiri.",
@ -427,5 +445,13 @@
"client_confirm_unblock": "Apa anda yakin ingin meng-unblock klien ini \"{{ip}}\"?", "client_confirm_unblock": "Apa anda yakin ingin meng-unblock klien ini \"{{ip}}\"?",
"client_blocked": "Klien \"{{ip}}\" sukses di blokir", "client_blocked": "Klien \"{{ip}}\" sukses di blokir",
"client_unblocked": "Klien \"{{ip}}\" sukses di unblock", "client_unblocked": "Klien \"{{ip}}\" sukses di unblock",
"static_ip": "Alamat IP statis" "static_ip": "Alamat IP statis",
"validated_with_dnssec": "Tervalidasi dengan DNSSEC",
"show_all_responses": "Semua respon",
"show_blocked_responses": "Diblokir",
"show_whitelisted_responses": "Dalam Daftar Putih",
"show_processed_responses": "Terproses",
"safe_search": "Pencarian aman",
"blocklist": "Daftar blokir",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "Puoi specificare un server DNS<0>per uno specifico dominio(i)</0>", "example_upstream_reserved": "Puoi specificare un server DNS<0>per uno specifico dominio(i)</0>",
"upstream_parallel": "Usa le query parallele per accelerare la risoluzione interrogando simultaneamente tutti i server", "upstream_parallel": "Usa le query parallele per accelerare la risoluzione interrogando simultaneamente tutti i server",
"parallel_requests": "Richieste parallele", "parallel_requests": "Richieste parallele",
"load_balancing": "Bilanciamento del carico",
"load_balancing_desc": "Interroga un server per volta. AdGuardHome userà l'algoritmo soppesato casualmente per scegliere il server così che quello più veloce sarà usato più spesso.",
"bootstrap_dns": "Server DNS di avvio", "bootstrap_dns": "Server DNS di avvio",
"bootstrap_dns_desc": "Server DNS usati per risolvere gli indirizzi IP dei risolutori DoH/DoT specificati come upstreams.", "bootstrap_dns_desc": "Server DNS usati per risolvere gli indirizzi IP dei risolutori DoH/DoT specificati come upstreams.",
"check_dhcp_servers": "Controlla la presenza di server DHCP", "check_dhcp_servers": "Controlla la presenza di server DHCP",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Seleziona l'interfaccia DHCP", "dhcp_interface_select": "Seleziona l'interfaccia DHCP",
"dhcp_hardware_address": "Indirizzo hardware", "dhcp_hardware_address": "Indirizzo hardware",
"dhcp_ip_addresses": "Indirizzi IP", "dhcp_ip_addresses": "Indirizzi IP",
"ip": "IP",
"dhcp_table_hostname": "Nome host", "dhcp_table_hostname": "Nome host",
"dhcp_table_expires": "Scaduto", "dhcp_table_expires": "Scaduto",
"dhcp_warning": "Se si desidera abilitare il server DHCP integrato, assicurarsi che non vi siano altri server DHCP attivi. Altrimenti, possono sussistere problemi di rete per i dispositivi collegati!", "dhcp_warning": "Se si desidera abilitare il server DHCP integrato, assicurarsi che non vi siano altri server DHCP attivi. Altrimenti, possono sussistere problemi di rete per i dispositivi collegati!",
@ -49,17 +52,25 @@
"dhcp_static_leases_not_found": "Non è stato trovato nessun leases statico DHCP", "dhcp_static_leases_not_found": "Non è stato trovato nessun leases statico DHCP",
"dhcp_add_static_lease": "Aggiungi lease statico", "dhcp_add_static_lease": "Aggiungi lease statico",
"dhcp_reset": "Sei sicuro di voler ripristinare la configurazione DHCP?", "dhcp_reset": "Sei sicuro di voler ripristinare la configurazione DHCP?",
"country": "Regione",
"city": "Città",
"delete_confirm": "Sei sicuro di voler cancellare \"{{key}}\"?", "delete_confirm": "Sei sicuro di voler cancellare \"{{key}}\"?",
"form_enter_hostname": "Inserisci hostname", "form_enter_hostname": "Inserisci hostname",
"error_details": "Dettagli errore", "error_details": "Dettagli errore",
"response_details": "Dettagli di Risposta",
"request_details": "Dettagli della richiesta",
"client_details": "Dettagli client",
"details": "Dettagli",
"back": "Indietro", "back": "Indietro",
"dashboard": "Cruscotto", "dashboard": "Cruscotto",
"settings": "Impostazioni", "settings": "Impostazioni",
"filters": "Filtri", "filters": "Filtri",
"filter": "Filtro",
"query_log": "Query Log", "query_log": "Query Log",
"faq": "FAQ", "faq": "FAQ",
"version": "versione", "version": "versione",
"address": "indirizzo IP", "address": "Indirizzo",
"protocol": "Protocollo",
"on": "ATTIVO", "on": "ATTIVO",
"off": "DISATTIVATO", "off": "DISATTIVATO",
"copyright": "Copyright", "copyright": "Copyright",
@ -132,8 +143,10 @@
"rules_count_table_header": "Numero regole", "rules_count_table_header": "Numero regole",
"last_time_updated_table_header": "Ultimo aggiornamento", "last_time_updated_table_header": "Ultimo aggiornamento",
"actions_table_header": "Azioni", "actions_table_header": "Azioni",
"request_table_header": "Richiesta",
"edit_table_action": "Modifica", "edit_table_action": "Modifica",
"delete_table_action": "Elimina", "delete_table_action": "Elimina",
"elapsed": "Trascorso",
"filters_and_hosts_hint": "AdGuard Home è in grado di comprendere la sintassi delle regole di adblock o quelle dei file hosts", "filters_and_hosts_hint": "AdGuard Home è in grado di comprendere la sintassi delle regole di adblock o quelle dei file hosts",
"no_blocklist_added": "Non è stata aggiunta alcuna lista di blocco", "no_blocklist_added": "Non è stata aggiunta alcuna lista di blocco",
"no_whitelist_added": "Non è stata aggiunta alcuna lista dei consentiti", "no_whitelist_added": "Non è stata aggiunta alcuna lista dei consentiti",
@ -170,10 +183,12 @@
"updated_upstream_dns_toast": "Server DNS upstream aggiornati", "updated_upstream_dns_toast": "Server DNS upstream aggiornati",
"dns_test_ok_toast": "I server DNS specificati funzionano correttamente", "dns_test_ok_toast": "I server DNS specificati funzionano correttamente",
"dns_test_not_ok_toast": "Server \"{{key}}\": non può essere usato, assicurati di averlo digitato correttamente", "dns_test_not_ok_toast": "Server \"{{key}}\": non può essere usato, assicurati di averlo digitato correttamente",
"unblock_btn": "Sblocca", "unblock": "Sblocca",
"block_btn": "Blocca", "block": "Blocca",
"time_table_header": "Ora", "time_table_header": "Ora",
"date": "Data",
"domain_name_table_header": "Nome dominio", "domain_name_table_header": "Nome dominio",
"domain_or_client": "Dominio o client",
"type_table_header": "Tipo", "type_table_header": "Tipo",
"response_table_header": "Risposta", "response_table_header": "Risposta",
"client_table_header": "Client", "client_table_header": "Client",
@ -211,6 +226,9 @@
"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",
"dns_over_tls": "DNS-over-TLS",
"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",
"edns_enable": "Abilita client di sottorete EDNS", "edns_enable": "Abilita client di sottorete EDNS",
@ -229,6 +247,7 @@
"rule_label": "Regola", "rule_label": "Regola",
"list_label": "Lista", "list_label": "Lista",
"unknown_filter": "Filtro sconosciuto {{filterId}}", "unknown_filter": "Filtro sconosciuto {{filterId}}",
"known_tracker": "Tracker conosciuto",
"install_welcome_title": "Benvenuto nella Home di AdGuard!", "install_welcome_title": "Benvenuto nella Home di AdGuard!",
"install_welcome_desc": "AdGuard Home è un server DNS che blocca annunci e tracker in tutta la rete. Il suo scopo è quello di consentire di controllare l'intera rete e tutti i dispositivi, e non richiede l'utilizzo di un programma sul lato client.", "install_welcome_desc": "AdGuard Home è un server DNS che blocca annunci e tracker in tutta la rete. Il suo scopo è quello di consentire di controllare l'intera rete e tutti i dispositivi, e non richiede l'utilizzo di un programma sul lato client.",
"install_settings_title": "Interfaccia Web dell'Admin", "install_settings_title": "Interfaccia Web dell'Admin",
@ -257,7 +276,7 @@
"install_devices_router_list_1": "Apri le preferenze per il tuo router. Di solito, puoi accedervi dal tuo browser tramite un URL (come http://192.168.0.1/ o http://192.168.1.1/). Potrebbe essere richiesto di inserire la password. Se non lo ricordi, puoi spesso reimpostare la password premendo un pulsante sul router stesso. Alcuni router richiedono un'applicazione specifica, che in quel caso dovrebbe essere già installata sul tuo computer / telefono.", "install_devices_router_list_1": "Apri le preferenze per il tuo router. Di solito, puoi accedervi dal tuo browser tramite un URL (come http://192.168.0.1/ o http://192.168.1.1/). Potrebbe essere richiesto di inserire la password. Se non lo ricordi, puoi spesso reimpostare la password premendo un pulsante sul router stesso. Alcuni router richiedono un'applicazione specifica, che in quel caso dovrebbe essere già installata sul tuo computer / telefono.",
"install_devices_router_list_2": "Trova le impostazioni DHCP / DNS. Cerca le lettere DNS accanto a un campo che consente due o tre serie di numeri, ciascuno suddiviso in quattro gruppi di 1-3 cifre.", "install_devices_router_list_2": "Trova le impostazioni DHCP / DNS. Cerca le lettere DNS accanto a un campo che consente due o tre serie di numeri, ciascuno suddiviso in quattro gruppi di 1-3 cifre.",
"install_devices_router_list_3": "Inserisci qui gli indirizzi del tuo server AdGuard Home.", "install_devices_router_list_3": "Inserisci qui gli indirizzi del tuo server AdGuard Home.",
"install_devices_router_list_4": "Non puoi impostare un server DNS personalizzato o alcun tipo di router. In questi casi potrebbe essere di aiuto impostare la pagina principale di AdGuard come server DHCP. In alternativa, dovresti cercare sul manuale il modo per personalizzare i server DNS per il tuo particolare modello di router.", "install_devices_router_list_4": "Non puoi impostare un server DNS personalizzato o alcun tipo di router. In questi casi potrebbe essere di aiuto impostare la pagina principale di AdGuard come <0>server DHCP</0>. In alternativa, dovresti cercare sul manuale il modo per personalizzare i server DNS per il tuo particolare modello di router.",
"install_devices_windows_list_1": "Aprire il Pannello di controllo tramite il menu Start o la ricerca di Windows.", "install_devices_windows_list_1": "Aprire il Pannello di controllo tramite il menu Start o la ricerca di Windows.",
"install_devices_windows_list_2": "Vai a Rete e categoria Internet e poi a Centro connessioni di rete e condivisione.", "install_devices_windows_list_2": "Vai a Rete e categoria Internet e poi a Centro connessioni di rete e condivisione.",
"install_devices_windows_list_3": "Sul lato sinistro dello schermo, trova le impostazioni della scheda Cambia e fai clic su di esso.", "install_devices_windows_list_3": "Sul lato sinistro dello schermo, trova le impostazioni della scheda Cambia e fai clic su di esso.",
@ -346,6 +365,7 @@
"form_enter_id": "Inserisci identificatore", "form_enter_id": "Inserisci identificatore",
"form_add_id": "Aggiungi identificatore", "form_add_id": "Aggiungi identificatore",
"form_client_name": "Inserisci nome client", "form_client_name": "Inserisci nome client",
"name": "Nome",
"client_global_settings": "Usa le impostazioni globali", "client_global_settings": "Usa le impostazioni globali",
"client_deleted": "Client \"{{key}}\" eliminato correttamente", "client_deleted": "Client \"{{key}}\" eliminato correttamente",
"client_added": "Client \"{{key}}\" aggiunto correttamente", "client_added": "Client \"{{key}}\" aggiunto correttamente",
@ -445,6 +465,7 @@
"location": "Locazione", "location": "Locazione",
"orgname": "Nome dell'organizzazione", "orgname": "Nome dell'organizzazione",
"netname": "Nome Network", "netname": "Nome Network",
"network": "Rete",
"descr": "Descrizione", "descr": "Descrizione",
"whois": "Chi è", "whois": "Chi è",
"filtering_rules_learn_more": "<0>Leggi altro</0> su come creare i tuoi host blacklist.", "filtering_rules_learn_more": "<0>Leggi altro</0> su come creare i tuoi host blacklist.",
@ -489,5 +510,19 @@
"list_updated": "{{count}} lista aggiornata", "list_updated": "{{count}} lista aggiornata",
"list_updated_plural": "{{count}} liste aggiornate", "list_updated_plural": "{{count}} liste aggiornate",
"dnssec_enable": "Abilita DNSSEC", "dnssec_enable": "Abilita DNSSEC",
"dnssec_enable_desc": "Imposta la spunta DNSSEC nelle interrogazioni DNS in uscita e verifica il risultato (è richiesta l'attivazione del risolutore DNSSEC)" "dnssec_enable_desc": "Imposta la spunta DNSSEC nelle interrogazioni DNS in uscita e verifica il risultato (è richiesta l'attivazione del risolutore DNSSEC)",
"validated_with_dnssec": "Verificato con DNSSEC",
"show_all_responses": "Tutti i responsi",
"show_blocked_responses": "Bloccato",
"show_whitelisted_responses": "Nella whitelist",
"show_processed_responses": "Processato",
"blocked_safebrowsing": "Blocco Navigazione sicura",
"blocked_adult_websites": "Siti per adulti bloccati",
"blocked_threats": "Minacce bloccate",
"allowed": "Consentito",
"filtered": "Filtrato",
"rewritten": "Riscritto",
"safe_search": "Ricerca sicura",
"blocklist": "Lista di blocco",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "<0>特定のドメイン</0>に対してDNSアップストリームを指定できます", "example_upstream_reserved": "<0>特定のドメイン</0>に対してDNSアップストリームを指定できます",
"upstream_parallel": "並列リクエストを使用する(すべてのアップストリームサーバーを同時に照会することで解決スピードが向上します)", "upstream_parallel": "並列リクエストを使用する(すべてのアップストリームサーバーを同時に照会することで解決スピードが向上します)",
"parallel_requests": "並列リクエスト", "parallel_requests": "並列リクエスト",
"load_balancing": "ロードバランシング",
"load_balancing_desc": "一度に1つのサーバを照会します。 AdGuard Homeは、重み付きランダムアルゴリズムを使用してサーバを選択するため、最速のサーバがより頻繁に使用されます。",
"bootstrap_dns": "ブートストラップDNSサーバ", "bootstrap_dns": "ブートストラップDNSサーバ",
"bootstrap_dns_desc": "ブートストラップDNSサーバは、上流として指定したDoHDoTリゾルバのIPアドレスを解決するために使用されます。", "bootstrap_dns_desc": "ブートストラップDNSサーバは、上流として指定したDoHDoTリゾルバのIPアドレスを解決するために使用されます。",
"check_dhcp_servers": "DHCPサーバをチェックする", "check_dhcp_servers": "DHCPサーバをチェックする",
@ -37,6 +39,7 @@
"dhcp_interface_select": "DHCPインタフェースの選択", "dhcp_interface_select": "DHCPインタフェースの選択",
"dhcp_hardware_address": "MACアドレス", "dhcp_hardware_address": "MACアドレス",
"dhcp_ip_addresses": "IPアドレス", "dhcp_ip_addresses": "IPアドレス",
"ip": "IP",
"dhcp_table_hostname": "ホスト名", "dhcp_table_hostname": "ホスト名",
"dhcp_table_expires": "有効期限", "dhcp_table_expires": "有効期限",
"dhcp_warning": "内蔵しているDHCPサーバを有効にしたい場合は、稼働中のDHCPサーバがないことを確認してください。そうでなければ、接続されたデバイスのためにインターネットを壊すかもしれません", "dhcp_warning": "内蔵しているDHCPサーバを有効にしたい場合は、稼働中のDHCPサーバがないことを確認してください。そうでなければ、接続されたデバイスのためにインターネットを壊すかもしれません",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "DHCP静的割り当てはありません", "dhcp_static_leases_not_found": "DHCP静的割り当てはありません",
"dhcp_add_static_lease": "静的割り当てを追加する", "dhcp_add_static_lease": "静的割り当てを追加する",
"dhcp_reset": "DHCP設定をリセットして良いですか", "dhcp_reset": "DHCP設定をリセットして良いですか",
"country": "国",
"city": "街",
"delete_confirm": "\"{{key}}\" を削除してもよろしいですか?", "delete_confirm": "\"{{key}}\" を削除してもよろしいですか?",
"form_enter_hostname": "ホスト名を入力してください", "form_enter_hostname": "ホスト名を入力してください",
"error_details": "エラー詳細", "error_details": "エラー詳細",
"response_details": "応答の詳細",
"request_details": "要求の詳細",
"client_details": "クライアントの詳細",
"details": "詳細",
"back": "戻る", "back": "戻る",
"dashboard": "ダッシュボード", "dashboard": "ダッシュボード",
"settings": "設定", "settings": "設定",
"filters": "フィルタ", "filters": "フィルタ",
"filter": "フィルタ",
"query_log": "クエリ・ログ", "query_log": "クエリ・ログ",
"compact": "コンパクト",
"nothing_found": "何も見つかりません",
"faq": "よくある質問", "faq": "よくある質問",
"version": "バージョン", "version": "バージョン",
"address": "アドレス", "address": "アドレス",
"protocol": "プロトコル",
"on": "オン", "on": "オン",
"off": "オフ", "off": "オフ",
"copyright": "著作権", "copyright": "著作権",
@ -132,8 +145,10 @@
"rules_count_table_header": "ルール数", "rules_count_table_header": "ルール数",
"last_time_updated_table_header": "最終更新時刻", "last_time_updated_table_header": "最終更新時刻",
"actions_table_header": "操作", "actions_table_header": "操作",
"request_table_header": "リクエスト",
"edit_table_action": "編集する", "edit_table_action": "編集する",
"delete_table_action": "削除する", "delete_table_action": "削除する",
"elapsed": "経過",
"filters_and_hosts_hint": "AdGuard Homeは、基本的な広告ブロックルールとhostsファイルの構文を理解します。", "filters_and_hosts_hint": "AdGuard Homeは、基本的な広告ブロックルールとhostsファイルの構文を理解します。",
"no_blocklist_added": "ブロックリストには何も追加されていません", "no_blocklist_added": "ブロックリストには何も追加されていません",
"no_whitelist_added": "許可リストには何も追加されていません", "no_whitelist_added": "許可リストには何も追加されていません",
@ -170,12 +185,15 @@
"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_test_not_ok_toast": "サーバ \"{{key}}\": 使用できませんでした。正しく入力されているかどうかを確認してください",
"unblock_btn": "ブロック解除", "unblock": "ブロック解除",
"block_btn": "ブロックする", "block": "ブロック",
"time_table_header": "時刻", "time_table_header": "時刻",
"date": "購入日時",
"domain_name_table_header": "ドメイン名", "domain_name_table_header": "ドメイン名",
"domain_or_client": "ドメインまたはクライアント",
"type_table_header": "種類", "type_table_header": "種類",
"response_table_header": "応答", "response_table_header": "応答",
"response_code": "応答コード",
"client_table_header": "クライアント", "client_table_header": "クライアント",
"empty_response_status": "未定義", "empty_response_status": "未定義",
"show_all_filter_type": "すべて表示", "show_all_filter_type": "すべて表示",
@ -194,6 +212,7 @@
"query_log_filtered": "{{filter}}によるフィルタ", "query_log_filtered": "{{filter}}によるフィルタ",
"query_log_confirm_clear": "クエリ・ログ全体を消去してもよろしいですか?", "query_log_confirm_clear": "クエリ・ログ全体を消去してもよろしいですか?",
"query_log_cleared": "クエリ・ログの消去に成功しました", "query_log_cleared": "クエリ・ログの消去に成功しました",
"query_log_updated": "クエリ・ログの更新が成功しました",
"query_log_clear": "クエリ・ログを消去する", "query_log_clear": "クエリ・ログを消去する",
"query_log_retention": "クエリ・ログの保持", "query_log_retention": "クエリ・ログの保持",
"query_log_enable": "ログを有効にする", "query_log_enable": "ログを有効にする",
@ -211,6 +230,9 @@
"custom_ip": "カスタムIP", "custom_ip": "カスタムIP",
"blocking_ipv4": "ブロック中のIPv4", "blocking_ipv4": "ブロック中のIPv4",
"blocking_ipv6": "ブロック中のIPv6", "blocking_ipv6": "ブロック中のIPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"plain_dns": "通常のDNS",
"form_enter_rate_limit": "頻度制限を入力してください", "form_enter_rate_limit": "頻度制限を入力してください",
"rate_limit": "頻度制限", "rate_limit": "頻度制限",
"edns_enable": "EDNSクライアント・サブネットを有効にする", "edns_enable": "EDNSクライアント・サブネットを有効にする",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "Null IPゼロのIPアドレスで応答しますAの場合は0.0.0.0; AAAAの場合は::", "blocking_mode_null_ip": "Null IPゼロのIPアドレスで応答しますAの場合は0.0.0.0; AAAAの場合は::",
"blocking_mode_custom_ip": "カスタムIP手動で設定されたIPアドレスで応答します", "blocking_mode_custom_ip": "カスタムIP手動で設定されたIPアドレスで応答します",
"upstream_dns_client_desc": "このフィールドを未入力のままにすると、AdGuard Homeは<0>DNS設定</0>で構成されたサーバを使用します。", "upstream_dns_client_desc": "このフィールドを未入力のままにすると、AdGuard Homeは<0>DNS設定</0>で構成されたサーバを使用します。",
"tracker_source": "追跡元",
"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": "既知のトラッカー",
"install_welcome_title": "ようこそ、AdGuard Home へ!", "install_welcome_title": "ようこそ、AdGuard Home へ!",
"install_welcome_desc": "AdGuard Homeは、ネットワーク全体で広告と追跡をブロックするDNSサーバです。その目的は、ネットワークとデバイスのすべてをあなたが制御できるようにすることであり、クライアント側のプログラムを使用する必要はありません。", "install_welcome_desc": "AdGuard Homeは、ネットワーク全体で広告と追跡をブロックするDNSサーバです。その目的は、ネットワークとデバイスのすべてをあなたが制御できるようにすることであり、クライアント側のプログラムを使用する必要はありません。",
"install_settings_title": "管理用ウェブインターフェイス", "install_settings_title": "管理用ウェブインターフェイス",
@ -257,7 +281,7 @@
"install_devices_router_list_1": "ルータの設定を開きます。通常は、URLhttp://192.168.0.1/ または http://192.168.1.1/ など)を介してブラウザからアクセスできます。パスワードの入力を求められることがあります。パスワードを覚えていない場合は、ルータにあるボタンを押してパスワードをリセットできます。一部のルータは特定のアプリケーションを必要とします。その場合、アプリケーションはあなたのコンピュータ/電話に既にインストールされているはずです。", "install_devices_router_list_1": "ルータの設定を開きます。通常は、URLhttp://192.168.0.1/ または http://192.168.1.1/ など)を介してブラウザからアクセスできます。パスワードの入力を求められることがあります。パスワードを覚えていない場合は、ルータにあるボタンを押してパスワードをリセットできます。一部のルータは特定のアプリケーションを必要とします。その場合、アプリケーションはあなたのコンピュータ/電話に既にインストールされているはずです。",
"install_devices_router_list_2": "DHCPDNSの設定を見つけます。DNSの文字のある入力欄を探します。それは、1〜3桁の数字で4つのグループに分けられた入力欄で、セットを許可されている欄です。", "install_devices_router_list_2": "DHCPDNSの設定を見つけます。DNSの文字のある入力欄を探します。それは、1〜3桁の数字で4つのグループに分けられた入力欄で、セットを許可されている欄です。",
"install_devices_router_list_3": "そこにAdGuard Homeサーバのアドレスを入力します。", "install_devices_router_list_3": "そこにAdGuard Homeサーバのアドレスを入力します。",
"install_devices_router_list_4": "一部のタイプのルータではカスタムDNSサーバを設定できません。この場合、AdGuard HomeをDHCPサーバとして設定することがおすすめです。それ以外の場合は、特定のルータモデルに合わせてDNSサーバをカスタマイズする方法に関するマニュアルを検索する必要があります。", "install_devices_router_list_4": "一部のタイプのルータではカスタムDNSサーバを設定できません。この場合、AdGuard Homeを<0>DHCPサーバ</0>として設定するとお役に立ちます。それ以外の場合は、特定のルータモデルに合わせてDNSサーバをカスタマイズする方法に関するマニュアルを検索する必要があります。",
"install_devices_windows_list_1": "「スタート」メニューまたはWindowsの検索から「設定」を開きます。", "install_devices_windows_list_1": "「スタート」メニューまたはWindowsの検索から「設定」を開きます。",
"install_devices_windows_list_2": "「ネットワークとインターネット」カテゴリに移動し、さらに「ネットワークと共有センター」へ移動します。", "install_devices_windows_list_2": "「ネットワークとインターネット」カテゴリに移動し、さらに「ネットワークと共有センター」へ移動します。",
"install_devices_windows_list_3": "画面の左側にある「アダプターの設定の変更」を見つけてクリックします。", "install_devices_windows_list_3": "画面の左側にある「アダプターの設定の変更」を見つけてクリックします。",
@ -346,6 +370,7 @@
"form_enter_id": "識別子を入力してください", "form_enter_id": "識別子を入力してください",
"form_add_id": "識別子を追加する", "form_add_id": "識別子を追加する",
"form_client_name": "クライアント名を入力してください", "form_client_name": "クライアント名を入力してください",
"name": "名前",
"client_global_settings": "グローバル設定を使用する", "client_global_settings": "グローバル設定を使用する",
"client_deleted": "クライアント \"{{key}}\" の削除に成功しました", "client_deleted": "クライアント \"{{key}}\" の削除に成功しました",
"client_added": "クライアント \"{{key}}\" の追加に成功しました", "client_added": "クライアント \"{{key}}\" の追加に成功しました",
@ -361,6 +386,8 @@
"access_allowed_desc": "CIDRまたはIPアドレスのリスト。設定されると、AdGuard HomeはこれらのIPアドレスからのリクエストのみを許可します。", "access_allowed_desc": "CIDRまたはIPアドレスのリスト。設定されると、AdGuard HomeはこれらのIPアドレスからのリクエストのみを許可します。",
"access_disallowed_title": "拒否するクライアント", "access_disallowed_title": "拒否するクライアント",
"access_disallowed_desc": "CIDRまたはIPアドレスのリスト。設定されると、AdGuard HomeはこれらのIPアドレスからのリクエストを破棄します。", "access_disallowed_desc": "CIDRまたはIPアドレスのリスト。設定されると、AdGuard HomeはこれらのIPアドレスからのリクエストを破棄します。",
"access_blocked_title": "拒否するドメイン",
"access_blocked_desc": "これをフィルタと混同しないでください。AdGuard Homeは、これらのドメインを含むDNSクエリを破棄します。",
"access_settings_saved": "アクセス設定の保存に成功しました", "access_settings_saved": "アクセス設定の保存に成功しました",
"updates_checked": "アップデートの確認に成功しました", "updates_checked": "アップデートの確認に成功しました",
"updates_version_equal": "AdGuard Homeは既に最新です", "updates_version_equal": "AdGuard Homeは既に最新です",
@ -443,6 +470,7 @@
"location": "ロケーション", "location": "ロケーション",
"orgname": "組織名", "orgname": "組織名",
"netname": "ネットワーク名", "netname": "ネットワーク名",
"network": "ネットワーク",
"descr": "説明", "descr": "説明",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "独自ホストリストの作成についての<0>詳細はこちら</0>。", "filtering_rules_learn_more": "独自ホストリストの作成についての<0>詳細はこちら</0>。",
@ -486,5 +514,20 @@
"confirm_static_ip": "AdGuard Homeは、{{ip}}を静的IPアドレスとして設定します。よろしいですか", "confirm_static_ip": "AdGuard Homeは、{{ip}}を静的IPアドレスとして設定します。よろしいですか",
"list_updated": "{{count}}個のリストが更新されました", "list_updated": "{{count}}個のリストが更新されました",
"list_updated_plural": "{{count}}個のリストが更新されました", "list_updated_plural": "{{count}}個のリストが更新されました",
"dnssec_enable": "DNSSECを有効にする" "dnssec_enable": "DNSSECを有効にする",
"dnssec_enable_desc": "DNSクエリの応答にDNSSECフラグを設定し、結果を確認しますDNSSEC対応のリゾルバが必要です",
"validated_with_dnssec": "DNSSECにて検証済",
"show_all_responses": "すべての応答",
"show_blocked_responses": "ブロック済",
"show_whitelisted_responses": "ホワイトリストにあり",
"show_processed_responses": "処理済",
"blocked_safebrowsing": "ブロックされたセーフブラウジング",
"blocked_adult_websites": "ブロックされたアダルトウェブサイト",
"blocked_threats": "ブロックされた脅威",
"allowed": "許可",
"filtered": "フィルタで処理",
"rewritten": "書換",
"safe_search": "セーフサーチ",
"blocklist": "ブロックリスト",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "<0>특정 도메인에 대한</0> DNS 업스트림을 지정할 수 있습니다.", "example_upstream_reserved": "<0>특정 도메인에 대한</0> DNS 업스트림을 지정할 수 있습니다.",
"upstream_parallel": "쿼리 처리 속도를 높이려면 모든 업스트림 서버에서 동시에 병렬 쿼리를 사용해주세요.", "upstream_parallel": "쿼리 처리 속도를 높이려면 모든 업스트림 서버에서 동시에 병렬 쿼리를 사용해주세요.",
"parallel_requests": "병렬 처리 요청", "parallel_requests": "병렬 처리 요청",
"load_balancing": "로드 밸런싱",
"load_balancing_desc": "한 번에 하나의 서버씩 질의합니다. AdGuard Home은 가중 랜덤 알고리즘를 사용해서 가장 빠른 서버가 자주 사용되도록 서버를 선택합니다.",
"bootstrap_dns": "부트스트랩 DNS 서버", "bootstrap_dns": "부트스트랩 DNS 서버",
"bootstrap_dns_desc": "부트스트랩 DNS 서버는 업스트림으로 지정한 DoH/DoT 서버의 IP 주소를 확인하는 데 사용합니다.", "bootstrap_dns_desc": "부트스트랩 DNS 서버는 업스트림으로 지정한 DoH/DoT 서버의 IP 주소를 확인하는 데 사용합니다.",
"check_dhcp_servers": "DHCP 서버 체크", "check_dhcp_servers": "DHCP 서버 체크",
@ -37,6 +39,7 @@
"dhcp_interface_select": "DHCP 인터페이스 선택", "dhcp_interface_select": "DHCP 인터페이스 선택",
"dhcp_hardware_address": "하드웨어 주소", "dhcp_hardware_address": "하드웨어 주소",
"dhcp_ip_addresses": "IP 주소", "dhcp_ip_addresses": "IP 주소",
"ip": "IP",
"dhcp_table_hostname": "호스트 이름", "dhcp_table_hostname": "호스트 이름",
"dhcp_table_expires": "만료", "dhcp_table_expires": "만료",
"dhcp_warning": "DHCP 서버를 사용하려면 네트워크에 다른 활성 DHCP 서버가 없는지 확인해주세요. 다른 활성 DHCP 서버가 있다면, 연결된 장치의 인터넷을 끊을 수 있습니다.", "dhcp_warning": "DHCP 서버를 사용하려면 네트워크에 다른 활성 DHCP 서버가 없는지 확인해주세요. 다른 활성 DHCP 서버가 있다면, 연결된 장치의 인터넷을 끊을 수 있습니다.",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "DHCP 고정 임대를 찾을 수 없음", "dhcp_static_leases_not_found": "DHCP 고정 임대를 찾을 수 없음",
"dhcp_add_static_lease": "고정 임대 추가", "dhcp_add_static_lease": "고정 임대 추가",
"dhcp_reset": "정말로 DHCP 설정을 초기화할까요?", "dhcp_reset": "정말로 DHCP 설정을 초기화할까요?",
"country": "지역",
"city": "도시",
"delete_confirm": "\"{{key}}\"을 삭제하시겠습니까?", "delete_confirm": "\"{{key}}\"을 삭제하시겠습니까?",
"form_enter_hostname": "호스트 이름을 입력해주세요", "form_enter_hostname": "호스트 이름을 입력해주세요",
"error_details": "오류 상세 정보", "error_details": "오류 상세 정보",
"response_details": "응답 정보",
"request_details": "요청 세부 사항",
"client_details": "클라이언트 정보",
"details": "정보",
"back": "뒤로", "back": "뒤로",
"dashboard": "대시보드", "dashboard": "대시보드",
"settings": "설정", "settings": "설정",
"filters": "필터", "filters": "필터",
"filter": "필터",
"query_log": "쿼리 로그", "query_log": "쿼리 로그",
"compact": "콤팩트",
"nothing_found": "아무것도 찾을 수 없습니다",
"faq": "자주 묻는 질문", "faq": "자주 묻는 질문",
"version": "버전", "version": "버전",
"address": "주소", "address": "주소",
"protocol": "프로토콜",
"on": "ON", "on": "ON",
"off": "OFF", "off": "OFF",
"copyright": "Copyright", "copyright": "Copyright",
@ -132,8 +145,10 @@
"rules_count_table_header": "규칙 개수", "rules_count_table_header": "규칙 개수",
"last_time_updated_table_header": "마지막 업데이트", "last_time_updated_table_header": "마지막 업데이트",
"actions_table_header": "가능한 동작", "actions_table_header": "가능한 동작",
"request_table_header": "요청",
"edit_table_action": "편집", "edit_table_action": "편집",
"delete_table_action": "삭제", "delete_table_action": "삭제",
"elapsed": "소요",
"filters_and_hosts_hint": "AdGuard Home은 기본적인 광고 차단 규칙과 호스트 파일 문법을 읽을 수 있습니다", "filters_and_hosts_hint": "AdGuard Home은 기본적인 광고 차단 규칙과 호스트 파일 문법을 읽을 수 있습니다",
"no_blocklist_added": "차단 목록이 추가되지 않음", "no_blocklist_added": "차단 목록이 추가되지 않음",
"no_whitelist_added": "허용 목록이 추가되지 않음", "no_whitelist_added": "허용 목록이 추가되지 않음",
@ -170,12 +185,15 @@
"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_test_not_ok_toast": "서버 \"{{key}}\": 사용할 수 없습니다, 제대로 작성했는지 확인하세요.",
"unblock_btn": "차단 해제", "unblock": "차단 해제",
"block_btn": "차단", "block": "차단",
"time_table_header": "시간", "time_table_header": "시간",
"date": "날짜",
"domain_name_table_header": "도메인명", "domain_name_table_header": "도메인명",
"domain_or_client": "도메인 또는 클라이언트",
"type_table_header": "유형", "type_table_header": "유형",
"response_table_header": "응답", "response_table_header": "응답",
"response_code": "응답 코드",
"client_table_header": "클라이언트", "client_table_header": "클라이언트",
"empty_response_status": "비어있음", "empty_response_status": "비어있음",
"show_all_filter_type": "모두 표시", "show_all_filter_type": "모두 표시",
@ -194,6 +212,7 @@
"query_log_filtered": "필터: {{filter}}", "query_log_filtered": "필터: {{filter}}",
"query_log_confirm_clear": "정말로 모든 쿼리 로그를 비우시겠습니까?", "query_log_confirm_clear": "정말로 모든 쿼리 로그를 비우시겠습니까?",
"query_log_cleared": "쿼리 로그를 성공적으로 초기화했습니다", "query_log_cleared": "쿼리 로그를 성공적으로 초기화했습니다",
"query_log_updated": "질의 로그가 성공적으로 업데이트되었습니다",
"query_log_clear": "쿼리 로그 비우기", "query_log_clear": "쿼리 로그 비우기",
"query_log_retention": "쿼리 로그 저장 기간", "query_log_retention": "쿼리 로그 저장 기간",
"query_log_enable": "로그 활성화", "query_log_enable": "로그 활성화",
@ -211,6 +230,9 @@
"custom_ip": "사용자 지정 IP", "custom_ip": "사용자 지정 IP",
"blocking_ipv4": "IPv4 차단", "blocking_ipv4": "IPv4 차단",
"blocking_ipv6": "IPv6 차단", "blocking_ipv6": "IPv6 차단",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"plain_dns": "평문 DNS",
"form_enter_rate_limit": "한도 제한 입력하기", "form_enter_rate_limit": "한도 제한 입력하기",
"rate_limit": "한도 제한", "rate_limit": "한도 제한",
"edns_enable": "EDNS 클라이언트 서브넷 활성화", "edns_enable": "EDNS 클라이언트 서브넷 활성화",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "Null IP: 제로 IP 주소 (A는 0.0.0.0; AAAA는 ::) 로 응답합니다", "blocking_mode_null_ip": "Null IP: 제로 IP 주소 (A는 0.0.0.0; AAAA는 ::) 로 응답합니다",
"blocking_mode_custom_ip": "커스텀 IP: 직접 설정한 IP 주소로 응답합니다", "blocking_mode_custom_ip": "커스텀 IP: 직접 설정한 IP 주소로 응답합니다",
"upstream_dns_client_desc": "이 값을 비워둔다면 AdGuard Home은 <0>DNS 설정</0>에 설정되어 있는 값을 사용합니다.", "upstream_dns_client_desc": "이 값을 비워둔다면 AdGuard Home은 <0>DNS 설정</0>에 설정되어 있는 값을 사용합니다.",
"tracker_source": "추적기 소스",
"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": "알려진 추적기",
"install_welcome_title": "AdGuard Home에 오신 것을 환영합니다!", "install_welcome_title": "AdGuard Home에 오신 것을 환영합니다!",
"install_welcome_desc": "AdGuard Home은 광범위한 네트워크 광고와 추적 DNS 서버를 차단 합니다. 그것의 목적은 당신이 당신의 전체 네트워크와 당신의 모든 기기를 제어하는 것이며, 그것은 클라이언트의 프로그램을 사용할 필요가 없습니다.", "install_welcome_desc": "AdGuard Home은 광범위한 네트워크 광고와 추적 DNS 서버를 차단 합니다. 그것의 목적은 당신이 당신의 전체 네트워크와 당신의 모든 기기를 제어하는 것이며, 그것은 클라이언트의 프로그램을 사용할 필요가 없습니다.",
"install_settings_title": "관리자 웹 인터페이스", "install_settings_title": "관리자 웹 인터페이스",
@ -257,7 +281,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서버로 이용하여 문제를 해결하는 경우가 있지만 문제가 지속될 경우 사용하시는 라우터 모델의 매뉴얼을 참고하시어 DNS서버 커스텀 설정 방법을 직접 살펴보셔야 합니다.", "install_devices_router_list_4": "일부 라우터는 DNS서버의 커스텀 설정이 불가합니다. 간혹 AdGuard Home을 DHCP서버로 이용하여 문제를 해결하는 경우가 있지만 문제가 지속될 경우 사용하시는 라우터 모델의 매뉴얼을 참고하시어 <0>DNS</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": "화면 왼쪽에서 어댑터 설정 변경을 찾아 클릭하세요.",
@ -346,6 +370,7 @@
"form_enter_id": "식별자 입력", "form_enter_id": "식별자 입력",
"form_add_id": "식별자 추가", "form_add_id": "식별자 추가",
"form_client_name": "클라이언트 이름 입력", "form_client_name": "클라이언트 이름 입력",
"name": "이름",
"client_global_settings": "글로벌 설정 사용", "client_global_settings": "글로벌 설정 사용",
"client_deleted": "클라이언트 \"{{key}}\"가 정상적으로 삭제되었습니다", "client_deleted": "클라이언트 \"{{key}}\"가 정상적으로 삭제되었습니다",
"client_added": "클라이언트 \"{{key}}\"가 정상적으로 추가되었습니다", "client_added": "클라이언트 \"{{key}}\"가 정상적으로 추가되었습니다",
@ -445,6 +470,7 @@
"location": "위치", "location": "위치",
"orgname": "단체 이름", "orgname": "단체 이름",
"netname": "네트워크 이름", "netname": "네트워크 이름",
"network": "네트워크",
"descr": "설명", "descr": "설명",
"whois": "후이즈", "whois": "후이즈",
"filtering_rules_learn_more": "차단 리스트를 직접 호스트하는 법을 <0>알아보세요</0>.", "filtering_rules_learn_more": "차단 리스트를 직접 호스트하는 법을 <0>알아보세요</0>.",
@ -489,5 +515,19 @@
"list_updated": "{{count}} 리스트 업데이트됨", "list_updated": "{{count}} 리스트 업데이트됨",
"list_updated_plural": "{{count}} 리스트 업데이트됨", "list_updated_plural": "{{count}} 리스트 업데이트됨",
"dnssec_enable": "DNSSEC 활성화", "dnssec_enable": "DNSSEC 활성화",
"dnssec_enable_desc": "발신 DNS 쿼리에서 DNSSEC 플래그를 설정하고 결과를 확인합니다 (DNSSEC-enabled resolver 필수)" "dnssec_enable_desc": "발신 DNS 쿼리에서 DNSSEC 플래그를 설정하고 결과를 확인합니다 (DNSSEC-enabled resolver 필수)",
"validated_with_dnssec": "DNSSEC로 검증됨",
"show_all_responses": "모든 응답",
"show_blocked_responses": "차단됨",
"show_whitelisted_responses": "예외 적용됨",
"show_processed_responses": "처리됨",
"blocked_safebrowsing": "차단된 세이프 브라우징",
"blocked_adult_websites": "차단된 성인 웹사이트",
"blocked_threats": "차단된 위협",
"allowed": "허용됨",
"filtered": "필터링됨",
"rewritten": "재작성됨",
"safe_search": "세이프 서치",
"blocklist": "차단 목록",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "Je kan DNS upstream <0>specifiëren voor specifieke domein(en)</0>", "example_upstream_reserved": "Je kan DNS upstream <0>specifiëren voor specifieke domein(en)</0>",
"upstream_parallel": "Gebruik parallelle verzoeken om te versnellen door gelijktijdig verzoeken te sturen naar alle upstream servers", "upstream_parallel": "Gebruik parallelle verzoeken om te versnellen door gelijktijdig verzoeken te sturen naar alle upstream servers",
"parallel_requests": "Parallelle verzoeken", "parallel_requests": "Parallelle verzoeken",
"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.",
"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",
@ -36,6 +38,7 @@
"dhcp_interface_select": "Selecteer DHCP interface", "dhcp_interface_select": "Selecteer DHCP interface",
"dhcp_hardware_address": "Hardware adres", "dhcp_hardware_address": "Hardware adres",
"dhcp_ip_addresses": "IP adressen", "dhcp_ip_addresses": "IP adressen",
"ip": "IP",
"dhcp_table_hostname": "Host naam", "dhcp_table_hostname": "Host naam",
"dhcp_table_expires": "Verloopt op", "dhcp_table_expires": "Verloopt op",
"dhcp_warning": "Indien je de ingebouwde DHCP server wilt inschakelen, let dan op dat er geen andere actieve DHCP server aanwezig is. Dit kan de internet verbinding instabiel maken!.", "dhcp_warning": "Indien je de ingebouwde DHCP server wilt inschakelen, let dan op dat er geen andere actieve DHCP server aanwezig is. Dit kan de internet verbinding instabiel maken!.",
@ -48,17 +51,27 @@
"dhcp_static_leases_not_found": "Geen DHCP static lease gevonden", "dhcp_static_leases_not_found": "Geen DHCP static lease gevonden",
"dhcp_add_static_lease": "Voeg statische lease toe", "dhcp_add_static_lease": "Voeg statische lease toe",
"dhcp_reset": "Weet je zeker dat je de DHCP configuratie wil resetten?", "dhcp_reset": "Weet je zeker dat je de DHCP configuratie wil resetten?",
"country": "Land",
"city": "Stad",
"delete_confirm": "Ben je zeker dat je \"{{key}}\" wilt verwijderen?", "delete_confirm": "Ben je zeker dat je \"{{key}}\" wilt verwijderen?",
"form_enter_hostname": "Vul hostnaam in", "form_enter_hostname": "Vul hostnaam in",
"error_details": "Fout details", "error_details": "Fout details",
"response_details": "Antwoorddetails",
"request_details": "Verzoekdetails",
"client_details": "Client details",
"details": "Details",
"back": "Terug", "back": "Terug",
"dashboard": "Dashboard", "dashboard": "Dashboard",
"settings": "Instellingen", "settings": "Instellingen",
"filters": "Filters", "filters": "Filters",
"filter": "Filter",
"query_log": "Query log", "query_log": "Query log",
"compact": "Compact",
"nothing_found": "Niets gevonden",
"faq": "Veel gestelde vragen", "faq": "Veel gestelde vragen",
"version": "Versie", "version": "Versie",
"address": "IP-adres", "address": "Adres",
"protocol": "Protocol",
"on": "Aan", "on": "Aan",
"off": "Uit", "off": "Uit",
"copyright": "Copyright", "copyright": "Copyright",
@ -131,8 +144,10 @@
"rules_count_table_header": "Aantal regels", "rules_count_table_header": "Aantal regels",
"last_time_updated_table_header": "Laatste update", "last_time_updated_table_header": "Laatste update",
"actions_table_header": "Actie", "actions_table_header": "Actie",
"request_table_header": "Verzoek",
"edit_table_action": "Bewerk", "edit_table_action": "Bewerk",
"delete_table_action": "Verwijderen", "delete_table_action": "Verwijderen",
"elapsed": "Verstreken",
"filters_and_hosts_hint": "AdGuard Home kan overweg met basic adblock regels en hosts bestanden syntaxis.", "filters_and_hosts_hint": "AdGuard Home kan overweg met basic adblock regels en hosts bestanden syntaxis.",
"no_blocklist_added": "Geen blokkeerlijsten toegevoegd", "no_blocklist_added": "Geen blokkeerlijsten toegevoegd",
"no_whitelist_added": "Geen toestemmingslijsten toegevoegd", "no_whitelist_added": "Geen toestemmingslijsten toegevoegd",
@ -169,12 +184,15 @@
"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 u het correct hebt geschreven",
"unblock_btn": "Deblokkeren", "unblock": "Deblokkeren",
"block_btn": "Blokkeren", "block": "Blokkeren",
"time_table_header": "Tijd", "time_table_header": "Tijd",
"date": "Datum",
"domain_name_table_header": "Domein naam", "domain_name_table_header": "Domein naam",
"domain_or_client": "Domein of cliënt",
"type_table_header": "Type", "type_table_header": "Type",
"response_table_header": "Antwoord", "response_table_header": "Antwoord",
"response_code": "Reactie code",
"client_table_header": "Gebruiker", "client_table_header": "Gebruiker",
"empty_response_status": "Leeg", "empty_response_status": "Leeg",
"show_all_filter_type": "Toon alles", "show_all_filter_type": "Toon alles",
@ -193,6 +211,7 @@
"query_log_filtered": "Gefilterd door {{filter}}", "query_log_filtered": "Gefilterd door {{filter}}",
"query_log_confirm_clear": "Weet u zeker dat u het hele query logboek wilt legen?", "query_log_confirm_clear": "Weet u zeker dat u het hele query logboek wilt legen?",
"query_log_cleared": "Het query logboek is succesvol geleegd", "query_log_cleared": "Het query logboek is succesvol geleegd",
"query_log_updated": "Het query logboek is succesvol bijgewerkt",
"query_log_clear": "Leeg query logs", "query_log_clear": "Leeg query logs",
"query_log_retention": "Query logs bewaartermijn", "query_log_retention": "Query logs bewaartermijn",
"query_log_enable": "Log bestanden inschakelen", "query_log_enable": "Log bestanden inschakelen",
@ -202,13 +221,19 @@
"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 log- en statistiekbestanden",
"default": "Standaard",
"custom_ip": "Aangepast IP", "custom_ip": "Aangepast IP",
"dns_over_https": "DNS-via-HTTPS",
"dns_over_tls": "DNS-via-TLS",
"plain_dns": "Gewone DNS",
"tracker_source": "Bron volger",
"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",
"list_label": "Lijst", "list_label": "Lijst",
"unknown_filter": "Onbekend filter {{filterId}}", "unknown_filter": "Onbekend filter {{filterId}}",
"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",
@ -237,7 +262,7 @@
"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 <a href='#dhcp'>DHCP server</a>. 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.",
@ -326,6 +351,7 @@
"form_enter_id": "ID invoeren", "form_enter_id": "ID invoeren",
"form_add_id": "ID toevoegen", "form_add_id": "ID toevoegen",
"form_client_name": "Vul gebruikersnaam in", "form_client_name": "Vul gebruikersnaam in",
"name": "Naam",
"client_global_settings": "Gebruik globale instelling", "client_global_settings": "Gebruik globale instelling",
"client_deleted": "Gebruiker \"{{key}}\" met succes verwijderd", "client_deleted": "Gebruiker \"{{key}}\" met succes verwijderd",
"client_added": "Gebruiker \"{{key}}\" met succes toegevoegd", "client_added": "Gebruiker \"{{key}}\" met succes toegevoegd",
@ -425,6 +451,7 @@
"location": "Locatie", "location": "Locatie",
"orgname": "Naam organisatie", "orgname": "Naam organisatie",
"netname": "Netwerk naam", "netname": "Netwerk naam",
"network": "Netwerk",
"descr": "Beschrijving", "descr": "Beschrijving",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Meer informatie</0> over het maken van je eigen host lijsten.", "filtering_rules_learn_more": "<0>Meer informatie</0> over het maken van je eigen host lijsten.",
@ -446,5 +473,19 @@
"check_service": "Servicenaam: {{service}}", "check_service": "Servicenaam: {{service}}",
"list_updated": "{{count}} lijst geüpdatet", "list_updated": "{{count}} lijst geüpdatet",
"list_updated_plural": "{{count}} lijsten geüpdatet", "list_updated_plural": "{{count}} lijsten geüpdatet",
"dnssec_enable": "DNSSEC inschakelen" "dnssec_enable": "DNSSEC inschakelen",
"validated_with_dnssec": "Gevalideerd met DNSSEC",
"show_all_responses": "Alle reacties",
"show_blocked_responses": "Geblokkeerd",
"show_whitelisted_responses": "Op toestemmingslijst",
"show_processed_responses": "Verwerkt",
"blocked_safebrowsing": "Geblokkeerd door Veilig Browsen",
"blocked_adult_websites": "Geblokkeerde 18+ websites",
"blocked_threats": "Geblokkeerde bedreigingen",
"allowed": "Toegestaan",
"filtered": "Gefilterd",
"rewritten": "Herschreven",
"safe_search": "Veilig zoeken",
"blocklist": "Blokkeerlijst",
"milliseconds_abbreviation": "ms"
} }

View File

@ -51,14 +51,17 @@
"delete_confirm": "Er du sikker på at du vil slette «{{key}}»?", "delete_confirm": "Er du sikker på at du vil slette «{{key}}»?",
"form_enter_hostname": "Skriv inn vertsnavnet", "form_enter_hostname": "Skriv inn vertsnavnet",
"error_details": "Feildetaljer", "error_details": "Feildetaljer",
"request_details": "Detaljer over forespørsel",
"details": "Detaljer",
"back": "Tilbake", "back": "Tilbake",
"dashboard": "Kontrollsenter", "dashboard": "Kontrollsenter",
"settings": "Innstillinger", "settings": "Innstillinger",
"filters": "Filtre", "filters": "Filtre",
"filter": "Filter",
"query_log": "Forespørselslogg", "query_log": "Forespørselslogg",
"faq": "OSS", "faq": "OSS",
"version": "Versjon", "version": "Versjon",
"address": "adresse", "address": "Adresse",
"on": "PÅ", "on": "PÅ",
"off": "AV", "off": "AV",
"copyright": "Opphavsrett", "copyright": "Opphavsrett",
@ -167,9 +170,10 @@
"updated_upstream_dns_toast": "Oppdaterte oppstrøms-DNS-tjenerne", "updated_upstream_dns_toast": "Oppdaterte oppstrøms-DNS-tjenerne",
"dns_test_ok_toast": "De spesifiserte DNS-tjenerne fungerer riktig", "dns_test_ok_toast": "De spesifiserte DNS-tjenerne fungerer riktig",
"dns_test_not_ok_toast": "Tjeneren «{{key}}» kunne ikke brukes, vennligst dobbeltsjekk at du har skrevet den riktig", "dns_test_not_ok_toast": "Tjeneren «{{key}}» kunne ikke brukes, vennligst dobbeltsjekk at du har skrevet den riktig",
"unblock_btn": "Tillat", "unblock": "Tillat",
"block_btn": "Blokker", "block": "Blokker",
"time_table_header": "Tidspunkt", "time_table_header": "Tidspunkt",
"date": "Dato",
"domain_name_table_header": "Domenenavn", "domain_name_table_header": "Domenenavn",
"type_table_header": "Type", "type_table_header": "Type",
"response_table_header": "Respons", "response_table_header": "Respons",
@ -206,6 +210,7 @@
"custom_ip": "Tilpasset IP", "custom_ip": "Tilpasset IP",
"blocking_ipv4": "IPv4-blokkering", "blocking_ipv4": "IPv4-blokkering",
"blocking_ipv6": "IPv6-blokkering", "blocking_ipv6": "IPv6-blokkering",
"dns_over_tls": "DNS-over-TLS",
"form_enter_rate_limit": "Skriv inn forespørselsfrekvensgrense", "form_enter_rate_limit": "Skriv inn forespørselsfrekvensgrense",
"rate_limit": "Forespørselsfrekvensgrense", "rate_limit": "Forespørselsfrekvensgrense",
"edns_enable": "Aktiver EDNS-klientundernett", "edns_enable": "Aktiver EDNS-klientundernett",
@ -340,6 +345,7 @@
"form_enter_id": "Skriv inn identifikator", "form_enter_id": "Skriv inn identifikator",
"form_add_id": "Legg til identifikator", "form_add_id": "Legg til identifikator",
"form_client_name": "Skriv inn klientnavnet", "form_client_name": "Skriv inn klientnavnet",
"name": "Navn",
"client_global_settings": "Bruk de overbestyrte innstillingene", "client_global_settings": "Bruk de overbestyrte innstillingene",
"client_deleted": "Klienten «{{key}}» ble vellykket slettet", "client_deleted": "Klienten «{{key}}» ble vellykket slettet",
"client_added": "Klienten «{{key}}» ble vellykket lagt til", "client_added": "Klienten «{{key}}» ble vellykket lagt til",
@ -438,6 +444,7 @@
"location": "Posisjon", "location": "Posisjon",
"orgname": "Firmanavn", "orgname": "Firmanavn",
"netname": "Nettverksnavn", "netname": "Nettverksnavn",
"network": "Network",
"descr": "Beskrivelse", "descr": "Beskrivelse",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Lær mer</0> om å lage dine egne filterlister for AdGuard Home.", "filtering_rules_learn_more": "<0>Lær mer</0> om å lage dine egne filterlister for AdGuard Home.",
@ -478,5 +485,11 @@
"install_static_configure": "Vi har oppdaget at det brukes en dynamisk IP-adresse — <0>{{ip}}</0>. Vil du bruke det som din statiske adresse?", "install_static_configure": "Vi har oppdaget at det brukes en dynamisk IP-adresse — <0>{{ip}}</0>. Vil du bruke det som din statiske adresse?",
"confirm_static_ip": "AdGuard Home vil sette opp {{ip}} til å bli din statiske IP-adresse. Vil du fortsette?", "confirm_static_ip": "AdGuard Home vil sette opp {{ip}} til å bli din statiske IP-adresse. Vil du fortsette?",
"list_updated": "{{count}} liste oppdatert", "list_updated": "{{count}} liste oppdatert",
"list_updated_plural": "{{count}} lister oppdatert" "list_updated_plural": "{{count}} lister oppdatert",
"show_blocked_responses": "Blokkért",
"show_processed_responses": "Bearbeidet",
"blocked_adult_websites": "Blokkerte voksennettsteder",
"blocked_threats": "Blokkerte trusler",
"allowed": "Unntak",
"blocklist": "Blokkeringsliste"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "możesz określić serwer DNS <0>dla konkretnych domen</0>", "example_upstream_reserved": "możesz określić serwer DNS <0>dla konkretnych domen</0>",
"upstream_parallel": "Używaj równoległych żądań, aby przyspieszyć rozwiązywanie adresów domen, jednocześnie wysyłając zapytania do wszystkich głównych serwerów DNS", "upstream_parallel": "Używaj równoległych żądań, aby przyspieszyć rozwiązywanie adresów domen, jednocześnie wysyłając zapytania do wszystkich głównych serwerów DNS",
"parallel_requests": "Równoległe żądania", "parallel_requests": "Równoległe żądania",
"load_balancing": "Równoważenie obciążenia",
"load_balancing_desc": "Zapytaj jeden serwer na raz. AdGuard Home wykorzysta losowy algorytm, aby użyć najczęściej najszybszego serwera.",
"bootstrap_dns": "Serwery DNS Bootstrap", "bootstrap_dns": "Serwery DNS Bootstrap",
"bootstrap_dns_desc": "Serwery DNS Bootstrap są używane do ustalenia adresu IP serwerów DoH/DoT, które oznaczysz jako główne serwery DNS.", "bootstrap_dns_desc": "Serwery DNS Bootstrap są używane do ustalenia adresu IP serwerów DoH/DoT, które oznaczysz jako główne serwery DNS.",
"check_dhcp_servers": "Sprawdź serwery DHCP", "check_dhcp_servers": "Sprawdź serwery DHCP",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Wybierz interfejs DHCP", "dhcp_interface_select": "Wybierz interfejs DHCP",
"dhcp_hardware_address": "Adres sprzętowy", "dhcp_hardware_address": "Adres sprzętowy",
"dhcp_ip_addresses": "Adresy IP", "dhcp_ip_addresses": "Adresy IP",
"ip": "Adres IP",
"dhcp_table_hostname": "Nazwa hosta", "dhcp_table_hostname": "Nazwa hosta",
"dhcp_table_expires": "Wygasa", "dhcp_table_expires": "Wygasa",
"dhcp_warning": "Aby włączyć wbudowany serwer DHCP, upewnij się, że nie ma innego aktywnego serwera DHCP. W przeciwnym razie może przerwać połączenie internetowe dla podłączonych urządzeń!", "dhcp_warning": "Aby włączyć wbudowany serwer DHCP, upewnij się, że nie ma innego aktywnego serwera DHCP. W przeciwnym razie może przerwać połączenie internetowe dla podłączonych urządzeń!",
@ -49,17 +52,26 @@
"dhcp_static_leases_not_found": "Nie znaleziono statycznych dzierżaw DHCP", "dhcp_static_leases_not_found": "Nie znaleziono statycznych dzierżaw DHCP",
"dhcp_add_static_lease": "Dodaj dzierżawę statyczną", "dhcp_add_static_lease": "Dodaj dzierżawę statyczną",
"dhcp_reset": "Czy na pewno chcesz zresetować konfigurację DHCP?", "dhcp_reset": "Czy na pewno chcesz zresetować konfigurację DHCP?",
"country": "Kraj",
"city": "Miasto",
"delete_confirm": "Czy na pewno chcesz usunąć \"{{key}}\"?", "delete_confirm": "Czy na pewno chcesz usunąć \"{{key}}\"?",
"form_enter_hostname": "Wpisz nazwę hosta", "form_enter_hostname": "Wpisz nazwę hosta",
"error_details": "Szczegóły błędu", "error_details": "Szczegóły błędu",
"response_details": "Szczegóły odpowiedzi",
"request_details": "Szczegóły żądania",
"client_details": "Szczegóły klienta",
"details": "Szczegóły",
"back": "Wróć", "back": "Wróć",
"dashboard": "Panel kontrolny", "dashboard": "Panel kontrolny",
"settings": "Ustawienia", "settings": "Ustawienia",
"filters": "Filtry", "filters": "Filtry",
"filter": "Filtr",
"query_log": "Dziennik zapytań", "query_log": "Dziennik zapytań",
"nothing_found": "Nic nie znaleziono",
"faq": "FAQ", "faq": "FAQ",
"version": "wersja", "version": "wersja",
"address": "adres", "address": "Adres",
"protocol": "Protokół",
"on": "WŁĄCZONY", "on": "WŁĄCZONY",
"off": "WYŁĄCZONY", "off": "WYŁĄCZONY",
"copyright": "Prawo autorskie", "copyright": "Prawo autorskie",
@ -132,8 +144,10 @@
"rules_count_table_header": "Liczba reguł", "rules_count_table_header": "Liczba reguł",
"last_time_updated_table_header": "Ostatnia aktualizacja", "last_time_updated_table_header": "Ostatnia aktualizacja",
"actions_table_header": "Akcje", "actions_table_header": "Akcje",
"request_table_header": "Żądanie",
"edit_table_action": "Edytuj", "edit_table_action": "Edytuj",
"delete_table_action": "Usuń", "delete_table_action": "Usuń",
"elapsed": "Upłynęło",
"filters_and_hosts_hint": "AdGuard Home rozumie podstawowe reguły adblocka i składnię plików hostów.", "filters_and_hosts_hint": "AdGuard Home rozumie podstawowe reguły adblocka i składnię plików hostów.",
"no_blocklist_added": "Nie dodano listy zablokowanych", "no_blocklist_added": "Nie dodano listy zablokowanych",
"no_whitelist_added": "Nie dodano listy dozwolonych", "no_whitelist_added": "Nie dodano listy dozwolonych",
@ -170,12 +184,15 @@
"updated_upstream_dns_toast": "Główne serwery DNS zostały zaktualizowane", "updated_upstream_dns_toast": "Główne serwery DNS zostały zaktualizowane",
"dns_test_ok_toast": "Określone serwery DNS działają poprawnie", "dns_test_ok_toast": "Określone serwery DNS działają poprawnie",
"dns_test_not_ok_toast": "Serwer \"{{key}}\": nie można go użyć, sprawdź, czy napisałeś go poprawnie", "dns_test_not_ok_toast": "Serwer \"{{key}}\": nie można go użyć, sprawdź, czy napisałeś go poprawnie",
"unblock_btn": "Odblokuj", "unblock": "Odblokuj",
"block_btn": "Zablokuj", "block": "Zablokuj",
"time_table_header": "Czas", "time_table_header": "Czas",
"date": "Data",
"domain_name_table_header": "Nazwa domeny", "domain_name_table_header": "Nazwa domeny",
"domain_or_client": "Domena lub klient",
"type_table_header": "Typ", "type_table_header": "Typ",
"response_table_header": "Odpowiedź ", "response_table_header": "Odpowiedź ",
"response_code": "Kod odpowiedzi",
"client_table_header": "Klient", "client_table_header": "Klient",
"empty_response_status": "Pusty", "empty_response_status": "Pusty",
"show_all_filter_type": "Pokaż wszystko", "show_all_filter_type": "Pokaż wszystko",
@ -211,6 +228,9 @@
"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",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"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",
"edns_enable": "Włącz podsieć klienta EDNS", "edns_enable": "Włącz podsieć klienta EDNS",
@ -229,6 +249,7 @@
"rule_label": "Reguła", "rule_label": "Reguła",
"list_label": "Lista", "list_label": "Lista",
"unknown_filter": "Nieznany filtr {{filterId}}", "unknown_filter": "Nieznany filtr {{filterId}}",
"known_tracker": "Znany element śledzący",
"install_welcome_title": "Witaj w AdGuard Home!", "install_welcome_title": "Witaj w AdGuard Home!",
"install_welcome_desc": "AdGuard Home to w pełni funkcjonalny serwer DNS do blokowania reklam i śledzenia. Jego celem jest kontrolowanie całej sieci i wszystkich urządzeń, bez konieczności korzystania z jakiegokolwiek programu po stronie klienta.", "install_welcome_desc": "AdGuard Home to w pełni funkcjonalny serwer DNS do blokowania reklam i śledzenia. Jego celem jest kontrolowanie całej sieci i wszystkich urządzeń, bez konieczności korzystania z jakiegokolwiek programu po stronie klienta.",
"install_settings_title": "Interfejs internetowy administratora", "install_settings_title": "Interfejs internetowy administratora",
@ -257,7 +278,7 @@
"install_devices_router_list_1": "Otwórz ustawienia routera. Zazwyczaj możesz uzyskać do niego dostęp przez przeglądarkę za pośrednictwem adresu URL (na przykład http://192.168.0.1/ lub http://192.168.1.1/). Możesz zostać poproszony o wpisanie hasła. Jeśli nie pamiętasz hasła, możesz je odzyskać, naciskając przycisk na samym routerze. Niektóre routery wymagają określonej aplikacji, która powinna być już zainstalowana na komputerze lub telefonie.", "install_devices_router_list_1": "Otwórz ustawienia routera. Zazwyczaj możesz uzyskać do niego dostęp przez przeglądarkę za pośrednictwem adresu URL (na przykład http://192.168.0.1/ lub http://192.168.1.1/). Możesz zostać poproszony o wpisanie hasła. Jeśli nie pamiętasz hasła, możesz je odzyskać, naciskając przycisk na samym routerze. Niektóre routery wymagają określonej aplikacji, która powinna być już zainstalowana na komputerze lub telefonie.",
"install_devices_router_list_2": "Znajdź ustawienia DHCP/DNS. Poszukaj skrótu DNS obok pola, które pozwala wstawić dwa lub trzy zestawy liczb, z których każdy jest podzielony na cztery grupy z jedną do trzech cyfr.", "install_devices_router_list_2": "Znajdź ustawienia DHCP/DNS. Poszukaj skrótu DNS obok pola, które pozwala wstawić dwa lub trzy zestawy liczb, z których każdy jest podzielony na cztery grupy z jedną do trzech cyfr.",
"install_devices_router_list_3": "Wpisz adresy swojego serwera AdGuard Home.", "install_devices_router_list_3": "Wpisz adresy swojego serwera AdGuard Home.",
"install_devices_router_list_4": "Nie możesz ustawić niestandardowego serwera DNS na niektórych routerach. W takim przypadku może pomóc Ci skonfigurowanie AdGuard Home jako <a href='#dhcp'>serwera DHCP</a>. W przeciwnym razie musisz poszukać instrukcji ustawienia serwerów DNS dla konkretnego modelu routera.", "install_devices_router_list_4": "Nie możesz ustawić niestandardowego serwera DNS na niektórych routerach. W takim przypadku może pomóc Ci skonfigurowanie AdGuard Home jako <0>serwera DHCP</0>. W przeciwnym razie musisz poszukać instrukcji ustawienia serwerów DNS dla konkretnego modelu routera.",
"install_devices_windows_list_1": "Otwórz panel Ustawienia w menu Start lub w Windows.", "install_devices_windows_list_1": "Otwórz panel Ustawienia w menu Start lub w Windows.",
"install_devices_windows_list_2": "Przejdź do kategorii Sieć i Internet, a następnie do Centrum sieci i udostępniania.", "install_devices_windows_list_2": "Przejdź do kategorii Sieć i Internet, a następnie do Centrum sieci i udostępniania.",
"install_devices_windows_list_3": "Po lewej stronie ekranu znajdź Zmień ustawienia adaptera i kliknij na niego.", "install_devices_windows_list_3": "Po lewej stronie ekranu znajdź Zmień ustawienia adaptera i kliknij na niego.",
@ -346,6 +367,7 @@
"form_enter_id": "Wpisz identyfikator", "form_enter_id": "Wpisz identyfikator",
"form_add_id": "Dodaj identyfikator", "form_add_id": "Dodaj identyfikator",
"form_client_name": "Wpisz nazwę klienta", "form_client_name": "Wpisz nazwę klienta",
"name": "Nazwa",
"client_global_settings": "Użyj ustawień globalnych", "client_global_settings": "Użyj ustawień globalnych",
"client_deleted": "Klient \"{{key}}\" został pomyślnie usunięty", "client_deleted": "Klient \"{{key}}\" został pomyślnie usunięty",
"client_added": "Klient \"{{key}}\" został pomyślnie dodany", "client_added": "Klient \"{{key}}\" został pomyślnie dodany",
@ -445,6 +467,7 @@
"location": "Lokalizacja", "location": "Lokalizacja",
"orgname": "Nazwa firmy", "orgname": "Nazwa firmy",
"netname": "Nazwa sieci", "netname": "Nazwa sieci",
"network": "Sieć",
"descr": "Opis", "descr": "Opis",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Dowiedz się więcej</0> o tworzeniu własnych list blokowania hostów.", "filtering_rules_learn_more": "<0>Dowiedz się więcej</0> o tworzeniu własnych list blokowania hostów.",
@ -489,5 +512,19 @@
"list_updated": "{{count}} lista zaktualizowana", "list_updated": "{{count}} lista zaktualizowana",
"list_updated_plural": "{{count}} list zaktualizowanych", "list_updated_plural": "{{count}} list zaktualizowanych",
"dnssec_enable": "Włącz DNSSEC", "dnssec_enable": "Włącz DNSSEC",
"dnssec_enable_desc": "Ustaw flagę DNSSEC w wychodzących zapytaniach DNS i sprawdź wynik (wymagany jest resolver z obsługą zabezpieczania DNSSEC)" "dnssec_enable_desc": "Ustaw flagę DNSSEC w wychodzących zapytaniach DNS i sprawdź wynik (wymagany jest usługodawca z obsługą zabezpieczania DNSSEC)",
"validated_with_dnssec": "Zweryfikowany przez DNSSEC",
"show_all_responses": "Wszystkie odpowiedzi",
"show_blocked_responses": "Zablokowane",
"show_whitelisted_responses": "Biała lista",
"show_processed_responses": "Przetworzono",
"blocked_safebrowsing": "Zablokowane przez bezpieczne przeglądanie",
"blocked_adult_websites": "Zablokowane witryny dla dorosłych",
"blocked_threats": "Zablokowane zagrożenia",
"allowed": "Dozwolone",
"filtered": "Filtrowane",
"rewritten": "Przepisane",
"safe_search": "Bezpieczne wyszukiwanie",
"blocklist": "Lista zablokowanych",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"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 upstream <0>para o domínio(s) especifico</0>",
"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_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 inicialização",
"bootstrap_dns_desc": "Servidores DNS de inicialização são usados para resolver endereços IP dos resolvedores DoH/DoT que você especifica como upstreams.", "bootstrap_dns_desc": "Servidores DNS de inicialização são usados para resolver endereços IP dos resolvedores DoH/DoT que você especifica como upstreams.",
"check_dhcp_servers": "Verificar por servidores DHCP", "check_dhcp_servers": "Verificar por servidores DHCP",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Selecione a interface DHCP", "dhcp_interface_select": "Selecione a interface DHCP",
"dhcp_hardware_address": "Endereço de hardware", "dhcp_hardware_address": "Endereço de hardware",
"dhcp_ip_addresses": "Endereço de IP", "dhcp_ip_addresses": "Endereço de IP",
"ip": "IP",
"dhcp_table_hostname": "Nome do servidor", "dhcp_table_hostname": "Nome do servidor",
"dhcp_table_expires": "Expira", "dhcp_table_expires": "Expira",
"dhcp_warning": "Se você quiser ativar o servidor DHCP, verifique se não há outro servidor DHCP ativo na sua rede. Caso contrário, a internet pode parar de funcionar para outros dispositivos conectados!", "dhcp_warning": "Se você quiser ativar o servidor DHCP, verifique se não há outro servidor DHCP ativo na sua rede. Caso contrário, a internet pode parar de funcionar para outros dispositivos conectados!",
@ -49,17 +52,25 @@
"dhcp_static_leases_not_found": "Nenhuma concessão DHCP estática foi encontrada", "dhcp_static_leases_not_found": "Nenhuma concessão DHCP estática foi encontrada",
"dhcp_add_static_lease": "Adicionar nova concessão estática", "dhcp_add_static_lease": "Adicionar nova concessão estática",
"dhcp_reset": "Você tem certeza de que deseja redefinir a configuração DHCP?", "dhcp_reset": "Você tem certeza de que deseja redefinir a configuração DHCP?",
"country": "País",
"city": "Cidade",
"delete_confirm": "Você tem certeza de que deseja excluir \"{{key}}\"?", "delete_confirm": "Você tem certeza de que deseja excluir \"{{key}}\"?",
"form_enter_hostname": "Digite o hostname", "form_enter_hostname": "Digite o hostname",
"error_details": "Detalhes do erro", "error_details": "Detalhes do erro",
"response_details": "Detalhes da resposta",
"request_details": "Detalhes da solicitação",
"client_details": "Detalhes do cliente",
"details": "Detalhes",
"back": "Voltar", "back": "Voltar",
"dashboard": "Painel", "dashboard": "Painel",
"settings": "Configurações", "settings": "Configurações",
"filters": "Filtros", "filters": "Filtros",
"filter": "Filtro",
"query_log": "Registro de consultas", "query_log": "Registro de consultas",
"faq": "FAQ", "faq": "FAQ",
"version": "Versão", "version": "Versão",
"address": "endereço", "address": "Endereço",
"protocol": "Protocolo",
"on": "Ligado", "on": "Ligado",
"off": "Desligado", "off": "Desligado",
"copyright": "Copyright", "copyright": "Copyright",
@ -132,8 +143,10 @@
"rules_count_table_header": "Quantidade de regras", "rules_count_table_header": "Quantidade de regras",
"last_time_updated_table_header": "Última atualização", "last_time_updated_table_header": "Última atualização",
"actions_table_header": "Ações", "actions_table_header": "Ações",
"request_table_header": "Solicitação",
"edit_table_action": "Editar", "edit_table_action": "Editar",
"delete_table_action": "Excluir", "delete_table_action": "Excluir",
"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 negra foi adicionada",
"no_whitelist_added": "Nenhuma lista branca foi adicionada", "no_whitelist_added": "Nenhuma lista branca foi adicionada",
@ -170,10 +183,12 @@
"updated_upstream_dns_toast": "Atualizado os servidores DNS upstream", "updated_upstream_dns_toast": "Atualizado os servidores DNS upstream",
"dns_test_ok_toast": "Os servidores DNS especificados estão funcionando corretamente", "dns_test_ok_toast": "Os servidores DNS especificados estão funcionando corretamente",
"dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se você escreveu corretamente", "dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se você escreveu corretamente",
"unblock_btn": "Desbloquear", "unblock": "Desbloquear",
"block_btn": "Bloquear", "block": "Bloquear",
"time_table_header": "Data", "time_table_header": "Data",
"date": "Data",
"domain_name_table_header": "Nome de domínio", "domain_name_table_header": "Nome de domínio",
"domain_or_client": "Domínio ou cliente",
"type_table_header": "Tipo", "type_table_header": "Tipo",
"response_table_header": "Resposta", "response_table_header": "Resposta",
"client_table_header": "Cliente", "client_table_header": "Cliente",
@ -211,6 +226,9 @@
"custom_ip": "IP personalizado", "custom_ip": "IP personalizado",
"blocking_ipv4": "Bloqueando IPv4", "blocking_ipv4": "Bloqueando IPv4",
"blocking_ipv6": "Bloqueando IPv6", "blocking_ipv6": "Bloqueando IPv6",
"dns_over_https": "DNS-sobre-HTTPS",
"dns_over_tls": "DNS-sobre-TLS",
"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",
"edns_enable": "Ativar a sub-rede do cliente EDNS", "edns_enable": "Ativar a sub-rede do cliente EDNS",
@ -229,6 +247,7 @@
"rule_label": "Regra", "rule_label": "Regra",
"list_label": "Lista", "list_label": "Lista",
"unknown_filter": "Filtro desconhecido {{filterId}}", "unknown_filter": "Filtro desconhecido {{filterId}}",
"known_tracker": "Rastreador conhecido",
"install_welcome_title": "Bem-vindo(a) ao AdGuard Home!", "install_welcome_title": "Bem-vindo(a) ao AdGuard Home!",
"install_welcome_desc": "O AdGuard Home é um servidor de DNS para bloqueio de anúncios e rastreamento em toda a rede. Sua finalidade é permitir que você controle toda a sua rede e seus dispositivos sem precisar ter um programa instalado.", "install_welcome_desc": "O AdGuard Home é um servidor de DNS para bloqueio de anúncios e rastreamento em toda a rede. Sua finalidade é permitir que você controle toda a sua rede e seus dispositivos sem precisar ter um programa instalado.",
"install_settings_title": "Interface web de administrador", "install_settings_title": "Interface web de administrador",
@ -257,7 +276,7 @@
"install_devices_router_list_1": "Abra as configurações do seu roteador\nNo navegador digite o IP do roteador, o padrão é (http://192.168.0.1/ ou http://192.168.1.1/), e o login e senha é admin/admin; Se você não se lembra da senha, você pode redefinir a senha rapidamente pressionando um botão no próprio roteador. Alguns roteadores têm um aplicativo específico que já deve estar instalado em seu computador/telefone.", "install_devices_router_list_1": "Abra as configurações do seu roteador\nNo navegador digite o IP do roteador, o padrão é (http://192.168.0.1/ ou http://192.168.1.1/), e o login e senha é admin/admin; Se você não se lembra da senha, você pode redefinir a senha rapidamente pressionando um botão no próprio roteador. Alguns roteadores têm um aplicativo específico que já deve estar instalado em seu computador/telefone.",
"install_devices_router_list_2": "Encontre as Configurações de DNS. Procure as letras DNS ao lado de um campo que permite dois ou três conjuntos de números, cada um dividido em quatro grupos de um a três números.", "install_devices_router_list_2": "Encontre as Configurações de DNS. Procure as letras DNS ao lado de um campo que permite dois ou três conjuntos de números, cada um dividido em quatro grupos de um a três números.",
"install_devices_router_list_3": "Digite aqui seu servidor do AdGuard Home.", "install_devices_router_list_3": "Digite aqui seu servidor do AdGuard Home.",
"install_devices_router_list_4": "Você não pode definir um servidor DNS personalizado em alguns tipos de roteadores. Nesse caso, pode ajudar se você configurar o AdGuard Home como um servidor DHCP. Caso contrário, você deve procurar o manual sobre como personalizar os servidores DNS para o seu modelo de roteador específico.", "install_devices_router_list_4": "Você não pode definir um servidor DNS personalizado em alguns tipos de roteadores. Nesse caso, pode ajudar se você configurar o AdGuard Home como um <0>servidor DHCP</0>. Caso contrário, você deve procurar o manual sobre como personalizar os servidores DNS para o seu modelo de roteador específico.",
"install_devices_windows_list_1": "Abra o Painel de Controle pelo Menu Iniciar ou pela Pesquisa do Windows.", "install_devices_windows_list_1": "Abra o Painel de Controle pelo Menu Iniciar ou pela Pesquisa do Windows.",
"install_devices_windows_list_2": "Entre na categoria Rede e Internet e depois clique em Central de Rede e Compartilhamento.", "install_devices_windows_list_2": "Entre na categoria Rede e Internet e depois clique em Central de Rede e Compartilhamento.",
"install_devices_windows_list_3": "No lado esquerdo da janela clique em Alterar as configurações do adaptador.", "install_devices_windows_list_3": "No lado esquerdo da janela clique em Alterar as configurações do adaptador.",
@ -346,6 +365,7 @@
"form_enter_id": "Inserir identificador", "form_enter_id": "Inserir identificador",
"form_add_id": "Adicionar identificador", "form_add_id": "Adicionar identificador",
"form_client_name": "Digite o nome do cliente", "form_client_name": "Digite o nome do cliente",
"name": "Nome",
"client_global_settings": "Usar configurações global", "client_global_settings": "Usar configurações global",
"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",
@ -445,6 +465,7 @@
"location": "Localização", "location": "Localização",
"orgname": "Nome da organização", "orgname": "Nome da organização",
"netname": "Nome da rede", "netname": "Nome da rede",
"network": "Rede",
"descr": "Descrição", "descr": "Descrição",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Saiba mais</0> sobre como criar as suas próprias listas negras de servidores.", "filtering_rules_learn_more": "<0>Saiba mais</0> sobre como criar as suas próprias listas negras de servidores.",
@ -456,7 +477,7 @@
"disable_ipv6": "Desativar IPv6", "disable_ipv6": "Desativar IPv6",
"disable_ipv6_desc": "Se este recurso estiver ativado, todas as consultas de DNS para endereços IPv6 (tipo AAAA) serão ignoradas.", "disable_ipv6_desc": "Se este recurso estiver ativado, todas as consultas de DNS para endereços IPv6 (tipo AAAA) serão ignoradas.",
"fastest_addr": "Endereço de IP mais rápido", "fastest_addr": "Endereço de IP mais rápido",
"fastest_addr_desc": "Consulte todos os servidores de DNS e retorne o endereço de IP mais rápido entre todas as respostas", "fastest_addr_desc": "Consulta todos os servidores DNS e retorna o endereço IP mais rápido entre todas as respostas. Isso irá retardar as consultas ao DNS, pois temos que esperar por respostas de todos os servidores DNS, porém melhorando a conectividade em geral.",
"autofix_warning_text": "Se clicar em \"Corrigir\", o AdGuardHome irá configurar o seu sistema para utilizar o servidor DNS do AdGuardHome.", "autofix_warning_text": "Se clicar em \"Corrigir\", o AdGuardHome irá configurar o seu sistema para utilizar o servidor DNS do AdGuardHome.",
"autofix_warning_list": "Ele irá realizar estas tarefas: <0>Desativar sistema DNSStubListener</0> <0>Definir endereço do servidor DNS para 127.0.0.1</0> <0>Substituir o alvo simbólico do link /etc/resolv.conf para /run/systemd/resolv.conf</0> <0>Parar DNSStubListener (recarregar serviço resolvido pelo sistema)</0>", "autofix_warning_list": "Ele irá realizar estas tarefas: <0>Desativar sistema DNSStubListener</0> <0>Definir endereço do servidor DNS para 127.0.0.1</0> <0>Substituir o alvo simbólico do link /etc/resolv.conf para /run/systemd/resolv.conf</0> <0>Parar DNSStubListener (recarregar serviço resolvido pelo sistema)</0>",
"autofix_warning_result": "Como resultado, todos as solicitações DNS do seu sistema serão processadas pelo AdGuardHome por padrão.", "autofix_warning_result": "Como resultado, todos as solicitações DNS do seu sistema serão processadas pelo AdGuardHome por padrão.",
@ -489,5 +510,19 @@
"list_updated": "{{count}} lista atualizada", "list_updated": "{{count}} lista atualizada",
"list_updated_plural": "{{count}} listas atualizadas", "list_updated_plural": "{{count}} listas atualizadas",
"dnssec_enable": "Ativar DNSSEC", "dnssec_enable": "Ativar DNSSEC",
"dnssec_enable_desc": "Definir a flag DNSSEC nas consultas de DNS em andamento e verificar o resultado (é necessário um resolvedor DNSSEC ativado)" "dnssec_enable_desc": "Definir a flag DNSSEC nas consultas de DNS em andamento e verificar o resultado (é necessário um resolvedor DNSSEC ativado)",
"validated_with_dnssec": "Validado com DNSSEC",
"show_all_responses": "Todas as respostas",
"show_blocked_responses": "Bloqueado",
"show_whitelisted_responses": "Na lista branca",
"show_processed_responses": "Processado",
"blocked_safebrowsing": "Bloqueado pela navegação segura",
"blocked_adult_websites": "Sites adultos bloqueados",
"blocked_threats": "Ameaças bloqueadas",
"allowed": "Permitido",
"filtered": "Filtrado",
"rewritten": "Reescrito",
"safe_search": "Pesquisa segura",
"blocklist": "Lista negra",
"milliseconds_abbreviation": "ms"
} }

View File

@ -58,7 +58,7 @@
"query_log": "Registo de consultas", "query_log": "Registo de consultas",
"faq": "Perguntas frequentes", "faq": "Perguntas frequentes",
"version": "Versão", "version": "Versão",
"address": "endereço", "address": "Endereço",
"on": "LIGADO", "on": "LIGADO",
"off": "DESLIGADO", "off": "DESLIGADO",
"copyright": "Copyright", "copyright": "Copyright",
@ -149,9 +149,10 @@
"updated_upstream_dns_toast": "A actualizar os servidores DNS upstream", "updated_upstream_dns_toast": "A actualizar os servidores DNS upstream",
"dns_test_ok_toast": "Os servidores DNS especificados estão a funcionar correctamente", "dns_test_ok_toast": "Os servidores DNS especificados estão a funcionar correctamente",
"dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se o escreveu correctamente", "dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se o escreveu correctamente",
"unblock_btn": "Desbloquear", "unblock": "Desbloquear",
"block_btn": "Bloquear", "block": "Bloquear",
"time_table_header": "Data", "time_table_header": "Data",
"date": "Data",
"domain_name_table_header": "Nome do domínio", "domain_name_table_header": "Nome do domínio",
"type_table_header": "Tipo", "type_table_header": "Tipo",
"response_table_header": "Resposta", "response_table_header": "Resposta",
@ -316,6 +317,7 @@
"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",
"client_global_settings": "Usar configurações globais", "client_global_settings": "Usar configuraçõ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",
@ -412,6 +414,7 @@
"location": "Localização", "location": "Localização",
"orgname": "Nome da organização", "orgname": "Nome da organização",
"netname": "Nome da rede", "netname": "Nome da rede",
"network": "Network",
"descr": "Descrição", "descr": "Descrição",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Saiba mais</0>sobre como criar as suas próprias listas negras de servidores.", "filtering_rules_learn_more": "<0>Saiba mais</0>sobre como criar as suas próprias listas negras de servidores.",
@ -419,5 +422,9 @@
"try_again": "Tente novamente", "try_again": "Tente novamente",
"domain_desc": "Insere o nome do domínio para ser reescrito.", "domain_desc": "Insere o nome do domínio para ser reescrito.",
"example_rewrite_domain": "reescrever resposta apenas para este domínio.", "example_rewrite_domain": "reescrever resposta apenas para este domínio.",
"example_rewrite_wildcard": "reescrever resposta para todos <0>example.org</0> sub-domínios." "example_rewrite_wildcard": "reescrever resposta para todos <0>example.org</0> sub-domínios.",
"form_enter_host": "Insira o hostname",
"show_blocked_responses": "Bloqueado",
"show_whitelisted_responses": "Lista Branca",
"show_processed_responses": "Processado"
} }

View File

@ -1,8 +1,10 @@
{ {
"client_settings": "Setări client", "client_settings": "Setări client",
"example_upstream_reserved": "Puteți preciza un DNS upstream <0>de domeni/u(ii) specific(e)</0>", "example_upstream_reserved": "Puteți preciza un DNS upstream <0>de domeniu(ii) specific(e)</0>",
"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",
"load_balancing": "Echilibrare-sarcini",
"load_balancing_desc": "Fiecare server este interogat aparte. AdGuard Home alege serverul folosind algoritmul ponderat aleatoriu, astfel încât cel mai rapid server să fie utilizat mai des.",
"bootstrap_dns": "Serverele DNS Bootstrap", "bootstrap_dns": "Serverele DNS Bootstrap",
"bootstrap_dns_desc": "Serverele DNS Bootstrap sunt folosite pentru a rezolva adresele IP ale resolverelor DoH/DoT indicate ca upstreams.", "bootstrap_dns_desc": "Serverele DNS Bootstrap sunt folosite pentru a rezolva adresele IP ale resolverelor DoH/DoT indicate ca upstreams.",
"check_dhcp_servers": "Căutați servere DHCP", "check_dhcp_servers": "Căutați servere DHCP",
@ -20,11 +22,11 @@
"dhcp_leases_not_found": "Nu s-au găsit DHCP închiriate", "dhcp_leases_not_found": "Nu s-au găsit DHCP închiriate",
"dhcp_config_saved": "Configurare DHCP salvată cu succes", "dhcp_config_saved": "Configurare DHCP salvată cu succes",
"form_error_required": "Câmp necesar", "form_error_required": "Câmp necesar",
"form_error_ip4_format": "Format IPv4 nevalid", "form_error_ip4_format": "Format IPv4 invalid",
"form_error_ip6_format": "Format IPv6 nevalid", "form_error_ip6_format": "Format IPv6 invalid",
"form_error_ip_format": "Format IP nevalid", "form_error_ip_format": "Format IP invalid",
"form_error_mac_format": "Format MAC nevalid", "form_error_mac_format": "Format MAC invalid",
"form_error_client_id_format": "Format ID de client nevalid", "form_error_client_id_format": "Format ID de client invalid",
"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",
"dhcp_form_gateway_input": "IP Gateway", "dhcp_form_gateway_input": "IP Gateway",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Selectați interfața DHCP", "dhcp_interface_select": "Selectați interfața DHCP",
"dhcp_hardware_address": "Adresa mașinii", "dhcp_hardware_address": "Adresa mașinii",
"dhcp_ip_addresses": "Adrese IP", "dhcp_ip_addresses": "Adrese IP",
"ip": "IP",
"dhcp_table_hostname": "Hostname", "dhcp_table_hostname": "Hostname",
"dhcp_table_expires": "Expiră", "dhcp_table_expires": "Expiră",
"dhcp_warning": "Dacă doriți oricum să activați serverul DHCP, verificați că nu există un alt server DHCP activ în rețeaua dvs. Altfel, poate întrerupe Internetul pe toate aparatele conectate!", "dhcp_warning": "Dacă doriți oricum să activați serverul DHCP, verificați că nu există un alt server DHCP activ în rețeaua dvs. Altfel, poate întrerupe Internetul pe toate aparatele conectate!",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "Nu s-au găsit închirieri statice DHCP", "dhcp_static_leases_not_found": "Nu s-au găsit închirieri statice DHCP",
"dhcp_add_static_lease": "Adăugați închiriere statică", "dhcp_add_static_lease": "Adăugați închiriere statică",
"dhcp_reset": "Sunteți sigur că doriți să resetați configurația DHCP?", "dhcp_reset": "Sunteți sigur că doriți să resetați configurația DHCP?",
"country": "Țara",
"city": "Oraș",
"delete_confirm": "Sunteți sigur că doriți să ștergeți \"{{key}}\"?", "delete_confirm": "Sunteți sigur că doriți să ștergeți \"{{key}}\"?",
"form_enter_hostname": "Intrați hostname", "form_enter_hostname": "Intrați hostname",
"error_details": "Detalii eroare", "error_details": "Detalii eroare",
"response_details": "Detalii răspuns",
"request_details": "Detalii solicitare",
"client_details": "Detalii client",
"details": "Detalii",
"back": "Înapoi", "back": "Înapoi",
"dashboard": "Tablou de bord", "dashboard": "Tablou de bord",
"settings": "Setări", "settings": "Setări",
"filters": "Filtre", "filters": "Filtre",
"filter": "Filtru",
"query_log": "Jurnal interogări", "query_log": "Jurnal interogări",
"compact": "Compact",
"nothing_found": "Nu s-a găsit nimic",
"faq": "FAQ", "faq": "FAQ",
"version": "Versiune", "version": "Versiune",
"address": "adresă", "address": "Adresă",
"protocol": "Protocol",
"on": "ON", "on": "ON",
"off": "OFF", "off": "OFF",
"copyright": "Copyright", "copyright": "Copyright",
@ -77,7 +90,7 @@
"stats_adult": "Site-uri cu conținut adult blocate", "stats_adult": "Site-uri cu conținut adult blocate",
"stats_query_domain": "Domeniile cele mai căutate", "stats_query_domain": "Domeniile cele mai căutate",
"for_last_24_hours": "în ultimele 24 ore", "for_last_24_hours": "în ultimele 24 ore",
"for_last_days": "în ultimele {{count}} zile", "for_last_days": "în ultima {{count}} zi",
"for_last_days_plural": "pentru ultimele {{count}} zile", "for_last_days_plural": "pentru ultimele {{count}} zile",
"no_domains_found": "Nu s-au găsit domenii", "no_domains_found": "Nu s-au găsit domenii",
"requests_count": "Cont interogări", "requests_count": "Cont interogări",
@ -99,8 +112,8 @@
"filters_block_toggle_hint": "Puteți configura regulile de blocare în setările <a href='#filters'> Filtre </a>.", "filters_block_toggle_hint": "Puteți configura regulile de blocare în setările <a href='#filters'> 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 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_parental": "Utilizați controlul parental AdGuard", "use_adguard_parental": "Utilizați Controlul Parental AdGuard",
"use_adguard_parental_hint": "AdGuard Home va verifica dacă este conținut adult pe domeniu. Utilizează aceeaș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ă",
"enforce_save_search_hint": "AdGuard Home poate impune căutarea protejată în următoarele motoare de căutare: Google, Youtube, Bing, DuckDuckGo, Yandex, Pixabay.", "enforce_save_search_hint": "AdGuard Home poate impune căutarea protejată în următoarele motoare de căutare: Google, Youtube, Bing, DuckDuckGo, Yandex, Pixabay.",
"no_servers_specified": "Nu sunt specificate servere", "no_servers_specified": "Nu sunt specificate servere",
@ -120,8 +133,8 @@
"apply_btn": "Aplică", "apply_btn": "Aplică",
"disabled_filtering_toast": "Filtrare dezactivată", "disabled_filtering_toast": "Filtrare dezactivată",
"enabled_filtering_toast": "Filtrare activată", "enabled_filtering_toast": "Filtrare activată",
"disabled_safe_browsing_toast": "Navigare protejată dezactivată", "disabled_safe_browsing_toast": "Navigare securitară dezactivată",
"enabled_safe_browsing_toast": "Navigare protejată activată", "enabled_safe_browsing_toast": "Navigare securitară activată",
"disabled_parental_toast": "Control parental dezactivat", "disabled_parental_toast": "Control parental dezactivat",
"enabled_parental_toast": "Control parental activat", "enabled_parental_toast": "Control parental activat",
"disabled_safe_search_toast": "Căutare protejată dezactivată", "disabled_safe_search_toast": "Căutare protejată dezactivată",
@ -132,8 +145,10 @@
"rules_count_table_header": "Număr de reguli", "rules_count_table_header": "Număr de reguli",
"last_time_updated_table_header": "Ultima aducere la zi", "last_time_updated_table_header": "Ultima aducere la zi",
"actions_table_header": "Acțiuni", "actions_table_header": "Acțiuni",
"request_table_header": "Solicitare",
"edit_table_action": "Editare", "edit_table_action": "Editare",
"delete_table_action": "Sterge", "delete_table_action": "Șterge",
"elapsed": "Scurs",
"filters_and_hosts_hint": "AdGuard Home înțelege regulile de bază de blocare cât și sintaxa fișierelor hosts.", "filters_and_hosts_hint": "AdGuard Home înțelege regulile de bază de blocare cât și sintaxa fișierelor hosts.",
"no_blocklist_added": "Listă blocări goală", "no_blocklist_added": "Listă blocări goală",
"no_whitelist_added": "Listă autorizări goală", "no_whitelist_added": "Listă autorizări goală",
@ -156,26 +171,29 @@
"examples_title": "Exemple", "examples_title": "Exemple",
"example_meaning_filter_block": "blochează accesul la domeniul exemplu.org și la toate subdomeniile sale", "example_meaning_filter_block": "blochează accesul la domeniul exemplu.org și la toate subdomeniile sale",
"example_meaning_filter_whitelist": "deblochează accesul la domeniul exemplu.org și la toate subdomeniile sale", "example_meaning_filter_whitelist": "deblochează accesul la domeniul exemplu.org și la toate subdomeniile sale",
"example_meaning_host_block": "AdGuard Home va returna acum adresa 127.0.0.1 pentru domeniul example.org (dar nu și subdomeniile sale).", "example_meaning_host_block": "AdGuard Home va returna acum adresa 127.0.0.1 pentru domeniul exemplu.org (dar nu și subdomeniile sale).",
"example_comment": "! Iată cum se adăugă o descriere", "example_comment": "! Iată cum se adăugă o descriere",
"example_comment_meaning": "comentariu", "example_comment_meaning": "comentariu",
"example_comment_hash": "# Astfel putem lăsa comentarii", "example_comment_hash": "# Astfel putem lăsa comentarii",
"example_regex_meaning": "blocare acces la domenii care corespund expresiei obișnuite specificate", "example_regex_meaning": "blocare acces la domenii care corespund expresiei obișnuite specificate",
"example_upstream_regular": "DNS clasic (peste UDP)", "example_upstream_regular": "DNS clasic (over UDP)",
"example_upstream_dot": "<0>DNS-over-TLS</0> criptat", "example_upstream_dot": "<0>DNS-over-TLS</0> criptat",
"example_upstream_doh": "<0>DNS-over-HTTPS</0> criptat", "example_upstream_doh": "<0>DNS-over-HTTPS</0> criptat",
"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 (peste 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 upstream 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_btn": "Deblocați", "unblock": "Deblocați",
"block_btn": "Blocați", "block": "Blocați",
"time_table_header": "Ora", "time_table_header": "Ora",
"date": "Data",
"domain_name_table_header": "Nume domeniu", "domain_name_table_header": "Nume domeniu",
"domain_or_client": "Domeniu sau client",
"type_table_header": "Tip", "type_table_header": "Tip",
"response_table_header": "Răspuns", "response_table_header": "Răspuns",
"response_code": "Cod de răspuns",
"client_table_header": "Client", "client_table_header": "Client",
"empty_response_status": "Gol", "empty_response_status": "Gol",
"show_all_filter_type": "Arată tot", "show_all_filter_type": "Arată tot",
@ -189,11 +207,12 @@
"rows_table_footer_text": "linii", "rows_table_footer_text": "linii",
"updated_custom_filtering_toast": "Reguli personalizate de filtrare aduse la zi", "updated_custom_filtering_toast": "Reguli personalizate de filtrare aduse la zi",
"rule_removed_from_custom_filtering_toast": "Regulă scoasă din regullei personalizate de filtrare", "rule_removed_from_custom_filtering_toast": "Regulă scoasă din regullei personalizate de filtrare",
"rule_added_to_custom_filtering_toast": "Regula adăugată la regulile de filtrare personalizate", "rule_added_to_custom_filtering_toast": "Regulă adăugată la regulile de filtrare personalizate",
"query_log_response_status": "Statut: {{value}}", "query_log_response_status": "Statut: {{value}}",
"query_log_filtered": "Filtrat de {{filter}}", "query_log_filtered": "Filtrat de {{filter}}",
"query_log_confirm_clear": "Sunteți sigur că doriți să ștergeți întregul jurnal de interogări?", "query_log_confirm_clear": "Sunteți sigur că doriți să ștergeți întregul jurnal de interogări?",
"query_log_cleared": "Jurnalul de interogare a fost șters cu succes", "query_log_cleared": "Jurnalul de interogare a fost șters cu succes",
"query_log_updated": "Jurnalul de solicitări a fost actualizat cu succes",
"query_log_clear": "Curăță jurnalele", "query_log_clear": "Curăță jurnalele",
"query_log_retention": "Retenție jurnale interogare", "query_log_retention": "Retenție jurnale interogare",
"query_log_enable": "Activați jurnal", "query_log_enable": "Activați jurnal",
@ -211,26 +230,31 @@
"custom_ip": "IP personalizat", "custom_ip": "IP personalizat",
"blocking_ipv4": "Blocarea IPv4", "blocking_ipv4": "Blocarea IPv4",
"blocking_ipv6": "Blocarea IPv6", "blocking_ipv6": "Blocarea IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"plain_dns": "DNS simplu",
"form_enter_rate_limit": "Intrați limita ratei", "form_enter_rate_limit": "Intrați limita ratei",
"rate_limit": "Limita ratei", "rate_limit": "Limita ratei",
"edns_enable": "Activați clientul subnet EDNS", "edns_enable": "Activați clientul subnet EDNS",
"edns_cs_desc": "Dacă este activat, AdGuard Home va trimite subnet-ele clienților către serverele DNS.", "edns_cs_desc": "Dacă este activat, AdGuard Home va trimite subnet-ul clienților către serverele DNS.",
"rate_limit_desc": "Numărul de solicitări pe secundă pe care un singur client este permis să le facă (0: nelimitat)", "rate_limit_desc": "Numărul de solicitări pe secundă pe care un singur client este permis să le facă (0: nelimitat)",
"blocking_ipv4_desc": "Adresa IP de returnat pentru o cerere A de blocare", "blocking_ipv4_desc": "Adresa IP de returnat pentru o cerere A de blocare",
"blocking_ipv6_desc": "Adresa IP de returnat pentru o cerere AAAA de blocare", "blocking_ipv6_desc": "Adresa IP de returnat pentru o cerere AAAA de blocare",
"blocking_mode_default": "Implicit: Răspunde cu NXDOMAIN cînd sunt blocate de regula Adblock-style; răspunde cu adresa IP specificată în regulă când sunt blocate de regula /etc/hosts-style", "blocking_mode_default": "Implicit: Răspunde cu NXDOMAIN când sunt blocate de regulă tip Adblock; răspunde cu adresa IP specificată în regulă când sunt blocate de regula tip /etc/hosts",
"blocking_mode_nxdomain": "NXDOMAIN: Răspunde cu codul NXDOMAIN", "blocking_mode_nxdomain": "NXDOMAIN: Răspunde cu codul NXDOMAIN",
"blocking_mode_null_ip": "IP nul: răspunde cu o adresă IP zero (0.0.0.0 pentru A; :: pentru AAAA)", "blocking_mode_null_ip": "IP nul: răspunde cu o adresă IP zero (0.0.0.0 pentru A; :: pentru AAAA)",
"blocking_mode_custom_ip": "IP personalizat: răspunde cu o adresă IP setată manual", "blocking_mode_custom_ip": "IP personalizat: răspunde cu o adresă IP setată manual",
"upstream_dns_client_desc": "Dacă mențineți acest câmp gol, AdGuard Home va folosi serverele configurate în <0>setările DNS</0>.", "upstream_dns_client_desc": "Dacă mențineți acest câmp gol, AdGuard Home va folosi serverele configurate în <0>setările DNS</0>.",
"tracker_source": "Sursă tracker",
"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ă",
"list_label": "Listă", "list_label": "Listă",
"unknown_filter": "Filtru necunoscut {{filterId}}", "unknown_filter": "Filtru necunoscut {{filterId}}",
"known_tracker": "Tracker cunoscut",
"install_welcome_title": "Bun venit la AdGuard Home!", "install_welcome_title": "Bun venit la AdGuard Home!",
"install_welcome_desc": "AdGuard Home este un server DNS care blochează anunțuri și trackere la nivel de rețea. Scopul său este de a vă da controlul pe întreaga rețea și toate aparatele dvs. și fără un program din partea clientului.", "install_welcome_desc": "AdGuard Home este un server DNS care blochează reclame și trackere la nivel de rețea. Scopul său este de a vă da controlul pe întreaga rețea și toate aparatele dvs. și fără un program din partea clientului.",
"install_settings_title": "Interfață administrator web", "install_settings_title": "Interfață administrator web",
"install_settings_listen": "Interfață de ascultare", "install_settings_listen": "Interfață de ascultare",
"install_settings_port": "Port", "install_settings_port": "Port",
@ -254,29 +278,29 @@
"install_devices_router": "Router", "install_devices_router": "Router",
"install_devices_router_desc": "Această configurație va acoperi automat toate aparatele conectate la routerul de acasă și nu va trebui să le configurați manual pe fiecare.", "install_devices_router_desc": "Această configurație va acoperi automat toate aparatele conectate la routerul de acasă și nu va trebui să le configurați manual pe fiecare.",
"install_devices_address": "Serverul DNS AdGuard Home ascultă pe următoarele adrese", "install_devices_address": "Serverul DNS AdGuard Home ascultă pe următoarele adrese",
"install_devices_router_list_1": "Deschideți preferințele pentru routerul dvs. De obicei, îl puteți accesa din browserul dvs. printr-o adresă URL (cum ar fi http://192.168.0.1/ sau http://192.168.1.1/). Vi se poate cere să introduceți parola. Dacă nu v-o amintiți, puteți reseta adesea parola apăsând un buton de pe routerul propriu-zis. Unele routere necesită o aplicație specifică, care în acest caz ar trebui să fie deja instalată pe computerul/telefonul dvs.", "install_devices_router_list_1": "Deschideți preferințele pentru routerul dvs. De obicei, îl puteți accesa din browserul dvs. printr-o adresă URL (cum ar fi http://192.168.0.1/ sau http://192.168.1.1/). Vi se poate cere să intrați parola. Dacă nu v-o amintiți, puteți reseta adesea parola apăsând un buton de pe routerul propriu-zis. Unele routere necesită o aplicație specifică, care în acest caz ar trebui să fie deja instalată pe computerul/telefonul dvs.",
"install_devices_router_list_2": "Găsiți setările DHCP/DNS. Căutați literele DNS lângă un câmp care să permită două sau trei seturi de numere, fiecare împărțit în patru grupuri de una până la trei cifre.", "install_devices_router_list_2": "Găsiți setările DHCP/DNS. Căutați literele DNS lângă un câmp care să permită două sau trei seturi de numere, fiecare împărțit în patru grupuri de una până la trei cifre.",
"install_devices_router_list_3": "Intrați adresele serverului dvs. AdGuard Home aici.", "install_devices_router_list_3": "Intrați adresele serverului dvs. AdGuard Home aici.",
"install_devices_router_list_4": "Unele routere nu permit setarea unui server DNS personalizat. În acest caz, vă poate ajuta dacă configurați AdGuard Home ca server DHCP. Dacă nu, trebuie căutat manualul modelului dvs. de router ca să aflați cum se pot personaliza serverele DNS.", "install_devices_router_list_4": "Unele routere nu permit setarea unui server DNS personalizat. În acest caz, vă poate ajuta dacă ați configura AdGuard Home ca <0>server DHCP</0>. Dacă nu, trebuie căutat manualul modelului dvs. de router ca să aflați cum se pot personaliza serverele DNS.",
"install_devices_windows_list_1": "Deschideți panoul de control prin meniul Start sau căutare Windows.", "install_devices_windows_list_1": "Deschideți panoul de control prin meniul Start sau căutare Windows.",
"install_devices_windows_list_2": "Accesați categoria \"Rețea și Internet\", apoi la \"Centrul de Rețea și Partajare\".", "install_devices_windows_list_2": "Accesați categoria \"Rețea și Internet\", apoi la \"Centrul de Rețea și Partajare\".",
"install_devices_windows_list_3": "În partea stângă a ecranului găsiți \"Schimbare setări adaptor\" și faceți clic pe el.", "install_devices_windows_list_3": "În partea stângă a ecranului găsiți \"Schimbare setări adaptor\" și clicați pe el.",
"install_devices_windows_list_4": "Selectați conexiunea activă, faceți clic dreapta pe ea și alegeți \"Proprietăți\".", "install_devices_windows_list_4": "Selectați conexiunea activă, faceți clic dreapta pe ea și alegeți \"Proprietăți\".",
"install_devices_windows_list_5": "Găsiți Internet Protocol Versiunea 4 (TCP/IP) din listă, selectați-l și apoi faceți din nou clic pe Proprietăți.", "install_devices_windows_list_5": "Găsiți Internet Protocol Versiunea 4 (TCP/IP) din listă, selectați-l și apoi clicați din nou pe Proprietăți.",
"install_devices_windows_list_6": "Alegeți Utilizați următoarele adrese de server DNS și introduceți adresele de server AdGuard Home.", "install_devices_windows_list_6": "Alegeți Utilizați următoarele adrese de server DNS și intrați adresele de server AdGuard Home.",
"install_devices_macos_list_1": "Faceți clic pe pictograma Apple și accesați Preferințele Sistemului.", "install_devices_macos_list_1": "Clicați pe icoana Apple și accesați Preferințele Sistemului.",
"install_devices_macos_list_2": "Faceți clic pe Network.", "install_devices_macos_list_2": "Clicați pe Network.",
"install_devices_macos_list_3": "Selectați prima conexiune din listă și faceți clic pe Avansat.", "install_devices_macos_list_3": "Selectați prima conexiune din listă și clicați pe Avansat.",
"install_devices_macos_list_4": "Selectați fila DNS și introduceți adresele serverului dvs. AdGuard Home.", "install_devices_macos_list_4": "Selectați fila DNS și intrați adresele serverului dvs. AdGuard Home.",
"install_devices_android_list_1": "Din ecranul principal al Meniului Android, tapați Setări.", "install_devices_android_list_1": "Din ecranul principal al Meniului Android, tapați Setări.",
"install_devices_android_list_2": "Tapați Wi-Fi din meniu. Ecranul cu toate rețelele disponibile va fi afișat (este imposibil să setați DNS personalizat pentru conexiunea mobilă).", "install_devices_android_list_2": "Tapați Wi-Fi din meniu. Ecranul cu toate rețelele disponibile va fi afișat (este imposibil să setați DNS personalizat pentru conexiunea mobilă).",
"install_devices_android_list_3": "Apăsați lung pe rețeaua la care sunteți conectat și tapați Modificare Rețea.", "install_devices_android_list_3": "Apăsați lung pe rețeaua la care sunteți conectat și tapați Modificare Rețea.",
"install_devices_android_list_4": "Pe unele aparate, poate fi necesar să bifați caseta Advanced pentru a vedea setările ulterioare. Pentru a ajusta setările DNS Android, va trebui să comutați setările IP de la DHCP la Static.", "install_devices_android_list_4": "Pe unele aparate, poate fi necesar să bifați caseta Advanced pentru a vedea setările adiționale. Pentru a ajusta setările DNS Android, va trebui să comutați setările IP de la DHCP la Static.",
"install_devices_android_list_5": "Schimbați valorile DNS 1 și DNS 2 la cele ale serverului dvs. AdGuard Home.", "install_devices_android_list_5": "Schimbați valorile DNS 1 și DNS 2 la cele ale serverului dvs. AdGuard Home.",
"install_devices_ios_list_1": "Din ecranul de start, tapați Setări.", "install_devices_ios_list_1": "Din ecranul de start, tapați Setări.",
"install_devices_ios_list_2": "Alegeți Wi-Fi în meniul din stânga (este imposibil să configurați DNS pentru rețelele mobile).", "install_devices_ios_list_2": "Alegeți Wi-Fi în meniul din stânga (este imposibil să configurați DNS pentru rețelele mobile).",
"install_devices_ios_list_3": "Tapați numele rețelei active curente.", "install_devices_ios_list_3": "Tapați numele rețelei active curente.",
"install_devices_ios_list_4": "În câmpul DNS, introduceți adresele serverului dvs. AdGuard Home.", "install_devices_ios_list_4": "În câmpul DNS, intrați adresele serverului dvs. AdGuard Home.",
"get_started": "Să începem", "get_started": "Să începem",
"next": "Următor", "next": "Următor",
"open_dashboard": "Deschideți Tabloul de bord", "open_dashboard": "Deschideți Tabloul de bord",
@ -302,10 +326,10 @@
"encryption_key_input": "Copiați/lipiți cheia dvs. privată PEM-codată pentru certificatul dvs. aici.", "encryption_key_input": "Copiați/lipiți cheia dvs. privată PEM-codată pentru certificatul dvs. aici.",
"encryption_enable": "Activați criptarea (HTTPS, DNS-over-HTTPS, și DNS-over-TLS)", "encryption_enable": "Activați criptarea (HTTPS, DNS-over-HTTPS, și DNS-over-TLS)",
"encryption_enable_desc": "Dacă este activată criptarea, interfața administrator AdGuard Home va lucra peste HTTPS, și serverul DNS va asculta pentru cereri peste DNS-over-HTTPS și DNS-over-TLS.", "encryption_enable_desc": "Dacă este activată criptarea, interfața administrator AdGuard Home va lucra peste HTTPS, și serverul DNS va asculta pentru cereri peste DNS-over-HTTPS și DNS-over-TLS.",
"encryption_chain_valid": "Lanțul de certificate valid", "encryption_chain_valid": "Lanț de certificate valid",
"encryption_chain_invalid": "Lanțul de certificate nevalid", "encryption_chain_invalid": "Lanț de certificate invalid",
"encryption_key_valid": "Aceasta este o cheie privată {{type}} validă", "encryption_key_valid": "Aceasta este o cheie privată {{type}} validă",
"encryption_key_invalid": "Aceasta este o cheie privată {{type}} nevalidă", "encryption_key_invalid": "Aceasta este o cheie privată {{type}} invalidă",
"encryption_subject": "Obiect", "encryption_subject": "Obiect",
"encryption_issuer": "Emitent", "encryption_issuer": "Emitent",
"encryption_hostnames": "Nume de host", "encryption_hostnames": "Nume de host",
@ -317,7 +341,7 @@
"form_error_equal": "Nu trebuie să fie egale", "form_error_equal": "Nu trebuie să fie egale",
"form_error_password": "Parolele nu corespund", "form_error_password": "Parolele nu corespund",
"reset_settings": "Resetare setări", "reset_settings": "Resetare setări",
"update_announcement": "AdGuard Home {{version}} este disponibil! <0>Faceți clic aici</0> pentru mai multe informații.", "update_announcement": "AdGuard Home {{version}} este disponibil! <0>Clicați aici</0> pentru mai multe informații.",
"setup_guide": "Ghid de instalare", "setup_guide": "Ghid de instalare",
"dns_addresses": "Adrese DNS", "dns_addresses": "Adrese DNS",
"dns_start": "Serverul DNS demarează", "dns_start": "Serverul DNS demarează",
@ -346,6 +370,7 @@
"form_enter_id": "Intrați identificator", "form_enter_id": "Intrați identificator",
"form_add_id": "Adăugați identificator", "form_add_id": "Adăugați identificator",
"form_client_name": "Intrați nume client", "form_client_name": "Intrați nume client",
"name": "Nume",
"client_global_settings": "Folosiți setări globale", "client_global_settings": "Folosiți setări globale",
"client_deleted": "Clientul \"{{key}}\" a fost șters cu succes", "client_deleted": "Clientul \"{{key}}\" a fost șters cu succes",
"client_added": "Clientul \"{{key}}\" a fost adăugat cu succes", "client_added": "Clientul \"{{key}}\" a fost adăugat cu succes",
@ -354,7 +379,7 @@
"client_confirm_delete": "Sunteți sigur că doriți să ștergeți clientul \"{{key}}\"?", "client_confirm_delete": "Sunteți sigur că doriți să ștergeți clientul \"{{key}}\"?",
"list_confirm_delete": "Sigur doriți să ștergeți această listă?", "list_confirm_delete": "Sigur doriți să ștergeți această listă?",
"auto_clients_title": "Clienți (runtime)", "auto_clients_title": "Clienți (runtime)",
"auto_clients_desc": "Date despre clienții folosite de AdGuard Home, dar care nu sunt stocate în configurație", "auto_clients_desc": "Date despre clienții care folosesc AdGuard Home, dar care nu sunt stocate în configurație",
"access_title": "Setări de acces", "access_title": "Setări de acces",
"access_desc": "Aici puteți configura regulile de acces pentru serverul DNS AdGuard Home.", "access_desc": "Aici puteți configura regulile de acces pentru serverul DNS AdGuard Home.",
"access_allowed_title": "Clienți autorizați", "access_allowed_title": "Clienți autorizați",
@ -362,20 +387,20 @@
"access_disallowed_title": "Clienți neautorizați", "access_disallowed_title": "Clienți neautorizați",
"access_disallowed_desc": "O listă de adrese CIDR sau IP. Dacă este configurat, AdGuard Home va elimina cererile de la aceste adrese IP.", "access_disallowed_desc": "O listă de adrese CIDR sau IP. Dacă este configurat, AdGuard Home va elimina cererile de la aceste adrese IP.",
"access_blocked_title": "Domenii blocate", "access_blocked_title": "Domenii blocate",
"access_blocked_desc": "Nu confundați acest lucru cu filtrele. AdGuard Home va bloca interogări DNS cu aceste domenii în întrebare. Aici puteți specifica exact numele de domeniu, wildcard și reguli-urlfilter, de ex. 'examplu.org', '*.examplu.org' sau '||exemplu.org^'.", "access_blocked_desc": "Nu confundați acest lucru cu filtrele. AdGuard Home va bloca interogări DNS cu aceste domenii în întrebare. Aici puteți specifica exact numele de domeniu, wildcard și reguli-urlfilter, de ex. 'exemplu.org', '*.exemplu.org' sau '||exemplu.org^'.",
"access_settings_saved": "Setările de acces au fost salvate cu succes", "access_settings_saved": "Setările de acces au fost salvate cu succes",
"updates_checked": "Actualizările au fost verificate cu succes", "updates_checked": "Actualizările au fost verificate cu succes",
"updates_version_equal": "AdGuard Home este la zi", "updates_version_equal": "AdGuard Home este la zi",
"check_updates_now": "Verificați actualizările acum", "check_updates_now": "Verificați actualizările acum",
"dns_privacy": "Confidențialitate DNS", "dns_privacy": "Confidențialitate DNS",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Folosiți stringul <1>{{address}}</1>.", "setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Folosiți stringul <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Utilizați stringul <1>{{address}}</1>.", "setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Folosiți stringul <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Rețineți că protocoalele DNS criptate sunt acceptate numai pe Android 9. Așadar, trebuie să instalați software suplimentar pentru alte sisteme de operare.</0><0>Iată o listă de software pe care o puteți utiliza.</0>", "setup_dns_privacy_3": "<0>Rețineți că protocoalele DNS criptate sunt acceptate numai pe Android 9. Așadar, trebuie să instalați programe suplimentare pentru alte sisteme de operare.</0><0>Iată o listă de software pe care o puteți utiliza.</0>",
"setup_dns_privacy_android_1": "Android 9 acceptă nativ DNS-over-TLS. Pentru a o configura, accesați Setări → Rețea și internet → Advanced → Private DNS și introduceți numele de domeniu acolo.", "setup_dns_privacy_android_1": "Android 9 acceptă nativ DNS-over-TLS. Pentru a-l configura, accesați Setări → Rețea și internet → Advanced → Private DNS și intrați numele de domeniu acolo.",
"setup_dns_privacy_android_2": "<0>AdGuard pentru Android</0> acceptă <1>DNS-over-HTTPS</1> și <1>DNS-over-TLS</1>.", "setup_dns_privacy_android_2": "<0>AdGuard pentru Android</0> acceptă <1>DNS-over-HTTPS</1> și <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> adaugă <1>DNS-over-HTTPS</1> suport pentru Android.", "setup_dns_privacy_android_3": "<0>Intra</0> adaugă <1>DNS-over-HTTPS</1> suport pentru Android.",
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> acceptă <1>DNS-over-HTTPS</1>, dar pentru a-l configura pentru a utiliza propriul server, va trebui să generezi un <2>DNS Stamp</2> pentru aceasta.", "setup_dns_privacy_ios_1": "<0>DNSCloak</0> acceptă <1>DNS-over-HTTPS</1>, dar pentru a-l configura pentru a utiliza propriul server, va trebui să generi un <2>DNS Stamp</2> pentru aceasta.",
"setup_dns_privacy_ios_2": "<0>AdGuard pentru iOS</0> acceptă instalarea<1>DNS-over-HTTPS</1> și <1>DNS-over-TLS</1>.", "setup_dns_privacy_ios_2": "<0>AdGuard pentru iOS</0> acceptă instalarea <1>DNS-over-HTTPS</1> și <1>DNS-over-TLS</1>.",
"setup_dns_privacy_other_title": "Alte implementări", "setup_dns_privacy_other_title": "Alte implementări",
"setup_dns_privacy_other_1": "AdGuard Home poate fi un client DNS sigur pe orice platformă.", "setup_dns_privacy_other_1": "AdGuard Home poate fi un client DNS sigur pe orice platformă.",
"setup_dns_privacy_other_2": "<0>dnsproxy</0> acceptă toate protocoalele DNS securizate cunoscute.", "setup_dns_privacy_other_2": "<0>dnsproxy</0> acceptă toate protocoalele DNS securizate cunoscute.",
@ -383,7 +408,7 @@
"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_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",
"rewrite_add": "Adăugați rescriere DNS", "rewrite_add": "Adăugați rescriere DNS",
"rewrite_not_found": "Nu s-au găsit rescrieri DNS", "rewrite_not_found": "Nu s-au găsit rescrieri DNS",
@ -394,11 +419,11 @@
"dns_rewrites": "Rescrieri DNS", "dns_rewrites": "Rescrieri DNS",
"form_domain": "Intrați un nume de domeniu sau wildcard", "form_domain": "Intrați un nume de domeniu sau wildcard",
"form_answer": "Intrați adresa IP sau numele de domeniu", "form_answer": "Intrați adresa IP sau numele de domeniu",
"form_error_domain_format": "Format de răspuns nevalid", "form_error_domain_format": "Format de răspuns invalid",
"form_error_answer_format": "Format de răspuns nevalid", "form_error_answer_format": "Format de răspuns invalid",
"configure": "Configurați", "configure": "Configurați",
"main_settings": "Setări principale", "main_settings": "Setări principale",
"block_services": "Blocare anumite servicii", "block_services": "Blochează anumite servicii",
"blocked_services": "Servicii blocate", "blocked_services": "Servicii blocate",
"blocked_services_desc": "Permite blocarea rapidă a site-urilor și serviciilor populare.", "blocked_services_desc": "Permite blocarea rapidă a site-urilor și serviciilor populare.",
"blocked_services_saved": "Serviciile blocate au fost salvate cu succes", "blocked_services_saved": "Serviciile blocate au fost salvate cu succes",
@ -422,11 +447,11 @@
"filter_added_successfully": "Filtrul a fost adăugat cu succes", "filter_added_successfully": "Filtrul a fost adăugat cu succes",
"filter_updated": "Filtrul a fost actualizat cu succes", "filter_updated": "Filtrul a fost actualizat cu succes",
"statistics_configuration": "Configurația statisticilor", "statistics_configuration": "Configurația statisticilor",
"statistics_retention": "Statistică retenții", "statistics_retention": "Păstrarea statisticilor",
"statistics_retention_desc": "Dacă reduceți valoarea intervalului, unele date vor fi pierdute", "statistics_retention_desc": "Dacă reduceți valoarea intervalului, unele date vor fi pierdute",
"statistics_clear": " Șterge statisticile", "statistics_clear": " Șterge statisticile",
"statistics_clear_confirm": "Sunteți sigur că doriți să ștergeți statisticile?", "statistics_clear_confirm": "Sunteți sigur că doriți să ștergeți statisticile?",
"statistics_retention_confirm": "Sunteți sigur că doriți să schimbați retenția statisticilor? Dacă reduceți valoarea intervalului, unele date vor fi pierdute", "statistics_retention_confirm": "Sunteți sigur că doriți să schimbați păstrarea statisticilor? Dacă reduceți valoarea intervalului, unele date vor fi pierdute",
"statistics_cleared": "Statisticile au fost șterse cu succes", "statistics_cleared": "Statisticile au fost șterse cu succes",
"interval_hours": "{{count}} oră", "interval_hours": "{{count}} oră",
"interval_hours_plural": "{{count}} ore", "interval_hours_plural": "{{count}} ore",
@ -445,6 +470,7 @@
"location": "Locația", "location": "Locația",
"orgname": "Numele organizației", "orgname": "Numele organizației",
"netname": "Numele rețelei", "netname": "Numele rețelei",
"network": "Rețea",
"descr": "Descriere", "descr": "Descriere",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Aflați mai multe</0> despre crearea propriilor liste hosts.", "filtering_rules_learn_more": "<0>Aflați mai multe</0> despre crearea propriilor liste hosts.",
@ -456,10 +482,10 @@
"disable_ipv6": "Dezactivați IPv6", "disable_ipv6": "Dezactivați IPv6",
"disable_ipv6_desc": "Dacă această opțiune este activată, toate interogările DNS pentru adrese IPv6 (tip AAAA) vor fi anulate.", "disable_ipv6_desc": "Dacă această opțiune este activată, toate interogările DNS pentru adrese IPv6 (tip AAAA) vor fi anulate.",
"fastest_addr": "Cea mai rapidă adresă IP", "fastest_addr": "Cea mai rapidă adresă IP",
"fastest_addr_desc": "Interogați toate serverele DNS și returnați cea mai rapidă adresă IP din răspunsuri", "fastest_addr_desc": "Interogările la toate serverele DNS întorc adresa IP cea mai rapidă din răspunsuri. Așteptarea răspunsului tuturor serverelor DNS face interogările DNS mai lente dar se ameliorează conectivitatea generală.",
"autofix_warning_text": "Dacă faceți clic pe \"Fix\", AdGuardHome va configura sistemul dvs. pentru a utiliza serverul DNS AdGuardHome.", "autofix_warning_text": "Dacă clicați pe \"Fix\", AdGuardHome va configura sistemul dvs. pentru a utiliza serverul DNS AdGuardHome.",
"autofix_warning_list": "Va efectua aceste sarcini: <0>Dezactivare sistem DNSStubListener</0> <0>Setare adresă server DNS la 127.0.0.1</0> <0>Înlocuire țintei legăturii simbolice a /etc/resolv.conf pentru /run/systemd/resolve/resolv.conf</0> <0>Oprire DNSStubListener (reîncărcare servici rezolvat prin sistem)</0>", "autofix_warning_list": "Va efectua aceste sarcini: <0>Dezactivare sistem DNSStubListener</0> <0>Setare adresă server DNS la 127.0.0.1</0> <0>Înlocuire link simbolic țintă /etc/resolv.conf cu /run/systemd/resolve/resolv.conf</0> <0>Oprire DNSStubListener (reîncărcare servici rezolvat prin sistem)</0>",
"autofix_warning_result": "Ca urmare, toate cererile DNS de la sistemul dvs. vor fi procesate în mod implicit de AdGuardHome.", "autofix_warning_result": "Ca urmare, toate cererile DNS ale sistemul dvs. vor fi procesate în mod implicit de AdGuardHome.",
"tags_title": "Etichete", "tags_title": "Etichete",
"tags_desc": "Puteți selecta etichetele care corespund clientului. Etichetele pot fi incluse în regulile de filtrare și vă permit să le aplicați mai exact. <0>Aflați mai multe</0>", "tags_desc": "Puteți selecta etichetele care corespund clientului. Etichetele pot fi incluse în regulile de filtrare și vă permit să le aplicați mai exact. <0>Aflați mai multe</0>",
"form_select_tags": "Selectați etichete client", "form_select_tags": "Selectați etichete client",
@ -489,5 +515,19 @@
"list_updated": "{{count}} listă actualizată", "list_updated": "{{count}} listă actualizată",
"list_updated_plural": "{{count}} liste actualizate", "list_updated_plural": "{{count}} liste actualizate",
"dnssec_enable": "Activați DNSSEC", "dnssec_enable": "Activați DNSSEC",
"dnssec_enable_desc": "Setați steagul DNSSEC pe interogările DNS de ieșire și verificați rezultatul (este necesar un resolver DNSSEC activat)" "dnssec_enable_desc": "Setați steagul DNSSEC pe interogările DNS de ieșire și verificați rezultatul (este necesar un resolver DNSSEC activat)",
"validated_with_dnssec": "Validat cu DNSSEC",
"show_all_responses": "Toate răspunsurile",
"show_blocked_responses": "Blocat",
"show_whitelisted_responses": "Pe lista albă",
"show_processed_responses": "Tratat",
"blocked_safebrowsing": "Blocat de Navigarea securitară",
"blocked_adult_websites": "Site-uri pentru adulți blocate",
"blocked_threats": "Amenințări blocate",
"allowed": "Permise",
"filtered": "Filtrate",
"rewritten": "Rescrise",
"safe_search": "Căutare sigură",
"blocklist": "Lista neagră",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "Вы можете указать DNS-сервер <0>для конкретного домена(-ов)</0>", "example_upstream_reserved": "Вы можете указать DNS-сервер <0>для конкретного домена(-ов)</0>",
"upstream_parallel": "Использовать параллельные запросы ко всем серверам одновременно для ускорения обработки запроса", "upstream_parallel": "Использовать параллельные запросы ко всем серверам одновременно для ускорения обработки запроса",
"parallel_requests": "Параллельные запросы", "parallel_requests": "Параллельные запросы",
"load_balancing": "Распределение нагрузки\n",
"load_balancing_desc": "Запрашивайте по одному серверу за раз. AdGuard Home будет использовать случайный алгоритм для выбора сервера, так что самый быстрый сервер будет использоваться чаще.",
"bootstrap_dns": "Bootstrap DNS-серверы", "bootstrap_dns": "Bootstrap DNS-серверы",
"bootstrap_dns_desc": "Bootstrap DNS-серверы используются для поиска IP-адресов DoH/DoT серверов, которые вы указали.", "bootstrap_dns_desc": "Bootstrap DNS-серверы используются для поиска IP-адресов DoH/DoT серверов, которые вы указали.",
"check_dhcp_servers": "Проверить DHCP-серверы", "check_dhcp_servers": "Проверить DHCP-серверы",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Выбрать интерфейс DHCP", "dhcp_interface_select": "Выбрать интерфейс DHCP",
"dhcp_hardware_address": "Аппаратный адрес", "dhcp_hardware_address": "Аппаратный адрес",
"dhcp_ip_addresses": "IP-адреса", "dhcp_ip_addresses": "IP-адреса",
"ip": "IP-адрес",
"dhcp_table_hostname": "Имя хоста", "dhcp_table_hostname": "Имя хоста",
"dhcp_table_expires": "Истекает", "dhcp_table_expires": "Истекает",
"dhcp_warning": "Если вы все равно хотите включить DHCP-сервер, убедитесь, что в сети больше нет активных DHCP-серверов. Иначе это может сломать доступ в сеть для подключенных устройств!", "dhcp_warning": "Если вы все равно хотите включить DHCP-сервер, убедитесь, что в сети больше нет активных DHCP-серверов. Иначе это может сломать доступ в сеть для подключенных устройств!",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "Не найдено статических аренд DHCP", "dhcp_static_leases_not_found": "Не найдено статических аренд DHCP",
"dhcp_add_static_lease": "Добавить статическую аренду", "dhcp_add_static_lease": "Добавить статическую аренду",
"dhcp_reset": "Вы уверены, что хотите сбросить настройки DHCP?", "dhcp_reset": "Вы уверены, что хотите сбросить настройки DHCP?",
"country": "Страна",
"city": "Город",
"delete_confirm": "Are you sure you want to delete \"{{key}}\"?", "delete_confirm": "Are you sure you want to delete \"{{key}}\"?",
"form_enter_hostname": "Введите имя хоста", "form_enter_hostname": "Введите имя хоста",
"error_details": "Детализация ошибки", "error_details": "Детализация ошибки",
"response_details": "Детали ответа",
"request_details": "Детали запроса",
"client_details": "Информация о клиенте",
"details": "Детали",
"back": "Назад", "back": "Назад",
"dashboard": "Панель управления", "dashboard": "Панель управления",
"settings": "Настройки", "settings": "Настройки",
"filters": "Фильтры", "filters": "Фильтры",
"filter": "Фильтр",
"query_log": "Журнал", "query_log": "Журнал",
"compact": "Компактный",
"nothing_found": "Ничего не найдено",
"faq": "FAQ", "faq": "FAQ",
"version": "версия", "version": "версия",
"address": "адрес", "address": "Адрес",
"protocol": "Протокол",
"on": "Вкл", "on": "Вкл",
"off": "Выкл", "off": "Выкл",
"copyright": "Все права защищены", "copyright": "Все права защищены",
@ -132,8 +145,10 @@
"rules_count_table_header": "Количество правил:", "rules_count_table_header": "Количество правил:",
"last_time_updated_table_header": "Последнее обновление", "last_time_updated_table_header": "Последнее обновление",
"actions_table_header": "Действия", "actions_table_header": "Действия",
"request_table_header": "Запрос",
"edit_table_action": "Редактировать", "edit_table_action": "Редактировать",
"delete_table_action": "Удалить", "delete_table_action": "Удалить",
"elapsed": "Затрачено",
"filters_and_hosts_hint": "AdGuard Home распознает базовые правила блокировки и синтаксис файлов hosts.", "filters_and_hosts_hint": "AdGuard Home распознает базовые правила блокировки и синтаксис файлов hosts.",
"no_blocklist_added": "Черные списки не добавлены", "no_blocklist_added": "Черные списки не добавлены",
"no_whitelist_added": "Белые списки не добавлены", "no_whitelist_added": "Белые списки не добавлены",
@ -170,12 +185,15 @@
"updated_upstream_dns_toast": "Upstream DNS-серверы обновлены", "updated_upstream_dns_toast": "Upstream DNS-серверы обновлены",
"dns_test_ok_toast": "Указанные серверы DNS работают корректно", "dns_test_ok_toast": "Указанные серверы DNS работают корректно",
"dns_test_not_ok_toast": "Сервер \"{{key}}\": невозможно использовать, проверьте правильность написания", "dns_test_not_ok_toast": "Сервер \"{{key}}\": невозможно использовать, проверьте правильность написания",
"unblock_btn": "Разблокировать", "unblock": "Разблокировать",
"block_btn": "Заблокировать", "block": "Заблокировать",
"time_table_header": "Время", "time_table_header": "Время",
"date": "Дата",
"domain_name_table_header": "Домен", "domain_name_table_header": "Домен",
"domain_or_client": "Домен или клиент",
"type_table_header": "Тип", "type_table_header": "Тип",
"response_table_header": "Ответ", "response_table_header": "Ответ",
"response_code": "Код ответа",
"client_table_header": "Клиент", "client_table_header": "Клиент",
"empty_response_status": "Пусто", "empty_response_status": "Пусто",
"show_all_filter_type": "Показать все", "show_all_filter_type": "Показать все",
@ -194,6 +212,7 @@
"query_log_filtered": "Отфильтровано с помощью {{filter}}", "query_log_filtered": "Отфильтровано с помощью {{filter}}",
"query_log_confirm_clear": "Вы уверены, что хотите очистить весь журнал запросов?", "query_log_confirm_clear": "Вы уверены, что хотите очистить весь журнал запросов?",
"query_log_cleared": "Журнал запросов успешно очищен", "query_log_cleared": "Журнал запросов успешно очищен",
"query_log_updated": "Журнал запросов успешно обновлен",
"query_log_clear": "Очистить журнал запросов", "query_log_clear": "Очистить журнал запросов",
"query_log_retention": "Сохранение журнала запросов", "query_log_retention": "Сохранение журнала запросов",
"query_log_enable": "Включить журнал", "query_log_enable": "Включить журнал",
@ -211,6 +230,9 @@
"custom_ip": "Свой IP", "custom_ip": "Свой IP",
"blocking_ipv4": "Блокировка IPv4", "blocking_ipv4": "Блокировка IPv4",
"blocking_ipv6": "Блокировка IPv6", "blocking_ipv6": "Блокировка IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"plain_dns": "Нешифрованный DNS",
"form_enter_rate_limit": "Введите rate limit", "form_enter_rate_limit": "Введите rate limit",
"rate_limit": "Rate limit", "rate_limit": "Rate limit",
"edns_enable": "Включить отправку EDNS Client Subnet", "edns_enable": "Включить отправку EDNS Client Subnet",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "Нулевой IP: Отвечает с нулевым IP-адресом (0.0.0.0 для A; :: для AAAA)", "blocking_mode_null_ip": "Нулевой IP: Отвечает с нулевым IP-адресом (0.0.0.0 для A; :: для AAAA)",
"blocking_mode_custom_ip": "Пользовательский IP: Отвечает с вручную настроенным IP-адресом", "blocking_mode_custom_ip": "Пользовательский IP: Отвечает с вручную настроенным IP-адресом",
"upstream_dns_client_desc": "Если оставить поле пустым, AdGuard Home будет обращаться к серверам, указанным в <0>настройках DNS</0>.", "upstream_dns_client_desc": "Если оставить поле пустым, AdGuard Home будет обращаться к серверам, указанным в <0>настройках DNS</0>.",
"tracker_source": "Источник трекинга",
"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": "Известный трекер",
"install_welcome_title": "Добро пожаловать в AdGuard Home!", "install_welcome_title": "Добро пожаловать в AdGuard Home!",
"install_welcome_desc": "AdGuard Home это DNS-сервер, блокирующий рекламу и трекинг. Его цель дать вам возможность контролировать всю вашу сеть и все подключенные устройства. Он не требует установки клиентских программ.", "install_welcome_desc": "AdGuard Home это DNS-сервер, блокирующий рекламу и трекинг. Его цель дать вам возможность контролировать всю вашу сеть и все подключенные устройства. Он не требует установки клиентских программ.",
"install_settings_title": "Веб-интерфейс администрирования", "install_settings_title": "Веб-интерфейс администрирования",
@ -257,7 +281,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": "Найдите настройки DHCP или DNS. Найдите буквы \"DNS\" рядом с текстовым полем, в которое можно ввести два или три ряда цифр, разделенных на 4 группы от одной до трёх цифр.", "install_devices_router_list_2": "Найдите настройки DHCP или DNS. Найдите буквы \"DNS\" рядом с текстовым полем, в которое можно ввести два или три ряда цифр, разделенных на 4 группы от одной до трёх цифр.",
"install_devices_router_list_3": "Введите туда адрес вашего AdGuard Home.", "install_devices_router_list_3": "Введите туда адрес вашего AdGuard Home.",
"install_devices_router_list_4": "Вы не можете установить собственный DNS-сервер на некоторых типах маршрутизаторов. В этом случае может помочь настройка AdGuard Home в качестве DHCP-сервера. В противном случае вам следует обратиться к руководству по настройке DNS-серверов для вашей конкретной модели маршрутизатора.", "install_devices_router_list_4": "Вы не можете установить собственный DNS-сервер на некоторых типах маршрутизаторов. В этом случае может помочь настройка AdGuard Home в качестве <0>DHCP-сервера</0>. В противном случае вам следует обратиться к руководству по настройке DNS-серверов для вашей конкретной модели маршрутизатора.",
"install_devices_windows_list_1": "Откройте Панель управления через меню \"Пуск\" или через поиск Windows.", "install_devices_windows_list_1": "Откройте Панель управления через меню \"Пуск\" или через поиск Windows.",
"install_devices_windows_list_2": "Перейдите в \"Сеть и интернет\", а затем в \"Центр управления сетями и общим доступом\"", "install_devices_windows_list_2": "Перейдите в \"Сеть и интернет\", а затем в \"Центр управления сетями и общим доступом\"",
"install_devices_windows_list_3": "В левой стороне экрана найдите \"Изменение параметров адаптера\" и кликните по нему.", "install_devices_windows_list_3": "В левой стороне экрана найдите \"Изменение параметров адаптера\" и кликните по нему.",
@ -346,6 +370,7 @@
"form_enter_id": "Введите идентификатор", "form_enter_id": "Введите идентификатор",
"form_add_id": "Добавить идентификатор", "form_add_id": "Добавить идентификатор",
"form_client_name": "Введите имя клиента", "form_client_name": "Введите имя клиента",
"name": "Имя",
"client_global_settings": "Использовать глобальные настройки", "client_global_settings": "Использовать глобальные настройки",
"client_deleted": "Клиент \"{{key}}\" успешно удален", "client_deleted": "Клиент \"{{key}}\" успешно удален",
"client_added": "Клиент \"{{key}}\" успешно добавлен", "client_added": "Клиент \"{{key}}\" успешно добавлен",
@ -445,6 +470,7 @@
"location": "Местоположение", "location": "Местоположение",
"orgname": "Название организации", "orgname": "Название организации",
"netname": "Название сети", "netname": "Название сети",
"network": "Сеть",
"descr": "Описание", "descr": "Описание",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Узнайте больше</0> о создании собственных списков блокировки хостов.", "filtering_rules_learn_more": "<0>Узнайте больше</0> о создании собственных списков блокировки хостов.",
@ -489,5 +515,19 @@
"list_updated": "Обновлен {{count}} список", "list_updated": "Обновлен {{count}} список",
"list_updated_plural": "Обновлено списков: {{count}}", "list_updated_plural": "Обновлено списков: {{count}}",
"dnssec_enable": "Включить DNSSEC", "dnssec_enable": "Включить DNSSEC",
"dnssec_enable_desc": "Установите флаг DNSSEC в исходящих DNS-запросах и проверьте результат (требуется резолвер с поддержкой DNSSEC)" "dnssec_enable_desc": "Установите флаг DNSSEC в исходящих DNS-запросах и проверьте результат (требуется резолвер с поддержкой DNSSEC)",
"validated_with_dnssec": "Подтверждено с помощью DNSSEC",
"show_all_responses": "Все ответы",
"show_blocked_responses": "Blocked",
"show_whitelisted_responses": "В белом списке",
"show_processed_responses": "Обработан",
"blocked_safebrowsing": "Заблокировано согласно базе данных Safebrowsing",
"blocked_adult_websites": "Заблокированные \"взрослые\" сайты",
"blocked_threats": "Заблокировано угроз",
"allowed": "Разрешенные",
"filtered": "Отфильтрованные",
"rewritten": "Переписанные",
"safe_search": "Безопасный поиск",
"blocklist": "Черный список",
"milliseconds_abbreviation": "мс"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "Môžete zadať DNS upstream <0>pre konkrétnu doménu (domény)</0>", "example_upstream_reserved": "Môžete zadať DNS upstream <0>pre konkrétnu doménu (domény)</0>",
"upstream_parallel": "Používať paralelné dopyty na zrýchlenie súčasným dopytovaním všetkých serverov", "upstream_parallel": "Používať paralelné dopyty na zrýchlenie súčasným dopytovaním všetkých serverov",
"parallel_requests": "Paralelné dopyty", "parallel_requests": "Paralelné dopyty",
"load_balancing": "Vyrovnávanie záťaže",
"load_balancing_desc": "Dopytujte jeden server súčasne. AdGuard Home použije na výber servera vážený náhodný algoritmus, aby sa najrýchlejší server používal častejšie.",
"bootstrap_dns": "Bootstrap DNS servery", "bootstrap_dns": "Bootstrap DNS servery",
"bootstrap_dns_desc": "Bootstrap DNS servery sa používajú na rozlíšenie IP adries DoH/DoT rezolverov, ktoré zadáte ako upstreams.", "bootstrap_dns_desc": "Bootstrap DNS servery sa používajú na rozlíšenie IP adries DoH/DoT rezolverov, ktoré zadáte ako upstreams.",
"check_dhcp_servers": "Skontrolovať DHCP servery", "check_dhcp_servers": "Skontrolovať DHCP servery",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Zvoľte DHCP rozhranie", "dhcp_interface_select": "Zvoľte DHCP rozhranie",
"dhcp_hardware_address": "Hardware adresa", "dhcp_hardware_address": "Hardware adresa",
"dhcp_ip_addresses": "IP adresy", "dhcp_ip_addresses": "IP adresy",
"ip": "IP",
"dhcp_table_hostname": "Meno hostiteľa", "dhcp_table_hostname": "Meno hostiteľa",
"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!",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "Nebol nájdený žiadny statický DHCP prenájom", "dhcp_static_leases_not_found": "Nebol nájdený žiadny statický DHCP prenájom",
"dhcp_add_static_lease": "Pridať statický prenájom", "dhcp_add_static_lease": "Pridať statický prenájom",
"dhcp_reset": "Naozaj chcete obnoviť konfiguráciu DHCP?", "dhcp_reset": "Naozaj chcete obnoviť konfiguráciu DHCP?",
"country": "Krajina",
"city": "Mesto",
"delete_confirm": "Naozaj chcete vymazať \"{{key}}\"?", "delete_confirm": "Naozaj chcete vymazať \"{{key}}\"?",
"form_enter_hostname": "Zadajte meno hostiteľa", "form_enter_hostname": "Zadajte meno hostiteľa",
"error_details": "Podrobnosti chyby", "error_details": "Podrobnosti chyby",
"response_details": "Podrobnosti odpovede",
"request_details": "Podrobnosti požiadavky",
"client_details": "Podrobnosti klienta",
"details": "Podrobnosti",
"back": "Naspäť", "back": "Naspäť",
"dashboard": "Riadiaci panel", "dashboard": "Riadiaci panel",
"settings": "Nastavenia", "settings": "Nastavenia",
"filters": "Filtre", "filters": "Filtre",
"filter": "Filter",
"query_log": "Denník dopytov", "query_log": "Denník dopytov",
"compact": "Kompaktný",
"nothing_found": "Nič sa nenašlo",
"faq": "FAQ", "faq": "FAQ",
"version": "Verzia", "version": "Verzia",
"address": "adresa", "address": "Adresa",
"protocol": "Protokol",
"on": "ZAP.", "on": "ZAP.",
"off": "VYP.", "off": "VYP.",
"copyright": "Copyright", "copyright": "Copyright",
@ -132,8 +145,10 @@
"rules_count_table_header": "Počet pravidiel", "rules_count_table_header": "Počet pravidiel",
"last_time_updated_table_header": "Posledná aktualizácia", "last_time_updated_table_header": "Posledná aktualizácia",
"actions_table_header": "Akcie", "actions_table_header": "Akcie",
"request_table_header": "Dopyt",
"edit_table_action": "Upraviť", "edit_table_action": "Upraviť",
"delete_table_action": "Vymazať", "delete_table_action": "Vymazať",
"elapsed": "Uplynuté",
"filters_and_hosts_hint": "AdGuard Home pozná základné pravidlá adblock a syntax hosts súborov.", "filters_and_hosts_hint": "AdGuard Home pozná základné pravidlá adblock a syntax hosts súborov.",
"no_blocklist_added": "Nebol pridaný žiaden zoznam blokovaných DNS", "no_blocklist_added": "Nebol pridaný žiaden zoznam blokovaných DNS",
"no_whitelist_added": "Nebol pridaný žiaden zoznam povolených DNS", "no_whitelist_added": "Nebol pridaný žiaden zoznam povolených DNS",
@ -170,12 +185,15 @@
"updated_upstream_dns_toast": "Aktualizované upstream DNS servery", "updated_upstream_dns_toast": "Aktualizované upstream DNS servery",
"dns_test_ok_toast": "Špecifikované DNS servery pracujú korektne", "dns_test_ok_toast": "Špecifikované DNS servery pracujú korektne",
"dns_test_not_ok_toast": "Server \"{{key}}\": nemohol byť použitý, skontrolujte, či ste ho správne napísali", "dns_test_not_ok_toast": "Server \"{{key}}\": nemohol byť použitý, skontrolujte, či ste ho správne napísali",
"unblock_btn": "Odblokovať", "unblock": "Odblokovať",
"block_btn": "Zablokovať", "block": "Blokovať",
"time_table_header": "Čas", "time_table_header": "Čas",
"date": "Dátum",
"domain_name_table_header": "Meno domény", "domain_name_table_header": "Meno domény",
"domain_or_client": "Doména alebo klient",
"type_table_header": "Typ", "type_table_header": "Typ",
"response_table_header": "Odozva", "response_table_header": "Odozva",
"response_code": "Kód odozvy",
"client_table_header": "Klient", "client_table_header": "Klient",
"empty_response_status": "Vyčistiť", "empty_response_status": "Vyčistiť",
"show_all_filter_type": "Zobraziť všetko", "show_all_filter_type": "Zobraziť všetko",
@ -194,6 +212,7 @@
"query_log_filtered": "Vyfiltrované pomocou {{filter}}", "query_log_filtered": "Vyfiltrované pomocou {{filter}}",
"query_log_confirm_clear": "Naozaj chcete vymazať celý denník dopytov?", "query_log_confirm_clear": "Naozaj chcete vymazať celý denník dopytov?",
"query_log_cleared": "Denník dopytov bol úspešne vymazaný", "query_log_cleared": "Denník dopytov bol úspešne vymazaný",
"query_log_updated": "Denník dopytov bol úspešne aktualizovaný",
"query_log_clear": "Vymazať denníky dopytov", "query_log_clear": "Vymazať denníky dopytov",
"query_log_retention": "Obdobie záznamu denníka dopytov", "query_log_retention": "Obdobie záznamu denníka dopytov",
"query_log_enable": "Zapnúť denník", "query_log_enable": "Zapnúť denník",
@ -211,6 +230,9 @@
"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",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"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",
"edns_enable": "Povoliť klientsku podsiete EDNS", "edns_enable": "Povoliť klientsku podsiete EDNS",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "Null IP: Odpoveď s nulovou IP adresou (0.0.0.0 pre A; :: pre AAAA)", "blocking_mode_null_ip": "Null IP: Odpoveď s nulovou IP adresou (0.0.0.0 pre A; :: pre AAAA)",
"blocking_mode_custom_ip": "Vlastná IP adresa: Odpovedzte s manuálne nastavenou IP adresou", "blocking_mode_custom_ip": "Vlastná IP adresa: Odpovedzte s manuálne nastavenou IP adresou",
"upstream_dns_client_desc": "Ak ponecháte toto pole prázdne, AdGuard Home použije servery nakonfigurované v <0>nastaveniach DNS</0>.", "upstream_dns_client_desc": "Ak ponecháte toto pole prázdne, AdGuard Home použije servery nakonfigurované v <0>nastaveniach DNS</0>.",
"tracker_source": "Zdroj sledovania",
"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", "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č",
"install_welcome_title": "Vitajte na stránkach AdGuard Home!", "install_welcome_title": "Vitajte na stránkach AdGuard Home!",
"install_welcome_desc": "Doména AdGuard Home je celosieťový DNS server pre blokovanie reklám a sledovačov. Jeho cieľom je, aby ste ovládali celú Vašu sieť a všetky Vaše zariadenia, pričom sa nevyžaduje použitie akéhokoľvek programu na strane klienta.", "install_welcome_desc": "Doména AdGuard Home je celosieťový DNS server pre blokovanie reklám a sledovačov. Jeho cieľom je, aby ste ovládali celú Vašu sieť a všetky Vaše zariadenia, pričom sa nevyžaduje použitie akéhokoľvek programu na strane klienta.",
"install_settings_title": "Administrátorské webové rozhranie", "install_settings_title": "Administrátorské webové rozhranie",
@ -257,7 +281,7 @@
"install_devices_router_list_1": "Otvorte predvoľby Vášho smerovača. Zvyčajne ho môžete získať z prehliadača prostredníctvom adresy URL (napríklad http://192.168.0.1/ alebo http://192.168.1.1/). Možno bude potrebné zadať heslo. Ak si to nepamätáte, heslo môžete často obnoviť stlačením tlačidla na samotnom smerovači. Niektoré smerovače vyžadujú konkrétnu aplikáciu, ktorá by v takom prípade mala byť už nainštalovaná na Vašom počítači alebo telefóne.", "install_devices_router_list_1": "Otvorte predvoľby Vášho smerovača. Zvyčajne ho môžete získať z prehliadača prostredníctvom adresy URL (napríklad http://192.168.0.1/ alebo http://192.168.1.1/). Možno bude potrebné zadať heslo. Ak si to nepamätáte, heslo môžete často obnoviť stlačením tlačidla na samotnom smerovači. Niektoré smerovače vyžadujú konkrétnu aplikáciu, ktorá by v takom prípade mala byť už nainštalovaná na Vašom počítači alebo telefóne.",
"install_devices_router_list_2": "Nájdite nastavenia DHCP/DNS. Hľadajte skratku DNS vedľa poľa, ktoré umožňuje vložiť dve alebo tri sady čísel, každé rozdelené do štyroch skupín s jedným až tromi číslicami.", "install_devices_router_list_2": "Nájdite nastavenia DHCP/DNS. Hľadajte skratku DNS vedľa poľa, ktoré umožňuje vložiť dve alebo tri sady čísel, každé rozdelené do štyroch skupín s jedným až tromi číslicami.",
"install_devices_router_list_3": "Zadajte tam adresy Vášho AdGuard Home servera.", "install_devices_router_list_3": "Zadajte tam adresy Vášho AdGuard Home servera.",
"install_devices_router_list_4": "Na niektorých typoch smerovačov nemôžete nastaviť vlastný DNS server. V takom prípade môže pomôcť, ak nastavíte AdGuard Home ako DHCP server. V opačnom prípade by ste mali vyhľadať príručku, ako prispôsobiť DNS servery konkrétnemu modelu smerovača.", "install_devices_router_list_4": "Na niektorých typoch smerovačov nemôžete nastaviť vlastný DNS server. V takom prípade môže pomôcť, ak nastavíte domovskú stránku AdGuard ako <0>DHCP server</0>. V opačnom prípade by ste mali vyhľadať príručku, ako prispôsobiť servery DNS konkrétnemu modelu smerovača.",
"install_devices_windows_list_1": "Otvorte panel Nastavenia cez menu Štart alebo vyhľadávanie Windows.", "install_devices_windows_list_1": "Otvorte panel Nastavenia cez menu Štart alebo vyhľadávanie Windows.",
"install_devices_windows_list_2": "Prejdite do kategórie Sieť a internet a potom do Centra sietí a zdieľania.", "install_devices_windows_list_2": "Prejdite do kategórie Sieť a internet a potom do Centra sietí a zdieľania.",
"install_devices_windows_list_3": "Vyhľadajte položku Zmeniť možnosti adaptéra a kliknite na ňu", "install_devices_windows_list_3": "Vyhľadajte položku Zmeniť možnosti adaptéra a kliknite na ňu",
@ -346,6 +370,7 @@
"form_enter_id": "Zadajte identifikátor", "form_enter_id": "Zadajte identifikátor",
"form_add_id": "Pridajte identifikátor", "form_add_id": "Pridajte identifikátor",
"form_client_name": "Zadajte meno klienta", "form_client_name": "Zadajte meno klienta",
"name": "Meno",
"client_global_settings": "Použiť globálne nastavenia", "client_global_settings": "Použiť globálne nastavenia",
"client_deleted": "\"{{key}}\" klienta bol úspešne vymazaný", "client_deleted": "\"{{key}}\" klienta bol úspešne vymazaný",
"client_added": "\"{{key}}\" klienta bol úspešne pridaný", "client_added": "\"{{key}}\" klienta bol úspešne pridaný",
@ -445,6 +470,7 @@
"location": "Poloha", "location": "Poloha",
"orgname": "Meno organizácie", "orgname": "Meno organizácie",
"netname": "Meno siete", "netname": "Meno siete",
"network": "Sieť",
"descr": "Popis", "descr": "Popis",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Dozvedieť sa viac</0> o tvorbe vlastných zoznamov hostiteľov.", "filtering_rules_learn_more": "<0>Dozvedieť sa viac</0> o tvorbe vlastných zoznamov hostiteľov.",
@ -456,7 +482,7 @@
"disable_ipv6": "Vypnúť IPv6", "disable_ipv6": "Vypnúť IPv6",
"disable_ipv6_desc": "Ak je táto funkcia zapnutá, všetky dotazy DNS na adresy IPv6 (typ AAAA) budú zrušené.", "disable_ipv6_desc": "Ak je táto funkcia zapnutá, všetky dotazy DNS na adresy IPv6 (typ AAAA) budú zrušené.",
"fastest_addr": "Najrýchlejšia IP adresa", "fastest_addr": "Najrýchlejšia IP adresa",
"fastest_addr_desc": "Dopytovať všetky DNS servery a vrátiť najrýchlejšiu IP adresu zo všetkých odpovedí", "fastest_addr_desc": "Dopytovať všetky servery DNS a vrátiť najrýchlejšiu IP adresu zo všetkých odpovedí. Toto spomalí dotazy DNS, pretože musíme čakať na odpovede zo všetkých serverov DNS, ale zlepší sa celkové pripojenie.",
"autofix_warning_text": "Ak kliknete na „Opraviť“, AdGuardHome nakonfiguruje Váš systém tak, aby používal DNS server AdGuardHome.", "autofix_warning_text": "Ak kliknete na „Opraviť“, AdGuardHome nakonfiguruje Váš systém tak, aby používal DNS server AdGuardHome.",
"autofix_warning_list": "Bude vykonávať tieto úlohy: <0>Deaktivovať systém DNSStubListener</0> <0>Nastaviť adresu servera DNS na 127.0.0.1</0> <0>Nahradiť cieľový symbolický odkaz /etc/resolv.conf na /run/systemd/resolve/resolv.conf</0> <0>Zastaviť službu DNSStubListener (znova načítať službu systemd-resolved)</0>", "autofix_warning_list": "Bude vykonávať tieto úlohy: <0>Deaktivovať systém DNSStubListener</0> <0>Nastaviť adresu servera DNS na 127.0.0.1</0> <0>Nahradiť cieľový symbolický odkaz /etc/resolv.conf na /run/systemd/resolve/resolv.conf</0> <0>Zastaviť službu DNSStubListener (znova načítať službu systemd-resolved)</0>",
"autofix_warning_result": "Výsledkom bude, že všetky DNS dopyty z Vášho systému budú štandardne spracované službou AdGuard Home.", "autofix_warning_result": "Výsledkom bude, že všetky DNS dopyty z Vášho systému budú štandardne spracované službou AdGuard Home.",
@ -489,5 +515,19 @@
"list_updated": "{{count}} zoznam aktualizovaný", "list_updated": "{{count}} zoznam aktualizovaný",
"list_updated_plural": "{{count}} zoznamov aktualizovaných", "list_updated_plural": "{{count}} zoznamov aktualizovaných",
"dnssec_enable": "Zapnúť DNSSEC", "dnssec_enable": "Zapnúť DNSSEC",
"dnssec_enable_desc": "Nastavte príznak DNSSEC v nasledujúcich DNS dopytoch a skontrolujte výsledok (je potrebný prekladač so zapnutým DNSSEC)" "dnssec_enable_desc": "Nastavte príznak DNSSEC v nasledujúcich DNS dopytoch a skontrolujte výsledok (je potrebný prekladač so zapnutým DNSSEC)",
"validated_with_dnssec": "Overené pomocou DNSSEC",
"show_all_responses": "Všetky odpovede",
"show_blocked_responses": "Zablokované",
"show_whitelisted_responses": "Obsiahnuté v bielej listine",
"show_processed_responses": "Spracované",
"blocked_safebrowsing": "Zablokované modulom Bezpečné prehliadanie",
"blocked_adult_websites": "Zablokovaná stránka pre dospelých",
"blocked_threats": "Zablokované hrozby",
"allowed": "Povolené",
"filtered": "Filtrované",
"rewritten": "Prepísané",
"safe_search": "Bezpečné vyhľadávanie",
"blocklist": "Zoznam blokovaní",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "lahko določite nazgornji DNS <0>za določene domene</0>", "example_upstream_reserved": "lahko določite nazgornji DNS <0>za določene domene</0>",
"upstream_parallel": "Uporabite vzporedne zahteve za pospešitev reševanja s hkratnim poizvedovanjem vseh gorvodnih strežnikov", "upstream_parallel": "Uporabite vzporedne zahteve za pospešitev reševanja s hkratnim poizvedovanjem vseh gorvodnih strežnikov",
"parallel_requests": "Vzporedne zahteve", "parallel_requests": "Vzporedne zahteve",
"load_balancing": "Uravnavanje obremenitve",
"load_balancing_desc": "Poizvedujte po en strežnik. AdGuard Home bo uporabil uteženi naključni algoritem za izbiro strežnika, tako da bo najhitrejši strežnik uporabljen pogosteje.",
"bootstrap_dns": "Zagonski DNS strežniki", "bootstrap_dns": "Zagonski DNS strežniki",
"bootstrap_dns_desc": "Zagonski DNS strežniki se uporabljajo za razreševanje IP naslovov DoH/DoT reševalcev, ki jih določite kot navzgornje.", "bootstrap_dns_desc": "Zagonski DNS strežniki se uporabljajo za razreševanje IP naslovov DoH/DoT reševalcev, ki jih določite kot navzgornje.",
"check_dhcp_servers": "Preveri strežnike DHCP", "check_dhcp_servers": "Preveri strežnike DHCP",
@ -37,6 +39,7 @@
"dhcp_interface_select": "Izberite DHCP vmesnik", "dhcp_interface_select": "Izberite DHCP vmesnik",
"dhcp_hardware_address": "Naslov strojne opreme", "dhcp_hardware_address": "Naslov strojne opreme",
"dhcp_ip_addresses": "IP naslovi", "dhcp_ip_addresses": "IP naslovi",
"ip": "IP",
"dhcp_table_hostname": "Ime gostitelja", "dhcp_table_hostname": "Ime gostitelja",
"dhcp_table_expires": "Poteče", "dhcp_table_expires": "Poteče",
"dhcp_warning": "Če želite omogočiti DHCP strežnik, prepričajte se, da v vašem omrežju ni drugega aktivnega strežnika DHCP. V nasprotnem primeru lahko ta prekine internet za povezane naprave!", "dhcp_warning": "Če želite omogočiti DHCP strežnik, prepričajte se, da v vašem omrežju ni drugega aktivnega strežnika DHCP. V nasprotnem primeru lahko ta prekine internet za povezane naprave!",
@ -49,17 +52,25 @@
"dhcp_static_leases_not_found": "Ni najdenih statičnih najemov DHCP", "dhcp_static_leases_not_found": "Ni najdenih statičnih najemov DHCP",
"dhcp_add_static_lease": "Dodaj statičen najem", "dhcp_add_static_lease": "Dodaj statičen najem",
"dhcp_reset": "Ali ste prepričani, da želite ponastaviti konfiguracijo DHCP?", "dhcp_reset": "Ali ste prepričani, da želite ponastaviti konfiguracijo DHCP?",
"country": "Dežela",
"city": "Mesto",
"delete_confirm": "Ali ste prepričani, da želite izbrisati \"{{key}}\"?", "delete_confirm": "Ali ste prepričani, da želite izbrisati \"{{key}}\"?",
"form_enter_hostname": "Vnesite ime gostitelja", "form_enter_hostname": "Vnesite ime gostitelja",
"error_details": "Podrobnosti o napaki", "error_details": "Podrobnosti o napaki",
"response_details": "Podrobnosti o odzivu",
"request_details": "Podrobnosti o zahtevi",
"client_details": "Podatki o odjemalcu",
"details": "Podrobnosti",
"back": "Nazaj", "back": "Nazaj",
"dashboard": "Nadzorna plošča", "dashboard": "Nadzorna plošča",
"settings": "Nastavitve", "settings": "Nastavitve",
"filters": "Filtri", "filters": "Filtri",
"filter": "Filtriraj",
"query_log": "Dnevnik poizvedb", "query_log": "Dnevnik poizvedb",
"faq": "Pogosta vprašanja in odgovori (FAQ)", "faq": "Pogosta vprašanja in odgovori (FAQ)",
"version": "različica", "version": "različica",
"address": "naslov", "address": "Naslov",
"protocol": "Protokol",
"on": "VKL", "on": "VKL",
"off": "IZK", "off": "IZK",
"copyright": "Avtorske pravice", "copyright": "Avtorske pravice",
@ -132,8 +143,10 @@
"rules_count_table_header": "Število pravil", "rules_count_table_header": "Število pravil",
"last_time_updated_table_header": "Zadnjič posodobljeno", "last_time_updated_table_header": "Zadnjič posodobljeno",
"actions_table_header": "Akcij", "actions_table_header": "Akcij",
"request_table_header": "Zahteva",
"edit_table_action": "Uredi", "edit_table_action": "Uredi",
"delete_table_action": "Izbriši", "delete_table_action": "Izbriši",
"elapsed": "Potekla",
"filters_and_hosts_hint": "AdGuard Home razume osnovna pravila zaviranja oglasov in sintakso datotek gostiteljev.", "filters_and_hosts_hint": "AdGuard Home razume osnovna pravila zaviranja oglasov in sintakso datotek gostiteljev.",
"no_blocklist_added": "Ni dodanih nobenih seznamov nedovoljenih", "no_blocklist_added": "Ni dodanih nobenih seznamov nedovoljenih",
"no_whitelist_added": "Ni dodanih nobenih dovoljenih seznamov", "no_whitelist_added": "Ni dodanih nobenih dovoljenih seznamov",
@ -170,10 +183,12 @@
"updated_upstream_dns_toast": "Posodobljeni Zagonske strežnike DNS", "updated_upstream_dns_toast": "Posodobljeni Zagonske strežnike DNS",
"dns_test_ok_toast": "Navedeni strežniki DNS delujejo pravilno", "dns_test_ok_toast": "Navedeni strežniki DNS delujejo pravilno",
"dns_test_not_ok_toast": "Ni mogoče uporabiti: strežnika \"{{key}}\". Preverite, ali ste ga pravilno napisali", "dns_test_not_ok_toast": "Ni mogoče uporabiti: strežnika \"{{key}}\". Preverite, ali ste ga pravilno napisali",
"unblock_btn": "Omogoči", "unblock": "Omogoči",
"block_btn": "Onemogoči", "block": "Onemogoči",
"time_table_header": "Čas", "time_table_header": "Čas",
"date": "Datum",
"domain_name_table_header": "Ime domene", "domain_name_table_header": "Ime domene",
"domain_or_client": "Domena ali odjemalec",
"type_table_header": "Vrsta", "type_table_header": "Vrsta",
"response_table_header": "Odgovor", "response_table_header": "Odgovor",
"client_table_header": "Odjemalec", "client_table_header": "Odjemalec",
@ -211,6 +226,9 @@
"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",
"dns_over_https": "DNS-prek-HTTPS",
"dns_over_tls": "DNS-prek-TLS",
"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",
"edns_enable": "Omogoči podmrežje odjemalcev EDNS", "edns_enable": "Omogoči podmrežje odjemalcev EDNS",
@ -229,6 +247,7 @@
"rule_label": "Pravilo", "rule_label": "Pravilo",
"list_label": "Seznam", "list_label": "Seznam",
"unknown_filter": "Neznan filter {{filterId}}", "unknown_filter": "Neznan filter {{filterId}}",
"known_tracker": "Znan sledilec",
"install_welcome_title": "Dobrodošli v AdGuard Home!", "install_welcome_title": "Dobrodošli v AdGuard Home!",
"install_welcome_desc": "AdGuard Home je omrežni strežnik DNS, ki zavira oglase in sledilce v celotnem omrežju. Njegov namen je omogočanje nadzora nad celotnim omrežjem in vsemi vašimi napravami in ne zahteva uporabo odjemalskega programa.", "install_welcome_desc": "AdGuard Home je omrežni strežnik DNS, ki zavira oglase in sledilce v celotnem omrežju. Njegov namen je omogočanje nadzora nad celotnim omrežjem in vsemi vašimi napravami in ne zahteva uporabo odjemalskega programa.",
"install_settings_title": "Skrbniški spletni vmesnik", "install_settings_title": "Skrbniški spletni vmesnik",
@ -257,7 +276,7 @@
"install_devices_router_list_1": "Odprite nastavitve usmerjevalnika. Ponavadi lahko do nje dostopate iz brskalnika prek URL-ja (npr. http://192.168.0.1/ ali http://192.168.1.1/). Morda boste morali vnesti geslo. Če se ne spomnite gesla, lahko pogosto ponastavite geslo s pritiskom na gumb na samem usmerjevalniku. Nekateri usmerjevalniki zahtevajo posebno aplikacijo, ki bi morala biti v tem primeru že nameščena na vašem računalniku/telefonu.", "install_devices_router_list_1": "Odprite nastavitve usmerjevalnika. Ponavadi lahko do nje dostopate iz brskalnika prek URL-ja (npr. http://192.168.0.1/ ali http://192.168.1.1/). Morda boste morali vnesti geslo. Če se ne spomnite gesla, lahko pogosto ponastavite geslo s pritiskom na gumb na samem usmerjevalniku. Nekateri usmerjevalniki zahtevajo posebno aplikacijo, ki bi morala biti v tem primeru že nameščena na vašem računalniku/telefonu.",
"install_devices_router_list_2": "Poiščite nastavitve DHCP/DNS. Poiščite črke DNS poleg polja, ki dovoljuje dva ali tri naborov številk, pri čemer je vsaka razdeljena na štiri skupine z enim do tremi števili.", "install_devices_router_list_2": "Poiščite nastavitve DHCP/DNS. Poiščite črke DNS poleg polja, ki dovoljuje dva ali tri naborov številk, pri čemer je vsaka razdeljena na štiri skupine z enim do tremi števili.",
"install_devices_router_list_3": "Tam vnesite svoje naslove strežnikov AdGuard Home.", "install_devices_router_list_3": "Tam vnesite svoje naslove strežnikov AdGuard Home.",
"install_devices_router_list_4": "Na nekaterih usmerjevalnikih ne morete nastaviti strežnika DNS po meri. V tem primeru bo morda pomagalo, če boste AdGuard Home postavili kot strežnik DHCP. V nasprotnem primeru poiščite priročnik, kako prilagoditi strežnike DNS za vaš določen model usmerjevalnika.", "install_devices_router_list_4": "Na nekaterih vrstah usmerjevalnikov ne morete nastaviti strežnika DNS po meri. V tem primeru bo morda pomagalo, če boste AdGuard Home postavili kot <0>strežnik DHCP</0>. V nasprotnem primeru poiščite priročnik, kako prilagoditi strežnike DNS za vaš določen model usmerjevalnika.",
"install_devices_windows_list_1": "Odprite 'Nadzorno ploščo' prek menija 'Začetek' ali 'Iskanja v sistemu Windows'.", "install_devices_windows_list_1": "Odprite 'Nadzorno ploščo' prek menija 'Začetek' ali 'Iskanja v sistemu Windows'.",
"install_devices_windows_list_2": "Pojdite v 'Omrežje' in 'Kategorija interneta' in nato v 'Omrežje' in 'Središče za skupno rabo'.", "install_devices_windows_list_2": "Pojdite v 'Omrežje' in 'Kategorija interneta' in nato v 'Omrežje' in 'Središče za skupno rabo'.",
"install_devices_windows_list_3": "Na levi strani zaslona poiščite 'Spremeni nastavitve kartice' in kliknite nanjo.", "install_devices_windows_list_3": "Na levi strani zaslona poiščite 'Spremeni nastavitve kartice' in kliknite nanjo.",
@ -346,6 +365,7 @@
"form_enter_id": "Vnesi identifikatorja", "form_enter_id": "Vnesi identifikatorja",
"form_add_id": "Dodaj identifikatorja", "form_add_id": "Dodaj identifikatorja",
"form_client_name": "Vnesite ime odjemalca", "form_client_name": "Vnesite ime odjemalca",
"name": "Ime",
"client_global_settings": "Uporabi splošne nastavitve", "client_global_settings": "Uporabi splošne nastavitve",
"client_deleted": "Odjemalec \"{{key}}\" je bil uspešno izbrisan", "client_deleted": "Odjemalec \"{{key}}\" je bil uspešno izbrisan",
"client_added": "Odjemalec \"{{key}}\" je bil uspešno dodan", "client_added": "Odjemalec \"{{key}}\" je bil uspešno dodan",
@ -381,7 +401,7 @@
"setup_dns_privacy_other_2": "<0>dnsproxy</0> podpira vse znane varne protokole DNS.", "setup_dns_privacy_other_2": "<0>dnsproxy</0> podpira vse znane varne protokole DNS.",
"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": "Več izvedb boste najdli <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_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}}\"",
@ -445,6 +465,7 @@
"location": "Lokacija", "location": "Lokacija",
"orgname": "Ime organizacije", "orgname": "Ime organizacije",
"netname": "Ime omrežja", "netname": "Ime omrežja",
"network": "Omrežje",
"descr": "Opis", "descr": "Opis",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Več o</0> ustvarjanju lastnih seznamov gostiteljev.", "filtering_rules_learn_more": "<0>Več o</0> ustvarjanju lastnih seznamov gostiteljev.",
@ -456,7 +477,7 @@
"disable_ipv6": "Onemogoči IPv6", "disable_ipv6": "Onemogoči IPv6",
"disable_ipv6_desc": "Če je ta funkcija omogočena, bodo vse poizvedbe DNS za naslove IPv6 (vrste AAAA) izpadle.", "disable_ipv6_desc": "Če je ta funkcija omogočena, bodo vse poizvedbe DNS za naslove IPv6 (vrste AAAA) izpadle.",
"fastest_addr": "Najhitrejši IP naslov", "fastest_addr": "Najhitrejši IP naslov",
"fastest_addr_desc": "Poišči vse strežnike DNS in vrni najhitrejši IP naslov med vsemi odgovori", "fastest_addr_desc": "Poizve vse strežnike DNS in vrne najhitrejši IP naslov med vsemi odgovori. To bo upočasnilo poizvedbe DNS, saj moramo čakati na odgovore vseh DNS strežnikov, vendar bo izboljšalo splošno povezljivost.",
"autofix_warning_text": "Če kliknete 'Popravi', bo AdGuardHome konfiguriral vaš sistem za uporabo strežnika AdGuardHome DNS.", "autofix_warning_text": "Če kliknete 'Popravi', bo AdGuardHome konfiguriral vaš sistem za uporabo strežnika AdGuardHome DNS.",
"autofix_warning_list": "To bo izvedlo naslednja opravila: <0>Deaktiviraj sistemski DNSStubListener</0> <0>Nastavi naslov strežnika DNS na 127.0.0.1</0> <0>Zamenjaj cilj simbolične povezave /etc/resolv.conf with /run/systemd/resolve/resolv.conf</0> <0>Zaustavi DNSStubListener (znova naloži storitev systemd-resolved)", "autofix_warning_list": "To bo izvedlo naslednja opravila: <0>Deaktiviraj sistemski DNSStubListener</0> <0>Nastavi naslov strežnika DNS na 127.0.0.1</0> <0>Zamenjaj cilj simbolične povezave /etc/resolv.conf with /run/systemd/resolve/resolv.conf</0> <0>Zaustavi DNSStubListener (znova naloži storitev systemd-resolved)",
"autofix_warning_result": "Kot rezultat, bo vse zahteve DNS iz vašega sistema privzeto obdelal AdGuard Home.", "autofix_warning_result": "Kot rezultat, bo vse zahteve DNS iz vašega sistema privzeto obdelal AdGuard Home.",
@ -489,5 +510,19 @@
"list_updated": "{{count}} posodobljen seznam", "list_updated": "{{count}} posodobljen seznam",
"list_updated_plural": "{{count}} posodobljenih seznamov", "list_updated_plural": "{{count}} posodobljenih seznamov",
"dnssec_enable": "Omogoči DNSSEC", "dnssec_enable": "Omogoči DNSSEC",
"dnssec_enable_desc": "V odhodnih poizvedbah DNS nastavite zastavico DNSSEC in preverite rezultat (zahtevan je omogočen reševalnik DNSSEC)" "dnssec_enable_desc": "V odhodnih poizvedbah DNS nastavite zastavico DNSSEC in preverite rezultat (zahtevan je omogočen reševalnik DNSSEC)",
"validated_with_dnssec": "Potrjen z DNSSEC",
"show_all_responses": "Vsi odgovori",
"show_blocked_responses": "Onemogočen",
"show_whitelisted_responses": "Na seznamu dovoljenih",
"show_processed_responses": "Obdelan",
"blocked_safebrowsing": "Onemogočeno z 'Varnim brskanjem'",
"blocked_adult_websites": "Onemogočeno spletnih strani za odrasle",
"blocked_threats": "Onemogočeno groženj",
"allowed": "Dovoljeno",
"filtered": "Filtrirano",
"rewritten": "Znova napisano",
"safe_search": "Varno iskanje",
"blocklist": "Seznam nedovoljenih",
"milliseconds_abbreviation": "ms"
} }

View File

@ -58,7 +58,7 @@
"query_log": "Dnevnik zahteva", "query_log": "Dnevnik zahteva",
"faq": "ČPP", "faq": "ČPP",
"version": "Verzija", "version": "Verzija",
"address": "adresa", "address": "Adresa",
"on": "Uključeno", "on": "Uključeno",
"off": "Isključeno", "off": "Isključeno",
"copyright": "Autorska prava", "copyright": "Autorska prava",
@ -167,9 +167,10 @@
"updated_upstream_dns_toast": "Ažurirani upstream DNS serveri", "updated_upstream_dns_toast": "Ažurirani upstream DNS serveri",
"dns_test_ok_toast": "Dati DNS serveri rade ispravno", "dns_test_ok_toast": "Dati DNS serveri rade ispravno",
"dns_test_not_ok_toast": "Server \"{{key}}\": se ne može koristiti. Proverite da li ste ga ispravno uneli", "dns_test_not_ok_toast": "Server \"{{key}}\": se ne može koristiti. Proverite da li ste ga ispravno uneli",
"unblock_btn": "Odblokiraj", "unblock": "Odblokiraj",
"block_btn": "Blokiraj", "block": "Blokiraj",
"time_table_header": "Vreme", "time_table_header": "Vreme",
"date": "Datum",
"domain_name_table_header": "Ime domena", "domain_name_table_header": "Ime domena",
"type_table_header": "Vrsta", "type_table_header": "Vrsta",
"response_table_header": "Odgovor", "response_table_header": "Odgovor",
@ -478,5 +479,8 @@
"install_static_configure": "Otkrili smo da se koristi dinamička IP adresa — <0>{{ip}}</0>. Želite li da je koristite kao vašu statičku adresu?", "install_static_configure": "Otkrili smo da se koristi dinamička IP adresa — <0>{{ip}}</0>. Želite li da je koristite kao vašu statičku adresu?",
"confirm_static_ip": "AdGuard Home će konfigurisati {{ip}} da bude vaša statička IP adresa. Želite li da nastavite?", "confirm_static_ip": "AdGuard Home će konfigurisati {{ip}} da bude vaša statička IP adresa. Želite li da nastavite?",
"list_updated": "{{count}} lista ažurirana", "list_updated": "{{count}} lista ažurirana",
"list_updated_plural": "{{count}} lista ažurirano" "list_updated_plural": "{{count}} lista ažurirano",
"show_blocked_responses": "Blokirano",
"blocked_adult_websites": "Blokiraj sajtove za odrasle",
"blocked_threats": "Blokiranih pretnji"
} }

View File

@ -53,7 +53,7 @@
"query_log": "Förfrågningslogg", "query_log": "Förfrågningslogg",
"faq": "FAQ", "faq": "FAQ",
"version": "version", "version": "version",
"address": "adress", "address": "Adress",
"on": "PÅ", "on": "PÅ",
"off": "AV", "off": "AV",
"copyright": "Copyright", "copyright": "Copyright",
@ -143,9 +143,10 @@
"updated_upstream_dns_toast": "Uppdaterade uppströms-dns-servrar", "updated_upstream_dns_toast": "Uppdaterade uppströms-dns-servrar",
"dns_test_ok_toast": "Angivna DNS servrar fungerar korrekt", "dns_test_ok_toast": "Angivna DNS servrar fungerar korrekt",
"dns_test_not_ok_toast": "Server \"{{key}}\": kunde inte användas. Var snäll och kolla att du skrivit in rätt", "dns_test_not_ok_toast": "Server \"{{key}}\": kunde inte användas. Var snäll och kolla att du skrivit in rätt",
"unblock_btn": "Avblockera", "unblock": "Avblockera",
"block_btn": "Blockera", "block": "Blockera",
"time_table_header": "Tid", "time_table_header": "Tid",
"date": "Datum",
"domain_name_table_header": "Domännamn", "domain_name_table_header": "Domännamn",
"type_table_header": "Typ", "type_table_header": "Typ",
"response_table_header": "Svar", "response_table_header": "Svar",
@ -356,5 +357,8 @@
"netname": "Nätverksnamn", "netname": "Nätverksnamn",
"descr": "Beskrivning", "descr": "Beskrivning",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>Mer info</0> om att skapa dina egna blockeringslistor för värdar." "filtering_rules_learn_more": "<0>Mer info</0> om att skapa dina egna blockeringslistor för värdar.",
"show_blocked_responses": "Blockerade",
"blocked_adult_websites": "Blockerade vuxensajter",
"blocked_threats": "Blockerade hot"
} }

View File

@ -149,8 +149,8 @@
"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_test_not_ok_toast": "เซิร์ฟเวอร์ \"{{key}}\": ไม่สามารถใช้งานได้ โปรดตรวจสอบว่าคุณเขียนถูกต้อง",
"unblock_btn": "เลิกปิดกั้น", "unblock": "เลิกปิดกั้น",
"block_btn": "ปิดกั้น", "block": "ปิดกั้น",
"time_table_header": "เวลา", "time_table_header": "เวลา",
"domain_name_table_header": "ชื่อโดเมน", "domain_name_table_header": "ชื่อโดเมน",
"type_table_header": "ประเภท", "type_table_header": "ประเภท",
@ -394,6 +394,7 @@
"location": "ตำแหน่ง", "location": "ตำแหน่ง",
"orgname": "ชื่อองค์กร", "orgname": "ชื่อองค์กร",
"netname": "ชื่อเครือข่าย", "netname": "ชื่อเครือข่าย",
"network": "เครือข่าย",
"descr": "คำอธิบาย", "descr": "คำอธิบาย",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>เรียนรู้เพิ่มเติม</0> เกี่ยวกับการสร้างรายการปิดกั้นโฮสต์ของคุณเอง", "filtering_rules_learn_more": "<0>เรียนรู้เพิ่มเติม</0> เกี่ยวกับการสร้างรายการปิดกั้นโฮสต์ของคุณเอง",
@ -411,5 +412,6 @@
"tags_desc": "คุณสามารถเลือกแท็กที่สอดคล้องกับลูกค้า แท็กสามารถรวมอยู่ในกฎการกรองและอนุญาตให้คุณใช้งานได้อย่างถูกต้องมากขึ้น <0>เรียนรู้เพิ่มเติม</0>", "tags_desc": "คุณสามารถเลือกแท็กที่สอดคล้องกับลูกค้า แท็กสามารถรวมอยู่ในกฎการกรองและอนุญาตให้คุณใช้งานได้อย่างถูกต้องมากขึ้น <0>เรียนรู้เพิ่มเติม</0>",
"form_select_tags": "เลือกแท็กเครื่อง", "form_select_tags": "เลือกแท็กเครื่อง",
"check_title": "ตรวจสอบการกรอง", "check_title": "ตรวจสอบการกรอง",
"check_desc": "ตรวจสอบว่าชื่อโฮสต์ถูกกรอง" "check_desc": "ตรวจสอบว่าชื่อโฮสต์ถูกกรอง",
"form_enter_host": "ป้อนชื่อโฮสต์"
} }

View File

@ -37,6 +37,7 @@
"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",
"dhcp_table_hostname": "Bilgisayar Adı", "dhcp_table_hostname": "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": "Dahili DHCP sunucusunu etkinleştirmek istiyorsanız başka aktif DHCP sunucusu olmadığından emin olun. Aksi takdirde cihazlar internete bağlanamayabilir.",
@ -49,17 +50,21 @@
"dhcp_static_leases_not_found": "Sabit DHCP kiralaması bulunamadı", "dhcp_static_leases_not_found": "Sabit DHCP kiralaması bulunamadı",
"dhcp_add_static_lease": "Sabit kiralama ekle", "dhcp_add_static_lease": "Sabit kiralama ekle",
"dhcp_reset": "DHCP yapılandırmasını sıfırlamak istediğinizden emin misiniz?", "dhcp_reset": "DHCP yapılandırmasını sıfırlamak istediğinizden emin misiniz?",
"country": "Ülke",
"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": "Cihaz ismi girin",
"error_details": "Hata detayları", "error_details": "Hata detayları",
"client_details": "İstemci detayları",
"details": "Detaylar",
"back": "Geri", "back": "Geri",
"dashboard": "Pano", "dashboard": "Pano",
"settings": "Ayarlar", "settings": "Ayarlar",
"filters": "Filtreler", "filters": "Filtreler",
"filter": "Filtre",
"query_log": "Sorgu Günlüğü", "query_log": "Sorgu Günlüğü",
"faq": "SSS", "faq": "SSS",
"version": "Sürüm", "version": "Sürüm",
"address": "adres", "address": "Adres",
"on": "AÇIK", "on": "AÇIK",
"off": "KAPALI", "off": "KAPALI",
"copyright": "Tüm hakları saklıdır", "copyright": "Tüm hakları saklıdır",
@ -132,8 +137,10 @@
"rules_count_table_header": "Kural sayısı", "rules_count_table_header": "Kural sayısı",
"last_time_updated_table_header": "Son güncelleme", "last_time_updated_table_header": "Son güncelleme",
"actions_table_header": "Eylemler", "actions_table_header": "Eylemler",
"request_table_header": "İstek",
"edit_table_action": "Düzenle", "edit_table_action": "Düzenle",
"delete_table_action": "Sil", "delete_table_action": "Sil",
"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ını ve hosts dosyalarının söz dizim kurallarını anlamaktadır.",
"no_blocklist_added": "Hiçbir blok listesi eklenmedi", "no_blocklist_added": "Hiçbir blok listesi eklenmedi",
"no_whitelist_added": "Hiçbir izin listesi eklenmedi", "no_whitelist_added": "Hiçbir izin listesi eklenmedi",
@ -170,10 +177,12 @@
"updated_upstream_dns_toast": "Üst DNS sunucuları güncellendi", "updated_upstream_dns_toast": "Üst DNS sunucuları güncellendi",
"dns_test_ok_toast": "Belirtilmiş DNS sunucuları düzgün çalışıyor", "dns_test_ok_toast": "Belirtilmiş DNS sunucuları düzgün çalışıyor",
"dns_test_not_ok_toast": "Sunucu \"{{key}}\": kullanılamıyor, lütfen doğru yazdığınızdan emin olun", "dns_test_not_ok_toast": "Sunucu \"{{key}}\": kullanılamıyor, lütfen doğru yazdığınızdan emin olun",
"unblock_btn": "Engeli kaldır", "unblock": "Engeli kaldır",
"block_btn": "Engelle", "block": "Engelle",
"time_table_header": "Saat", "time_table_header": "Saat",
"date": "Tarih",
"domain_name_table_header": "Alan adı", "domain_name_table_header": "Alan adı",
"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",
"client_table_header": "İstemci", "client_table_header": "İstemci",
@ -211,6 +220,7 @@
"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",
"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",
@ -257,7 +267,7 @@
"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 ş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_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 DNS sunucularını 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.",
"install_devices_windows_list_1": "Başlat menüsünden veya Windows aramasıyla Denetim Masası'na girin.", "install_devices_windows_list_1": "Başlat menüsünden veya Windows aramasıyla Denetim Masası'na girin.",
"install_devices_windows_list_2": "Ağ ve Internet kategorisine girin, sonra Ağ ve Paylaşım Merkezi'ne girin.", "install_devices_windows_list_2": "Ağ ve Internet kategorisine girin, sonra Ağ ve Paylaşım Merkezi'ne girin.",
"install_devices_windows_list_3": "Sol taraftaki Bağdaştırıcı ayarlarını değiştir ayarını bulun ve ona tıklayın.", "install_devices_windows_list_3": "Sol taraftaki Bağdaştırıcı ayarlarını değiştir ayarını bulun ve ona tıklayın.",
@ -489,5 +499,11 @@
"list_updated": "{{count}} liste güncellendi", "list_updated": "{{count}} liste güncellendi",
"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)",
"show_blocked_responses": "Engellendi",
"show_whitelisted_responses": "Beyazlisteye eklendi",
"blocked_adult_websites": "Yetişkin içerikli site engellendi",
"blocked_threats": "Engellenen Tehditler",
"allowed": "İzin verildi",
"blocklist": "Engellenen listesi"
} }

View File

@ -2,6 +2,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>",
"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",
"bootstrap_dns": "Máy chủ DNS Bootstrap", "bootstrap_dns": "Máy chủ DNS Bootstrap",
"bootstrap_dns_desc": "Máy chủ DNS Bootstrap được sử dụng để phân giải địa chỉ IP của bộ phân giải DoH/DoT mà bạn chỉ định là ngược tuyến.", "bootstrap_dns_desc": "Máy chủ DNS Bootstrap được sử dụng để phân giải địa chỉ IP của bộ phân giải DoH/DoT mà bạn chỉ định là ngược tuyến.",
"check_dhcp_servers": "Kiểm tra máy chủ DHCP", "check_dhcp_servers": "Kiểm tra máy chủ DHCP",
@ -36,6 +37,7 @@
"dhcp_interface_select": "Chọn một card mạng", "dhcp_interface_select": "Chọn một card mạng",
"dhcp_hardware_address": "Địa chỉ phần cứng", "dhcp_hardware_address": "Địa chỉ phần cứng",
"dhcp_ip_addresses": "Các địa chỉ IP", "dhcp_ip_addresses": "Các địa chỉ IP",
"ip": "IP",
"dhcp_table_hostname": "Tên máy chủ", "dhcp_table_hostname": "Tên máy chủ",
"dhcp_table_expires": "Hết hạn", "dhcp_table_expires": "Hết hạn",
"dhcp_warning": "Nếu bạn vẫn muốn bật máy chủ DHCP, hãy đảm bảo rằng không có máy chủ DHCP hoạt động nào khác trong mạng của bạn. Nếu không, nó có thể phá vỡ Internet cho các thiết bị được kết nối!", "dhcp_warning": "Nếu bạn vẫn muốn bật máy chủ DHCP, hãy đảm bảo rằng không có máy chủ DHCP hoạt động nào khác trong mạng của bạn. Nếu không, nó có thể phá vỡ Internet cho các thiết bị được kết nối!",
@ -48,9 +50,11 @@
"dhcp_static_leases_not_found": "Không tìm thấy DHCP cho thuê tĩnh", "dhcp_static_leases_not_found": "Không tìm thấy DHCP cho thuê tĩnh",
"dhcp_add_static_lease": "Thêm thuê tĩnh", "dhcp_add_static_lease": "Thêm thuê tĩnh",
"dhcp_reset": "Bạn có chắc chắn muốn đặt lại thiết lập DHCP?", "dhcp_reset": "Bạn có chắc chắn muốn đặt lại thiết lập DHCP?",
"country": "Quốc gia",
"delete_confirm": "Bạn có chắc chắn muốn xóa \"{{key}}\" không?", "delete_confirm": "Bạn có chắc chắn muốn xóa \"{{key}}\" không?",
"form_enter_hostname": "Nhập tên máy chủ", "form_enter_hostname": "Nhập tên máy chủ",
"error_details": "Chi tiết lỗi", "error_details": "Chi tiết lỗi",
"details": "Chi tiết",
"back": "Quay lại", "back": "Quay lại",
"dashboard": "Tổng quan", "dashboard": "Tổng quan",
"settings": "Cài đặt", "settings": "Cài đặt",
@ -121,6 +125,7 @@
"enabled_save_search_toast": "Đã bật tìm kiếm an toàn", "enabled_save_search_toast": "Đã bật tìm kiếm an toàn",
"enabled_table_header": "Kích hoạt", "enabled_table_header": "Kích hoạt",
"name_table_header": "Tên", "name_table_header": "Tên",
"list_url_table_header": "Danh sách liên kết",
"rules_count_table_header": "Số quy tắc", "rules_count_table_header": "Số quy tắc",
"last_time_updated_table_header": "Cập nhật cuối", "last_time_updated_table_header": "Cập nhật cuối",
"actions_table_header": "Thao tác", "actions_table_header": "Thao tác",
@ -148,10 +153,11 @@
"updated_upstream_dns_toast": "Đã cập nhật máy chủ DNS tìm kiếm", "updated_upstream_dns_toast": "Đã cập nhật máy chủ DNS tìm kiếm",
"dns_test_ok_toast": "Máy chủ DNS có thể sử dụng", "dns_test_ok_toast": "Máy chủ DNS có thể sử dụng",
"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_btn": "Bỏ chặn", "unblock": "Bỏ chặn",
"block_btn": "Chặn", "block": "Chặn",
"time_table_header": "Thời gian", "time_table_header": "Thời gian",
"domain_name_table_header": "Tên miền", "domain_name_table_header": "Tên miền",
"domain_or_client": "Tên miền hoặc khách hàng",
"type_table_header": "Loại", "type_table_header": "Loại",
"response_table_header": "Phản hồi", "response_table_header": "Phản hồi",
"client_table_header": "Người dùng cuối", "client_table_header": "Người dùng cuối",
@ -190,10 +196,15 @@
"blocking_ipv6": "Chặn IPv6", "blocking_ipv6": "Chặn IPv6",
"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_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_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",
"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", "rule_label": "Quy tắc",
"list_label": "Danh sách",
"unknown_filter": "Bộ lọc không rõ {{filterId}}", "unknown_filter": "Bộ lọc không rõ {{filterId}}",
"install_welcome_title": "Chào mừng bạn đến với AdGuard Home!", "install_welcome_title": "Chào mừng bạn đến với AdGuard Home!",
"install_welcome_desc": "AdGuard Home là một máy chủ DNS chặn quảng cáo và theo dõi trên toàn mạng. Mục đích của nó là cho phép bạn kiểm soát toàn bộ mạng và tất cả các thiết bị của mình và không yêu cầu sử dụng chương trình phía máy khách.", "install_welcome_desc": "AdGuard Home là một máy chủ DNS chặn quảng cáo và theo dõi trên toàn mạng. Mục đích của nó là cho phép bạn kiểm soát toàn bộ mạng và tất cả các thiết bị của mình và không yêu cầu sử dụng chương trình phía máy khách.",
@ -412,6 +423,26 @@
"filtering_rules_learn_more": "<0>Tìm hiểu thêm</0> về việc tạo danh sách chặn máy chủ của riêng bạn.", "filtering_rules_learn_more": "<0>Tìm hiểu thêm</0> về việc tạo danh sách chặn máy chủ của riêng bạn.",
"blocked_by_response": "Chặn bởi CNAME hoặc địa IP ở phản hồi", "blocked_by_response": "Chặn bởi CNAME hoặc địa IP ở phản hồi",
"try_again": "Hãy thử lại", "try_again": "Hãy thử lại",
"fastest_addr_desc": "Truy vấn tất cả các máy chủ DNS và trả về địa chỉ IP nhanh nhất trong số tất cả các phản hồi",
"autofix_warning_text": "Nếu bạn nhấp vào \"Khắc phục\", AdGuard Home sẽ định cấu hình hệ thống của bạn để sử dụng máy chủ DNS của AdGuard Home.",
"autofix_warning_result": "Do đó, tất cả các yêu cầu DNS từ hệ thống của bạn sẽ được AdGuard Home xử lý theo mặc định.",
"tags_title": "Thẻ",
"tags_desc": "Bạn có thể chọn các thẻ tương ứng với khách hàng. Thẻ có thể được bao gồm trong các quy tắc lọc và cho phép bạn áp dụng chúng chính xác hơn. <0>Tìm hiểu thêm</0>",
"form_select_tags": "Chọn thẻ khách hàng",
"check_title": "Kiểm tra bộ lọc",
"check_desc": "Kiểm tra xem tên máy chủ có được lọc không",
"check": "Kiểm tra",
"check_ip": "Địa chỉ IP: {{ip}}",
"check_rule": "Quy tắc: {{rule}}",
"check_not_found": "Không tìm thấy trong danh sách bộ lọc của bạn",
"static_ip": "Địa chỉ IP tĩnh",
"dnssec_enable": "Bật DNSSEC", "dnssec_enable": "Bật DNSSEC",
"dnssec_enable_desc": "Cắm mốc DNSSEC trong các truy vấn DNS sắp tới và kiểm tra kết quả (buộc phải có trình sửa lỗi hỗ trợ DNSSEC)" "dnssec_enable_desc": "Cắm mốc DNSSEC trong các truy vấn DNS sắp tới và kiểm tra kết quả (buộc phải có trình sửa lỗi hỗ trợ DNSSEC)",
"show_blocked_responses": "Bị chặn",
"show_whitelisted_responses": "Đã thêm vào danh sách cho phép",
"show_processed_responses": "Đã xử lý",
"blocked_adult_websites": "Website người lớn đã chặn",
"blocked_threats": "Mối nguy hiểm đã chặn",
"allowed": "Được phép",
"safe_search": "Tìm kiếm an toàn"
} }

View File

@ -3,6 +3,8 @@
"example_upstream_reserved": "您可以将上游DNS 服务器<0>指定为特定域名</0>", "example_upstream_reserved": "您可以将上游DNS 服务器<0>指定为特定域名</0>",
"upstream_parallel": "通过同时查询所有上游服务器,使用并行请求以加速解析", "upstream_parallel": "通过同时查询所有上游服务器,使用并行请求以加速解析",
"parallel_requests": "并行请求", "parallel_requests": "并行请求",
"load_balancing": "负载均衡",
"load_balancing_desc": "一次查询一台服务器。 AdGuard Home将使用加权随机算法来选择服务器以便更频繁地使用最快的服务器。",
"bootstrap_dns": "Bootstrap DNS 服务器", "bootstrap_dns": "Bootstrap 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 服务器",
@ -37,6 +39,7 @@
"dhcp_interface_select": "选择 DHCP 接口", "dhcp_interface_select": "选择 DHCP 接口",
"dhcp_hardware_address": "硬件地址", "dhcp_hardware_address": "硬件地址",
"dhcp_ip_addresses": "IP 地址", "dhcp_ip_addresses": "IP 地址",
"ip": "IP地址",
"dhcp_table_hostname": "主机名", "dhcp_table_hostname": "主机名",
"dhcp_table_expires": "到期", "dhcp_table_expires": "到期",
"dhcp_warning": "如果你想要启用内置的 DHCP 服务器,请确保在当前网络中没有其它起作用的 DHCP 服务器。否则,此操作可能会破坏已连接设备的网络连接!", "dhcp_warning": "如果你想要启用内置的 DHCP 服务器,请确保在当前网络中没有其它起作用的 DHCP 服务器。否则,此操作可能会破坏已连接设备的网络连接!",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "未找到 DHCP 静态租约", "dhcp_static_leases_not_found": "未找到 DHCP 静态租约",
"dhcp_add_static_lease": "添加静态租约", "dhcp_add_static_lease": "添加静态租约",
"dhcp_reset": "您确定要重置DHCP设定么", "dhcp_reset": "您确定要重置DHCP设定么",
"country": "国家",
"city": "城市",
"delete_confirm": "您确定要删除 \"{{key}}\"", "delete_confirm": "您确定要删除 \"{{key}}\"",
"form_enter_hostname": "输入主机名称", "form_enter_hostname": "输入主机名称",
"error_details": "详细错误信息", "error_details": "详细错误信息",
"response_details": "响应细节",
"request_details": "请求详情",
"client_details": "客户端详情",
"details": "详细信息",
"back": "返回", "back": "返回",
"dashboard": "仪表盘", "dashboard": "仪表盘",
"settings": "设置", "settings": "设置",
"filters": "过滤器", "filters": "过滤器",
"filter": "过滤器",
"query_log": "查询日志", "query_log": "查询日志",
"compact": "紧凑",
"nothing_found": "没找到",
"faq": "常见问题", "faq": "常见问题",
"version": "版本", "version": "版本",
"address": "地址", "address": "地址",
"protocol": "协议",
"on": "启用中", "on": "启用中",
"off": "禁用中", "off": "禁用中",
"copyright": "版权", "copyright": "版权",
@ -114,7 +127,7 @@
"encryption_settings": "加密设置", "encryption_settings": "加密设置",
"dhcp_settings": "DHCP 设置", "dhcp_settings": "DHCP 设置",
"upstream_dns": "上游 DNS 服务器", "upstream_dns": "上游 DNS 服务器",
"upstream_dns_hint": "如果此处留空AdGuard Home 将会使用 <a href='https://www.quad9.net/' target='_blank'>Cloudflare DNS</a> 作为上游 DNS。如果想要使用 DNS over TLS请以 tls:// 为开头。", "upstream_dns_hint": "如果此处留空AdGuard Home 将会使用 <a href='https://www.quad9.net/' target='_blank'>Quad9</a> 作为上游。",
"test_upstream_btn": "测试上游 DNS", "test_upstream_btn": "测试上游 DNS",
"upstreams": "上游服务器", "upstreams": "上游服务器",
"apply_btn": "应用", "apply_btn": "应用",
@ -132,8 +145,10 @@
"rules_count_table_header": "规则数", "rules_count_table_header": "规则数",
"last_time_updated_table_header": "上次更新时间", "last_time_updated_table_header": "上次更新时间",
"actions_table_header": "活跃状态", "actions_table_header": "活跃状态",
"request_table_header": "请求",
"edit_table_action": "编辑", "edit_table_action": "编辑",
"delete_table_action": "删除", "delete_table_action": "删除",
"elapsed": "耗时",
"filters_and_hosts_hint": "AdGuard Home 可以解析基础的 adblock 规则和 Hosts 语法。", "filters_and_hosts_hint": "AdGuard Home 可以解析基础的 adblock 规则和 Hosts 语法。",
"no_blocklist_added": "未添加阻止列表", "no_blocklist_added": "未添加阻止列表",
"no_whitelist_added": "未添加允许列表", "no_whitelist_added": "未添加允许列表",
@ -170,12 +185,15 @@
"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_test_not_ok_toast": "服务器 \"{{key}}\":无法使用,请检查你输入的是否正确",
"unblock_btn": "放行", "unblock": "放行",
"block_btn": "拦截", "block": "拦截",
"time_table_header": "时间", "time_table_header": "时间",
"date": "日起",
"domain_name_table_header": "域名", "domain_name_table_header": "域名",
"domain_or_client": "域名或客户端",
"type_table_header": "类型", "type_table_header": "类型",
"response_table_header": "响应", "response_table_header": "响应",
"response_code": "响应代码",
"client_table_header": "客户端", "client_table_header": "客户端",
"empty_response_status": "空", "empty_response_status": "空",
"show_all_filter_type": "显示所有", "show_all_filter_type": "显示所有",
@ -194,6 +212,7 @@
"query_log_filtered": "被 {{filter}} 过滤", "query_log_filtered": "被 {{filter}} 过滤",
"query_log_confirm_clear": "你确定想要清除全部查询日志吗?", "query_log_confirm_clear": "你确定想要清除全部查询日志吗?",
"query_log_cleared": "查询日志已成功清除", "query_log_cleared": "查询日志已成功清除",
"query_log_updated": "已成功更新查询日志",
"query_log_clear": "清除查询日志", "query_log_clear": "清除查询日志",
"query_log_retention": "查询记录保留时间", "query_log_retention": "查询记录保留时间",
"query_log_enable": "启用日志", "query_log_enable": "启用日志",
@ -211,6 +230,9 @@
"custom_ip": "自定义 IP", "custom_ip": "自定义 IP",
"blocking_ipv4": "拦截 IPv4", "blocking_ipv4": "拦截 IPv4",
"blocking_ipv6": "拦截 IPv6", "blocking_ipv6": "拦截 IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"plain_dns": "无加密DNS",
"form_enter_rate_limit": "输入限制速率", "form_enter_rate_limit": "输入限制速率",
"rate_limit": "速度限制", "rate_limit": "速度限制",
"edns_enable": "使用客户端的子网地址EDNS)", "edns_enable": "使用客户端的子网地址EDNS)",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "空IP以零IP地址响应(A记录 0.0.0.0AAAA记录 ::)", "blocking_mode_null_ip": "空IP以零IP地址响应(A记录 0.0.0.0AAAA记录 ::)",
"blocking_mode_custom_ip": "自定IP以手动设置的IP地址响应", "blocking_mode_custom_ip": "自定IP以手动设置的IP地址响应",
"upstream_dns_client_desc": "如果将此字段留空AdGuard Home 将使用在<0>DNS设置</0>中配置的服务器。", "upstream_dns_client_desc": "如果将此字段留空AdGuard Home 将使用在<0>DNS设置</0>中配置的服务器。",
"tracker_source": "追踪器来源",
"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": "已知跟踪器",
"install_welcome_title": "欢迎使用 AdGuard Home", "install_welcome_title": "欢迎使用 AdGuard Home",
"install_welcome_desc": "AdGuard Home 是一个可在特定网络范围内拦截所有广告和跟踪器的 DNS 服务器。它的目的是让您控制整个网络和您的所有设备,且不需要使用任何客户端程序。", "install_welcome_desc": "AdGuard Home 是一个可在特定网络范围内拦截所有广告和跟踪器的 DNS 服务器。它的目的是让您控制整个网络和您的所有设备,且不需要使用任何客户端程序。",
"install_settings_title": "网页管理界面", "install_settings_title": "网页管理界面",
@ -346,6 +370,7 @@
"form_enter_id": "输入标识符", "form_enter_id": "输入标识符",
"form_add_id": "添加标识符", "form_add_id": "添加标识符",
"form_client_name": "输入客户端名称", "form_client_name": "输入客户端名称",
"name": "名称",
"client_global_settings": "使用全局设置", "client_global_settings": "使用全局设置",
"client_deleted": "客户端 \"{{key}}\" 删除成功", "client_deleted": "客户端 \"{{key}}\" 删除成功",
"client_added": "客户端 \"{{key}}\" 添加成功", "client_added": "客户端 \"{{key}}\" 添加成功",
@ -445,6 +470,7 @@
"location": "地址", "location": "地址",
"orgname": "机构名称", "orgname": "机构名称",
"netname": "网络名称", "netname": "网络名称",
"network": "网络",
"descr": "描述", "descr": "描述",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>了解更多</0>关于创建自己的hosts清单。", "filtering_rules_learn_more": "<0>了解更多</0>关于创建自己的hosts清单。",
@ -456,6 +482,7 @@
"disable_ipv6": "禁用 IPv6", "disable_ipv6": "禁用 IPv6",
"disable_ipv6_desc": "启用后所有IPv6地址 (type AAAA) 的DNS查询都会被丢弃。", "disable_ipv6_desc": "启用后所有IPv6地址 (type AAAA) 的DNS查询都会被丢弃。",
"fastest_addr": "最快的 IP 地址", "fastest_addr": "最快的 IP 地址",
"fastest_addr_desc": "查询所有DNS服务器并返回所有响应中速度最快的IP地址。因必须等待全部DNS服务器均有所回应因而会降低DNS查询的速度但同时此举将会改善总体的连接。",
"autofix_warning_text": "若您单击“修复”AdGuardHome将会配置您的系统以使用AdGuardHome的DNS服务器", "autofix_warning_text": "若您单击“修复”AdGuardHome将会配置您的系统以使用AdGuardHome的DNS服务器",
"autofix_warning_list": "其将会进行如下工作:<0>停用系统DNSStubListener</0><0>设置DNS服务器地址为127.0.0.1</0><0>将/etc/resolv.conf的符号链接目标替换为/run/systemd/resolv/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/resolv/resolv.conf</0><0>停止DNSStubListener重新加载系统解析服务</0>",
"autofix_warning_result": "因此默认情况下所有来自系统的DNS请求都将由AdGuardHome处理。", "autofix_warning_result": "因此默认情况下所有来自系统的DNS请求都将由AdGuardHome处理。",
@ -488,5 +515,19 @@
"list_updated": "{{count}} 列表已更新", "list_updated": "{{count}} 列表已更新",
"list_updated_plural": "{{count}} 条列表已更新", "list_updated_plural": "{{count}} 条列表已更新",
"dnssec_enable": "启用DNSSEC", "dnssec_enable": "启用DNSSEC",
"dnssec_enable_desc": "在发出DNS查询中设置DNSSEC标志并检查结果(需要启用DNSSEC的解析器)" "dnssec_enable_desc": "在发出DNS查询中设置DNSSEC标志并检查结果(需要启用DNSSEC的解析器)",
"validated_with_dnssec": "通过DNSSEC验证",
"show_all_responses": "所有响应",
"show_blocked_responses": "已拦截",
"show_whitelisted_responses": "已列入白名单",
"show_processed_responses": "已处理",
"blocked_safebrowsing": "被安全浏览阻止",
"blocked_adult_websites": "拦截的成人网站",
"blocked_threats": "拦截的威胁",
"allowed": "允许项",
"filtered": "已过滤",
"rewritten": "重写项",
"safe_search": "安全搜索",
"blocklist": "拦截列表",
"milliseconds_abbreviation": "毫秒"
} }

View File

@ -1,8 +1,10 @@
{ {
"client_settings": "用戶端設定", "client_settings": "用戶端設定",
"example_upstream_reserved": "您可明確指定<0>用於特定的網域</0>之 DNS 上游", "example_upstream_reserved": "您可明確指定<0>用於特定的網域</0>之 DNS 上游",
"upstream_parallel": "透過同時地查詢所有上游的伺服器,使用並行的請求以加速解析", "upstream_parallel": "透過同時地查詢所有上游的伺服器,使用並行的查詢以加速解析網域",
"parallel_requests": "並行的請求", "parallel_requests": "並行的請求",
"load_balancing": "負載平衡",
"load_balancing_desc": "每次查詢一個伺服器。AdGuard Home 將使用加權隨機的演算法來選擇伺服器,以便最快的伺服器將被更常使用。",
"bootstrap_dns": "自我啟動BootstrapDNS 伺服器", "bootstrap_dns": "自我啟動BootstrapDNS 伺服器",
"bootstrap_dns_desc": "自我啟動BootstrapDNS 伺服器被用於解析您明確指定作為上游的 DoH/DoT 解析器之 IP 位址。", "bootstrap_dns_desc": "自我啟動BootstrapDNS 伺服器被用於解析您明確指定作為上游的 DoH/DoT 解析器之 IP 位址。",
"check_dhcp_servers": "檢查動態主機設定協定DHCP伺服器", "check_dhcp_servers": "檢查動態主機設定協定DHCP伺服器",
@ -37,6 +39,7 @@
"dhcp_interface_select": "選擇動態主機設定協定DHCP介面", "dhcp_interface_select": "選擇動態主機設定協定DHCP介面",
"dhcp_hardware_address": "硬體位址", "dhcp_hardware_address": "硬體位址",
"dhcp_ip_addresses": "IP 位址", "dhcp_ip_addresses": "IP 位址",
"ip": "IP",
"dhcp_table_hostname": "主機名稱", "dhcp_table_hostname": "主機名稱",
"dhcp_table_expires": "到期", "dhcp_table_expires": "到期",
"dhcp_warning": "如果您無論如何想要啟用動態主機設定協定DHCP伺服器確保在您的網路中無其它現行的 DHCP 伺服器。否則,它可能會破壞供已連線的裝置之網際網路!", "dhcp_warning": "如果您無論如何想要啟用動態主機設定協定DHCP伺服器確保在您的網路中無其它現行的 DHCP 伺服器。否則,它可能會破壞供已連線的裝置之網際網路!",
@ -49,17 +52,27 @@
"dhcp_static_leases_not_found": "無已發現之動態主機設定協定DHCP靜態租約", "dhcp_static_leases_not_found": "無已發現之動態主機設定協定DHCP靜態租約",
"dhcp_add_static_lease": "增加靜態租約", "dhcp_add_static_lease": "增加靜態租約",
"dhcp_reset": "您確定您想要重置動態主機設定協定DHCP配置嗎", "dhcp_reset": "您確定您想要重置動態主機設定協定DHCP配置嗎",
"country": "國家",
"city": "城市",
"delete_confirm": "您確定您想要刪除 \"{{key}}\" 嗎?", "delete_confirm": "您確定您想要刪除 \"{{key}}\" 嗎?",
"form_enter_hostname": "輸入主機名稱", "form_enter_hostname": "輸入主機名稱",
"error_details": "錯誤細節", "error_details": "錯誤細節",
"response_details": "回應細節",
"request_details": "請求細節",
"client_details": "用戶端細節",
"details": "細節",
"back": "返回", "back": "返回",
"dashboard": "儀表板", "dashboard": "儀表板",
"settings": "設定", "settings": "設定",
"filters": "過濾器", "filters": "過濾器",
"filter": "過濾器",
"query_log": "查詢記錄", "query_log": "查詢記錄",
"compact": "精簡的",
"nothing_found": "無什麼被找到",
"faq": "常見問答集", "faq": "常見問答集",
"version": "版本", "version": "版本",
"address": "位址", "address": "位址",
"protocol": "協定",
"on": "開著", "on": "開著",
"off": "關著", "off": "關著",
"copyright": "版權", "copyright": "版權",
@ -88,7 +101,7 @@
"number_of_dns_query_days": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量", "number_of_dns_query_days": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量",
"number_of_dns_query_days_plural": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量", "number_of_dns_query_days_plural": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量",
"number_of_dns_query_24_hours": "在最近的 24 小時內已處理的 DNS 查詢之數量", "number_of_dns_query_24_hours": "在最近的 24 小時內已處理的 DNS 查詢之數量",
"number_of_dns_query_blocked_24_hours": "被廣告封鎖過濾器和主機封鎖清單封鎖的 DNS 請求之數量", "number_of_dns_query_blocked_24_hours": "被廣告封鎖過濾器和主機封鎖清單阻擋的 DNS 請求之數量",
"number_of_dns_query_blocked_24_hours_by_sec": "被 AdGuard 瀏覽安全模組封鎖的 DNS 請求之數量", "number_of_dns_query_blocked_24_hours_by_sec": "被 AdGuard 瀏覽安全模組封鎖的 DNS 請求之數量",
"number_of_dns_query_blocked_24_hours_adult": "已封鎖的成人網站之數量", "number_of_dns_query_blocked_24_hours_adult": "已封鎖的成人網站之數量",
"enforced_save_search": "已強制執行的安全搜尋", "enforced_save_search": "已強制執行的安全搜尋",
@ -108,7 +121,7 @@
"dns_settings": "DNS 設定", "dns_settings": "DNS 設定",
"dns_blocklists": "DNS 封鎖清單", "dns_blocklists": "DNS 封鎖清單",
"dns_allowlists": "DNS 允許清單", "dns_allowlists": "DNS 允許清單",
"dns_blocklists_desc": "AdGuard Home 將封鎖與封鎖清單相符的網域。", "dns_blocklists_desc": "AdGuard Home 將阻擋與封鎖清單相符的網域。",
"dns_allowlists_desc": "即使來自 DNS 允許清單的網域在任何的封鎖清單中,它們將被允許。", "dns_allowlists_desc": "即使來自 DNS 允許清單的網域在任何的封鎖清單中,它們將被允許。",
"custom_filtering_rules": "自訂的過濾規則", "custom_filtering_rules": "自訂的過濾規則",
"encryption_settings": "加密設定", "encryption_settings": "加密設定",
@ -132,8 +145,10 @@
"rules_count_table_header": "規則總數", "rules_count_table_header": "規則總數",
"last_time_updated_table_header": "最近的更新時間", "last_time_updated_table_header": "最近的更新時間",
"actions_table_header": "動作", "actions_table_header": "動作",
"request_table_header": "請求",
"edit_table_action": "編輯", "edit_table_action": "編輯",
"delete_table_action": "刪除", "delete_table_action": "刪除",
"elapsed": "已經過",
"filters_and_hosts_hint": "AdGuard Home 懂得基本的廣告封鎖規則和主機檔案語法。", "filters_and_hosts_hint": "AdGuard Home 懂得基本的廣告封鎖規則和主機檔案語法。",
"no_blocklist_added": "無已加入的封鎖清單", "no_blocklist_added": "無已加入的封鎖清單",
"no_whitelist_added": "無已加入的允許清單", "no_whitelist_added": "無已加入的允許清單",
@ -170,12 +185,15 @@
"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_test_not_ok_toast": "伺服器 \"{{key}}\":無法被使用,請檢查您已正確地填寫它",
"unblock_btn": "解除封鎖", "unblock": "解除封鎖",
"block_btn": "封鎖", "block": "封鎖",
"time_table_header": "時間", "time_table_header": "時間",
"date": "日期",
"domain_name_table_header": "域名", "domain_name_table_header": "域名",
"domain_or_client": "網域或用戶端",
"type_table_header": "類型", "type_table_header": "類型",
"response_table_header": "回應", "response_table_header": "回應",
"response_code": "回應碼",
"client_table_header": "用戶端", "client_table_header": "用戶端",
"empty_response_status": "空無的", "empty_response_status": "空無的",
"show_all_filter_type": "顯示全部", "show_all_filter_type": "顯示全部",
@ -194,6 +212,7 @@
"query_log_filtered": "被 {{filter}} 過濾", "query_log_filtered": "被 {{filter}} 過濾",
"query_log_confirm_clear": "您確定您想要清除整個查詢記錄嗎?", "query_log_confirm_clear": "您確定您想要清除整個查詢記錄嗎?",
"query_log_cleared": "該查詢記錄已被成功地清除", "query_log_cleared": "該查詢記錄已被成功地清除",
"query_log_updated": "該查詢記錄已被成功地更新",
"query_log_clear": "清除查詢記錄", "query_log_clear": "清除查詢記錄",
"query_log_retention": "查詢記錄保留", "query_log_retention": "查詢記錄保留",
"query_log_enable": "啟用記錄", "query_log_enable": "啟用記錄",
@ -211,6 +230,9 @@
"custom_ip": "自訂的 IP", "custom_ip": "自訂的 IP",
"blocking_ipv4": "封鎖 IPv4", "blocking_ipv4": "封鎖 IPv4",
"blocking_ipv6": "封鎖 IPv6", "blocking_ipv6": "封鎖 IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"plain_dns": "一般的 DNS",
"form_enter_rate_limit": "輸入速率限制", "form_enter_rate_limit": "輸入速率限制",
"rate_limit": "速率限制", "rate_limit": "速率限制",
"edns_enable": "啟用對於 DNS 的擴充機制EDNS用戶端子網路", "edns_enable": "啟用對於 DNS 的擴充機制EDNS用戶端子網路",
@ -223,12 +245,14 @@
"blocking_mode_null_ip": "無效的 IP以零值 IP 位址0.0.0.0 供 A:: 供 AAAA回覆", "blocking_mode_null_ip": "無效的 IP以零值 IP 位址0.0.0.0 供 A:: 供 AAAA回覆",
"blocking_mode_custom_ip": "自訂的 IP以一組手動地被設定的 IP 位址回覆", "blocking_mode_custom_ip": "自訂的 IP以一組手動地被設定的 IP 位址回覆",
"upstream_dns_client_desc": "如果您將該欄位留空AdGuard Home 將使用在 <0>DNS 設定</0>中被配置的伺服器。", "upstream_dns_client_desc": "如果您將該欄位留空AdGuard Home 將使用在 <0>DNS 設定</0>中被配置的伺服器。",
"tracker_source": "追蹤器來源",
"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": "已知的追蹤器",
"install_welcome_title": "歡迎至 AdGuard Home", "install_welcome_title": "歡迎至 AdGuard Home",
"install_welcome_desc": "AdGuard Home 是全網路範圍廣告和追蹤器封鎖的 DNS 伺服器。它的目的為讓您控制您的整個網路和所有您的裝置,且不需要使用用戶端程式。", "install_welcome_desc": "AdGuard Home 是全網路範圍廣告和追蹤器封鎖的 DNS 伺服器。它的目的為讓您控制您的整個網路和所有您的裝置,且不需要使用用戶端程式。",
"install_settings_title": "管理員網路介面", "install_settings_title": "管理員網路介面",
@ -257,7 +281,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": "找到 DHCP/DNS 設定。尋找緊鄰著允許兩組或三組數字集的欄位之 DNS 字母,每組被拆成四個含有一至三個數字的群集。", "install_devices_router_list_2": "找到 DHCP/DNS 設定。尋找緊鄰著允許兩組或三組數字集的欄位之 DNS 字母,每組被拆成四個含有一至三個數字的群集。",
"install_devices_router_list_3": "在那裡輸入您的 AdGuard Home 伺服器位址。", "install_devices_router_list_3": "在那裡輸入您的 AdGuard Home 伺服器位址。",
"install_devices_router_list_4": "您無法於某些類型的路由器上設定自訂的 DNS 伺服器。在這種情況下,如果您設置 AdGuard Home 作為 DHCP 伺服器,其可能有所幫助。否則,您應搜尋有關如何為您的特定路由器型號自訂 DNS 伺服器之用法說明。", "install_devices_router_list_4": "您無法於某些類型的路由器上設定自訂的 DNS 伺服器。在這種情況下,如果您設置 AdGuard Home 作為 <0>DHCP 伺服器</0>,其可能有所幫助。否則,您應搜尋有關如何為您的特定路由器型號自訂 DNS 伺服器之用法說明。",
"install_devices_windows_list_1": "通過開始功能表或 Windows 搜尋,開啟控制台。", "install_devices_windows_list_1": "通過開始功能表或 Windows 搜尋,開啟控制台。",
"install_devices_windows_list_2": "去網路和網際網路類別,然後去網路和共用中心。", "install_devices_windows_list_2": "去網路和網際網路類別,然後去網路和共用中心。",
"install_devices_windows_list_3": "於畫面之左側上找到變更介面卡設定並於它上點擊。", "install_devices_windows_list_3": "於畫面之左側上找到變更介面卡設定並於它上點擊。",
@ -346,6 +370,7 @@
"form_enter_id": "輸入識別碼", "form_enter_id": "輸入識別碼",
"form_add_id": "增加識別碼", "form_add_id": "增加識別碼",
"form_client_name": "輸入用戶端名稱", "form_client_name": "輸入用戶端名稱",
"name": "名稱",
"client_global_settings": "使用全域的設定", "client_global_settings": "使用全域的設定",
"client_deleted": "用戶端 \"{{key}}\" 被成功地刪除", "client_deleted": "用戶端 \"{{key}}\" 被成功地刪除",
"client_added": "用戶端 \"{{key}}\" 被成功地加入", "client_added": "用戶端 \"{{key}}\" 被成功地加入",
@ -445,6 +470,7 @@
"location": "位置", "location": "位置",
"orgname": "組織名稱", "orgname": "組織名稱",
"netname": "網路名稱", "netname": "網路名稱",
"network": "網路",
"descr": "說明", "descr": "說明",
"whois": "Whois", "whois": "Whois",
"filtering_rules_learn_more": "<0>了解更多</0>有關創建您自己的主機hosts清單。", "filtering_rules_learn_more": "<0>了解更多</0>有關創建您自己的主機hosts清單。",
@ -456,7 +482,7 @@
"disable_ipv6": "禁用 IPv6", "disable_ipv6": "禁用 IPv6",
"disable_ipv6_desc": "如果此功能被啟用,所有對於 IPv6 位址(類型 AAAA的 DNS 查詢將被丟棄。", "disable_ipv6_desc": "如果此功能被啟用,所有對於 IPv6 位址(類型 AAAA的 DNS 查詢將被丟棄。",
"fastest_addr": "最快的 IP 位址", "fastest_addr": "最快的 IP 位址",
"fastest_addr_desc": "查詢所有的 DNS 伺服器並返回在所有的回應之中最快的 IP 位址", "fastest_addr_desc": "查詢所有的 DNS 伺服器並返回在所有的回應之中最快的 IP 位址。因為我們必須等待來自所有的 DNS 伺服器之回應,這將使 DNS 查詢變慢,但改善總體的連線。",
"autofix_warning_text": "如果您點擊\"修復\"AdGuard Home 將配置您的系統使用 AdGuard Home DNS 伺服器。", "autofix_warning_text": "如果您點擊\"修復\"AdGuard Home 將配置您的系統使用 AdGuard Home DNS 伺服器。",
"autofix_warning_list": "它將執行這些任務:<0>撤銷系統 DNSStubListener</0> <0>設定 DNS 伺服器位址為 127.0.0.1</0> <0>用 /run/systemd/resolve/resolv.conf 取代 /etc/resolv.conf 的符號連結目標</0> <0>停止 DNSStubListener重新載入 systemd 已解析的服務)</0>", "autofix_warning_list": "它將執行這些任務:<0>撤銷系統 DNSStubListener</0> <0>設定 DNS 伺服器位址為 127.0.0.1</0> <0>用 /run/systemd/resolve/resolv.conf 取代 /etc/resolv.conf 的符號連結目標</0> <0>停止 DNSStubListener重新載入 systemd 已解析的服務)</0>",
"autofix_warning_result": "因此,預設下,來自您的系統之所有的 DNS 請求將被 AdGuard Home 處理。", "autofix_warning_result": "因此,預設下,來自您的系統之所有的 DNS 請求將被 AdGuard Home 處理。",
@ -474,7 +500,7 @@
"check_reason": "原因:{{reason}}", "check_reason": "原因:{{reason}}",
"check_rule": "規則:{{rule}}", "check_rule": "規則:{{rule}}",
"check_service": "服務名稱:{{service}}", "check_service": "服務名稱:{{service}}",
"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}}\" 被成功地封鎖",
@ -489,5 +515,19 @@
"list_updated": "{{count}} 清單被更新", "list_updated": "{{count}} 清單被更新",
"list_updated_plural": "{{count}} 清單被更新", "list_updated_plural": "{{count}} 清單被更新",
"dnssec_enable": "啟用網域名稱系統安全性擴充功能DNSSEC", "dnssec_enable": "啟用網域名稱系統安全性擴充功能DNSSEC",
"dnssec_enable_desc": "在發出的 DNS 查詢中設定 DNSSEC 標記並檢查該結果(已啟用 DNSSEC 的解析器是必須的)" "dnssec_enable_desc": "在發出的 DNS 查詢中設定 DNSSEC 標記並檢查該結果(已啟用 DNSSEC 的解析器是必須的)",
"validated_with_dnssec": "已用網域名稱系統安全性擴充功能DNSSEC驗證",
"show_all_responses": "所有的回應",
"show_blocked_responses": "已封鎖的",
"show_whitelisted_responses": "已列入白名單的",
"show_processed_responses": "已處理的",
"blocked_safebrowsing": "被安全瀏覽封鎖",
"blocked_adult_websites": "已封鎖的成人網站",
"blocked_threats": "已封鎖的威脅",
"allowed": "已允許的",
"filtered": "已過濾的",
"rewritten": "已改寫的",
"safe_search": "安全搜尋",
"blocklist": "封鎖清單",
"milliseconds_abbreviation": "ms"
} }

View File

@ -3,8 +3,8 @@ import i18next from 'i18next';
import apiClient from '../api/Api'; import apiClient from '../api/Api';
import { normalizeTextarea } from '../helpers/helpers'; import { normalizeTextarea } from '../helpers/helpers';
import { ACTION } from '../helpers/constants';
import { addErrorToast, addSuccessToast } from './toasts'; import { addErrorToast, addSuccessToast } from './toasts';
import { BLOCK_ACTIONS } from '../helpers/constants';
export const getAccessListRequest = createAction('GET_ACCESS_LIST_REQUEST'); export const getAccessListRequest = createAction('GET_ACCESS_LIST_REQUEST');
export const getAccessListFailure = createAction('GET_ACCESS_LIST_FAILURE'); export const getAccessListFailure = createAction('GET_ACCESS_LIST_FAILURE');
@ -57,9 +57,9 @@ export const toggleClientBlock = (type, ip) => async (dispatch) => {
} = await apiClient.getAccessList(); } = await apiClient.getAccessList();
let updatedDisallowedClients = disallowed_clients || []; let updatedDisallowedClients = disallowed_clients || [];
if (type === ACTION.unblock && updatedDisallowedClients.includes(ip)) { if (type === BLOCK_ACTIONS.UNBLOCK && updatedDisallowedClients.includes(ip)) {
updatedDisallowedClients = updatedDisallowedClients.filter((client) => client !== ip); updatedDisallowedClients = updatedDisallowedClients.filter((client) => client !== ip);
} else if (type === ACTION.block && !updatedDisallowedClients.includes(ip)) { } else if (type === BLOCK_ACTIONS.BLOCK && !updatedDisallowedClients.includes(ip)) {
updatedDisallowedClients.push(ip); updatedDisallowedClients.push(ip);
} }
@ -72,9 +72,9 @@ export const toggleClientBlock = (type, ip) => async (dispatch) => {
await apiClient.setAccessList(values); await apiClient.setAccessList(values);
dispatch(toggleClientBlockSuccess(values)); dispatch(toggleClientBlockSuccess(values));
if (type === ACTION.unblock) { if (type === BLOCK_ACTIONS.UNBLOCK) {
dispatch(addSuccessToast(i18next.t('client_unblocked', { ip }))); dispatch(addSuccessToast(i18next.t('client_unblocked', { ip })));
} else if (type === ACTION.block) { } else if (type === BLOCK_ACTIONS.BLOCK) {
dispatch(addSuccessToast(i18next.t('client_blocked', { ip }))); dispatch(addSuccessToast(i18next.t('client_blocked', { ip })));
} }
} catch (error) { } catch (error) {

View File

@ -70,9 +70,18 @@ export const initSettings = (settingsList) => async (dispatch) => {
safesearch, safesearch,
} = settingsList; } = settingsList;
const newSettingsList = { const newSettingsList = {
safebrowsing: { ...safebrowsing, enabled: safebrowsingStatus.enabled }, safebrowsing: {
parental: { ...parental, enabled: parentalStatus.enabled }, ...safebrowsing,
safesearch: { ...safesearch, enabled: safesearchStatus.enabled }, enabled: safebrowsingStatus.enabled,
},
parental: {
...parental,
enabled: parentalStatus.enabled,
},
safesearch: {
...safesearch,
enabled: safesearchStatus.enabled,
},
}; };
dispatch(initSettingsSuccess({ settingsList: newSettingsList })); dispatch(initSettingsSuccess({ settingsList: newSettingsList }));
} catch (error) { } catch (error) {
@ -274,13 +283,14 @@ export const testUpstream = (config) => async (dispatch) => {
values.upstream_dns = normalizeTextarea(values.upstream_dns); values.upstream_dns = normalizeTextarea(values.upstream_dns);
const upstreamResponse = await apiClient.testUpstream(values); const upstreamResponse = await apiClient.testUpstream(values);
const testMessages = Object.keys(upstreamResponse).map((key) => { const testMessages = Object.keys(upstreamResponse)
const message = upstreamResponse[key]; .map((key) => {
if (message !== 'OK') { const message = upstreamResponse[key];
dispatch(addErrorToast({ error: i18next.t('dns_test_not_ok_toast', { key }) })); if (message !== 'OK') {
} dispatch(addErrorToast({ error: i18next.t('dns_test_not_ok_toast', { key }) }));
return message; }
}); return message;
});
if (testMessages.every((message) => message === 'OK')) { if (testMessages.every((message) => message === 'OK')) {
dispatch(addSuccessToast('dns_test_ok_toast')); dispatch(addSuccessToast('dns_test_ok_toast'));
@ -393,11 +403,17 @@ export const toggleDhcpSuccess = createAction('TOGGLE_DHCP_SUCCESS');
export const toggleDhcp = (values) => async (dispatch) => { export const toggleDhcp = (values) => async (dispatch) => {
dispatch(toggleDhcpRequest()); dispatch(toggleDhcpRequest());
let config = { ...values, enabled: false }; let config = {
...values,
enabled: false,
};
let successMessage = 'disabled_dhcp'; let successMessage = 'disabled_dhcp';
if (!values.enabled) { if (!values.enabled) {
config = { ...values, enabled: true }; config = {
...values,
enabled: true,
};
successMessage = 'enabled_dhcp'; successMessage = 'enabled_dhcp';
dispatch(findActiveDhcp(values.interface_name)); dispatch(findActiveDhcp(values.interface_name));
} }

View File

@ -2,20 +2,23 @@ import { createAction } from 'redux-actions';
import apiClient from '../api/Api'; import apiClient from '../api/Api';
import { normalizeLogs, getParamsForClientsSearch, addClientInfo } from '../helpers/helpers'; import { normalizeLogs, getParamsForClientsSearch, addClientInfo } from '../helpers/helpers';
import { TABLE_DEFAULT_PAGE_SIZE } from '../helpers/constants'; import { TABLE_DEFAULT_PAGE_SIZE, TABLE_FIRST_PAGE } from '../helpers/constants';
import { addErrorToast, addSuccessToast } from './toasts'; import { addErrorToast, addSuccessToast } from './toasts';
const getLogsWithParams = async (config) => { const getLogsWithParams = async (config) => {
const { older_than, filter, ...values } = config; const { older_than, filter, ...values } = config;
const rawLogs = await apiClient.getQueryLog({ ...filter, older_than }); const rawLogs = await apiClient.getQueryLog({ ...filter, older_than });
const { data, oldest } = rawLogs; const { data, oldest } = rawLogs;
const logs = normalizeLogs(data); let logs = normalizeLogs(data);
const clientsParams = getParamsForClientsSearch(logs, 'client'); const clientsParams = getParamsForClientsSearch(logs, 'client');
const clients = await apiClient.findClients(clientsParams);
const logsWithClientInfo = addClientInfo(logs, clients, 'client'); if (Object.keys(clientsParams).length > 0) {
const clients = await apiClient.findClients(clientsParams);
logs = addClientInfo(logs, clients, 'client');
}
return { return {
logs: logsWithClientInfo, oldest, older_than, filter, ...values, logs, oldest, older_than, filter, ...values,
}; };
}; };
@ -56,6 +59,7 @@ const checkFilteredLogs = async (data, filter, dispatch, total) => {
export const setLogsPagination = createAction('LOGS_PAGINATION'); export const setLogsPagination = createAction('LOGS_PAGINATION');
export const setLogsPage = createAction('SET_LOG_PAGE'); export const setLogsPage = createAction('SET_LOG_PAGE');
export const toggleDetailedLogs = createAction('TOGGLE_DETAILED_LOGS');
export const getLogsRequest = createAction('GET_LOGS_REQUEST'); export const getLogsRequest = createAction('GET_LOGS_REQUEST');
export const getLogsFailure = createAction('GET_LOGS_FAILURE'); export const getLogsFailure = createAction('GET_LOGS_FAILURE');
@ -93,7 +97,7 @@ export const setLogsFilter = (filter) => async (dispatch) => {
const updatedData = additionalData.logs ? { ...data, ...additionalData } : data; const updatedData = additionalData.logs ? { ...data, ...additionalData } : data;
dispatch(setLogsFilterSuccess({ ...updatedData, filter })); dispatch(setLogsFilterSuccess({ ...updatedData, filter }));
dispatch(setLogsPage(0)); dispatch(setLogsPage(TABLE_FIRST_PAGE));
} catch (error) { } catch (error) {
dispatch(addErrorToast({ error })); dispatch(addErrorToast({ error }));
dispatch(setLogsFilterFailure(error)); dispatch(setLogsFilterFailure(error));

View File

@ -1,4 +1,9 @@
:root { :root {
--yellow-pale: rgba(247, 181, 0, 0.1);
--green79: #67B279;
--gray-a5: #a5a5a5;
--gray-d8: #d8d8d8;
--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;
} }
@ -22,6 +27,16 @@ body {
} }
} }
@media screen and (max-width: 992px) {
.container {
padding: 0 !important;
}
.container--wrap {
min-height: calc(100vh);
}
}
.loading-bar { .loading-bar {
position: fixed; position: fixed;
top: 0; top: 0;
@ -31,10 +46,17 @@ body {
background: linear-gradient(45deg, rgba(99, 125, 120, 1) 0%, rgba(88, 177, 101, 1) 100%); background: linear-gradient(45deg, rgba(99, 125, 120, 1) 0%, rgba(88, 177, 101, 1) 100%);
} }
.hidden { @media (max-width: 575px) {
display: none; .container {
padding-right: 0;
padding-left: 0;
}
} }
.font-monospace { .font-monospace {
font-family: var(--font-family-monospace); font-family: var(--font-family-monospace);
} }
.mw-75 {
max-width: 75% !important;
}

View File

@ -36,6 +36,7 @@ import i18n from '../../i18n';
import Loading from '../ui/Loading'; import Loading from '../ui/Loading';
import { FILTERS_URLS, MENU_URLS, SETTINGS_URLS } from '../../helpers/constants'; import { FILTERS_URLS, MENU_URLS, SETTINGS_URLS } from '../../helpers/constants';
import Services from '../Filters/Services'; import Services from '../Filters/Services';
import { setHtmlLangAttr } from '../../helpers/helpers';
class App extends Component { class App extends Component {
componentDidMount() { componentDidMount() {
@ -62,6 +63,7 @@ class App extends Component {
if (!processing) { if (!processing) {
if (language) { if (language) {
i18n.changeLanguage(language); i18n.changeLanguage(language);
setHtmlLangAttr(language);
} }
} }
@ -94,7 +96,7 @@ class App extends Component {
)} )}
<LoadingBar className="loading-bar" updateTime={1000} /> <LoadingBar className="loading-bar" updateTime={1000} />
<Route component={Header} /> <Route component={Header} />
<div className="container container--wrap"> <div className="container container--wrap pb-5">
{dashboard.processing && <Loading />} {dashboard.processing && <Loading />}
{!dashboard.isCoreRunning && ( {!dashboard.isCoreRunning && (
<div className="row row-cards"> <div className="row row-cards">

View File

@ -1,4 +1,4 @@
import React, { Fragment } from 'react'; import React from 'react';
import ReactTable from 'react-table'; import ReactTable from 'react-table';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Trans, withTranslation } from 'react-i18next'; import { Trans, withTranslation } from 'react-i18next';
@ -32,17 +32,17 @@ const renderBlockingButton = (ipMatchListStatus, ip, handleClick, processing) =>
const buttonProps = ipMatchListStatus === IP_MATCH_LIST_STATUS.NOT_FOUND const buttonProps = ipMatchListStatus === IP_MATCH_LIST_STATUS.NOT_FOUND
? { ? {
className: 'btn-outline-danger', className: 'btn-outline-danger',
text: 'block_btn', text: 'block',
type: 'block', type: 'block',
} }
: { : {
className: 'btn-outline-secondary', className: 'btn-outline-secondary',
text: 'unblock_btn', text: 'unblock',
type: 'unblock', type: 'unblock',
}; };
return ( return (
<div className="table__action"> <div className="table__action button__action">
<button <button
type="button" type="button"
className={`btn btn-sm ${buttonProps.className}`} className={`btn btn-sm ${buttonProps.className}`}
@ -60,13 +60,13 @@ const clientCell = (t, toggleClientStatus, processing, disallowedClients) => fun
const ipMatchListStatus = getIpMatchListStatus(value, disallowedClients); const ipMatchListStatus = getIpMatchListStatus(value, disallowedClients);
return ( return (
<Fragment> <>
<div className="logs__row logs__row--overflow logs__row--column"> <div className="logs__row logs__row--overflow logs__row--column">
{formatClientCell(row, t)} {formatClientCell(row, t)}
</div> </div>
{ipMatchListStatus !== IP_MATCH_LIST_STATUS.CIDR {ipMatchListStatus !== IP_MATCH_LIST_STATUS.CIDR
&& renderBlockingButton(ipMatchListStatus, value, toggleClientStatus, processing)} && renderBlockingButton(ipMatchListStatus, value, toggleClientStatus, processing)}
</Fragment> </>
); );
}; };

View File

@ -10,7 +10,7 @@ import BlockedDomains from './BlockedDomains';
import PageTitle from '../ui/PageTitle'; import PageTitle from '../ui/PageTitle';
import Loading from '../ui/Loading'; import Loading from '../ui/Loading';
import { ACTION } from '../../helpers/constants'; import { BLOCK_ACTIONS } from '../../helpers/constants';
import './Dashboard.css'; import './Dashboard.css';
class Dashboard extends Component { class Dashboard extends Component {
@ -42,7 +42,7 @@ class Dashboard extends Component {
}; };
toggleClientStatus = (type, ip) => { toggleClientStatus = (type, ip) => {
const confirmMessage = type === ACTION.block ? 'client_confirm_block' : 'client_confirm_unblock'; const confirmMessage = type === BLOCK_ACTIONS.BLOCK ? 'client_confirm_block' : 'client_confirm_unblock';
if (window.confirm(this.props.t(confirmMessage, { ip }))) { if (window.confirm(this.props.t(confirmMessage, { ip }))) {
this.props.toggleClientBlock(type, ip); this.props.toggleClientBlock(type, ip);

View File

@ -5,7 +5,7 @@ import { withTranslation } from 'react-i18next';
class Table extends Component { class Table extends Component {
cellWrap = ({ value }) => ( cellWrap = ({ value }) => (
<div className="logs__row logs__row--overflow"> <div className="logs__row o-hidden">
<span className="logs__text" title={value}> <span className="logs__text" title={value}>
{value} {value}
</span> </span>
@ -31,7 +31,7 @@ class Table extends Component {
<div className="logs__row logs__row--center"> <div className="logs__row logs__row--center">
<button <button
type="button" type="button"
className="btn btn-icon btn-outline-secondary btn-sm" className="btn btn-icon btn-icon--green btn-outline-secondary btn-sm"
onClick={() => this.props.handleDelete({ onClick={() => this.props.handleDelete({
answer: value.row.answer, answer: value.row.answer,
domain: value.row.domain, domain: value.row.domain,
@ -59,16 +59,26 @@ class Table extends Component {
columns={this.columns} columns={this.columns}
loading={processing || processingAdd || processingDelete} loading={processing || processingAdd || processingDelete}
className="-striped -highlight card-table-overflow" className="-striped -highlight card-table-overflow"
showPagination={true} showPagination
defaultPageSize={10} defaultPageSize={10}
minRows={5} minRows={5}
previousText={t('previous_btn')} previousText={
nextText={t('next_btn')} <svg className="icons icon--small icon--gray">
<use xlinkHref="#arrow-left" />
</svg>}
nextText={
<svg className="icons icon--small icon--gray">
<use xlinkHref="#arrow-right" />
</svg>}
loadingText={t('loading_table_status')} loadingText={t('loading_table_status')}
pageText={t('page_table_footer_text')} pageText=''
ofText="/" ofText=''
rowsText={t('rows_table_footer_text')} rowsText={t('rows_table_footer_text')}
noDataText={t('rewrite_not_found')} noDataText={t('rewrite_not_found')}
showPageSizeOptions={false}
showPageJump={false}
renderTotalPagesCount={() => false}
getPaginationProps={() => ({ className: 'custom-pagination' })}
/> />
); );
} }

View File

@ -48,7 +48,7 @@ class Table extends Component {
accessor: 'url', accessor: 'url',
minWidth: 200, minWidth: 200,
Cell: ({ value }) => ( Cell: ({ value }) => (
<div className="logs__row logs__row--overflow"> <div className="logs__row o-hidden">
{isValidAbsolutePath(value) ? value {isValidAbsolutePath(value) ? value
: <a : <a
href={value} href={value}
@ -126,17 +126,26 @@ class Table extends Component {
<ReactTable <ReactTable
data={filters} data={filters}
columns={this.columns} columns={this.columns}
showPagination={true} showPagination
defaultPageSize={10} defaultPageSize={10}
showPageSizeOptions={false}
showPageJump={false}
renderTotalPagesCount={() => false}
loading={loading} loading={loading}
minRows={6} minRows={6}
previousText={t('previous_btn')} pageText=''
nextText={t('next_btn')} ofText=''
loadingText={t('loading_table_status')} loadingText={t('loading_table_status')}
pageText={t('page_table_footer_text')}
ofText="/"
rowsText={t('rows_table_footer_text')}
noDataText={whitelist ? t('no_whitelist_added') : t('no_blocklist_added')} noDataText={whitelist ? t('no_whitelist_added') : t('no_blocklist_added')}
getPaginationProps={() => ({ className: 'custom-pagination' })}
previousText={
<svg className="icons icon--small icon--gray w-100 h-100">
<use xlinkHref="#arrow-left" />
</svg>}
nextText={
<svg className="icons icon--small icon--gray w-100 h-100">
<use xlinkHref="#arrow-right" />
</svg>}
/> />
); );
} }

View File

@ -37,8 +37,8 @@ const FILTERS_ITEMS = [
{ route: FILTERS_URLS.dns_blocklists, text: 'dns_blocklists' }, { route: FILTERS_URLS.dns_blocklists, text: 'dns_blocklists' },
{ route: FILTERS_URLS.dns_allowlists, text: 'dns_allowlists' }, { route: FILTERS_URLS.dns_allowlists, text: 'dns_allowlists' },
{ route: FILTERS_URLS.dns_rewrites, text: 'dns_rewrites' }, { route: FILTERS_URLS.dns_rewrites, text: 'dns_rewrites' },
{ route: FILTERS_URLS.custom_rules, text: 'custom_filtering_rules' },
{ route: FILTERS_URLS.blocked_services, text: 'blocked_services' }, { route: FILTERS_URLS.blocked_services, text: 'blocked_services' },
{ route: FILTERS_URLS.custom_rules, text: 'custom_filtering_rules' },
]; ];
class Menu extends Component { class Menu extends Component {

View File

@ -0,0 +1,110 @@
.tooltip__container {
padding: 1rem 1.5rem 1.25rem 1.5rem;
font-size: 16px !important;
box-shadow: 2px 4px 8px rgba(0, 0, 0, 0.2);
border-radius: 4px !important;
pointer-events: auto !important;
background-color: var(--white);
z-index: 102;
overflow-y: scroll;
max-height: 100%;
}
.white-space--nowrap {
white-space: nowrap !important;
}
.overflow-break {
white-space: normal !important;
overflow-wrap: break-word;
}
.grid {
display: grid;
grid-template-columns: repeat(2, min-content);
grid-row-gap: 0.5rem;
grid-column-gap: 1rem;
}
.grid--limited {
grid-template-columns: repeat(2, minmax(0, min-content));
}
.grid--gap-bg {
grid-column-gap: 1.5rem;
}
.grid--title {
font-weight: bold;
}
.grid--title:not(:first-child) {
padding-top: 1rem;
}
@media (max-width: 767.98px) {
.grid {
grid-template-columns: 35% 55%;
}
.grid * {
grid-column: 1 / -1;
}
.grid > :nth-child(even) {
margin: -0.5rem 0 0;
}
.grid > .key__time_table_header, .grid > .key__data, .grid > .key__encryption_status, .grid > .key__elapsed {
grid-column: 1 / span 1;
}
.grid > .value__time_table_header, .grid > .value__data, .grid > .value__encryption_status, .grid > .value__elapsed {
grid-column: 2 / span 1;
margin: 0 !important;
}
.grid .key-colon, .grid .title--border {
font-weight: bold;
}
}
.grid .key-colon:nth-child(odd)::after {
content: ':';
}
.grid__one-row {
grid-template-columns: 15rem;
}
.grid__flow-column {
grid-auto-flow: column;
}
.grid-content > * {
justify-content: space-between !important;
width: 100% !important;
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
}
.title--border {
padding-top: 2rem;
}
.title--border:before {
content: '';
position: absolute;
left: 0;
border-top: 0.5px solid var(--gray-d8) !important;
width: 100%;
margin-top: -1rem;
}
.icon-cross {
position: absolute;
right: 0.5rem;
top: 0.5rem;
}

View File

@ -0,0 +1,105 @@
import React from 'react';
import { nanoid } from 'nanoid';
import classNames from 'classnames';
import PropTypes from 'prop-types';
import { formatClientCell } from '../../../helpers/formatClientCell';
import getHintElement from './getHintElement';
import { checkFiltered } from '../../../helpers/helpers';
import { BLOCK_ACTIONS } from '../../../helpers/constants';
const getClientCell = ({
row, t, isDetailed, toggleBlocking, autoClients, processingRules,
}) => {
const {
reason, client, domain, info: { name },
} = row.original;
const autoClient = autoClients.find((autoClient) => autoClient.name === client);
const country = autoClient && autoClient.whois_info && autoClient.whois_info.country;
const city = autoClient && autoClient.whois_info && autoClient.whois_info.city;
const network = autoClient && autoClient.whois_info && autoClient.whois_info.orgname;
const source = autoClient && autoClient.source;
const id = nanoid();
const data = {
address: client,
name,
country,
city,
network,
source_label: source,
};
const processedData = Object.entries(data);
const isFiltered = checkFiltered(reason);
const nameClass = classNames('w-90 o-hidden d-flex flex-column', {
'mt-2': isDetailed && !name,
'white-space--nowrap': isDetailed,
});
const hintClass = classNames('icons mr-4 icon--small cursor--pointer icon--light-gray', {
'my-3': isDetailed,
});
const renderBlockingButton = (isFiltered, domain) => {
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
const buttonClass = classNames('logs__action button__action', {
'btn-outline-secondary': isFiltered,
'btn-outline-danger': !isFiltered,
'logs__action--detailed': isDetailed,
});
const onClick = () => toggleBlocking(buttonType, domain);
return (
<div className={buttonClass}>
<button
type="button"
className={`btn btn-sm ${buttonClass}`}
onClick={onClick}
disabled={processingRules}
>
{t(buttonType)}
</button>
</div>
);
};
return (
<div className="logs__row o-hidden h-100">
{processedData && getHintElement({
className: hintClass,
columnClass: 'grid grid--limited',
tooltipClass: 'px-5 pb-5 pt-4 mw-75',
xlinkHref: 'question',
contentItemClass: 'text-truncate key-colon',
title: 'client_details',
content: processedData,
placement: 'bottom',
})}
<div
className={nameClass}>
<div data-tip={true} data-for={id}>{formatClientCell(row, t, isDetailed)}</div>
{isDetailed && name
&& <div className="detailed-info d-none d-sm-block logs__text"
title={name}>{name}</div>}
</div>
{renderBlockingButton(isFiltered, domain)}
</div>
);
};
getClientCell.propTypes = {
row: PropTypes.object.isRequired,
t: PropTypes.func.isRequired,
isDetailed: PropTypes.bool.isRequired,
toggleBlocking: PropTypes.func.isRequired,
autoClients: PropTypes.array.isRequired,
processingRules: PropTypes.bool.isRequired,
};
export default getClientCell;

View File

@ -0,0 +1,28 @@
import React from 'react';
import { formatTime, formatDateTime } from '../../../helpers/helpers';
import {
DEFAULT_SHORT_DATE_FORMAT_OPTIONS,
DEFAULT_TIME_FORMAT,
} from '../../../helpers/constants';
const getDateCell = (row, isDetailed) => {
const { time } = row.original;
if (!time) {
return '';
}
const formattedTime = formatTime(time, DEFAULT_TIME_FORMAT);
const formattedDate = formatDateTime(time, DEFAULT_SHORT_DATE_FORMAT_OPTIONS);
return (
<div className="logs__cell">
<div className="logs__time" title={formattedTime}>{formattedTime}</div>
{isDetailed && <div className="detailed-info d-none d-sm-block text-truncate"
title={formattedDate}>{formattedDate}</div>}
</div>
);
};
export default getDateCell;

View File

@ -0,0 +1,124 @@
import React from 'react';
import classNames from 'classnames';
import PropTypes from 'prop-types';
import getHintElement from './getHintElement';
import {
DEFAULT_SHORT_DATE_FORMAT_OPTIONS,
LONG_TIME_FORMAT,
SCHEME_TO_PROTOCOL_MAP,
} from '../../../helpers/constants';
import { captitalizeWords, formatDateTime, formatTime } from '../../../helpers/helpers';
import { getSourceData } from '../../../helpers/trackers/trackers';
const getDomainCell = (props) => {
const {
row, t, isDetailed, dnssec_enabled,
} = props;
const {
tracker, type, answer_dnssec, client_proto, domain, time,
} = row.original;
const hasTracker = !!tracker;
const lockIconClass = classNames('icons', 'icon--small', 'd-none', 'd-sm-block', 'cursor--pointer', {
'icon--active': answer_dnssec,
'icon--disabled': !answer_dnssec,
'my-3': isDetailed,
});
const privacyIconClass = classNames('icons', 'mx-2', 'icon--small', 'd-none', 'd-sm-block', 'cursor--pointer', {
'icon--active': hasTracker,
'icon--disabled': !hasTracker,
'my-3': isDetailed,
});
const dnssecHint = getHintElement({
className: lockIconClass,
tooltipClass: 'py-4 px-5 pb-45',
canShowTooltip: answer_dnssec,
xlinkHref: 'lock',
columnClass: 'w-100',
content: 'validated_with_dnssec',
placement: 'bottom',
});
const protocol = t(SCHEME_TO_PROTOCOL_MAP[client_proto]) || '';
const ip = type ? `${t('type_table_header')}: ${type}` : '';
const requestDetailsObj = {
time_table_header: formatTime(time, LONG_TIME_FORMAT),
date: formatDateTime(time, DEFAULT_SHORT_DATE_FORMAT_OPTIONS),
domain,
type_table_header: type,
protocol,
};
const sourceData = getSourceData(tracker);
const knownTrackerDataObj = {
name_table_header: tracker && tracker.name,
category_label: tracker && captitalizeWords(tracker.category),
source_label: sourceData
&& <a href={sourceData.url} target="_blank" rel="noopener noreferrer"
className="link--green">{sourceData.name}</a>,
};
const renderGrid = (content, idx) => {
const preparedContent = typeof content === 'string' ? t(content) : content;
const className = classNames('text-truncate key-colon o-hidden', {
'overflow-break': preparedContent.length > 100,
});
return <div key={idx} className={className}>{preparedContent}</div>;
};
const getGrid = (contentObj, title, className) => [
<div key={title} className={classNames('pb-2 grid--title', className)}>{t(title)}</div>,
<div key={`${title}-1`}
className="grid grid--limited">{React.Children.map(Object.entries(contentObj), renderGrid)}</div>,
];
const requestDetails = getGrid(requestDetailsObj, 'request_details');
const renderContent = hasTracker ? requestDetails.concat(getGrid(knownTrackerDataObj, 'known_tracker', 'pt-4')) : requestDetails;
const trackerHint = getHintElement({
className: privacyIconClass,
tooltipClass: 'pt-4 pb-5 px-5 mw-75',
xlinkHref: 'privacy',
contentItemClass: 'key-colon',
renderContent,
place: 'bottom',
});
const valueClass = classNames('w-100', {
'px-2 d-flex justify-content-center flex-column': isDetailed,
});
const details = [ip, protocol].filter(Boolean)
.join(', ');
return (
<div className="logs__row o-hidden">
{dnssec_enabled && dnssecHint}
{trackerHint}
<div className={valueClass}>
<div className="text-truncate" title={domain}>{domain}</div>
{details && isDetailed
&& <div className="detailed-info d-none d-sm-block text-truncate"
title={details}>{details}</div>}
</div>
</div>
);
};
getDomainCell.propTypes = {
row: PropTypes.object.isRequired,
t: PropTypes.func.isRequired,
isDetailed: PropTypes.bool.isRequired,
toggleBlocking: PropTypes.func.isRequired,
autoClients: PropTypes.array.isRequired,
dnssec_enabled: PropTypes.bool.isRequired,
};
export default getDomainCell;

View File

@ -0,0 +1,65 @@
import React from 'react';
import PropTypes from 'prop-types';
import TooltipTrigger from 'react-popper-tooltip';
import { Trans } from 'react-i18next';
import classNames from 'classnames';
import './Tooltip.css';
import 'react-popper-tooltip/dist/styles.css';
import { HIDE_TOOLTIP_DELAY } from '../../../helpers/constants';
const getHintElement = ({
className,
contentItemClass,
columnClass,
canShowTooltip = true,
xlinkHref,
title,
placement,
tooltipClass,
content,
renderContent = React.Children.map(
content,
(item, idx) => <div key={idx} className={contentItemClass}>
<Trans>{item || '—'}</Trans>
</div>,
),
}) => <TooltipTrigger placement={placement} trigger="hover" delayHide={HIDE_TOOLTIP_DELAY} tooltip={
({
tooltipRef,
getTooltipProps,
}) => <div {...getTooltipProps({
ref: tooltipRef,
className: classNames('tooltip__container', tooltipClass, { 'd-none': !canShowTooltip }),
})}
>
{title && <div className="pb-4 h-25 grid-content font-weight-bold">
<Trans>{title}</Trans>
</div>}
<div className={classNames(columnClass)}>{renderContent}</div>
</div>
}>{({
getTriggerProps, triggerRef,
}) => <span {...getTriggerProps({ ref: triggerRef })}>
{xlinkHref && <svg className={className}>
<use xlinkHref={`#${xlinkHref}`} />
</svg>}
</span>}
</TooltipTrigger>;
getHintElement.propTypes = {
className: PropTypes.string,
contentItemClass: PropTypes.string,
columnClass: PropTypes.string,
tooltipClass: PropTypes.string,
title: PropTypes.string,
placement: PropTypes.string,
canShowTooltip: PropTypes.string,
xlinkHref: PropTypes.string,
content: PropTypes.oneOfType([
PropTypes.string,
PropTypes.array,
]),
renderContent: PropTypes.arrayOf(PropTypes.element),
};
export default getHintElement;

View File

@ -0,0 +1,137 @@
import React from 'react';
import classNames from 'classnames';
import { formatElapsedMs } from '../../../helpers/helpers';
import {
CUSTOM_FILTERING_RULES_ID,
FILTERED_STATUS,
FILTERED_STATUS_TO_META_MAP,
} from '../../../helpers/constants';
import getHintElement from './getHintElement';
const getFilterName = (filters, whitelistFilters, filterId, t) => {
if (filterId === CUSTOM_FILTERING_RULES_ID) {
return t('custom_filter_rules');
}
const filter = filters.find((filter) => filter.id === filterId)
|| whitelistFilters.find((filter) => filter.id === filterId);
let filterName = '';
if (filter) {
filterName = filter.name;
}
if (!filterName) {
filterName = t('unknown_filter', { filterId });
}
return filterName;
};
const getResponseCell = (row, filtering, t, isDetailed) => {
const {
reason, filterId, rule, status, upstream, elapsedMs, domain, response,
} = row.original;
const { filters, whitelistFilters } = filtering;
const formattedElapsedMs = formatElapsedMs(elapsedMs, t);
const statusLabel = t((FILTERED_STATUS_TO_META_MAP[reason]
&& FILTERED_STATUS_TO_META_MAP[reason].label) || reason);
const boldStatusLabel = <span className="font-weight-bold">{statusLabel}</span>;
const filter = getFilterName(filters, whitelistFilters, filterId, t);
const renderResponses = (responseArr) => {
if (responseArr.length === 0) {
return '';
}
return <div>{responseArr.map((response) => {
const className = classNames('white-space--nowrap', {
'overflow-break': response.length > 100,
});
return <div key={response} className={className}>{`${response}\n`}</div>;
})}</div>;
};
const FILTERED_STATUS_TO_FIELDS_MAP = {
[FILTERED_STATUS.NOT_FILTERED_NOT_FOUND]: {
domain,
encryption_status: boldStatusLabel,
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
response_code: status,
response_table_header: renderResponses(response),
},
[FILTERED_STATUS.FILTERED_BLOCKED_SERVICE]: {
domain,
encryption_status: boldStatusLabel,
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
filter,
rule_label: rule,
response_code: status,
},
[FILTERED_STATUS.NOT_FILTERED_WHITE_LIST]: {
domain,
encryption_status: boldStatusLabel,
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
filter,
rule_label: rule,
response_code: status,
},
[FILTERED_STATUS.NOT_FILTERED_WHITE_LIST]: {
domain,
encryption_status: boldStatusLabel,
filter,
rule_label: rule,
response_code: status,
},
[FILTERED_STATUS.FILTERED_SAFE_SEARCH]: {
domain,
encryption_status: boldStatusLabel,
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
response_code: status,
},
[FILTERED_STATUS.FILTERED_BLACK_LIST]: {
domain,
encryption_status: boldStatusLabel,
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
response_code: status,
},
};
const fields = FILTERED_STATUS_TO_FIELDS_MAP[reason]
? Object.entries(FILTERED_STATUS_TO_FIELDS_MAP[reason])
: Object.entries(FILTERED_STATUS_TO_FIELDS_MAP.NotFilteredNotFound);
const detailedInfo = reason === FILTERED_STATUS.FILTERED_BLOCKED_SERVICE
|| reason === FILTERED_STATUS.FILTERED_BLACK_LIST
? filter : formattedElapsedMs;
return (
<div className="logs__row">
{fields && getHintElement({
className: classNames('icons mr-4 icon--small cursor--pointer icon--light-gray', { 'my-3': isDetailed }),
columnClass: 'grid grid--limited',
tooltipClass: 'px-5 pb-5 pt-4 mw-75 custom-tooltip__response-details',
contentItemClass: 'text-truncate key-colon o-hidden',
xlinkHref: 'question',
title: 'response_details',
content: fields,
placement: 'bottom',
})}
<div className="text-truncate">
<div className="text-truncate" title={statusLabel}>{statusLabel}</div>
{isDetailed && <div
className="detailed-info d-none d-sm-block pt-1 text-truncate" title={detailedInfo}>{detailedInfo}</div>}
</div>
</div>
);
};
export default getResponseCell;

View File

@ -0,0 +1,30 @@
import React, { Fragment } from 'react';
import { Trans } from 'react-i18next';
import { HashLink as Link } from 'react-router-hash-link';
import Card from '../ui/Card';
const Disabled = () => (
<Fragment>
<div className="page-header">
<h1 className="page-title page-title--large">
<Trans>query_log</Trans>
</h1>
</div>
<Card>
<div className="lead text-center py-6">
<Trans
components={[
<Link to="/settings#logs-config" key="0">
link
</Link>,
]}
>
query_log_disabled
</Trans>
</div>
</Card>
</Fragment>
);
export default Disabled;

View File

@ -1,11 +1,9 @@
import React, { Fragment } from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Field, reduxForm } from 'redux-form'; import { Field, reduxForm } from 'redux-form';
import { withTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import flow from 'lodash/flow'; import debounce from 'lodash/debounce';
import { DEBOUNCE_FILTER_TIMEOUT, FORM_NAME, RESPONSE_FILTER } from '../../../helpers/constants';
import { renderInputField } from '../../../helpers/form';
import { FORM_NAME, RESPONSE_FILTER } from '../../../helpers/constants';
import Tooltip from '../../ui/Tooltip'; import Tooltip from '../../ui/Tooltip';
const renderFilterField = ({ const renderFilterField = ({
@ -18,25 +16,28 @@ const renderFilterField = ({
autoComplete, autoComplete,
tooltip, tooltip,
meta: { touched, error }, meta: { touched, error },
}) => <Fragment> }) => <>
<div className="logs__input-wrap"> <div className="input-group-search">
<input <svg className="icons icon--small icon--gray">
{...input} <use xlinkHref="#magnifier" />
id={id} </svg>
placeholder={placeholder} </div>
type={type} <input
className={className} {...input}
disabled={disabled} id={id}
autoComplete={autoComplete} placeholder={placeholder}
/> type={type}
<span className="logs__notice"> className={className}
disabled={disabled}
autoComplete={autoComplete}
aria-label={placeholder} />
<span className="logs__notice">
<Tooltip text={tooltip} type='tooltip-custom--logs' /> <Tooltip text={tooltip} type='tooltip-custom--logs' />
</span> </span>
{!disabled {!disabled
&& touched && touched
&& (error && <span className="form__message form__message--error">{error}</span>)} && (error && <span className="form__message form__message--error">{error}</span>)}
</div> </>;
</Fragment>;
renderFilterField.propTypes = { renderFilterField.propTypes = {
input: PropTypes.object.isRequired, input: PropTypes.object.isRequired,
@ -55,62 +56,47 @@ renderFilterField.propTypes = {
const Form = (props) => { const Form = (props) => {
const { const {
t, className = '',
handleChange, responseStatusClass,
submit,
} = props; } = props;
const [t] = useTranslation();
const debouncedSubmit = debounce(submit, DEBOUNCE_FILTER_TIMEOUT);
const zeroDelaySubmit = () => setTimeout(submit, 0);
return ( return (
<form onSubmit={handleChange}> <form className="d-flex flex-wrap form-control--container"
<div className="row"> onSubmit={(e) => {
<div className="col-6 col-sm-3 my-2"> e.preventDefault();
<Field zeroDelaySubmit();
id="filter_domain" debouncedSubmit.cancel();
name="filter_domain" }}
component={renderFilterField} >
type="text" <Field
className="form-control" id="search"
placeholder={t('domain_name_table_header')} name="search"
tooltip={t('query_log_strict_search')} component={renderFilterField}
onChange={handleChange} type="text"
/> className={`form-control--search form-control--transparent ${className}`}
</div> placeholder={t('domain_or_client')}
<div className="col-6 col-sm-3 my-2"> tooltip={t('query_log_strict_search')}
<Field onChange={debouncedSubmit}
id="filter_question_type" />
name="filter_question_type" <div className="field__select">
component={renderInputField} <Field
type="text" name="response_status"
className="form-control" component="select"
placeholder={t('type_table_header')} className={`form-control custom-select custom-select--logs custom-select__arrow--left ml-small form-control--transparent ${responseStatusClass}`}
onChange={handleChange} onChange={zeroDelaySubmit}
/> >
</div> {Object.values(RESPONSE_FILTER)
<div className="col-6 col-sm-3 my-2"> .map(({
<Field query, label, disabled,
name="filter_response_status" }) => <option key={label} value={query}
component="select" disabled={disabled}>{t(label)}</option>)}
className="form-control custom-select" </Field>
>
<option value={RESPONSE_FILTER.ALL}>
{t('show_all_filter_type')}
</option>
<option value={RESPONSE_FILTER.FILTERED}>
{t('show_filtered_type')}
</option>
</Field>
</div>
<div className="col-6 col-sm-3 my-2">
<Field
id="filter_client"
name="filter_client"
component={renderFilterField}
type="text"
className="form-control"
placeholder={t('client_table_header')}
tooltip={t('query_log_strict_search')}
onChange={handleChange}
/>
</div>
</div> </div>
</form> </form>
); );
@ -118,12 +104,11 @@ const Form = (props) => {
Form.propTypes = { Form.propTypes = {
handleChange: PropTypes.func, handleChange: PropTypes.func,
t: PropTypes.func.isRequired, className: PropTypes.string,
responseStatusClass: PropTypes.string,
submit: PropTypes.func.isRequired,
}; };
export default flow([ export default reduxForm({
withTranslation(), form: FORM_NAME.LOGS_FILTER,
reduxForm({ })(Form);
form: FORM_NAME.LOGS_FILTER,
}),
])(Form);

View File

@ -1,52 +1,48 @@
import React, { Component } from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import debounce from 'lodash/debounce'; import { Trans } from 'react-i18next';
import classnames from 'classnames'; import { useDispatch } from 'react-redux';
import { DEBOUNCE_FILTER_TIMEOUT, RESPONSE_FILTER } from '../../../helpers/constants';
import { isValidQuestionType } from '../../../helpers/helpers';
import Form from './Form'; import Form from './Form';
import Card from '../../ui/Card'; import { setLogsFilter } from '../../../actions/queryLogs';
class Filters extends Component { const Filters = ({ filter, refreshLogs, setIsLoading }) => {
getFilters = ({ const dispatch = useDispatch();
filter_domain, filter_question_type, filter_response_status, filter_client,
}) => ({
filter_domain: filter_domain || '',
filter_question_type: isValidQuestionType(filter_question_type) ? filter_question_type.toUpperCase() : '',
filter_response_status: filter_response_status === RESPONSE_FILTER.FILTERED ? filter_response_status : '',
filter_client: filter_client || '',
});
handleFormChange = debounce((values) => { const onSubmit = async (values) => {
const filter = this.getFilters(values); setIsLoading(true);
this.props.setLogsFilter(filter); await dispatch(setLogsFilter(values));
}, DEBOUNCE_FILTER_TIMEOUT); setIsLoading(false);
};
render() { return (
const { filter, processingAdditionalLogs } = this.props; <div className="page-header page-header--logs">
<h1 className="page-title page-title--large">
<Trans>query_log</Trans>
<button
type="button"
className="btn btn-icon--green ml-3 bg-transparent"
onClick={refreshLogs}
>
<svg className="icons icon--small">
<use xlinkHref="#update" />
</svg>
</button>
const cardBodyClass = classnames({ </h1>
'card-body': true, <Form
'card-body--loading': processingAdditionalLogs, responseStatusClass="d-sm-block"
}); initialValues={filter}
onSubmit={onSubmit}
return ( />
<Card bodyType={cardBodyClass}> </div>
<Form );
initialValues={filter} };
onChange={this.handleFormChange}
/>
</Card>
);
}
}
Filters.propTypes = { Filters.propTypes = {
filter: PropTypes.object.isRequired, filter: PropTypes.object.isRequired,
setLogsFilter: PropTypes.func.isRequired, refreshLogs: PropTypes.func.isRequired,
processingGetLogs: PropTypes.bool.isRequired, processingGetLogs: PropTypes.bool.isRequired,
processingAdditionalLogs: PropTypes.bool.isRequired, setIsLoading: PropTypes.func.isRequired,
}; };
export default Filters; export default Filters;

View File

@ -1,8 +1,19 @@
:root {
--gray-4d: #4D4D4D;
--gray-8: #888;
--danger: #DF3812;
}
.logs__row { .logs__row {
position: relative; position: relative;
display: flex; display: flex;
align-items: center;
min-height: 26px; min-height: 26px;
overflow: hidden;
text-overflow: ellipsis;
}
.card-table .logs__row {
overflow: visible;
} }
.logs__row--center { .logs__row--center {
@ -15,10 +26,6 @@
justify-content: center; justify-content: center;
} }
.logs__row--overflow {
overflow: hidden;
}
.logs__row--icons { .logs__row--icons {
max-width: 180px; max-width: 180px;
flex-flow: row wrap; flex-flow: row wrap;
@ -35,6 +42,15 @@
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
font-size: 1rem;
font-family: var(--font-family-sans-serif);
color: var(--gray-4d);
letter-spacing: 0;
line-height: 1.5rem;
}
.logs__text--bold {
font-weight: bold;
} }
.logs__text--full { .logs__text--full {
@ -51,6 +67,11 @@
white-space: normal; white-space: normal;
} }
.logs__text--nowrap {
line-height: 1.4;
white-space: nowrap;
}
.logs__text--whois { .logs__text--whois {
line-height: 1.2; line-height: 1.2;
} }
@ -61,11 +82,18 @@
margin-right: 5px; margin-right: 5px;
} }
.logs__action, .tooltip__option {
.table__action { height: 2.5rem !important;
position: absolute; width: 10.5rem;
top: 11px; padding: 0.3125rem 1.5rem 0.6875rem;
right: 15px; }
.tooltip__option:hover {
background-color: var(--gray-f3);
cursor: pointer;
}
.button__action {
background-color: #fff; background-color: #fff;
border-radius: 4px; border-radius: 4px;
transition: opacity 0.2s ease, visibility 0.2s ease; transition: opacity 0.2s ease, visibility 0.2s ease;
@ -73,11 +101,31 @@
opacity: 0; opacity: 0;
} }
.table__action {
position: absolute;
top: 11px;
right: 15px;
}
.logs__action {
position: absolute;
top: 0;
right: 1rem;
}
.logs__action--detailed {
top: 5px;
}
.logs__table .rt-td, .logs__table .rt-td,
.clients__table .rt-td { .clients__table .rt-td {
position: relative; position: relative;
} }
.logs__table .rt-thead, .logs__table .rt-tbody {
min-width: 100% !important;
}
.logs__table .rt-tr:hover .logs__action, .logs__table .rt-tr:hover .logs__action,
.clients__table .rt-tr:hover .table__action { .clients__table .rt-tr:hover .table__action {
visibility: visible; visibility: visible;
@ -152,14 +200,14 @@
} }
.logs__notice { .logs__notice {
position: absolute; position: relative;
z-index: 1; z-index: 1;
top: 8px; top: 0.5rem;
right: 10px; right: 2rem;
margin-top: 3px; margin-top: 0.1875rem;
font-size: 12px; font-size: 0.75rem;
text-align: left; text-align: left;
color: #a5a5a5; color: var(--gray-a5);
} }
.logs__whois { .logs__whois {
@ -185,3 +233,331 @@
margin-right: 1px; margin-right: 1px;
opacity: 0.5; opacity: 0.5;
} }
/* New logs */
.logs__table {
background-color: #fff;
border: 0;
border-radius: 8px;
min-height: 42rem;
max-width: 100%;
}
.logs__table--detailed {
min-height: 50rem;
}
.logs__table .rt-thead.-header {
box-shadow: none;
font-weight: bold;
}
.logs__table .rt-thead .rt-th {
padding: 0.9375rem 0.9375rem 0.875rem 0;
text-align: left;
border-right: 0;
}
.logs__table .rt-tbody .rt-td {
padding: 1rem 1rem 0.5rem 0;
border-right: 0;
}
.logs__table .rt-thead .rt-th:last-child,
.logs__table .rt-tbody .rt-td:last-child {
padding-right: 0;
}
.logs__table .rt-tbody .rt-tr-group {
border-bottom: 0;
}
.logs__table .rt-tr {
position: relative;
padding: 0 24px;
}
.logs__table .rt-tr {
position: relative;
padding: 0 1.5rem;
}
.logs__table .rt-tr-group:not(:first-child) .rt-tr:before {
content: "";
position: absolute;
left: 1.5rem;
right: 1.5rem;
top: 0;
width: calc(100% - 3rem);
height: 2px;
background-color: rgba(216, 216, 216, 0.23);
}
.logs__table .rt-tr-group:last-child .rt-tr:after,
.logs__table .rt-thead .rt-tr:after {
display: none;
}
.logs__time {
font-size: 1rem;
line-height: 1.5;
}
.detailed-info {
font-size: 0.8rem;
line-height: 1.4;
color: #888888;
}
.icon--selected {
background-color: var(--gray-f3);
border: solid 1px var(--gray-d8);
border-radius: 4px;
}
/* Hide 3 and 4 column on mobile */
.logs__table .rt-thead .rt-th:nth-child(3),
.logs__table .rt-thead .rt-th:nth-child(4),
.logs__table .rt-tbody .rt-td:nth-child(3),
.logs__table .rt-tbody .rt-td:nth-child(4) {
display: none;
}
@media screen and (min-width: 768px) {
.logs__table .rt-thead .rt-th:nth-child(3),
.logs__table .rt-thead .rt-th:nth-child(4),
.logs__table .rt-tbody .rt-td:nth-child(3),
.logs__table .rt-tbody .rt-td:nth-child(4) {
display: block;
}
}
.text-pre {
white-space: pre-wrap !important;
overflow-wrap: break-word;
overflow: visible;
}
.custom-pagination {
width: 11.875rem !important;
background-color: transparent;
box-shadow: none !important;
border: none !important;
align-items: center !important;
}
.custom-pagination--padding {
padding: 2.5rem 0 2.5rem !important;
}
.custom-pagination .-btn {
--side-size: 2rem;
background-color: transparent !important;
border: 1px solid var(--gray-d8) !important;
border-radius: 4px !important;
width: var(--side-size) !important;
height: var(--side-size) !important;
}
.custom-pagination .-btn:enabled:hover {
background-color: var(--gray-f3) !important;
}
.custom-pagination .-previous {
flex: 0 1 !important;
}
.custom-pagination .-next {
flex: 0 1 !important;
}
.custom-pagination .-btn {
display: flex !important;
}
.-pageInfo {
--side-size: 2rem;
font-variant-numeric: tabular-nums !important;
background-color: transparent !important;
border: 1px solid var(--gray-d8) !important;
border-radius: 4px !important;
width: var(--side-size) !important;
height: var(--side-size) !important;
margin: 0 !important;
display: flex !important;
justify-content: center;
align-items: center;
}
.pagination-bottom {
justify-content: center !important;
display: flex !important;
}
.-center:before {
content: '...';
transform: translateY(-0.25rem);
margin: auto;
}
.-center:after {
content: '...';
transform: translateY(-0.25rem);
margin: auto;
}
.icon--detailed-info {
position: absolute;
right: 0;
top: 0.5rem;
}
.icon--light-gray {
color: var(--gray-8);
}
.link--green {
color: var(--green79);
}
.row--detailed {
height: 4.9rem
}
.w-90 {
max-width: 90% !important;
}
.h-85 {
height: 85% !important;
}
.pt-45 {
padding-top: 1.25rem !important;
}
.pb-45 {
padding-bottom: 1.25rem !important;
}
.py-45 {
padding-top: 1.25rem !important;
padding-bottom: 1.25rem !important;
}
.mh-100 {
max-height: 100% !important;
}
.cursor--pointer {
cursor: pointer;
}
.custom-select__arrow--left {
background: #fff url('./chevron-down.svg') no-repeat left 0.2rem center;
background-size: 1.5rem;
}
.custom-select--logs {
padding: 0.5rem 0.75rem 0.5rem 1.75rem !important;
}
.bg--danger {
color: var(--danger);
}
.ml-small {
margin-left: 3.3125rem;
}
.form-control--search {
width: 39.125rem;
box-shadow: 0 1px 0 #ddd;
padding: 0 2.5rem;
height: 2.25rem;
}
.form-control--transparent {
border: 0 solid transparent !important;
background-color: transparent !important;
}
.input-group-search {
background-color: transparent;
position: relative;
left: 2rem;
top: 0.4rem;
width: 1.5rem;
height: 1.5rem;
}
.form-control--container {
max-width: 100%;
}
@media (max-width: 1279.98px) {
.form-control--search {
max-width: 30.125rem;
}
.form-control--container {
max-width: 70%;
}
.form-control--search {
max-width: 50%;
}
}
@media (max-width: 991.98px) {
.form-control--search {
max-width: 40%;
}
.form-control--container {
max-width: 100%;
}
}
@media (max-width: 767.98px) {
.rt-tr .logs__row .logs__text {
max-width: calc(100% - 1.5rem);
}
.ml-small {
margin-left: 1.5rem;
}
}
@media (max-width: 575px) {
.logs__table .rt-tr {
height: 3.125rem;
}
.logs__table .rt-tbody .rt-td {
padding: 0.625rem 1rem 0.875rem 0;
}
.logs__table {
min-height: 42rem;
}
}
@media (max-width: 500px) {
.form-control--search {
max-width: 85%;
}
.field__select {
margin-top: 1.5rem;
}
}
.loading__container > .-loading-inner {
top: 10rem !important;
bottom: initial !important;
}
.loading__text {
transform: translateY(3rem);
}

View File

@ -0,0 +1,402 @@
import React from 'react';
import PropTypes from 'prop-types';
import { useTranslation, Trans } from 'react-i18next';
import ReactTable from 'react-table';
import classNames from 'classnames';
import endsWith from 'lodash/endsWith';
import escapeRegExp from 'lodash/escapeRegExp';
import {
BLOCK_ACTIONS,
DEFAULT_SHORT_DATE_FORMAT_OPTIONS,
LONG_TIME_FORMAT,
FILTERED_STATUS_TO_META_MAP,
TABLE_DEFAULT_PAGE_SIZE,
SCHEME_TO_PROTOCOL_MAP,
} from '../../helpers/constants';
import getDateCell from './Cells/getDateCell';
import getDomainCell from './Cells/getDomainCell';
import getClientCell from './Cells/getClientCell';
import getResponseCell from './Cells/getResponseCell';
import {
captitalizeWords,
checkFiltered,
formatDateTime,
formatElapsedMs,
formatTime,
} from '../../helpers/helpers';
import Loading from '../ui/Loading';
import { getSourceData } from '../../helpers/trackers/trackers';
const Table = (props) => {
const {
setDetailedDataCurrent,
setButtonType,
setModalOpened,
isSmallScreen,
setIsLoading,
filtering,
isDetailed,
toggleDetailedLogs,
setLogsPage,
setLogsPagination,
processingGetLogs,
logs,
pages,
page,
isLoading,
} = props;
const [t] = useTranslation();
const toggleBlocking = (type, domain) => {
const {
setRules, getFilteringStatus, addSuccessToast,
} = props;
const { userRules } = filtering;
const lineEnding = !endsWith(userRules, '\n') ? '\n' : '';
const baseRule = `||${domain}^$important`;
const baseUnblocking = `@@${baseRule}`;
const blockingRule = type === BLOCK_ACTIONS.BLOCK ? baseUnblocking : baseRule;
const unblockingRule = type === BLOCK_ACTIONS.BLOCK ? baseRule : baseUnblocking;
const preparedBlockingRule = new RegExp(`(^|\n)${escapeRegExp(blockingRule)}($|\n)`);
const preparedUnblockingRule = new RegExp(`(^|\n)${escapeRegExp(unblockingRule)}($|\n)`);
const matchPreparedBlockingRule = userRules.match(preparedBlockingRule);
const matchPreparedUnblockingRule = userRules.match(preparedUnblockingRule);
if (matchPreparedBlockingRule) {
setRules(userRules.replace(`${blockingRule}`, ''));
addSuccessToast(`${t('rule_removed_from_custom_filtering_toast')}: ${blockingRule}`);
} else if (!matchPreparedUnblockingRule) {
setRules(`${userRules}${lineEnding}${unblockingRule}\n`);
addSuccessToast(`${t('rule_added_to_custom_filtering_toast')}: ${unblockingRule}`);
} else if (matchPreparedUnblockingRule) {
addSuccessToast(`${t('rule_added_to_custom_filtering_toast')}: ${unblockingRule}`);
return;
} else if (!matchPreparedBlockingRule) {
addSuccessToast(`${t('rule_removed_from_custom_filtering_toast')}: ${blockingRule}`);
return;
}
getFilteringStatus();
};
const columns = [
{
Header: t('time_table_header'),
accessor: 'time',
Cell: (row) => getDateCell(row, isDetailed),
minWidth: 70,
maxHeight: 60,
headerClassName: 'logs__text',
},
{
Header: t('request_table_header'),
accessor: 'domain',
Cell: (row) => {
const {
isDetailed,
autoClients,
dnssec_enabled,
} = props;
return getDomainCell({
row,
t,
isDetailed,
toggleBlocking,
autoClients,
dnssec_enabled,
});
},
minWidth: 180,
maxHeight: 60,
headerClassName: 'logs__text',
},
{
Header: t('response_table_header'),
accessor: 'response',
Cell: (row) => getResponseCell(
row,
filtering,
t,
isDetailed,
),
minWidth: 150,
maxHeight: 60,
headerClassName: 'logs__text',
},
{
Header: () => {
const plainSelected = classNames('cursor--pointer', {
'icon--selected': !isDetailed,
});
const detailedSelected = classNames('cursor--pointer', {
'icon--selected': isDetailed,
});
return <div className="d-flex justify-content-between">
{t('client_table_header')}
{<span>
<svg
className={`icons icon--small icon--active mr-2 cursor--pointer ${plainSelected}`}
onClick={() => toggleDetailedLogs(false)}
>
<title><Trans>compact</Trans></title>
<use xlinkHref='#list' />
</svg>
<svg
className={`icons icon--small icon--active cursor--pointer ${detailedSelected}`}
onClick={() => toggleDetailedLogs(true)}
>
<title><Trans>default</Trans></title>
<use xlinkHref='#detailed_list' />
</svg>
</span>}
</div>;
},
accessor: 'client',
Cell: (row) => {
const {
isDetailed,
autoClients,
filtering: { processingRules },
} = props;
return getClientCell({
row,
t,
isDetailed,
toggleBlocking,
autoClients,
processingRules,
});
},
minWidth: 123,
maxHeight: 60,
headerClassName: 'logs__text',
},
];
const changePage = async (page) => {
setIsLoading(true);
const { oldest, getLogs, pages } = props;
const isLastPage = pages && (page + 1 === pages);
await Promise.all([
setLogsPage(page),
setLogsPagination({
page,
pageSize: TABLE_DEFAULT_PAGE_SIZE,
}),
].concat(isLastPage ? getLogs(oldest, page) : []));
setIsLoading(false);
};
const tableClass = classNames('logs__table', {
'logs__table--detailed': isDetailed,
});
return (
<ReactTable
manual
minRows={0}
page={page}
pages={pages}
columns={columns}
filterable={false}
sortable={false}
resizable={false}
data={logs || []}
loading={isLoading}
showPageJump={false}
showPageSizeOptions={false}
onPageChange={changePage}
className={tableClass}
defaultPageSize={TABLE_DEFAULT_PAGE_SIZE}
loadingText={
<>
<Loading />
<h6 className="loading__text">{t('loading_table_status')}</h6>
</>
}
getLoadingProps={() => ({ className: 'loading__container' })}
rowsText={t('rows_table_footer_text')}
noDataText={!processingGetLogs
&& <label className="logs__text logs__text--bold">{t('nothing_found')}</label>}
pageText=''
ofText=''
showPagination={logs.length > 0}
getPaginationProps={() => ({ className: 'custom-pagination custom-pagination--padding' })}
getTbodyProps={() => ({ className: 'd-block' })}
previousText={
<svg className="icons icon--small icon--gray w-100 h-100 cursor--pointer">
<title><Trans>previous_btn</Trans></title>
<use xlinkHref="#arrow-left" />
</svg>}
nextText={
<svg className="icons icon--small icon--gray w-100 h-100 cursor--pointer">
<title><Trans>next_btn</Trans></title>
<use xlinkHref="#arrow-right" />
</svg>}
renderTotalPagesCount={() => false}
getTrGroupProps={(_state, rowInfo) => {
if (!rowInfo) {
return {};
}
const { reason } = rowInfo.original;
const colorClass = FILTERED_STATUS_TO_META_MAP[reason] ? FILTERED_STATUS_TO_META_MAP[reason].color : 'white';
return { className: colorClass };
}}
getTrProps={(state, rowInfo) => ({
className: isDetailed ? 'row--detailed' : '',
onClick: () => {
if (isSmallScreen) {
const { dnssec_enabled, autoClients } = props;
const {
answer_dnssec,
client,
domain,
elapsedMs,
info,
reason,
response,
time,
tracker,
upstream,
type,
client_proto,
} = rowInfo.original;
const hasTracker = !!tracker;
const autoClient = autoClients.find(
(autoClient) => autoClient.name === client,
);
const country = autoClient && autoClient.whois_info
&& autoClient.whois_info.country;
const network = autoClient && autoClient.whois_info
&& autoClient.whois_info.orgname;
const city = autoClient && autoClient.whois_info
&& autoClient.whois_info.city;
const source = autoClient && autoClient.source;
const formattedElapsedMs = formatElapsedMs(elapsedMs, t);
const isFiltered = checkFiltered(reason);
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
const onToggleBlock = () => {
toggleBlocking(buttonType, domain);
};
const status = t((FILTERED_STATUS_TO_META_MAP[reason]
&& FILTERED_STATUS_TO_META_MAP[reason].label) || reason);
const statusBlocked = <div className="bg--danger">{status}</div>;
const protocol = t(SCHEME_TO_PROTOCOL_MAP[client_proto]) || '';
const sourceData = getSourceData(tracker);
const detailedData = {
time_table_header: formatTime(time, LONG_TIME_FORMAT),
date: formatDateTime(time, DEFAULT_SHORT_DATE_FORMAT_OPTIONS),
encryption_status: status,
domain,
type_table_header: type,
protocol,
known_tracker: hasTracker && 'title',
table_name: hasTracker && tracker.name,
category_label: hasTracker && captitalizeWords(tracker.category),
tracker_source: hasTracker && sourceData
&& <a href={sourceData.url} target="_blank" rel="noopener noreferrer"
className="link--green">{sourceData.name}</a>,
response_details: 'title',
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
response_table_header: response && response.join('\n'),
client_details: 'title',
ip_address: client,
name: info && info.name,
country,
city,
network,
source_label: source,
validated_with_dnssec: dnssec_enabled ? Boolean(answer_dnssec) : false,
[buttonType]: <div onClick={onToggleBlock}
className="title--border bg--danger">{t(buttonType)}</div>,
};
const detailedDataBlocked = {
time_table_header: formatTime(time, LONG_TIME_FORMAT),
date: formatDateTime(time, DEFAULT_SHORT_DATE_FORMAT_OPTIONS),
encryption_status: statusBlocked,
domain,
type_table_header: type,
protocol,
known_tracker: 'title',
table_name: hasTracker && tracker.name,
category_label: hasTracker && captitalizeWords(tracker.category),
source_label: hasTracker && sourceData
&& <a href={sourceData.url} target="_blank" rel="noopener noreferrer"
className="link--green">{sourceData.name}</a>,
response_details: 'title',
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
response_table_header: response && response.join('\n'),
[buttonType]: <div onClick={onToggleBlock}
className="title--border">{t(buttonType)}</div>,
};
const detailedDataCurrent = isFiltered ? detailedDataBlocked : detailedData;
setDetailedDataCurrent(detailedDataCurrent);
setButtonType(buttonType);
setModalOpened(true);
}
},
})}
/>
);
};
Table.propTypes = {
logs: PropTypes.array.isRequired,
pages: PropTypes.number.isRequired,
page: PropTypes.number.isRequired,
autoClients: PropTypes.array.isRequired,
defaultPageSize: PropTypes.number,
oldest: PropTypes.string.isRequired,
filtering: PropTypes.object.isRequired,
processingGetLogs: PropTypes.bool.isRequired,
processingGetConfig: PropTypes.bool.isRequired,
isDetailed: PropTypes.bool.isRequired,
setLogsPage: PropTypes.func.isRequired,
setLogsPagination: PropTypes.func.isRequired,
getLogs: PropTypes.func.isRequired,
toggleDetailedLogs: PropTypes.func.isRequired,
setRules: PropTypes.func.isRequired,
addSuccessToast: PropTypes.func.isRequired,
getFilteringStatus: PropTypes.func.isRequired,
isLoading: PropTypes.bool.isRequired,
setIsLoading: PropTypes.func.isRequired,
dnssec_enabled: PropTypes.bool.isRequired,
setDetailedDataCurrent: PropTypes.func.isRequired,
setButtonType: PropTypes.func.isRequired,
setModalOpened: PropTypes.func.isRequired,
isSmallScreen: PropTypes.bool.isRequired,
};
export default Table;

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#9aa0ac" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-down"><polyline points="6 9 12 15 18 9"></polyline></svg>

After

Width:  |  Height:  |  Size: 264 B

View File

@ -1,457 +1,210 @@
import React, { Component, Fragment } from 'react'; import React, { Fragment, useEffect, useState } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import ReactTable from 'react-table'; import { Trans } from 'react-i18next';
import escapeRegExp from 'lodash/escapeRegExp'; import Modal from 'react-modal';
import endsWith from 'lodash/endsWith'; import { useDispatch } from 'react-redux';
import { Trans, withTranslation } from 'react-i18next';
import { HashLink as Link } from 'react-router-hash-link';
import { import {
formatTime, BLOCK_ACTIONS, smallScreenSize,
formatDateTime, TABLE_DEFAULT_PAGE_SIZE,
isToday, TABLE_FIRST_PAGE,
checkFiltered,
checkRewrite,
checkRewriteHosts,
checkWhiteList,
checkBlackList,
checkBlockedService,
} from '../../helpers/helpers';
import {
SERVICES, TABLE_DEFAULT_PAGE_SIZE, CUSTOM_FILTERING_RULES_ID, FILTERED,
} from '../../helpers/constants'; } from '../../helpers/constants';
import { getTrackerData } from '../../helpers/trackers/trackers';
import { formatClientCell } from '../../helpers/formatClientCell';
import Filters from './Filters';
import PageTitle from '../ui/PageTitle';
import Card from '../ui/Card';
import Loading from '../ui/Loading'; import Loading from '../ui/Loading';
import PopoverFiltered from '../ui/PopoverFilter'; import Filters from './Filters';
import Popover from '../ui/Popover'; import Table from './Table';
import Disabled from './Disabled';
import './Logs.css'; import './Logs.css';
import CellWrap from '../ui/CellWrap'; import { getFilteringStatus } from '../../actions/filtering';
import { getClients } from '../../actions';
import { getDnsConfig } from '../../actions/dnsConfig';
import { getLogsConfig } from '../../actions/queryLogs';
import { addSuccessToast } from '../../actions/toasts';
const TABLE_FIRST_PAGE = 0;
const INITIAL_REQUEST = true; const INITIAL_REQUEST = true;
const INITIAL_REQUEST_DATA = ['', TABLE_FIRST_PAGE, INITIAL_REQUEST]; const INITIAL_REQUEST_DATA = ['', TABLE_FIRST_PAGE, INITIAL_REQUEST];
class Logs extends Component { export const processContent = (data, buttonType) => Object.entries(data)
componentDidMount() { .map(([key, value]) => {
this.props.setLogsPage(TABLE_FIRST_PAGE); const isTitle = value === 'title';
this.getLogs(...INITIAL_REQUEST_DATA); const isButton = key === buttonType;
this.props.getFilteringStatus(); const isBoolean = typeof value === 'boolean';
this.props.getLogsConfig(); const isHidden = isBoolean && value === false;
}
getLogs = (older_than, page, initial) => { let keyClass = 'key-colon';
if (this.props.queryLogs.enabled) {
this.props.getLogs({ if (isTitle) {
older_than, page, pageSize: TABLE_DEFAULT_PAGE_SIZE, initial, keyClass = 'title--border';
}
if (isButton || isBoolean) {
keyClass = '';
}
return isHidden ? null : <Fragment key={key}>
<div
className={`key__${key} ${keyClass} ${(isBoolean && value === true) ? 'font-weight-bold' : ''}`}>
<Trans>{isButton ? value : key}</Trans>
</div>
<div className={`value__${key} text-pre text-truncate`}>
<Trans>{(isTitle || isButton || isBoolean) ? '' : value || '—'}</Trans>
</div>
</Fragment>;
});
const Logs = (props) => {
const dispatch = useDispatch();
const [isSmallScreen, setIsSmallScreen] = useState(window.innerWidth < smallScreenSize);
const [detailedDataCurrent, setDetailedDataCurrent] = useState({});
const [buttonType, setButtonType] = useState(BLOCK_ACTIONS.BLOCK);
const [isModalOpened, setModalOpened] = useState(false);
const [isLoading, setIsLoading] = useState(false);
const {
filtering,
setLogsPage,
setLogsPagination,
setLogsFilter,
toggleDetailedLogs,
dashboard,
dnsConfig,
queryLogs: {
filter,
enabled,
processingGetConfig,
processingAdditionalLogs,
processingGetLogs,
oldest,
logs,
pages,
page,
isDetailed,
},
} = props;
const mediaQuery = window.matchMedia(`(max-width: ${smallScreenSize}px)`);
const mediaQueryHandler = (e) => {
setIsSmallScreen(e.matches);
if (e.matches) {
toggleDetailedLogs(false);
}
};
useEffect(() => {
mediaQuery.addListener(mediaQueryHandler);
return () => mediaQuery.removeListener(mediaQueryHandler);
}, []);
const closeModal = () => setModalOpened(false);
const getLogs = (older_than, page, initial) => {
if (props.queryLogs.enabled) {
props.getLogs({
older_than,
page,
pageSize: TABLE_DEFAULT_PAGE_SIZE,
initial,
}); });
} }
}; };
refreshLogs = () => { useEffect(() => {
window.location.reload(); (async () => {
setIsLoading(true);
dispatch(setLogsPage(TABLE_FIRST_PAGE));
dispatch(getFilteringStatus());
dispatch(getClients());
try {
await Promise.all([
getLogs(...INITIAL_REQUEST_DATA),
dispatch(getLogsConfig()),
dispatch(getDnsConfig()),
]);
} catch (err) {
console.error(err);
} finally {
setIsLoading(false);
}
})();
}, []);
const refreshLogs = async () => {
setIsLoading(true);
await Promise.all([
dispatch(setLogsPage(TABLE_FIRST_PAGE)),
getLogs(...INITIAL_REQUEST_DATA),
]);
dispatch(addSuccessToast('query_log_updated'));
setIsLoading(false);
}; };
renderTooltip = (isFiltered, rule, filter, service) => isFiltered return (
&& <PopoverFiltered rule={rule} filter={filter} service={service} />; <>
{enabled && processingGetConfig && <Loading />}
renderResponseList = (response, status) => { {enabled && !processingGetConfig && (
if (response.length > 0) { <Fragment>
const listItems = response.map((response, index) => ( <Filters
<li key={index} title={response} className="logs__list-item"> filter={filter}
{response} setIsLoading={setIsLoading}
</li> processingGetLogs={processingGetLogs}
)); processingAdditionalLogs={processingAdditionalLogs}
setLogsFilter={setLogsFilter}
return <ul className="list-unstyled">{listItems}</ul>; refreshLogs={refreshLogs}
} />
<Table
return ( isLoading={isLoading}
<div> setIsLoading={setIsLoading}
<Trans values={{ value: status }}>query_log_response_status</Trans> logs={logs}
</div> pages={pages}
); page={page}
}; autoClients={dashboard.autoClients}
oldest={oldest}
toggleBlocking = (type, domain) => { filtering={filtering}
const { userRules } = this.props.filtering; processingGetLogs={processingGetLogs}
const { t } = this.props; processingGetConfig={processingGetConfig}
const lineEnding = !endsWith(userRules, '\n') ? '\n' : ''; isDetailed={isDetailed}
const baseRule = `||${domain}^$important`; setLogsPagination={setLogsPagination}
const baseUnblocking = `@@${baseRule}`; setLogsPage={setLogsPage}
const blockingRule = type === 'block' ? baseUnblocking : baseRule; toggleDetailedLogs={toggleDetailedLogs}
const unblockingRule = type === 'block' ? baseRule : baseUnblocking; getLogs={getLogs}
const preparedBlockingRule = new RegExp(`(^|\n)${escapeRegExp(blockingRule)}($|\n)`); setRules={props.setRules}
const preparedUnblockingRule = new RegExp(`(^|\n)${escapeRegExp(unblockingRule)}($|\n)`); addSuccessToast={props.addSuccessToast}
getFilteringStatus={props.getFilteringStatus}
if (userRules.match(preparedBlockingRule)) { dnssec_enabled={dnsConfig.dnssec_enabled}
this.props.setRules(userRules.replace(`${blockingRule}`, '')); setDetailedDataCurrent={setDetailedDataCurrent}
this.props.addSuccessToast(`${t('rule_removed_from_custom_filtering_toast')}: ${blockingRule}`); setButtonType={setButtonType}
} else if (!userRules.match(preparedUnblockingRule)) { setModalOpened={setModalOpened}
this.props.setRules(`${userRules}${lineEnding}${unblockingRule}\n`); isSmallScreen={isSmallScreen}
this.props.addSuccessToast(`${t('rule_added_to_custom_filtering_toast')}: ${unblockingRule}`); />
} <Modal portalClassName='grid' isOpen={isSmallScreen && isModalOpened}
onRequestClose={closeModal}
this.props.getFilteringStatus(); style={{
}; content: {
width: '100%',
renderBlockingButton(isFiltered, domain) { height: 'fit-content',
const buttonClass = isFiltered ? 'btn-outline-secondary' : 'btn-outline-danger'; left: 0,
const buttonText = isFiltered ? 'unblock_btn' : 'block_btn'; top: 47,
const buttonType = isFiltered ? 'unblock' : 'block'; padding: '1rem 1.5rem 1rem',
},
return ( overlay: {
<div className="logs__action"> backgroundColor: 'rgba(0,0,0,0.5)',
<button },
type="button" }}
className={`btn btn-sm ${buttonClass}`} >
onClick={() => this.toggleBlocking(buttonType, domain)} <svg
disabled={this.props.filtering.processingRules} className="icon icon--small icon-cross d-block d-md-none cursor--pointer"
> onClick={closeModal}>
<Trans>{buttonText}</Trans> <use xlinkHref="#cross" />
</button> </svg>
</div> {processContent(detailedDataCurrent, buttonType)}
); </Modal>
} </Fragment>
)}
getDateCell = (row) => CellWrap( {!enabled && !processingGetConfig && (
row, <Disabled />
(isToday(row.value) ? formatTime : formatDateTime), )}
formatDateTime, </>
); );
};
getDomainCell = (row) => {
const response = row.value;
const trackerData = getTrackerData(response);
return (
<div className="logs__row" title={response}>
<div className="logs__text">{response}</div>
{trackerData && <Popover data={trackerData} />}
</div>
);
};
normalizeResponse = (response) => (
response.map((response) => {
const { value, type, ttl } = response;
return `${type}: ${value} (ttl=${ttl})`;
})
);
getFilterName = (filters, whitelistFilters, filterId, t) => {
if (filterId === CUSTOM_FILTERING_RULES_ID) {
return t('custom_filter_rules');
}
const filter = filters.find((filter) => filter.id === filterId)
|| whitelistFilters.find((filter) => filter.id === filterId);
let filterName = '';
if (filter) {
filterName = filter.name;
}
if (!filterName) {
filterName = t('unknown_filter', { filterId });
}
return filterName;
}
getResponseCell = ({ value: responses, original }) => {
const {
reason, filterId, rule, status, originalAnswer,
} = original;
const { t, filtering } = this.props;
const { filters, whitelistFilters } = filtering;
const isFiltered = checkFiltered(reason);
const isBlackList = checkBlackList(reason);
const isRewrite = checkRewrite(reason);
const isRewriteAuto = checkRewriteHosts(reason);
const isWhiteList = checkWhiteList(reason);
const isBlockedService = checkBlockedService(reason);
const isBlockedCnameIp = originalAnswer;
const filterKey = reason.replace(FILTERED, '');
const parsedFilteredReason = t('query_log_filtered', { filter: filterKey });
const currentService = SERVICES.find((service) => service.id === original.serviceName);
const serviceName = currentService && currentService.name;
const filterName = this.getFilterName(filters, whitelistFilters, filterId, t);
if (isBlockedCnameIp) {
const normalizedAnswer = this.normalizeResponse(originalAnswer);
return (
<div className="logs__row logs__row--column">
<div className="logs__text-wrap">
<span className="logs__text">
<Trans>blocked_by_response</Trans>
</span>
{this.renderTooltip(isFiltered, rule, filterName)}
</div>
<div className="logs__list-wrap">
{this.renderResponseList(normalizedAnswer, status)}
</div>
</div>
);
}
return (
<div className="logs__row logs__row--column">
<div className="logs__text-wrap">
{(isFiltered || isBlockedService) && !isBlackList && (
<span className="logs__text" title={parsedFilteredReason}>
{parsedFilteredReason}
</span>
)}
{isBlackList && (
<span className="logs__text">
<Trans values={{ filter: filterName }}>
query_log_filtered
</Trans>
</span>
)}
{isBlockedService
? this.renderTooltip(isFiltered, '', '', serviceName)
: this.renderTooltip(isFiltered, rule, filterName)}
{isRewrite && (
<strong>
<Trans>rewrite_applied</Trans>
</strong>
)}
{isRewriteAuto && (
<span className="logs__text">
<strong>
<Trans>rewrite_hosts_applied</Trans>
</strong>
</span>
)}
</div>
<div className="logs__list-wrap">
{this.renderResponseList(responses, status)}
{isWhiteList && this.renderTooltip(isWhiteList, rule, filterName)}
</div>
</div>
);
};
getClientCell = (row) => {
const { original } = row;
const { t } = this.props;
const { reason, domain } = original;
const isFiltered = checkFiltered(reason);
const isRewrite = checkRewrite(reason);
const isAutoRewrite = checkRewriteHosts(reason);
if (isAutoRewrite) {
return (
<div className="logs__row logs__row--overflow logs__row--column">
{formatClientCell(row, t)}
</div>
);
}
return (
<Fragment>
<div className="logs__row logs__row--overflow logs__row--column">
{formatClientCell(row, t)}
</div>
{isRewrite ? (
<div className="logs__action">
<Link to="/dns_rewrites" className="btn btn-sm btn-outline-primary">
<Trans>configure</Trans>
</Link>
</div>
) : (
this.renderBlockingButton(isFiltered, domain)
)}
</Fragment>
);
};
fetchData = (state) => {
const { pages } = state;
const { oldest, page } = this.props.queryLogs;
const isLastPage = pages && (page + 1 === pages);
if (isLastPage) {
this.getLogs(oldest, page);
}
};
changePage = (page) => {
this.props.setLogsPage(page);
this.props.setLogsPagination({ page, pageSize: TABLE_DEFAULT_PAGE_SIZE });
};
renderLogs() {
const { queryLogs, t } = this.props;
const {
processingGetLogs, processingGetConfig, logs, pages, page,
} = queryLogs;
const isLoading = processingGetLogs || processingGetConfig;
const columns = [
{
Header: t('time_table_header'),
accessor: 'time',
minWidth: 105,
Cell: this.getDateCell,
},
{
Header: t('domain_name_table_header'),
accessor: 'domain',
minWidth: 180,
Cell: this.getDomainCell,
},
{
Header: t('type_table_header'),
accessor: 'type',
maxWidth: 60,
},
{
Header: t('response_table_header'),
accessor: 'response',
minWidth: 250,
Cell: this.getResponseCell,
},
{
Header: t('client_table_header'),
accessor: 'client',
maxWidth: 240,
minWidth: 240,
Cell: this.getClientCell,
},
];
return (
<ReactTable
manual
minRows={5}
page={page}
pages={pages}
columns={columns}
filterable={false}
sortable={false}
data={logs || []}
loading={isLoading}
showPagination={true}
showPaginationTop={true}
showPageJump={false}
showPageSizeOptions={false}
onFetchData={this.fetchData}
onPageChange={this.changePage}
className="logs__table"
defaultPageSize={TABLE_DEFAULT_PAGE_SIZE}
previousText={t('previous_btn')}
nextText={t('next_btn')}
loadingText={t('loading_table_status')}
rowsText={t('rows_table_footer_text')}
noDataText={t('no_logs_found')}
pageText={''}
ofText={''}
renderTotalPagesCount={() => false}
defaultFilterMethod={(filter, row) => {
const id = filter.pivotId || filter.id;
return row[id] !== undefined
? String(row[id]).indexOf(filter.value) !== -1
: true;
}}
defaultSorted={[
{
id: 'time',
desc: true,
},
]}
getTrProps={(_state, rowInfo) => {
if (!rowInfo) {
return {};
}
const { reason } = rowInfo.original;
if (checkFiltered(reason)) {
return {
className: 'red',
};
} if (checkWhiteList(reason)) {
return {
className: 'green',
};
} if (checkRewrite(reason) || checkRewriteHosts(reason)) {
return {
className: 'blue',
};
}
return {
className: '',
};
}}
/>
);
}
render() {
const { queryLogs, t } = this.props;
const {
enabled, processingGetConfig, processingAdditionalLogs, processingGetLogs,
} = queryLogs;
const refreshButton = enabled ? (
<button
type="button"
className="btn btn-icon btn-outline-primary btn-sm ml-3"
onClick={this.refreshLogs}
>
<svg className="icons">
<use xlinkHref="#refresh" />
</svg>
</button>
) : (
''
);
return (
<Fragment>
<PageTitle title={t('query_log')}>{refreshButton}</PageTitle>
{enabled && processingGetConfig && <Loading />}
{enabled && !processingGetConfig && (
<Fragment>
<Filters
filter={queryLogs.filter}
processingGetLogs={processingGetLogs}
processingAdditionalLogs={processingAdditionalLogs}
setLogsFilter={this.props.setLogsFilter}
/>
<Card>{this.renderLogs()}</Card>
</Fragment>
)}
{!enabled && !processingGetConfig && (
<Card>
<div className="lead text-center py-6">
<Trans
components={[
<Link to="/settings#logs-config" key="0">
link
</Link>,
]}
>
query_log_disabled
</Trans>
</div>
</Card>
)}
</Fragment>
);
}
}
Logs.propTypes = { Logs.propTypes = {
getLogs: PropTypes.func.isRequired, getLogs: PropTypes.func.isRequired,
@ -461,12 +214,11 @@ Logs.propTypes = {
filtering: PropTypes.object.isRequired, filtering: PropTypes.object.isRequired,
setRules: PropTypes.func.isRequired, setRules: PropTypes.func.isRequired,
addSuccessToast: PropTypes.func.isRequired, addSuccessToast: PropTypes.func.isRequired,
getClients: PropTypes.func.isRequired,
getLogsConfig: PropTypes.func.isRequired,
setLogsPagination: PropTypes.func.isRequired, setLogsPagination: PropTypes.func.isRequired,
setLogsFilter: PropTypes.func.isRequired, setLogsFilter: PropTypes.func.isRequired,
setLogsPage: PropTypes.func.isRequired, setLogsPage: PropTypes.func.isRequired,
t: PropTypes.func.isRequired, toggleDetailedLogs: PropTypes.func.isRequired,
dnsConfig: PropTypes.object.isRequired,
}; };
export default withTranslation()(Logs); export default Logs;

View File

@ -79,16 +79,26 @@ class AutoClients extends Component {
}, },
]} ]}
className="-striped -highlight card-table-overflow" className="-striped -highlight card-table-overflow"
showPagination={true} showPagination
defaultPageSize={10} defaultPageSize={10}
minRows={5} minRows={5}
previousText={t('previous_btn')} showPageSizeOptions={false}
nextText={t('next_btn')} showPageJump={false}
renderTotalPagesCount={() => false}
previousText={
<svg className="icons icon--small icon--gray w-100 h-100">
<use xlinkHref="#arrow-left" />
</svg>}
nextText={
<svg className="icons icon--small icon--gray w-100 h-100">
<use xlinkHref="#arrow-right" />
</svg>}
loadingText={t('loading_table_status')} loadingText={t('loading_table_status')}
pageText={t('page_table_footer_text')} pageText=''
ofText="/" ofText=''
rowsText={t('rows_table_footer_text')} rowsText={t('rows_table_footer_text')}
noDataText={t('clients_not_found')} noDataText={t('clients_not_found')}
getPaginationProps={() => ({ className: 'custom-pagination' })}
/> />
</Card> </Card>
); );

View File

@ -91,7 +91,7 @@ class ClientsTable extends Component {
const { value } = row; const { value } = row;
return ( return (
<div className="logs__row logs__row--overflow"> <div className="logs__row o-hidden">
<span className="logs__text"> <span className="logs__text">
{value.map((address) => ( {value.map((address) => (
<div key={address} title={address}> <div key={address} title={address}>
@ -121,7 +121,7 @@ class ClientsTable extends Component {
); );
return ( return (
<div className="logs__row logs__row--overflow"> <div className="logs__row o-hidden">
<div className="logs__text">{title}</div> <div className="logs__text">{title}</div>
</div> </div>
); );
@ -167,7 +167,7 @@ class ClientsTable extends Component {
); );
return ( return (
<div className="logs__row logs__row--overflow"> <div className="logs__row o-hidden">
<div className="logs__text">{title}</div> <div className="logs__text">{title}</div>
</div> </div>
); );
@ -185,7 +185,7 @@ class ClientsTable extends Component {
} }
return ( return (
<div className="logs__row logs__row--overflow"> <div className="logs__row o-hidden">
<span className="logs__text"> <span className="logs__text">
{value.map((tag) => ( {value.map((tag) => (
<div key={tag} title={tag} className="small"> <div key={tag} title={tag} className="small">
@ -282,16 +282,26 @@ class ClientsTable extends Component {
}, },
]} ]}
className="-striped -highlight card-table-overflow" className="-striped -highlight card-table-overflow"
showPagination={true} showPagination
defaultPageSize={10} defaultPageSize={10}
minRows={5} minRows={5}
previousText={t('previous_btn')} showPageSizeOptions={false}
nextText={t('next_btn')} showPageJump={false}
renderTotalPagesCount={() => false}
previousText={
<svg className="icons icon--small icon--gray w-100 h-100">
<use xlinkHref="#arrow-left" />
</svg>}
nextText={
<svg className="icons icon--small icon--gray w-100 h-100">
<use xlinkHref="#arrow-right" />
</svg>}
loadingText={t('loading_table_status')} loadingText={t('loading_table_status')}
pageText={t('page_table_footer_text')} pageText=''
ofText="/" ofText=''
rowsText={t('rows_table_footer_text')} rowsText={t('rows_table_footer_text')}
noDataText={t('clients_not_found')} noDataText={t('clients_not_found')}
getPaginationProps={() => ({ className: 'custom-pagination' })}
/> />
<button <button
type="button" type="button"

View File

@ -89,7 +89,7 @@ const renderFieldsWrapper = (placeholder, buttonTitle) => function cell(row) {
onClick={() => fields.push()} onClick={() => fields.push()}
title={buttonTitle} title={buttonTitle}
> >
<svg className="icon icon--close"> <svg className="icon icon--small">
<use xlinkHref="#plus" /> <use xlinkHref="#plus" />
</svg> </svg>
</button> </button>

View File

@ -32,11 +32,9 @@ const getFormattedWhois = (value, t) => {
const whoisCell = (t) => function cell(row) { const whoisCell = (t) => function cell(row) {
const { value } = row; const { value } = row;
return ( return <div className="logs__row o-hidden">
<div className="logs__row logs__row--overflow"> <div className="logs__text logs__text--wrap">{getFormattedWhois(value, t)}</div>
<span className="logs__text logs__text--wrap">{getFormattedWhois(value, t)}</span> </div>;
</div>
);
}; };
export default whoisCell; export default whoisCell;

View File

@ -2,11 +2,11 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import ReactTable from 'react-table'; import ReactTable from 'react-table';
import { Trans, withTranslation } from 'react-i18next'; import { Trans, withTranslation } from 'react-i18next';
import { SMALL_TABLE_DEFAULT_PAGE_SIZE } from '../../../helpers/constants'; import { LEASES_TABLE_DEFAULT_PAGE_SIZE } from '../../../helpers/constants';
class Leases extends Component { class Leases extends Component {
cellWrap = ({ value }) => ( cellWrap = ({ value }) => (
<div className="logs__row logs__row--overflow"> <div className="logs__row o-hidden">
<span className="logs__text" title={value}> <span className="logs__text" title={value}>
{value} {value}
</span> </span>
@ -37,9 +37,9 @@ class Leases extends Component {
Cell: this.cellWrap, Cell: this.cellWrap,
}, },
]} ]}
pageSize={SMALL_TABLE_DEFAULT_PAGE_SIZE} pageSize={LEASES_TABLE_DEFAULT_PAGE_SIZE}
showPageSizeOptions={false} showPageSizeOptions={false}
showPagination={leases.length > SMALL_TABLE_DEFAULT_PAGE_SIZE} showPagination={leases.length > LEASES_TABLE_DEFAULT_PAGE_SIZE}
noDataText={t('dhcp_leases_not_found')} noDataText={t('dhcp_leases_not_found')}
minRows={6} minRows={6}
className="-striped -highlight card-table-overflow" className="-striped -highlight card-table-overflow"

View File

@ -2,13 +2,13 @@ import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import ReactTable from 'react-table'; import ReactTable from 'react-table';
import { Trans, withTranslation } from 'react-i18next'; import { Trans, withTranslation } from 'react-i18next';
import { SMALL_TABLE_DEFAULT_PAGE_SIZE } from '../../../../helpers/constants'; import { LEASES_TABLE_DEFAULT_PAGE_SIZE } from '../../../../helpers/constants';
import Modal from './Modal'; import Modal from './Modal';
class StaticLeases extends Component { class StaticLeases extends Component {
cellWrap = ({ value }) => ( cellWrap = ({ value }) => (
<div className="logs__row logs__row--overflow"> <div className="logs__row o-hidden">
<span className="logs__text" title={value}> <span className="logs__text" title={value}>
{value} {value}
</span> </span>
@ -67,7 +67,7 @@ class StaticLeases extends Component {
<div className="logs__row logs__row--center"> <div className="logs__row logs__row--center">
<button <button
type="button" type="button"
className="btn btn-icon btn-outline-secondary btn-sm" className="btn btn-icon btn-icon--green btn-outline-secondary btn-sm"
title={t('delete_table_action')} title={t('delete_table_action')}
disabled={processingDeleting} disabled={processingDeleting}
onClick={() => this.handleDelete(ip, mac, hostname) onClick={() => this.handleDelete(ip, mac, hostname)
@ -82,9 +82,9 @@ class StaticLeases extends Component {
}, },
}, },
]} ]}
pageSize={SMALL_TABLE_DEFAULT_PAGE_SIZE} pageSize={LEASES_TABLE_DEFAULT_PAGE_SIZE}
showPageSizeOptions={false} showPageSizeOptions={false}
showPagination={staticLeases.length > SMALL_TABLE_DEFAULT_PAGE_SIZE} showPagination={staticLeases.length > LEASES_TABLE_DEFAULT_PAGE_SIZE}
noDataText={t('dhcp_static_leases_not_found')} noDataText={t('dhcp_static_leases_not_found')}
className="-striped -highlight card-table-overflow" className="-striped -highlight card-table-overflow"
minRows={6} minRows={6}

View File

@ -46,7 +46,7 @@ const Form = (props) => {
type="text" type="text"
className="form-control form-control--textarea font-monospace" className="form-control form-control--textarea font-monospace"
disabled={disabled} disabled={disabled}
normalizeOnBlur={normalizeMultiline} normalizeOnBlur={id === 'disallowed_clients' ? normalizeMultiline : undefined}
/> />
</div>; </div>;

View File

@ -112,6 +112,11 @@
justify-content: center; justify-content: center;
width: 30px; width: 30px;
height: 30px; height: 30px;
background-color: transparent;
}
.btn-icon--green {
color: var(--green);
} }
.btn-icon-sm { .btn-icon-sm {

View File

@ -6,6 +6,13 @@
width: 345px; width: 345px;
} }
@media (max-width: 425px) {
.toasts {
right: 0;
width: 100%;
}
}
.toast { .toast {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;

View File

@ -1,20 +1,33 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Trans, withTranslation } from 'react-i18next'; import { Trans, withTranslation } from 'react-i18next';
import { FAILURE_TOAST_TIMEOUT, SUCCESS_TOAST_TIMEOUT } from '../../helpers/constants';
class Toast extends Component { class Toast extends Component {
componentDidMount() { state = {
const timeout = this.props.type === 'success' ? 5000 : 30000; timerId: null,
};
setTimeout(() => { componentDidMount() {
this.props.removeToast(this.props.id); this.setRemoveToastTimeout();
}, timeout);
} }
shouldComponentUpdate() { shouldComponentUpdate() {
return false; return false;
} }
clearRemoveToastTimeout = () => clearTimeout(this.state.timerId);
setRemoveToastTimeout = () => {
const timeout = this.props.type === 'success' ? SUCCESS_TOAST_TIMEOUT : FAILURE_TOAST_TIMEOUT;
const timerId = setTimeout(() => {
this.props.removeToast(this.props.id);
}, timeout);
this.setState({ timerId });
};
showMessage(t, type, message) { showMessage(t, type, message) {
if (type === 'notice') { if (type === 'notice') {
return <span dangerouslySetInnerHTML={{ __html: t(message) }} />; return <span dangerouslySetInnerHTML={{ __html: t(message) }} />;
@ -29,12 +42,18 @@ class Toast extends Component {
} = this.props; } = this.props;
return ( return (
<div className={`toast toast--${type}`}> <div className={`toast toast--${type}`}
onMouseOver={this.clearRemoveToastTimeout}
onMouseOut={this.setRemoveToastTimeout}>
<p className="toast__content"> <p className="toast__content">
{this.showMessage(t, type, message)} {this.showMessage(t, type, message)}
</p> </p>
<button className="toast__dismiss" onClick={() => this.props.removeToast(id)}> <button className="toast__dismiss" onClick={() => this.props.removeToast(id)}>
<svg stroke="#fff" fill="none" width="20" height="20" strokeWidth="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m18 6-12 12"/><path d="m6 6 12 12"/></svg> <svg stroke="#fff" fill="none" width="20" height="20" strokeWidth="2"
viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="m18 6-12 12" />
<path d="m6 6 12 12" />
</svg>
</button> </button>
</div> </div>
); );

View File

@ -9,7 +9,7 @@ const CellWrap = ({ value }, formatValue, formatTitle = formatValue) => {
const cellTitle = typeof formatTitle === 'function' ? formatTitle(value) : value; const cellTitle = typeof formatTitle === 'function' ? formatTitle(value) : value;
return ( return (
<div className="logs__row logs__row--overflow"> <div className="logs__row o-hidden">
<span className="logs__text logs__text--full" title={cellTitle}> <span className="logs__text logs__text--full" title={cellTitle}>
{cellValue} {cellValue}
</span> </span>

View File

@ -1,6 +1,6 @@
import React, { Component, Fragment } from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Trans, withTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import classNames from 'classnames'; import classNames from 'classnames';
import { REPOSITORY, PRIVACY_POLICY_LINK } from '../../helpers/constants'; import { REPOSITORY, PRIVACY_POLICY_LINK } from '../../helpers/constants';
@ -10,6 +10,7 @@ import i18n from '../../i18n';
import Version from './Version'; import Version from './Version';
import './Footer.css'; import './Footer.css';
import './Select.css'; import './Select.css';
import { setHtmlLangAttr } from '../../helpers/helpers';
const linksData = [ const linksData = [
{ {
@ -27,83 +28,85 @@ const linksData = [
}, },
]; ];
class Footer extends Component { const Footer = (props) => {
getYear = () => { const { t } = useTranslation();
const getYear = () => {
const today = new Date(); const today = new Date();
return today.getFullYear(); return today.getFullYear();
}; };
changeLanguage = (event) => { const changeLanguage = (event) => {
i18n.changeLanguage(event.target.value); const { value } = event.target;
i18n.changeLanguage(value);
setHtmlLangAttr(value);
}; };
renderCopyright = () => <div className="footer__column"> const renderCopyright = () => <div className="footer__column">
<div className="footer__copyright"> <div className="footer__copyright">
<Trans>copyright</Trans> &copy; {this.getYear()}{' '} {t('copyright')} &copy; {getYear()}{' '}
<a target="_blank" rel="noopener noreferrer" href="https://adguard.com/">AdGuard</a> <a target="_blank" rel="noopener noreferrer" href="https://adguard.com/">AdGuard</a>
</div> </div>
</div>; </div>;
renderLinks = (linksData) => linksData.map(({ name, href, className = '' }) => <a const renderLinks = (linksData) => linksData.map(({ name, href, className = '' }) => <a
key={name} key={name}
href={href} href={href}
className={classNames('footer__link', className)} className={classNames('footer__link', className)}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
> >
<Trans>{name}</Trans> {t(name)}
</a>); </a>);
render() { const {
const { dnsVersion, processingVersion, getVersion, checkUpdateFlag,
dnsVersion, processingVersion, getVersion, checkUpdateFlag, } = props;
} = this.props;
return ( return (
<Fragment> <>
<footer className="footer"> <footer className="footer">
<div className="container"> <div className="container">
<div className="footer__row"> <div className="footer__row">
<div className="footer__column footer__column--links"> <div className="footer__column footer__column--links">
{this.renderLinks(linksData)} {renderLinks(linksData)}
</div>
<div className="footer__column footer__column--language">
<select
className="form-control select select--language"
value={i18n.language}
onChange={this.changeLanguage}
>
{Object.keys(LANGUAGES)
.map((lang) => (
<option key={lang} value={lang}>
{LANGUAGES[lang]}
</option>
))}
</select>
</div>
</div> </div>
</div> <div className="footer__column footer__column--language">
</footer> <select
<div className="footer"> className="form-control select select--language"
<div className="container"> value={i18n.language}
<div className="footer__row"> onChange={changeLanguage}
{this.renderCopyright()} >
<div className="footer__column footer__column--language"> {Object.keys(LANGUAGES)
<Version .map((lang) => (
dnsVersion={dnsVersion} <option key={lang} value={lang}>
processingVersion={processingVersion} {LANGUAGES[lang]}
getVersion={getVersion} </option>
checkUpdateFlag={checkUpdateFlag} ))}
/> </select>
</div>
</div> </div>
</div> </div>
</div> </div>
</Fragment> </footer>
); <div className="footer">
} <div className="container">
} <div className="footer__row">
{renderCopyright()}
<div className="footer__column footer__column--language">
<Version
dnsVersion={dnsVersion}
processingVersion={processingVersion}
getVersion={getVersion}
checkUpdateFlag={checkUpdateFlag}
/>
</div>
</div>
</div>
</div>
</>
);
};
Footer.propTypes = { Footer.propTypes = {
dnsVersion: PropTypes.string, dnsVersion: PropTypes.string,
@ -112,4 +115,4 @@ Footer.propTypes = {
checkUpdateFlag: PropTypes.bool, checkUpdateFlag: PropTypes.bool,
}; };
export default withTranslation()(Footer); export default Footer;

View File

@ -4,7 +4,19 @@
height: 100%; height: 100%;
} }
.icon--close { .icon--small {
width: 24px; width: 1.5rem;
height: 24px; height: 1.5rem;
}
.icon--gray {
color: var(--gray-a5);
}
.icon--disabled {
color: var(--gray-d8);
}
.icon--active {
color: #66b574;
} }

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,7 @@ import React from 'react';
import './Loading.css'; import './Loading.css';
const Loading = () => ( const Loading = () => (
<div className="loading"></div> <div className="loading" />
); );
export default Loading; export default Loading;

View File

@ -3,13 +3,32 @@
align-items: flex-start; align-items: flex-start;
} }
.page-header--logs {
flex-direction: row;
align-items: flex-end;
margin: 2rem 0 3rem;
}
@media (max-width: 991px) {
.page-header--logs {
flex-direction: column;
align-items: center;
margin-bottom: 1.5rem;
}
.page-header--logs .page-title {
padding-bottom: 2.5rem;;
}
}
.page-subtitle { .page-subtitle {
margin-left: 0; margin-left: 0;
font-size: 0.9rem; font-size: 0.9rem;
} }
.page-title { .page-title--large {
line-height: 2.2rem; font-size: 36px;
line-height: 46px;
} }
.page-title__actions { .page-title__actions {

View File

@ -3,15 +3,15 @@ import PropTypes from 'prop-types';
import './PageTitle.css'; import './PageTitle.css';
const PageTitle = (props) => ( const PageTitle = ({ title, subtitle, children }) => (
<div className="page-header"> <div className="page-header">
<h1 className="page-title"> <h1 className="page-title">
{props.title} {title}
{props.children} {children}
</h1> </h1>
{props.subtitle && ( {subtitle && (
<div className="page-subtitle"> <div className="page-subtitle">
{props.subtitle} {subtitle}
</div> </div>
)} )}
</div> </div>

View File

@ -14,13 +14,21 @@ class Popover extends Component {
const source = ( const source = (
<div className="popover__list-item"> <div className="popover__list-item">
<Trans>source_label</Trans>: <a className="popover__link" target="_blank" rel="noopener noreferrer" href={sourceData.url}><strong>{sourceData.name}</strong></a> <Trans>source_label</Trans>: <a className="popover__link" target="_blank"
rel="noopener noreferrer"
href={sourceData.url}>
<strong>{sourceData.name}</strong>
</a>
</div> </div>
); );
const tracker = ( const tracker = (
<div className="popover__list-item"> <div className="popover__list-item">
<Trans>name_table_header</Trans>: <a className="popover__link" target="_blank" rel="noopener noreferrer" href={data.url}><strong>{data.name}</strong></a> <Trans>name_table_header</Trans>: <a className="popover__link" target="_blank"
rel="noopener noreferrer"
href={data.url}>
<strong>{data.name}</strong>
</a>
</div> </div>
); );
@ -29,7 +37,12 @@ class Popover extends Component {
return ( return (
<div className="popover-wrap"> <div className="popover-wrap">
<div className="popover__trigger"> <div className="popover__trigger">
<svg className="popover__icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg> <svg className="popover__icon" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24" fill="none" strokeWidth="2" strokeLinecap="round"
strokeLinejoin="round">
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
<circle cx="12" cy="12" r="3"></circle>
</svg>
</div> </div>
<div className="popover__body"> <div className="popover__body">
<div className="popover__list"> <div className="popover__list">

View File

@ -1,6 +1,11 @@
.ReactTable .rt-th, .ReactTable .rt-th,
.ReactTable .rt-td { .ReactTable .rt-td {
padding: 10px 15px; padding: 10px 15px;
overflow: hidden;
text-overflow: ellipsis;
}
.card-table .ReactTable .rt-td {
overflow: visible; overflow: visible;
} }
@ -8,14 +13,18 @@
overflow: visible; overflow: visible;
} }
.rt-tr-group .red { .rt-tr-group.red {
background-color: #fff4f2; background-color: rgba(223, 56, 18, 0.05);
} }
.rt-tr-group .green { .rt-tr-group.green {
background-color: #f1faf3; background-color: rgba(103, 178, 121, 0.1);
} }
.rt-tr-group .blue { .rt-tr-group.blue {
background-color: #ecf7ff; background-color: #e5effd;
}
.rt-tr-group.yellow {
background-color: var(--yellow-pale);
} }

View File

@ -6,7 +6,6 @@
width: 18px; width: 18px;
height: 18px; height: 18px;
flex-shrink: 0; flex-shrink: 0;
margin-left: 5px;
background-image: url("./svg/help-circle.svg"); background-image: url("./svg/help-circle.svg");
background-size: 100%; background-size: 100%;
cursor: pointer; cursor: pointer;
@ -56,7 +55,6 @@
.tooltip-custom--logs { .tooltip-custom--logs {
border-radius: 50%; border-radius: 50%;
background-image: url("./svg/help-circle-gray.svg"); background-image: url("./svg/help-circle-gray.svg");
background-color: #fff;
} }
.tooltip-custom--logs:before { .tooltip-custom--logs:before {

View File

@ -3,9 +3,8 @@ import PropTypes from 'prop-types';
import './Tooltip.css'; import './Tooltip.css';
const Tooltip = (props) => ( const Tooltip = ({ text, type = '' }) => <div data-tooltip={text}
<div data-tooltip={props.text} className={`tooltip-custom ${props.type || ''}`}></div> className={`tooltip-custom ml-1 ${type}`} />;
);
Tooltip.propTypes = { Tooltip.propTypes = {
text: PropTypes.string.isRequired, text: PropTypes.string.isRequired,

View File

@ -1,15 +1,22 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { getClients } from '../actions';
import { getFilteringStatus, setRules } from '../actions/filtering'; import { getFilteringStatus, setRules } from '../actions/filtering';
import { import {
getLogs, getLogsConfig, setLogsPagination, setLogsFilter, setLogsPage, getLogs, setLogsPagination, setLogsFilter, setLogsPage, toggleDetailedLogs,
} from '../actions/queryLogs'; } from '../actions/queryLogs';
import Logs from '../components/Logs'; import Logs from '../components/Logs';
import { addSuccessToast } from '../actions/toasts'; import { addSuccessToast } from '../actions/toasts';
const mapStateToProps = (state) => { const mapStateToProps = (state) => {
const { queryLogs, dashboard, filtering } = state; const {
const props = { queryLogs, dashboard, filtering }; queryLogs, dashboard, filtering, dnsConfig,
} = state;
const props = {
queryLogs,
dashboard,
filtering,
dnsConfig,
};
return props; return props;
}; };
@ -18,11 +25,10 @@ const mapDispatchToProps = {
getFilteringStatus, getFilteringStatus,
setRules, setRules,
addSuccessToast, addSuccessToast,
getClients,
getLogsConfig,
setLogsPagination, setLogsPagination,
setLogsFilter, setLogsFilter,
setLogsPage, setLogsPage,
toggleDetailedLogs,
}; };
export default connect( export default connect(

View File

@ -55,7 +55,9 @@ export const EMPTY_DATE = '0001-01-01T00:00:00Z';
export const DEBOUNCE_TIMEOUT = 300; export const DEBOUNCE_TIMEOUT = 300;
export const DEBOUNCE_FILTER_TIMEOUT = 500; export const DEBOUNCE_FILTER_TIMEOUT = 500;
export const CHECK_TIMEOUT = 1000; export const CHECK_TIMEOUT = 1000;
export const STOP_TIMEOUT = 10000; export const SUCCESS_TOAST_TIMEOUT = 5000;
export const FAILURE_TOAST_TIMEOUT = 30000;
export const HIDE_TOOLTIP_DELAY = 300;
export const UNSAFE_PORTS = [ export const UNSAFE_PORTS = [
1, 1,
@ -256,18 +258,6 @@ export const ENCRYPTION_SOURCE = {
CONTENT: 'content', CONTENT: 'content',
}; };
export const FILTERED_STATUS = {
FILTERED_BLACK_LIST: 'FilteredBlackList',
NOT_FILTERED_WHITE_LIST: 'NotFilteredWhiteList',
NOT_FILTERED_NOT_FOUND: 'NotFilteredNotFound',
FILTERED_BLOCKED_SERVICE: 'FilteredBlockedService',
REWRITE: 'Rewrite',
REWRITE_HOSTS: 'RewriteEtcHosts',
FILTERED_SAFE_SEARCH: 'FilteredSafeSearch',
FILTERED_SAFE_BROWSING: 'FilteredSafeBrowsing',
FILTERED_PARENTAL: 'FilteredParental',
};
export const FILTERED = 'Filtered'; export const FILTERED = 'Filtered';
export const NOT_FILTERED = 'NotFiltered'; export const NOT_FILTERED = 'NotFiltered';
@ -336,25 +326,124 @@ export const DNS_RECORD_TYPES = [
]; ];
export const DEFAULT_LOGS_FILTER = { export const DEFAULT_LOGS_FILTER = {
filter_domain: '', search: '',
filter_client: '', response_status: '',
filter_question_type: '',
filter_response_status: '',
}; };
export const DEFAULT_LANGUAGE = 'en'; export const DEFAULT_LANGUAGE = 'en';
export const TABLE_DEFAULT_PAGE_SIZE = 100; export const TABLE_DEFAULT_PAGE_SIZE = 50;
export const SMALL_TABLE_DEFAULT_PAGE_SIZE = 20; export const TABLE_FIRST_PAGE = 0;
export const LEASES_TABLE_DEFAULT_PAGE_SIZE = 20;
export const FILTERED_STATUS = {
FILTERED_BLACK_LIST: 'FilteredBlackList',
NOT_FILTERED_WHITE_LIST: 'NotFilteredWhiteList',
NOT_FILTERED_NOT_FOUND: 'NotFilteredNotFound',
FILTERED_BLOCKED_SERVICE: 'FilteredBlockedService',
REWRITE: 'Rewrite',
REWRITE_HOSTS: 'RewriteEtcHosts',
FILTERED_SAFE_SEARCH: 'FilteredSafeSearch',
FILTERED_SAFE_BROWSING: 'FilteredSafeBrowsing',
FILTERED_PARENTAL: 'FilteredParental',
};
export const RESPONSE_FILTER = { export const RESPONSE_FILTER = {
ALL: 'all', ALL: {
FILTERED: 'filtered', query: 'all',
label: 'show_all_responses',
},
FILTERED: {
query: 'filtered',
label: 'filtered',
},
PROCESSED: {
query: 'processed',
label: 'show_processed_responses',
},
SPACE: {
query: 'all',
label: '',
disabled: true,
},
BLOCKED: {
query: 'blocked',
label: 'show_blocked_responses',
},
BLOCKED_THREATS: {
query: 'blocked_safebrowsing',
label: 'blocked_threats',
},
BLOCKED_ADULT_WEBSITES: {
query: 'blocked_parental',
label: 'blocked_adult_websites',
},
ALLOWED: {
query: 'whitelisted',
label: 'allowed',
},
REWRITTEN: {
query: 'rewritten',
label: 'rewritten',
},
SAFE_SEARCH: {
query: 'safe_search',
label: 'safe_search',
},
};
export const FILTERED_STATUS_TO_META_MAP = {
[FILTERED_STATUS.NOT_FILTERED_WHITE_LIST]: {
label: RESPONSE_FILTER.ALLOWED.label,
color: 'green',
},
[FILTERED_STATUS.NOT_FILTERED_NOT_FOUND]: {
label: RESPONSE_FILTER.PROCESSED.label,
color: 'white',
},
[FILTERED_STATUS.FILTERED_BLOCKED_SERVICE]: {
label: RESPONSE_FILTER.BLOCKED.label,
color: 'red',
},
[FILTERED_STATUS.FILTERED_SAFE_SEARCH]: {
label: RESPONSE_FILTER.SAFE_SEARCH.label,
color: 'yellow',
},
[FILTERED_STATUS.FILTERED_BLACK_LIST]: {
label: RESPONSE_FILTER.BLOCKED.label,
color: 'red',
},
[FILTERED_STATUS.REWRITE]: {
label: RESPONSE_FILTER.REWRITTEN.label,
color: 'blue',
},
[FILTERED_STATUS.REWRITE_HOSTS]: {
label: RESPONSE_FILTER.REWRITTEN.label,
color: 'blue',
},
[FILTERED_STATUS.FILTERED_SAFE_BROWSING]: {
label: RESPONSE_FILTER.BLOCKED_THREATS.label,
color: 'yellow',
},
[FILTERED_STATUS.FILTERED_PARENTAL]: {
label: RESPONSE_FILTER.BLOCKED_ADULT_WEBSITES.label,
color: 'yellow',
},
}; };
export const DEFAULT_TIME_FORMAT = 'HH:mm:ss'; export const DEFAULT_TIME_FORMAT = 'HH:mm:ss';
export const LONG_TIME_FORMAT = 'HH:mm:ss.SSS';
export const DEFAULT_SHORT_DATE_FORMAT_OPTIONS = {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour12: false,
};
export const DEFAULT_DATE_FORMAT_OPTIONS = { export const DEFAULT_DATE_FORMAT_OPTIONS = {
year: 'numeric', year: 'numeric',
month: 'numeric', month: 'numeric',
@ -371,9 +460,15 @@ export const DETAILED_DATE_FORMAT_OPTIONS = {
export const CUSTOM_FILTERING_RULES_ID = 0; export const CUSTOM_FILTERING_RULES_ID = 0;
export const ACTION = { export const BLOCK_ACTIONS = {
block: 'block', BLOCK: 'block',
unblock: 'unblock', UNBLOCK: 'unblock',
};
export const SCHEME_TO_PROTOCOL_MAP = {
doh: 'dns_over_https',
dot: 'dns_over_tls',
'': 'plain_dns',
}; };
export const DNS_REQUEST_OPTIONS = { export const DNS_REQUEST_OPTIONS = {
@ -408,3 +503,5 @@ export const FORM_NAME = {
LOGIN: 'login', LOGIN: 'login',
CACHE: 'cache', CACHE: 'cache',
}; };
export const smallScreenSize = 767;

View File

@ -92,10 +92,10 @@ export const renderGroupField = ({
&& <span className="input-group-append"> && <span className="input-group-append">
<button <button
type="button" type="button"
className="btn btn-secondary btn-icon" className="btn btn-secondary btn-icon btn-icon--green"
onClick={removeField} onClick={removeField}
> >
<svg className="icon icon--close"> <svg className="icon icon--small">
<use xlinkHref="#cross" /> <use xlinkHref="#cross" />
</svg> </svg>
</button> </button>

View File

@ -5,24 +5,26 @@ import { WHOIS_ICONS } from './constants';
const getFormattedWhois = (whois, t) => { const getFormattedWhois = (whois, t) => {
const whoisInfo = normalizeWhois(whois); const whoisInfo = normalizeWhois(whois);
return ( return (
Object.keys(whoisInfo).map((key) => { Object.keys(whoisInfo)
const icon = WHOIS_ICONS[key]; .map((key) => {
return ( const icon = WHOIS_ICONS[key];
<span className="logs__whois text-muted" key={key} title={t(key)}> return (
<span className="logs__whois text-muted" key={key} title={t(key)}>
{icon && ( {icon && (
<Fragment> <Fragment>
<svg className="logs__whois-icon icons"> <svg className="logs__whois-icon icons">
<use xlinkHref={`#${icon}`} /> <use xlinkHref={`#${icon}`} />
</svg>&nbsp; </svg>
&nbsp;
</Fragment> </Fragment>
)}{whoisInfo[key]} )}{whoisInfo[key]}
</span> </span>
); );
}) })
); );
}; };
export const formatClientCell = (row, t) => { export const formatClientCell = (row, t, isDetailed = false) => {
const { value, original: { info } } = row; const { value, original: { info } } = row;
let whoisContainer = ''; let whoisContainer = '';
let nameContainer = value; let nameContainer = value;
@ -31,11 +33,13 @@ export const formatClientCell = (row, t) => {
const { name, whois_info } = info; const { name, whois_info } = info;
if (name) { if (name) {
nameContainer = ( nameContainer = isDetailed
<span className="logs__text logs__text--wrap" title={`${name} (${value})`}> ? <small title={value}>{value}</small>
{name} <small>({value})</small> : <div className="logs__text logs__text--nowrap" title={`${name} (${value})`}>
</span> {name}
); {' '}
<small>{`(${value})`}</small>
</div>;
} }
if (whois_info) { if (whois_info) {
@ -48,11 +52,11 @@ export const formatClientCell = (row, t) => {
} }
return ( return (
<span className="logs__text"> <div className="logs__text" title={value}>
<Fragment> <>
{nameContainer} {nameContainer}
{whoisContainer} {whoisContainer}
</Fragment> </>
</span> </div>
); );
}; };

View File

@ -1,4 +1,3 @@
/* eslint-disable no-bitwise */
import 'url-polyfill'; import 'url-polyfill';
import dateParse from 'date-fns/parse'; import dateParse from 'date-fns/parse';
import dateFormat from 'date-fns/format'; import dateFormat from 'date-fns/format';
@ -13,29 +12,30 @@ import i18n from 'i18next';
import uniqBy from 'lodash/uniqBy'; import uniqBy from 'lodash/uniqBy';
import ipaddr from 'ipaddr.js'; import ipaddr from 'ipaddr.js';
import versionCompare from './versionCompare'; import versionCompare from './versionCompare';
import { getTrackerData } from './trackers/trackers';
import { import {
STANDARD_DNS_PORT,
STANDARD_WEB_PORT,
STANDARD_HTTPS_PORT,
CHECK_TIMEOUT, CHECK_TIMEOUT,
DNS_RECORD_TYPES,
DEFAULT_TIME_FORMAT,
DEFAULT_DATE_FORMAT_OPTIONS, DEFAULT_DATE_FORMAT_OPTIONS,
DETAILED_DATE_FORMAT_OPTIONS,
DEFAULT_LANGUAGE, DEFAULT_LANGUAGE,
FILTERED_STATUS, DEFAULT_TIME_FORMAT,
DETAILED_DATE_FORMAT_OPTIONS,
DNS_RECORD_TYPES,
FILTERED, FILTERED,
FILTERED_STATUS,
IP_MATCH_LIST_STATUS, IP_MATCH_LIST_STATUS,
STANDARD_DNS_PORT,
STANDARD_HTTPS_PORT,
STANDARD_WEB_PORT,
} from './constants'; } from './constants';
/** /**
* @param time {string} The time to format * @param time {string} The time to format
* @returns {string} Returns the time in the format HH:mm:ss * @returns {string} Returns the time in the format HH:mm:ss
*/ */
export const formatTime = (time) => { export const formatTime = (time, options = DEFAULT_TIME_FORMAT) => {
const parsedTime = dateParse(time); const parsedTime = dateParse(time);
return dateFormat(parsedTime, DEFAULT_TIME_FORMAT); return dateFormat(parsedTime, options);
}; };
/** /**
@ -68,34 +68,48 @@ export const isToday = (date) => isSameDay(new Date(date), new Date());
export const normalizeLogs = (logs) => logs.map((log) => { export const normalizeLogs = (logs) => logs.map((log) => {
const { const {
time, answer,
question, answer_dnssec,
answer: response,
reason,
client, client,
client_proto,
elapsedMs,
question,
reason,
status,
time,
filterId, filterId,
rule, rule,
service_name, service_name,
status,
original_answer, original_answer,
upstream,
} = log; } = log;
const { host: domain, type } = question; const { host: domain, type } = question;
const responsesArray = response ? response.map((response) => {
const response = answer ? answer.map((response) => {
const { value, type, ttl } = response; const { value, type, ttl } = response;
return `${type}: ${value} (ttl=${ttl})`; return `${type}: ${value} (ttl=${ttl})`;
}) : []; }) : [];
const tracker = getTrackerData(domain);
return { return {
time, time,
domain, domain,
type, type,
response: responsesArray, response,
reason, reason,
client, client,
client_proto,
filterId, filterId,
rule, rule,
status, status,
serviceName: service_name, serviceName: service_name,
originalAnswer: original_answer, originalAnswer: original_answer,
tracker,
answer_dnssec,
elapsedMs,
upstream,
}; };
}); });
@ -563,6 +577,25 @@ export const getIpMatchListStatus = (ip, list) => {
} }
}; };
/**
* @param {string} elapsedMs
* @param {function} t translate
* @returns {string}
*/
export const formatElapsedMs = (elapsedMs, t) => {
const formattedElapsedMs = parseInt(elapsedMs, 10) || parseFloat(elapsedMs)
.toFixed(2);
return `${formattedElapsedMs} ${t('milliseconds_abbreviation')}`;
};
/**
* @param language {string}
*/
export const setHtmlLangAttr = (language) => {
window.document.documentElement.lang = language;
};
/** /**
* @param values {object} * @param values {object}
* @returns {object} * @returns {object}

View File

@ -3,13 +3,13 @@ import adguardDb from './adguard.json';
import { REPOSITORY } from '../constants'; import { REPOSITORY } from '../constants';
/** /**
@typedef TrackerData @typedef TrackerData
@type {object} @type {object}
@property {string} id - tracker ID. @property {string} id - tracker ID.
@property {string} name - tracker name. @property {string} name - tracker name.
@property {string} url - tracker website url. @property {string} url - tracker website url.
@property {number} category - tracker category. @property {number} category - tracker category.
@property {source} source - tracker data source. @property {source} source - tracker data source.
*/ */
/** /**
@ -20,45 +20,6 @@ export const sources = {
ADGUARD: 2, ADGUARD: 2,
}; };
/**
* Gets tracker data in the specified database
*
* @param {String} domainName domain name to check
* @param {*} trackersDb trackers database
* @param {number} source source ID
* @returns {TrackerData} tracker data or null if no matching tracker found
*/
const getTrackerDataFromDb = (domainName, trackersDb, source) => {
if (!domainName) {
return null;
}
const parts = domainName.split(/\./g).reverse();
let hostToCheck = '';
// Check every subdomain
for (let i = 0; i < parts.length; i += 1) {
hostToCheck = parts[i] + (i > 0 ? '.' : '') + hostToCheck;
const trackerId = trackersDb.trackerDomains[hostToCheck];
if (trackerId) {
const trackerData = trackersDb.trackers[trackerId];
const categoryName = trackersDb.categories[trackerData.categoryId];
return {
id: trackerId,
name: trackerData.name,
url: trackerData.url,
category: categoryName,
source,
};
}
}
// No tracker found for the specified domain
return null;
};
/** /**
* Gets the source metadata for the specified tracker * Gets the source metadata for the specified tracker
* @param {TrackerData} trackerData tracker data * @param {TrackerData} trackerData tracker data
@ -74,7 +35,8 @@ export const getSourceData = (trackerData) => {
name: 'Whotracks.me', name: 'Whotracks.me',
url: `https://whotracks.me/trackers/${trackerData.id}.html`, url: `https://whotracks.me/trackers/${trackerData.id}.html`,
}; };
} if (trackerData.source === sources.ADGUARD) { }
if (trackerData.source === sources.ADGUARD) {
return { return {
name: 'AdGuard', name: 'AdGuard',
url: REPOSITORY.TRACKERS_DB, url: REPOSITORY.TRACKERS_DB,
@ -84,6 +46,49 @@ export const getSourceData = (trackerData) => {
return null; return null;
}; };
/**
* Gets tracker data in the specified database
*
* @param {String} domainName domain name to check
* @param {*} trackersDb trackers database
* @param {number} source source ID
* @returns {TrackerData} tracker data or null if no matching tracker found
*/
const getTrackerDataFromDb = (domainName, trackersDb, source) => {
if (!domainName) {
return null;
}
const parts = domainName.split(/\./g)
.reverse();
let hostToCheck = '';
// Check every subdomain
for (let i = 0; i < parts.length; i += 1) {
hostToCheck = parts[i] + (i > 0 ? '.' : '') + hostToCheck;
const trackerId = trackersDb.trackerDomains[hostToCheck];
if (trackerId) {
const trackerData = trackersDb.trackers[trackerId];
const categoryName = trackersDb.categories[trackerData.categoryId];
trackerData.source = source;
const sourceData = getSourceData(trackerData);
return {
id: trackerId,
name: trackerData.name,
url: trackerData.url,
category: categoryName,
source,
sourceData,
};
}
}
// No tracker found for the specified domain
return null;
};
/** /**
* Gets tracker data from the trackers database * Gets tracker data from the trackers database
* *

View File

@ -33,6 +33,7 @@ import hr from './__locales/hr.json';
import fa from './__locales/fa.json'; import fa from './__locales/fa.json';
import th from './__locales/th.json'; import th from './__locales/th.json';
import ro from './__locales/ro.json'; import ro from './__locales/ro.json';
import { setHtmlLangAttr } from './helpers/helpers';
const resources = { const resources = {
en: { en: {
@ -143,10 +144,12 @@ i18n
wait: true, wait: true,
}, },
whitelist: availableLanguages, whitelist: availableLanguages,
}, () => { },
() => {
if (!availableLanguages.includes(i18n.language)) { if (!availableLanguages.includes(i18n.language)) {
i18n.changeLanguage(BASE_LOCALE); i18n.changeLanguage(BASE_LOCALE);
} }
setHtmlLangAttr(i18n.language);
}); });
export default i18n; export default i18n;

View File

@ -1,7 +1,7 @@
import { handleActions } from 'redux-actions'; import { handleActions } from 'redux-actions';
import * as actions from '../actions/queryLogs'; import * as actions from '../actions/queryLogs';
import { DEFAULT_LOGS_FILTER } from '../helpers/constants'; import { DEFAULT_LOGS_FILTER, TABLE_DEFAULT_PAGE_SIZE } from '../helpers/constants';
const queryLogs = handleActions( const queryLogs = handleActions(
{ {
@ -27,15 +27,20 @@ const queryLogs = handleActions(
[actions.setLogsFilterRequest]: (state) => ({ ...state, processingGetLogs: true }), [actions.setLogsFilterRequest]: (state) => ({ ...state, processingGetLogs: true }),
[actions.setLogsFilterFailure]: (state) => ({ ...state, processingGetLogs: false }), [actions.setLogsFilterFailure]: (state) => ({ ...state, processingGetLogs: false }),
[actions.toggleDetailedLogs]: (state, { payload }) => ({
...state,
isDetailed: payload,
}),
[actions.setLogsFilterSuccess]: (state, { payload }) => { [actions.setLogsFilterSuccess]: (state, { payload }) => {
const { logs, oldest, filter } = payload; const { logs, oldest, filter } = payload;
const pageSize = 100; const pageSize = TABLE_DEFAULT_PAGE_SIZE;
const page = 0; const page = 0;
const pages = Math.ceil(logs.length / pageSize); const pages = Math.ceil(logs.length / pageSize);
const total = logs.length; const total = logs.length;
const rowsStart = pageSize * page; const rowsStart = pageSize * page;
const rowsEnd = (pageSize * page) + pageSize; const rowsEnd = rowsStart + pageSize;
const logsSlice = logs.slice(rowsStart, rowsEnd); const logsSlice = logs.slice(rowsStart, rowsEnd);
const isFiltered = Object.keys(filter).some((key) => filter[key]); const isFiltered = Object.keys(filter).some((key) => filter[key]);
@ -135,6 +140,7 @@ const queryLogs = handleActions(
filter: DEFAULT_LOGS_FILTER, filter: DEFAULT_LOGS_FILTER,
isFiltered: false, isFiltered: false,
anonymize_client_ip: false, anonymize_client_ip: false,
isDetailed: true,
}, },
); );

View File

@ -92,7 +92,7 @@ type Server struct {
conf ServerConfig conf ServerConfig
// Called when the leases DB is modified // Called when the leases DB is modified
onLeaseChanged onLeaseChangedT onLeaseChanged []onLeaseChangedT
} }
// Print information about the available network interfaces // Print information about the available network interfaces
@ -146,14 +146,16 @@ func (s *Server) Init(config ServerConfig) error {
// SetOnLeaseChanged - set callback // SetOnLeaseChanged - set callback
func (s *Server) SetOnLeaseChanged(onLeaseChanged onLeaseChangedT) { func (s *Server) SetOnLeaseChanged(onLeaseChanged onLeaseChangedT) {
s.onLeaseChanged = onLeaseChanged s.onLeaseChanged = append(s.onLeaseChanged, onLeaseChanged)
} }
func (s *Server) notify(flags int) { func (s *Server) notify(flags int) {
if s.onLeaseChanged == nil { if len(s.onLeaseChanged) == 0 {
return return
} }
s.onLeaseChanged(flags) for _, f := range s.onLeaseChanged {
f(flags)
}
} }
// WriteDiskConfig - write configuration // WriteDiskConfig - write configuration

View File

@ -33,8 +33,12 @@ type RequestFilteringSettings struct {
SafeSearchEnabled bool SafeSearchEnabled bool
SafeBrowsingEnabled bool SafeBrowsingEnabled bool
ParentalEnabled bool ParentalEnabled bool
ClientTags []string
ServicesRules []ServiceEntry ClientName string
ClientIP string
ClientTags []string
ServicesRules []ServiceEntry
} }
// Config allows you to configure DNS filtering with New() or just change variables directly. // Config allows you to configure DNS filtering with New() or just change variables directly.
@ -297,7 +301,7 @@ func (d *Dnsfilter) CheckHostRules(host string, qtype uint16, setts *RequestFilt
return Result{}, nil return Result{}, nil
} }
return d.matchHost(host, qtype, setts.ClientTags) return d.matchHost(host, qtype, *setts)
} }
// CheckHost tries to match the host against filtering rules, // CheckHost tries to match the host against filtering rules,
@ -335,7 +339,7 @@ func (d *Dnsfilter) CheckHost(host string, qtype uint16, setts *RequestFiltering
// try filter lists first // try filter lists first
if setts.FilteringEnabled { if setts.FilteringEnabled {
result, err = d.matchHost(host, qtype, setts.ClientTags) result, err = d.matchHost(host, qtype, *setts)
if err != nil { if err != nil {
return result, err return result, err
} }
@ -545,14 +549,20 @@ func (d *Dnsfilter) initFiltering(allowFilters, blockFilters []Filter) error {
} }
// matchHost is a low-level way to check only if hostname is filtered by rules, skipping expensive safebrowsing and parental lookups // matchHost is a low-level way to check only if hostname is filtered by rules, skipping expensive safebrowsing and parental lookups
func (d *Dnsfilter) matchHost(host string, qtype uint16, ctags []string) (Result, error) { func (d *Dnsfilter) matchHost(host string, qtype uint16, setts RequestFilteringSettings) (Result, error) {
d.engineLock.RLock() d.engineLock.RLock()
// Keep in mind that this lock must be held no just when calling Match() // Keep in mind that this lock must be held no just when calling Match()
// but also while using the rules returned by it. // but also while using the rules returned by it.
defer d.engineLock.RUnlock() defer d.engineLock.RUnlock()
ureq := urlfilter.DNSRequest{}
ureq.Hostname = host
ureq.ClientIP = setts.ClientIP
ureq.ClientName = setts.ClientName
ureq.SortedClientTags = setts.ClientTags
if d.filteringEngineWhite != nil { if d.filteringEngineWhite != nil {
rr, ok := d.filteringEngineWhite.Match(host, ctags) rr, ok := d.filteringEngineWhite.MatchRequest(ureq)
if ok { if ok {
var rule rules.Rule var rule rules.Rule
if rr.NetworkRule != nil { if rr.NetworkRule != nil {
@ -574,7 +584,7 @@ func (d *Dnsfilter) matchHost(host string, qtype uint16, ctags []string) (Result
return Result{}, nil return Result{}, nil
} }
rr, ok := d.filteringEngine.Match(host, ctags) rr, ok := d.filteringEngine.MatchRequest(ureq)
if !ok { if !ok {
return Result{}, nil return Result{}, nil
} }

View File

@ -146,6 +146,12 @@ func TestEtcHostsMatching(t *testing.T) {
// SAFE BROWSING // SAFE BROWSING
func TestSafeBrowsingHash(t *testing.T) {
q, hashes := hostnameToHashParam("1.2.3.4.5.6")
assert.Equal(t, "0132d0fa.b5413b4e.5fa067c1.e7f6c011.", q)
assert.Equal(t, 4, len(hashes))
}
func TestSafeBrowsing(t *testing.T) { func TestSafeBrowsing(t *testing.T) {
d := NewForTest(&Config{SafeBrowsingEnabled: true}, nil) d := NewForTest(&Config{SafeBrowsingEnabled: true}, nil)
defer d.Close() defer d.Close()

View File

@ -157,6 +157,7 @@ func (d *Dnsfilter) checkSafeSearch(host string) (Result, error) {
} }
// for each dot, hash it and add it to string // for each dot, hash it and add it to string
// The maximum is 4 components: "a.b.c.d"
func hostnameToHashParam(host string) (string, map[string]bool) { func hostnameToHashParam(host string) (string, map[string]bool) {
var hashparam bytes.Buffer var hashparam bytes.Buffer
hashes := map[string]bool{} hashes := map[string]bool{}
@ -166,6 +167,18 @@ func hostnameToHashParam(host string) (string, map[string]bool) {
tld = "" tld = ""
} }
curhost := host curhost := host
nDots := 0
for i := len(curhost) - 1; i >= 0; i-- {
if curhost[i] == '.' {
nDots++
if nDots == 4 {
curhost = curhost[i+1:] // "xxx.a.b.c.d" -> "a.b.c.d"
break
}
}
}
for { for {
if curhost == "" { if curhost == "" {
// we've reached end of string // we've reached end of string

View File

@ -122,7 +122,7 @@ func (a *accessCtx) IsBlockedIP(ip string) bool {
// IsBlockedDomain - return TRUE if this domain should be blocked // IsBlockedDomain - return TRUE if this domain should be blocked
func (a *accessCtx) IsBlockedDomain(host string) bool { func (a *accessCtx) IsBlockedDomain(host string) bool {
a.lock.Lock() a.lock.Lock()
_, ok := a.blockedHostsEngine.Match(host, nil) _, ok := a.blockedHostsEngine.Match(host)
a.lock.Unlock() a.lock.Unlock()
return ok return ok
} }

View File

@ -8,6 +8,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/AdguardTeam/AdGuardHome/dhcpd"
"github.com/AdguardTeam/AdGuardHome/dnsfilter" "github.com/AdguardTeam/AdGuardHome/dnsfilter"
"github.com/AdguardTeam/AdGuardHome/querylog" "github.com/AdguardTeam/AdGuardHome/querylog"
"github.com/AdguardTeam/AdGuardHome/stats" "github.com/AdguardTeam/AdGuardHome/stats"
@ -43,11 +44,15 @@ var webRegistered bool
// //
// The zero Server is empty and ready for use. // The zero Server is empty and ready for use.
type Server struct { type Server struct {
dnsProxy *proxy.Proxy // DNS proxy instance dnsProxy *proxy.Proxy // DNS proxy instance
dnsFilter *dnsfilter.Dnsfilter // DNS filter instance dnsFilter *dnsfilter.Dnsfilter // DNS filter instance
queryLog querylog.QueryLog // Query log instance dhcpServer *dhcpd.Server // DHCP server instance (optional)
stats stats.Stats queryLog querylog.QueryLog // Query log instance
access *accessCtx stats stats.Stats
access *accessCtx
tablePTR map[string]string // "IP -> hostname" table for reverse lookup
tablePTRLock sync.Mutex
// DNS proxy instance for internal usage // DNS proxy instance for internal usage
// We don't Start() it and so no listen port is required. // We don't Start() it and so no listen port is required.
@ -59,13 +64,27 @@ type Server struct {
conf ServerConfig conf ServerConfig
} }
// DNSCreateParams - parameters for NewServer()
type DNSCreateParams struct {
DNSFilter *dnsfilter.Dnsfilter
Stats stats.Stats
QueryLog querylog.QueryLog
DHCPServer *dhcpd.Server
}
// NewServer creates a new instance of the dnsforward.Server // NewServer creates a new instance of the dnsforward.Server
// Note: this function must be called only once // Note: this function must be called only once
func NewServer(dnsFilter *dnsfilter.Dnsfilter, stats stats.Stats, queryLog querylog.QueryLog) *Server { func NewServer(p DNSCreateParams) *Server {
s := &Server{} s := &Server{}
s.dnsFilter = dnsFilter s.dnsFilter = p.DNSFilter
s.stats = stats s.stats = p.Stats
s.queryLog = queryLog s.queryLog = p.QueryLog
s.dhcpServer = p.DHCPServer
if s.dhcpServer != nil {
s.dhcpServer.SetOnLeaseChanged(s.onDHCPLeaseChanged)
s.onDHCPLeaseChanged(dhcpd.LeaseChangedAdded)
}
if runtime.GOARCH == "mips" || runtime.GOARCH == "mipsle" { if runtime.GOARCH == "mips" || runtime.GOARCH == "mipsle" {
// Use plain DNS on MIPS, encryption is too slow // Use plain DNS on MIPS, encryption is too slow

View File

@ -426,6 +426,11 @@ func checkDNS(input string, bootstrap []string) error {
return nil return nil
} }
// Control flow:
// web
// -> dnsforward.handleDOH -> dnsforward.ServeHTTP
// -> proxy.ServeHTTP -> proxy.handleDNSRequest
// -> dnsforward.handleDNSRequest
func (s *Server) handleDOH(w http.ResponseWriter, r *http.Request) { func (s *Server) handleDOH(w http.ResponseWriter, r *http.Request) {
if !s.conf.TLSAllowUnencryptedDOH && r.TLS == nil { if !s.conf.TLSAllowUnencryptedDOH && r.TLS == nil {
httpError(r, w, http.StatusNotFound, "Not Found") httpError(r, w, http.StatusNotFound, "Not Found")

View File

@ -15,6 +15,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/AdguardTeam/AdGuardHome/dhcpd"
"github.com/AdguardTeam/AdGuardHome/dnsfilter" "github.com/AdguardTeam/AdGuardHome/dnsfilter"
"github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/proxy"
"github.com/AdguardTeam/dnsproxy/upstream" "github.com/AdguardTeam/dnsproxy/upstream"
@ -496,7 +497,7 @@ func TestBlockedCustomIP(t *testing.T) {
c := dnsfilter.Config{} c := dnsfilter.Config{}
f := dnsfilter.New(&c, filters) f := dnsfilter.New(&c, filters)
s := NewServer(f, nil, nil) s := NewServer(DNSCreateParams{DNSFilter: f})
conf := ServerConfig{} conf := ServerConfig{}
conf.UDPListenAddr = &net.UDPAddr{Port: 0} conf.UDPListenAddr = &net.UDPAddr{Port: 0}
conf.TCPListenAddr = &net.TCPAddr{Port: 0} conf.TCPListenAddr = &net.TCPAddr{Port: 0}
@ -648,7 +649,7 @@ func TestRewrite(t *testing.T) {
} }
f := dnsfilter.New(&c, nil) f := dnsfilter.New(&c, nil)
s := NewServer(f, nil, nil) s := NewServer(DNSCreateParams{DNSFilter: f})
conf := ServerConfig{} conf := ServerConfig{}
conf.UDPListenAddr = &net.UDPAddr{Port: 0} conf.UDPListenAddr = &net.UDPAddr{Port: 0}
conf.TCPListenAddr = &net.TCPAddr{Port: 0} conf.TCPListenAddr = &net.TCPAddr{Port: 0}
@ -705,7 +706,7 @@ func createTestServer(t *testing.T) *Server {
c.CacheTime = 30 c.CacheTime = 30
f := dnsfilter.New(&c, filters) f := dnsfilter.New(&c, filters)
s := NewServer(f, nil, nil) s := NewServer(DNSCreateParams{DNSFilter: f})
s.conf.UDPListenAddr = &net.UDPAddr{Port: 0} s.conf.UDPListenAddr = &net.UDPAddr{Port: 0}
s.conf.TCPListenAddr = &net.TCPAddr{Port: 0} s.conf.TCPListenAddr = &net.TCPAddr{Port: 0}
s.conf.UpstreamDNS = []string{"8.8.8.8:53", "8.8.4.4:53"} s.conf.UpstreamDNS = []string{"8.8.8.8:53", "8.8.4.4:53"}
@ -1012,3 +1013,39 @@ func TestMatchDNSName(t *testing.T) {
assert.True(t, !matchDNSName(dnsNames, "")) assert.True(t, !matchDNSName(dnsNames, ""))
assert.True(t, !matchDNSName(dnsNames, "*.host2")) assert.True(t, !matchDNSName(dnsNames, "*.host2"))
} }
func TestPTRResponse(t *testing.T) {
dhcp := &dhcpd.Server{}
dhcp.IPpool = make(map[[4]byte]net.HardwareAddr)
c := dnsfilter.Config{}
f := dnsfilter.New(&c, nil)
s := NewServer(DNSCreateParams{DNSFilter: f, DHCPServer: dhcp})
s.conf.UDPListenAddr = &net.UDPAddr{Port: 0}
s.conf.TCPListenAddr = &net.TCPAddr{Port: 0}
s.conf.UpstreamDNS = []string{"127.0.0.1:53"}
s.conf.FilteringConfig.ProtectionEnabled = true
err := s.Prepare(nil)
assert.True(t, err == nil)
assert.Nil(t, s.Start())
l := dhcpd.Lease{}
l.IP = net.ParseIP("127.0.0.1").To4()
l.HWAddr, _ = net.ParseMAC("aa:aa:aa:aa:aa:aa")
l.Hostname = "localhost"
dhcp.AddStaticLease(l)
addr := s.dnsProxy.Addr(proxy.ProtoUDP)
req := createTestMessage("1.0.0.127.in-addr.arpa.")
req.Question[0].Qtype = dns.TypePTR
resp, err := dns.Exchange(req, addr.String())
assert.Nil(t, err)
assert.Equal(t, 1, len(resp.Answer))
assert.Equal(t, dns.TypePTR, resp.Answer[0].Header().Rrtype)
assert.Equal(t, "1.0.0.127.in-addr.arpa.", resp.Answer[0].Header().Name)
ptr := resp.Answer[0].(*dns.PTR)
assert.Equal(t, "localhost.", ptr.Ptr)
s.Close()
}

View File

@ -1,9 +1,12 @@
package dnsforward package dnsforward
import ( import (
"strings"
"time" "time"
"github.com/AdguardTeam/AdGuardHome/dhcpd"
"github.com/AdguardTeam/AdGuardHome/dnsfilter" "github.com/AdguardTeam/AdGuardHome/dnsfilter"
"github.com/AdguardTeam/AdGuardHome/util"
"github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/proxy"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"github.com/miekg/dns" "github.com/miekg/dns"
@ -39,6 +42,7 @@ func (s *Server) handleDNSRequest(_ *proxy.Proxy, d *proxy.DNSContext) error {
type modProcessFunc func(ctx *dnsContext) int type modProcessFunc func(ctx *dnsContext) int
mods := []modProcessFunc{ mods := []modProcessFunc{
processInitial, processInitial,
processInternalIPAddrs,
processFilteringBeforeRequest, processFilteringBeforeRequest,
processUpstream, processUpstream,
processDNSSECAfterResponse, processDNSSECAfterResponse,
@ -88,11 +92,82 @@ func processInitial(ctx *dnsContext) int {
return resultDone return resultDone
} }
func (s *Server) onDHCPLeaseChanged(flags int) {
switch flags {
case dhcpd.LeaseChangedAdded,
dhcpd.LeaseChangedAddedStatic,
dhcpd.LeaseChangedRemovedStatic:
//
default:
return
}
m := make(map[string]string)
ll := s.dhcpServer.Leases(dhcpd.LeasesAll)
for _, l := range ll {
if len(l.Hostname) == 0 {
continue
}
m[l.IP.String()] = l.Hostname
}
log.Debug("DNS: added %d PTR entries from DHCP", len(m))
s.tablePTRLock.Lock()
s.tablePTR = m
s.tablePTRLock.Unlock()
}
// Respond to PTR requests if the target IP address is leased by our DHCP server
func processInternalIPAddrs(ctx *dnsContext) int {
s := ctx.srv
req := ctx.proxyCtx.Req
if req.Question[0].Qtype != dns.TypePTR {
return resultDone
}
arpa := req.Question[0].Name
arpa = strings.TrimSuffix(arpa, ".")
arpa = strings.ToLower(arpa)
ip := util.DNSUnreverseAddr(arpa)
if ip == nil {
return resultDone
}
s.tablePTRLock.Lock()
if s.tablePTR == nil {
s.tablePTRLock.Unlock()
return resultDone
}
host, ok := s.tablePTR[ip.String()]
s.tablePTRLock.Unlock()
if !ok {
return resultDone
}
log.Debug("DNS: reverse-lookup: %s -> %s", arpa, host)
resp := s.makeResponse(req)
ptr := &dns.PTR{}
ptr.Hdr = dns.RR_Header{
Name: req.Question[0].Name,
Rrtype: dns.TypePTR,
Ttl: s.conf.BlockedResponseTTL,
Class: dns.ClassINET,
}
ptr.Ptr = host + "."
resp.Answer = append(resp.Answer, ptr)
ctx.proxyCtx.Res = resp
return resultDone
}
// Apply filtering logic // Apply filtering logic
func processFilteringBeforeRequest(ctx *dnsContext) int { func processFilteringBeforeRequest(ctx *dnsContext) int {
s := ctx.srv s := ctx.srv
d := ctx.proxyCtx d := ctx.proxyCtx
if d.Res != nil {
return resultDone // response is already set - nothing to do
}
s.RLock() s.RLock()
// Synchronize access to s.dnsFilter so it won't be suddenly uninitialized while in use. // Synchronize access to s.dnsFilter so it won't be suddenly uninitialized while in use.
// This could happen after proxy server has been stopped, but its workers are not yet exited. // This could happen after proxy server has been stopped, but its workers are not yet exited.

View File

@ -39,6 +39,13 @@ func processQueryLogsAndStats(ctx *dnsContext) int {
Elapsed: elapsed, Elapsed: elapsed,
ClientIP: getIP(d.Addr), ClientIP: getIP(d.Addr),
} }
if d.Proto == "https" {
p.ClientProto = "doh"
} else if d.Proto == "tls" {
p.ClientProto = "dot"
}
if d.Upstream != nil { if d.Upstream != nil {
p.Upstream = d.Upstream.Address() p.Upstream = d.Upstream.Address()
} }

4
go.mod
View File

@ -3,9 +3,9 @@ module github.com/AdguardTeam/AdGuardHome
go 1.14 go 1.14
require ( require (
github.com/AdguardTeam/dnsproxy v0.29.0 github.com/AdguardTeam/dnsproxy v0.29.1
github.com/AdguardTeam/golibs v0.4.2 github.com/AdguardTeam/golibs v0.4.2
github.com/AdguardTeam/urlfilter v0.10.1 github.com/AdguardTeam/urlfilter v0.11.0
github.com/NYTimes/gziphandler v1.1.1 github.com/NYTimes/gziphandler v1.1.1
github.com/fsnotify/fsnotify v1.4.7 github.com/fsnotify/fsnotify v1.4.7
github.com/gobuffalo/packr v1.30.1 github.com/gobuffalo/packr v1.30.1

9
go.sum
View File

@ -1,12 +1,13 @@
github.com/AdguardTeam/dnsproxy v0.29.0 h1:cHurldpiipPBAH+kgytcg9pkeYjG43KWiVYPbN3rAw4= github.com/AdguardTeam/dnsproxy v0.29.1 h1:Stc+JLh67C9K38vbrH2920+3FnbXKkFzYQqRiu5auUo=
github.com/AdguardTeam/dnsproxy v0.29.0/go.mod h1:hOYFV9TW+pd5XKYz7KZf2FFD8SvSPqjyGTxUae86s58= github.com/AdguardTeam/dnsproxy v0.29.1/go.mod h1:hOYFV9TW+pd5XKYz7KZf2FFD8SvSPqjyGTxUae86s58=
github.com/AdguardTeam/golibs v0.4.0 h1:4VX6LoOqFe9p9Gf55BeD8BvJD6M6RDYmgEiHrENE9KU= github.com/AdguardTeam/golibs v0.4.0 h1:4VX6LoOqFe9p9Gf55BeD8BvJD6M6RDYmgEiHrENE9KU=
github.com/AdguardTeam/golibs v0.4.0/go.mod h1:skKsDKIBB7kkFflLJBpfGX+G8QFTx0WKUzB6TIgtUj4= github.com/AdguardTeam/golibs v0.4.0/go.mod h1:skKsDKIBB7kkFflLJBpfGX+G8QFTx0WKUzB6TIgtUj4=
github.com/AdguardTeam/golibs v0.4.2 h1:7M28oTZFoFwNmp8eGPb3ImmYbxGaJLyQXeIFVHjME0o= github.com/AdguardTeam/golibs v0.4.2 h1:7M28oTZFoFwNmp8eGPb3ImmYbxGaJLyQXeIFVHjME0o=
github.com/AdguardTeam/golibs v0.4.2/go.mod h1:skKsDKIBB7kkFflLJBpfGX+G8QFTx0WKUzB6TIgtUj4= github.com/AdguardTeam/golibs v0.4.2/go.mod h1:skKsDKIBB7kkFflLJBpfGX+G8QFTx0WKUzB6TIgtUj4=
github.com/AdguardTeam/gomitmproxy v0.2.0/go.mod h1:Qdv0Mktnzer5zpdpi5rAwixNJzW2FN91LjKJCkVbYGU= github.com/AdguardTeam/gomitmproxy v0.2.0/go.mod h1:Qdv0Mktnzer5zpdpi5rAwixNJzW2FN91LjKJCkVbYGU=
github.com/AdguardTeam/urlfilter v0.10.1 h1:ECago6OvZjOTKlOqxU39C+V/ecAslaCDYcf5s+/hwaY= github.com/AdguardTeam/urlfilter v0.11.0 h1:tgZss6uZs1UZAaxpovD/QuX+VVIQLDOlKc7rdF8dwNw=
github.com/AdguardTeam/urlfilter v0.10.1/go.mod h1:aMuejlNxpWppOVjiEV87X6z0eMf7wsXHTAIWQuylfZY= github.com/AdguardTeam/urlfilter v0.11.0/go.mod h1:aMuejlNxpWppOVjiEV87X6z0eMf7wsXHTAIWQuylfZY=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=

View File

@ -80,7 +80,10 @@ func InitAuth(dbFilename string, users []User, sessionTTL uint32) *Auth {
var err error var err error
a.db, err = bbolt.Open(dbFilename, 0644, nil) a.db, err = bbolt.Open(dbFilename, 0644, nil)
if err != nil { if err != nil {
log.Error("Auth: bbolt.Open: %s", err) log.Error("Auth: open DB: %s: %s", dbFilename, err)
if err.Error() == "invalid argument" {
log.Error("AdGuard Home cannot be initialized due to an incompatible file system.\nPlease read the explanation here: https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#limitations")
}
return nil return nil
} }
a.loadSessions() a.loadSessions()

View File

@ -61,7 +61,13 @@ func initDNSServer() error {
filterConf.HTTPRegister = httpRegister filterConf.HTTPRegister = httpRegister
Context.dnsFilter = dnsfilter.New(&filterConf, nil) Context.dnsFilter = dnsfilter.New(&filterConf, nil)
Context.dnsServer = dnsforward.NewServer(Context.dnsFilter, Context.stats, Context.queryLog) p := dnsforward.DNSCreateParams{
DNSFilter: Context.dnsFilter,
Stats: Context.stats,
QueryLog: Context.queryLog,
DHCPServer: Context.dhcpServer,
}
Context.dnsServer = dnsforward.NewServer(p)
dnsConfig := generateServerConfig() dnsConfig := generateServerConfig()
err = Context.dnsServer.Prepare(&dnsConfig) err = Context.dnsServer.Prepare(&dnsConfig)
if err != nil { if err != nil {
@ -229,6 +235,7 @@ func applyAdditionalFiltering(clientAddr string, setts *dnsfilter.RequestFilteri
if len(clientAddr) == 0 { if len(clientAddr) == 0 {
return return
} }
setts.ClientIP = clientAddr
c, ok := Context.clients.Find(clientAddr) c, ok := Context.clients.Find(clientAddr)
if !ok { if !ok {
@ -241,6 +248,7 @@ func applyAdditionalFiltering(clientAddr string, setts *dnsfilter.RequestFilteri
Context.dnsFilter.ApplyBlockedServices(setts, c.BlockedServices, false) Context.dnsFilter.ApplyBlockedServices(setts, c.BlockedServices, false)
} }
setts.ClientName = c.Name
setts.ClientTags = c.Tags setts.ClientTags = c.Tags
if !c.UseOwnSettings { if !c.UseOwnSettings {

View File

@ -1,23 +1,19 @@
package home package home
import ( import (
"bufio"
"context" "context"
"crypto/tls" "crypto/tls"
"crypto/x509" "crypto/x509"
"fmt" "fmt"
"io"
"io/ioutil" "io/ioutil"
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"os/exec"
"os/signal" "os/signal"
"path/filepath" "path/filepath"
"runtime" "runtime"
"strconv" "strconv"
"strings"
"sync" "sync"
"syscall" "syscall"
"time" "time"
@ -172,7 +168,7 @@ func run(args options) {
Context.firstRun = detectFirstRun() Context.firstRun = detectFirstRun()
if Context.firstRun { if Context.firstRun {
log.Info("This is the first time AdGuard Home is launched") log.Info("This is the first time AdGuard Home is launched")
requireAdminRights() checkPermissions()
} }
initConfig() initConfig()
@ -332,38 +328,55 @@ func StartMods() error {
return nil return nil
} }
// Check if the current user has root (administrator) rights // Check if the current user permissions are enough to run AdGuard Home
// and if not, ask and try to run as root func checkPermissions() {
func requireAdminRights() { log.Info("Checking if AdGuard Home has necessary permissions")
admin, _ := util.HaveAdminRights()
if //noinspection ALL if runtime.GOOS == "windows" {
admin || isdelve.Enabled { // On Windows we need to have admin rights to run properly
// Don't forget that for this to work you need to add "delve" tag explicitly
// https://stackoverflow.com/questions/47879070/how-can-i-see-if-the-goland-debugger-is-running-in-the-program admin, _ := util.HaveAdminRights()
if //noinspection ALL
admin || isdelve.Enabled {
// Don't forget that for this to work you need to add "delve" tag explicitly
// https://stackoverflow.com/questions/47879070/how-can-i-see-if-the-goland-debugger-is-running-in-the-program
return
}
log.Fatal("This is the first launch of AdGuard Home. You must run it as Administrator.")
}
// We should check if AdGuard Home is able to bind to port 53
ok, err := util.CanBindPort(53)
if ok {
log.Info("AdGuard Home can bind to port 53")
return return
} }
if runtime.GOOS == "windows" { if opErr, ok := err.(*net.OpError); ok {
log.Fatal("This is the first launch of AdGuard Home. You must run it as Administrator.") if sysErr, ok := opErr.Err.(*os.SyscallError); ok {
if errno, ok := sysErr.Err.(syscall.Errno); ok && errno == syscall.EACCES {
msg := `Permission check failed.
} else { AdGuard Home is not allowed to bind to privileged ports (for instance, port 53).
log.Error("This is the first launch of AdGuard Home. You must run it as root.") Please note, that this is crucial for a server to be able to use privileged ports.
_, _ = io.WriteString(os.Stdout, "Do you want to start AdGuard Home as root user? [y/n] ") You have two options:
stdin := bufio.NewReader(os.Stdin) 1. Run AdGuard Home with root privileges
buf, _ := stdin.ReadString('\n') 2. On Linux you can grant the CAP_NET_BIND_SERVICE capability:
buf = strings.TrimSpace(buf) https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#running-without-superuser`
if buf != "y" {
os.Exit(1) log.Fatal(msg)
}
} }
cmd := exec.Command("sudo", os.Args...)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
_ = cmd.Run()
os.Exit(1)
} }
msg := fmt.Sprintf(`AdGuard failed to bind to port 53 due to %v
Please note, that this is crucial for a DNS server to be able to use that port.`, err)
log.Info(msg)
} }
// Write PID to a file // Write PID to a file
@ -632,8 +645,10 @@ func printHTTPAddresses(proto string) {
} }
for _, iface := range ifaces { for _, iface := range ifaces {
address = net.JoinHostPort(iface.Addresses[0], port) for _, addr := range iface.Addresses {
log.Printf("Go to %s://%s", proto, address) address = net.JoinHostPort(addr, strconv.Itoa(config.BindPort))
log.Printf("Go to %s://%s", proto, address)
}
} }
} else { } else {
address = net.JoinHostPort(config.BindHost, port) address = net.JoinHostPort(config.BindHost, port)

Some files were not shown because too many files have changed in this diff Show More