diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 921e07cc..c80d6d66 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -6,6 +6,11 @@ website 'name': 'AdGuard filters issues' 'url': 'https://link.adtidy.org/forward.html?action=report&app=home&from=github' + - 'about': > + Please send requests for addition to the vetted filtering lists to the + Hostlists Registry repository. + 'name': 'AdGuard Hostlists Registry' + 'url': 'https://github.com/AdguardTeam/HostlistsRegistry' - 'about': > Please use GitHub Discussions for questions 'name': 'Q&A Discussions' diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bc2caa31..224fc42c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,7 +1,7 @@ 'name': 'build' 'env': - 'GO_VERSION': '1.18.7' + 'GO_VERSION': '1.18.8' 'NODE_VERSION': '14' 'on': diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1028b6b1..d1dc8163 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,7 +1,7 @@ 'name': 'lint' 'env': - 'GO_VERSION': '1.18.7' + 'GO_VERSION': '1.18.8' 'on': 'push': diff --git a/CHANGELOG.md b/CHANGELOG.md index abe6d2c3..0265fc5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,65 @@ and this project adheres to ## [v0.108.0] - TBA (APPROX.) --> +## Security + +- Go version has been updated to prevent the possibility of exploiting the + CVE-2022-41716 Go vulnerability fixed in [Go 1.18.8][go-1.18.8]. + +[go-1.18.8]: https://groups.google.com/g/golang-announce/c/mbHY1UY3BaM + +## Added + +- The warning message when adding a certificate having no IP addresses + ([#4898]). +- Several new blockable services ([#3972]). Those will now be more in sync with + the services that are already blockable in AdGuard DNS. +- A new HTTP API, `GET /control/blocked_services/all`, that lists all available + blocked services and their data, such as SVG icons ([#3972]). +- The new optional `tls.override_tls_ciphers` property, which allows + overriding TLS ciphers used by AdGuard Home ([#4925], [#4990]). +- The ability to serve DNS on link-local IPv6 addresses ([#2926]). +- The ability to put [ClientIDs][clientid] into DNS-over-HTTPS hostnames as + opposed to URL paths ([#3418]). Note that AdGuard Home checks the server name + only if the URL does not contain a ClientID. + +### Changed + +- DNS-over-TLS resolvers aren't returned anymore when the configured TLS + certificate contains no IP addresses ([#4927]). +- Responses with `SERVFAIL` code are now cached for at least 30 seconds. + +### Deprecated + +- The `GET /control/blocked_services/services` HTTP API; use the new + `GET /control/blocked_services/all` API instead ([#3972]). + +### Fixed + +- ClientIDs not working when using DNS-over-HTTPS with HTTP/3. +- Editing an enabled rule list's URL now also includes validation of the filter + contents preventing from saving a bad one ([#4916]). +- The default value of `dns.cache_size` accidentally set to 0 has now been + reverted to 4 MiB ([#5010]). +- Responses for which the DNSSEC validation had explicitly been omitted aren't + cached now ([#4942]). +- Web UI not switching to HTTP/3 ([#4986], [#4993]). + +[#2926]: https://github.com/AdguardTeam/AdGuardHome/issues/2926 +[#3418]: https://github.com/AdguardTeam/AdGuardHome/issues/3418 +[#3972]: https://github.com/AdguardTeam/AdGuardHome/issues/3972 +[#4898]: https://github.com/AdguardTeam/AdGuardHome/issues/4898 +[#4916]: https://github.com/AdguardTeam/AdGuardHome/issues/4916 +[#4925]: https://github.com/AdguardTeam/AdGuardHome/issues/4925 +[#4927]: https://github.com/AdguardTeam/AdGuardHome/issues/4927 +[#4942]: https://github.com/AdguardTeam/AdGuardHome/issues/4942 +[#4986]: https://github.com/AdguardTeam/AdGuardHome/issues/4986 +[#4990]: https://github.com/AdguardTeam/AdGuardHome/issues/4990 +[#4993]: https://github.com/AdguardTeam/AdGuardHome/issues/4993 +[#5010]: https://github.com/AdguardTeam/AdGuardHome/issues/5010 + +[clientid]: https://github.com/AdguardTeam/AdGuardHome/wiki/Clients#clientid + @@ -64,7 +123,7 @@ experimental and may break or change in the future. explicitly enabled by setting the new property `dns.serve_http3` in the configuration file to `true`. - DNS-over-HTTP upstreams can now upgrade to HTTP/3 if the new configuration - file property `use_http3_upstreams` is set to `true`. + file property `dns.use_http3_upstreams` is set to `true`. - Upstreams with forced DNS-over-HTTP/3 and no fallback to prior HTTP versions using the `h3://` scheme. @@ -80,7 +139,7 @@ experimental and may break or change in the future. [#4982]: https://github.com/AdguardTeam/AdGuardHome/issues/4982 [#4983]: https://github.com/AdguardTeam/AdGuardHome/issues/4983 -[ms-v0.107.15]: https://github.com/AdguardTeam/AdGuardHome/milestone/51?closed=1 +[ms-v0.107.15]: https://github.com/AdguardTeam/AdGuardHome/milestone/51?closed=1 @@ -90,9 +149,9 @@ See also the [v0.107.14 GitHub milestone][ms-v0.107.14]. ### Security -A Cross-Site Request Forgery (CSRF) vulnerability has been discovered. The CVE -number is to be assigned. We thank Daniel Elkabes from Mend.io for reporting -this vulnerability to us. +A Cross-Site Request Forgery (CSRF) vulnerability has been discovered. We thank +Daniel Elkabes from Mend.io for reporting this vulnerability to us. This is +[CVE-2022-32175]. #### `SameSite` Policy @@ -141,6 +200,7 @@ All JSON APIs that expect a body now check if the request actually has [#4927]: https://github.com/AdguardTeam/AdGuardHome/issues/4927 [#4930]: https://github.com/AdguardTeam/AdGuardHome/issues/4930 +[CVE-2022-32175]: https://www.cvedetails.com/cve/CVE-2022-32175 [ms-v0.107.14]: https://github.com/AdguardTeam/AdGuardHome/milestone/50?closed=1 @@ -168,7 +228,7 @@ See also the [v0.107.13 GitHub milestone][ms-v0.107.13]. [#4722]: https://github.com/AdguardTeam/AdGuardHome/issues/4722 [#4904]: https://github.com/AdguardTeam/AdGuardHome/issues/4904 -[ms-v0.107.13]: https://github.com/AdguardTeam/AdGuardHome/milestone/49?closed=1 +[ms-v0.107.13]: https://github.com/AdguardTeam/AdGuardHome/milestone/49?closed=1 @@ -178,7 +238,7 @@ See also the [v0.107.12 GitHub milestone][ms-v0.107.12]. ### Security -- Go version was updated to prevent the possibility of exploiting the +- Go version has been updated to prevent the possibility of exploiting the CVE-2022-27664 and CVE-2022-32190 Go vulnerabilities fixed in [Go 1.18.6][go-1.18.6]. @@ -299,7 +359,7 @@ See also the [v0.107.9 GitHub milestone][ms-v0.107.9]. ### Security -- Go version was updated to prevent the possibility of exploiting the +- Go version has been updated to prevent the possibility of exploiting the CVE-2022-32189 Go vulnerability fixed in [Go 1.18.5][go-1.18.5]. Go 1.17 support has also been removed, as it has reached end of life and will not receive security updates. @@ -342,7 +402,7 @@ See also the [v0.107.8 GitHub milestone][ms-v0.107.8]. ### Security -- Go version was updated to prevent the possibility of exploiting the +- Go version has been updated to prevent the possibility of exploiting the CVE-2022-1705, CVE-2022-32148, CVE-2022-30631, and other Go vulnerabilities fixed in [Go 1.17.12][go-1.17.12]. @@ -378,7 +438,7 @@ See also the [v0.107.7 GitHub milestone][ms-v0.107.7]. ### Security -- Go version was updated to prevent the possibility of exploiting the +- Go version has been updated to prevent the possibility of exploiting the [CVE-2022-29526], [CVE-2022-30634], [CVE-2022-30629], [CVE-2022-30580], and [CVE-2022-29804] Go vulnerabilities. - Enforced password strength policy ([#3503]). @@ -535,7 +595,7 @@ See also the [v0.107.6 GitHub milestone][ms-v0.107.6]. ### Security - `User-Agent` HTTP header removed from outgoing DNS-over-HTTPS requests. -- Go version was updated to prevent the possibility of exploiting the +- Go version has been updated to prevent the possibility of exploiting the [CVE-2022-24675], [CVE-2022-27536], and [CVE-2022-28327] Go vulnerabilities. ### Added @@ -590,7 +650,7 @@ were resolved. ### Security -- Go version was updated to prevent the possibility of exploiting the +- Go version has been updated to prevent the possibility of exploiting the [CVE-2022-24921] Go vulnerability. [CVE-2022-24921]: https://www.cvedetails.com/cve/CVE-2022-24921 @@ -603,7 +663,7 @@ See also the [v0.107.4 GitHub milestone][ms-v0.107.4]. ### Security -- Go version was updated to prevent the possibility of exploiting the +- Go version has been updated to prevent the possibility of exploiting the [CVE-2022-23806], [CVE-2022-23772], and [CVE-2022-23773] Go vulnerabilities. ### Fixed diff --git a/README.md b/README.md index 43c9db89..1f2bc7a3 100644 --- a/README.md +++ b/README.md @@ -10,68 +10,76 @@ Free and open source, powerful network-wide ads & trackers blocking DNS server.

-

AdGuard.com | Wiki | Reddit | Twitter | Telegram -

+

- Code Coverage + Code Coverage - Go Report Card + Go Report Card - Docker Pulls + Docker Pulls -
+
- Latest release + Latest release - adguard-home + adguard-home

- -
- +

- +

+
-
- -AdGuard Home is a network-wide software for blocking ads & tracking. After you set it up, it'll cover ALL your home devices, and you don't need any client-side software for that. +AdGuard Home is a network-wide software for blocking ads and tracking. After you +set it up, it'll cover ALL your home devices, and you don't need any client-side +software for that. It operates as a DNS server that re-routes tracking domains to a “black hole”, thus preventing your devices from connecting to those servers. It's based on -software we use for our public [AdGuard DNS](https://adguard-dns.io/) servers, -and both share a lot of code. +software we use for our public [AdGuard DNS] servers, and both share a lot of +code. + +[AdGuard DNS]: https://adguard-dns.io/ -* [Getting Started](#getting-started) -* [Comparing AdGuard Home to other solutions](#comparison) - * [How is this different from public AdGuard DNS servers?](#comparison-adguard-dns) - * [How does AdGuard Home compare to Pi-Hole](#comparison-pi-hole) - * [How does AdGuard Home compare to traditional ad blockers](#comparison-adblock) -* [How to build from source](#how-to-build) -* [Contributing](#contributing) - * [Test unstable versions](#test-unstable-versions) - * [Reporting issues](#reporting-issues) - * [Help with translations](#translate) - * [Other](#help-other) -* [Projects that use AdGuard Home](#uses) -* [Acknowledgments](#acknowledgments) -* [Privacy](#privacy) + * [Getting Started](#getting-started) + * [Automated install (Unix)](#automated-install-linux-and-mac) + * [Alternative methods](#alternative-methods) + * [Guides](#guides) + * [API](#api) + * [Comparing AdGuard Home to other solutions](#comparison) + * [How is this different from public AdGuard DNS servers?](#comparison-adguard-dns) + * [How does AdGuard Home compare to Pi-Hole](#comparison-pi-hole) + * [How does AdGuard Home compare to traditional ad blockers](#comparison-adblock) + * [Known limitations](#comparison-limitations) + * [How to build from source](#how-to-build) + * [Prerequisites](#prerequisites) + * [Building](#building) + * [Contributing](#contributing) + * [Test unstable versions](#test-unstable-versions) + * [Reporting issues](#reporting-issues) + * [Help with translations](#translate) + * [Other](#help-other) + * [Projects that use AdGuard Home](#uses) + * [Acknowledgments](#acknowledgments) + * [Privacy](#privacy) - -## Getting Started -### Automated install (Linux and Mac) + +## Getting Started + + ### Automated install (Unix) Run the following command in your terminal: @@ -80,73 +88,96 @@ curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/s ``` The script also accepts some options: -* `-c ` to use specified channel. -* `-r` to reinstall AdGuard Home; -* `-u` to uninstall AdGuard Home; -* `-v` for verbose output; + + * `-c ` to use specified channel; + * `-r` to reinstall AdGuard Home; + * `-u` to uninstall AdGuard Home; + * `-v` for verbose output. Note that options `-r` and `-u` are mutually exclusive. -### Alternative methods -#### Manual installation -Please read the **[Getting Started](https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started)** article on our Wiki to learn how to install AdGuard Home manually, and how to configure your devices to use it. + ### Alternative methods -#### Docker + #### Manual installation -You can use our [official Docker image](https://hub.docker.com/r/adguard/adguardhome). +Please read the **[Getting Started][wiki-start]** article on our Wiki to learn +how to install AdGuard Home manually, and how to configure your devices to use +it. -#### Snap Store + #### Docker -If you're running **Linux**, there's a secure and easy way to install AdGuard Home - you can get it from the [Snap Store](https://snapcraft.io/adguard-home). +You can use our official Docker image on [Docker Hub]. -### Guides + #### Snap Store -* [Getting Started](https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started) - * [FAQ](https://github.com/AdguardTeam/AdGuardHome/wiki/FAQ) - * [How to Write Hosts Blocklists](https://github.com/AdguardTeam/AdGuardHome/wiki/Hosts-Blocklists) - * [Comparing AdGuard Home to Other Solutions](https://github.com/AdguardTeam/AdGuardHome/wiki/Comparison) -* Configuring AdGuard - * [Configuration](https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration) - * [Configuring AdGuard Home Clients](https://github.com/AdguardTeam/AdGuardHome/wiki/Clients) - * [AdGuard Home as a DoH, DoT, or DoQ Server](https://github.com/AdguardTeam/AdGuardHome/wiki/Encryption) - * [AdGuard Home as a DNSCrypt Server](https://github.com/AdguardTeam/AdGuardHome/wiki/DNSCrypt) - * [AdGuard Home as a DHCP Server](https://github.com/AdguardTeam/AdGuardHome/wiki/DHCP) -* Installing AdGuard Home - * [Docker](https://github.com/AdguardTeam/AdGuardHome/wiki/Docker) - * [How to Install and Run AdGuard Home on a Raspberry Pi](https://github.com/AdguardTeam/AdGuardHome/wiki/Raspberry-Pi) - * [How to Install and Run AdGuard Home on a Virtual Private Server](https://github.com/AdguardTeam/AdGuardHome/wiki/VPS) -* [Verifying Releases](https://github.com/AdguardTeam/AdGuardHome/wiki/Verify-Releases) +If you're running **Linux,** there's a secure and easy way to install AdGuard +Home: get it from the [Snap Store]. -### API +[Docker Hub]: https://hub.docker.com/r/adguard/adguardhome +[Snap Store]: https://snapcraft.io/adguard-home +[wiki-start]: https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started -If you want to integrate with AdGuard Home, you can use our [REST API](https://github.com/AdguardTeam/AdGuardHome/tree/master/openapi). -Alternatively, you can use this [python client](https://pypi.org/project/adguardhome/), which is used to build the [AdGuard Home Hass.io Add-on](https://www.home-assistant.io/integrations/adguard/). - -## Comparing AdGuard Home to other solutions - -### How is this different from public AdGuard DNS servers? + ### Guides -Running your own AdGuard Home server allows you to do much more than using a public DNS server. It's a completely different level. See for yourself: +See our [Wiki][wiki]. -* Choose what exactly the server blocks and permits. -* Monitor your network activity. -* Add your own custom filtering rules. -* **Most importantly, this is your own server, and you are the only one who's in control.** +[wiki]: https://github.com/AdguardTeam/AdGuardHome/wiki - -### How does AdGuard Home compare to Pi-Hole -At this point, AdGuard Home has a lot in common with Pi-Hole. Both block ads and trackers using "DNS sinkholing" method, and both allow customizing what's blocked. -> We're not going to stop here. DNS sinkholing is not a bad starting point, but this is just the beginning. + ### API -AdGuard Home provides a lot of features out-of-the-box with no need to install and configure additional software. We want it to be simple to the point when even casual users can set it up with minimal effort. +If you want to integrate with AdGuard Home, you can use our [REST API][openapi]. +Alternatively, you can use this [python client][pyclient], which is used to +build the [AdGuard Home Hass.io Add-on][hassio]. -> Disclaimer: some of the listed features can be added to Pi-Hole by installing additional software or by manually using SSH terminal and reconfiguring one of the utilities Pi-Hole consists of. However, in our opinion, this cannot be legitimately counted as a Pi-Hole's feature. +[hassio]: https://www.home-assistant.io/integrations/adguard/ +[openapi]: https://github.com/AdguardTeam/AdGuardHome/tree/master/openapi +[pyclient]: https://pypi.org/project/adguardhome/ + + + +## Comparing AdGuard Home to other solutions + + ### How is this different from public AdGuard DNS servers? + +Running your own AdGuard Home server allows you to do much more than using a +public DNS server. It's a completely different level. See for yourself: + + * Choose what exactly the server blocks and permits. + + * Monitor your network activity. + + * Add your own custom filtering rules. + + * **Most importantly, it's your own server, and you are the only one who's in + control.** + + + + ### How does AdGuard Home compare to Pi-Hole + +At this point, AdGuard Home has a lot in common with Pi-Hole. Both block ads +and trackers using the so-called “DNS sinkholing” method and both allow +customizing what's blocked. + + + +AdGuard Home provides a lot of features out-of-the-box with no need to install +and configure additional software. We want it to be simple to the point when +even casual users can set it up with minimal effort. + +**Disclaimer:** some of the listed features can be added to Pi-Hole by +installing additional software or by manually using SSH terminal and +reconfiguring one of the utilities Pi-Hole consists of. However, in our +opinion, this cannot be legitimately counted as a Pi-Hole's feature. | Feature | AdGuard Home | Pi-Hole | |-------------------------------------------------------------------------|-------------------|-----------------------------------------------------------| @@ -162,53 +193,72 @@ AdGuard Home provides a lot of features out-of-the-box with no need to install a | Force Safe search on search engines | ✅ | ❌ | | Per-client (device) configuration | ✅ | ✅ | | Access settings (choose who can use AGH DNS) | ✅ | ❌ | -| Running [without root privileges](https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#running-without-superuser) | ✅ | ❌ | +| Running [without root privileges][wiki-noroot] | ✅ | ❌ | - -### How does AdGuard Home compare to traditional ad blockers +[wiki-noroot]: https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#running-without-superuser + + + + ### How does AdGuard Home compare to traditional ad blockers 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). This level of protection is enough for some users. +DNS sinkholing is capable of blocking a big percentage of ads, but it lacks +the flexibility and the power of traditional ad blockers. You can get a good +impression about the difference between these methods by reading [this +article][blog-adaway], which compares AdGuard for Android (a traditional ad +blocker) to hosts-level ad blockers (which are almost identical to DNS-based +blockers in their capabilities). This level of protection is enough for some +users. + +Additionally, using a DNS-based blocker can help to block ads, tracking and +analytics requests on other types of devices, such as SmartTVs, smart speakers +or other kinds of IoT devices (on which you can't install traditional ad +blockers). -Additionally, using a DNS-based blocker can help to block ads, tracking and analytics requests on other types of devices, such as SmartTVs, smart speakers or other kinds of IoT devices (on which you can't install traditional ad blockers). - -**Known limitations** + ### Known limitations Here are some examples of what cannot be blocked by a DNS-level blocker: -* YouTube, Twitch ads -* Facebook, Twitter, Instagram sponsored posts + * YouTube, Twitch ads; -Essentially, any advertising that shares a domain with content cannot be blocked by a DNS-level blocker. + * Facebook, Twitter, Instagram sponsored posts. -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 a complicated configuration. +Essentially, any advertising that shares a domain with content cannot be blocked +by a DNS-level blocker. - -## How to build from source +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][issue-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 +a complicated configuration. -### Prerequisites +[blog-adaway]: https://adguard.com/blog/adguard-vs-adaway-dns66.html +[issue-1228]: https://github.com/AdguardTeam/AdGuardHome/issues/1228 + + + +## How to build from source + + ### Prerequisites Run `make init` to prepare the development environment. You will need this to build AdGuard Home: - * [go](https://golang.org/dl/) v1.18 or later. - * [node.js](https://nodejs.org/en/download/) v10.16.2 or later. - * [npm](https://www.npmjs.com/) v6.14 or later (temporary requirement, TODO: remove when redesign is finished). - * [yarn](https://yarnpkg.com/) v1.22.5 or later. + * [Go](https://golang.org/dl/) v1.18 or later; + * [Node.js](https://nodejs.org/en/download/) v10.16.2 or later; + * [npm](https://www.npmjs.com/) v6.14 or later; + * [yarn](https://yarnpkg.com/) v1.22.5 or later. -### Building -Open Terminal and execute these commands: + + ### Building + +Open your terminal and execute these commands: ```sh git clone https://github.com/AdguardTeam/AdGuardHome @@ -216,16 +266,18 @@ cd AdGuardHome make ``` -Please note, that the non-standard `-j` flag is currently not supported, so -building with `make -j 4` or setting your `MAKEFLAGS` to include, for example, -`-j 4` is likely to break the build. If you do have your `MAKEFLAGS` set to -that, and you don't want to change it, you can override it by running -`make -j 1`. +**NOTE:** The non-standard `-j` flag is currently not supported, so building +with `make -j 4` or setting your `MAKEFLAGS` to include, for example, `-j 4` is +likely to break the build. If you do have your `MAKEFLAGS` set to that, and you +don't want to change it, you can override it by running `make -j 1`. -Check the [`Makefile`](https://github.com/AdguardTeam/AdGuardHome/blob/master/Makefile) to learn about other commands. +Check the [`Makefile`][src-makefile] to learn about other commands. -**Building for a different platform.** You can build AdGuard for any OS/ARCH just like any other Go project. -In order to do this, specify `GOOS` and `GOARCH` env variables before running make. + #### Building for a different platform + +You can build AdGuard Home for any OS/ARCH that Go supports. In order to do +this, specify `GOOS` and `GOARCH` environment variables as macros when running +`make`. For example: @@ -239,168 +291,223 @@ or: make GOOS='linux' GOARCH='arm64' ``` -#### Preparing release + #### Preparing releases -You'll need this to prepare a release build: - -* [snapcraft](https://snapcraft.io/) - -Commands: +You'll need [`snapcraft`] to prepare a release build. Once installed, run the +following command: ```sh make build-release CHANNEL='...' VERSION='...' ``` -#### Docker image +See the [`build-release` target documentation][targ-release]. -* Run `make build-docker` to build the Docker image locally (the one that we publish to DockerHub). + #### Docker image -Please note, that we're using [Docker Buildx](https://docs.docker.com/buildx/working-with-buildx/) to build our official image. +Run `make build-docker` to build the Docker image locally (the one that we +publish to DockerHub). Please note, that we're using [Docker Buildx][buildx] to +build our official image. You may need to prepare before using these builds: -* (Linux-only) Install Qemu: `docker run --rm --privileged multiarch/qemu-user-static --reset -p yes --credential yes` -* Prepare builder: `docker buildx create --name buildx-builder --driver docker-container --use` + * (Linux-only) Install Qemu: + + ```sh + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes --credential yes + ``` + + * Prepare the builder: + + ```sh + docker buildx create --name buildx-builder --driver docker-container --use + ``` + +See the [`build-docker` target documentation][targ-docker]. + + #### Debugging the frontend + +When you need to debug the frontend without recompiling the production version +every time, for example to check how your labels would look on a form, you can +run the frontend build a development environment. + +1. In a separate terminal, run: + + ```sh + ( cd ./client/ && env NODE_ENV='development' npm run watch ) + ``` + +2. Run your `AdGuardHome` binary with the `--local-frontend` flag, which + instructs AdGuard Home to ignore the built-in frontend files and use those + from the `./build/` directory. + +3. Now any changes you make in the `./client/` directory should be recompiled + and become available on the web UI. Make sure that you disable the browser + cache to make sure that you actually get the recompiled version. + +[`snapcraft`]: https://snapcraft.io/ +[buildx]: https://docs.docker.com/buildx/working-with-buildx/ +[src-makefile]: https://github.com/AdguardTeam/AdGuardHome/blob/master/Makefile +[targ-docker]: https://github.com/AdguardTeam/AdGuardHome/tree/master/scripts#build-dockersh-build-a-multi-architecture-docker-image +[targ-release]: https://github.com/AdguardTeam/AdGuardHome/tree/master/scripts#build-releasesh-build-a-release-for-all-platforms -### Resources that we update periodically -* `scripts/translations` -* `scripts/whotracksme` +## Contributing - -## Contributing +You are welcome to fork this repository, make your changes and [submit a pull +request][pr]. Please make sure you follow our [code guidelines][guide] though. -You are welcome to fork this repository, make your changes and submit a pull request — https://github.com/AdguardTeam/AdGuardHome/pulls +Please note that we don't expect people to contribute to both UI and backend +parts of the program simultaneously. Ideally, the backend part is implemented +first, i.e. configuration, API, and the functionality itself. The UI part can +be implemented later in a different pull request by a different person. -Please note that we don't expect people to contribute to both UI and golang parts of the program simultaneously. Ideally, the golang part is implemented first, i.e. configuration, API, and the functionality itself. The UI part can be implemented later in a different pull request by a different person. +[guide]: https://github.com/AdguardTeam/CodeGuidelines/ +[pr]: https://github.com/AdguardTeam/AdGuardHome/pulls - -### Test unstable versions + + + ### Test unstable versions There are two update channels that you can use: -* `beta` - beta version of AdGuard Home. More or less stable versions. -* `edge` - the newest version of AdGuard Home. New updates are pushed to this channel daily and it is the closest to the master branch you can get. + * `beta`: beta versions of AdGuard Home. More or less stable versions, + usually released every two weeks or more often. + + * `edge`: the newest version of AdGuard Home from the development branch. New + updates are pushed to this channel daily. There are three options how you can install an unstable version: -1. [Snap Store](https://snapcraft.io/adguard-home) -- look for "beta" and "edge" channels there. -2. [Docker Hub](https://hub.docker.com/r/adguard/adguardhome) -- look for "beta" and "edge" tags there. -3. Standalone builds. Use the automated installation script or look for the available builds below. +1. [Snap Store]: look for the `beta` and `edge` channels. -Beta: +2. [Docker Hub]: look for the `beta` and `edge` tags. -```sh -curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c beta -``` +3. Standalone builds. Use the automated installation script or look for the + available builds [on the Wiki][wiki-platf]. -Edge: + Script to install a beta version: -```sh -curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c edge -``` + ```sh + curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c beta + ``` - * Beta channel builds - * Linux: [64-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_amd64.tar.gz), [32-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_386.tar.gz) - * Linux ARM: [32-bit ARMv6](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_armv6.tar.gz) (recommended for Raspberry Pi OS stable), [64-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_arm64.tar.gz), [32-bit ARMv5](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_armv5.tar.gz), [32-bit ARMv7](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_armv7.tar.gz) - * Linux MIPS: [32-bit MIPS](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_mips_softfloat.tar.gz), [32-bit MIPSLE](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_mipsle_softfloat.tar.gz), [64-bit MIPS](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_mips64_softfloat.tar.gz), [64-bit MIPSLE](https://static.adtidy.org/adguardhome/beta/AdGuardHome_linux_mips64le_softfloat.tar.gz) - * Windows: [64-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_windows_amd64.zip), [32-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_windows_386.zip) - * macOS: [64-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_darwin_amd64.zip), [32-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_darwin_386.zip) - * macOS ARM: [64-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_darwin_arm64.zip) - * FreeBSD: [64-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_freebsd_amd64.tar.gz), [32-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_freebsd_386.tar.gz) - * FreeBSD ARM: [64-bit](https://static.adtidy.org/adguardhome/beta/AdGuardHome_freebsd_arm64.tar.gz), [32-bit ARMv5](https://static.adtidy.org/adguardhome/beta/AdGuardHome_freebsd_armv5.tar.gz), [32-bit ARMv6](https://static.adtidy.org/adguardhome/beta/AdGuardHome_freebsd_armv6.tar.gz), [32-bit ARMv7](https://static.adtidy.org/adguardhome/beta/AdGuardHome_freebsd_armv7.tar.gz) - * OpenBSD: (coming soon) - * OpenBSD ARM: (coming soon) + Script to install an edge version: - * Edge channel builds - * Linux: [64-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_amd64.tar.gz), [32-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_386.tar.gz) - * Linux ARM: [32-bit ARMv6](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_armv6.tar.gz) (recommended for Raspberry Pi OS stable), [64-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_arm64.tar.gz), [32-bit ARMv5](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_armv5.tar.gz), [32-bit ARMv7](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_armv7.tar.gz) - * Linux MIPS: [32-bit MIPS](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_mips_softfloat.tar.gz), [32-bit MIPSLE](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_mipsle_softfloat.tar.gz), [64-bit MIPS](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_mips64_softfloat.tar.gz), [64-bit MIPSLE](https://static.adtidy.org/adguardhome/edge/AdGuardHome_linux_mips64le_softfloat.tar.gz) - * Windows: [64-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_windows_amd64.zip), [32-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_windows_386.zip) - * macOS: [64-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_darwin_amd64.zip), [32-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_darwin_386.zip) - * macOS ARM: [64-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_darwin_arm64.zip) - * FreeBSD: [64-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_freebsd_amd64.tar.gz), [32-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_freebsd_386.tar.gz) - * FreeBSD ARM: [64-bit](https://static.adtidy.org/adguardhome/edge/AdGuardHome_freebsd_arm64.tar.gz), [32-bit ARMv5](https://static.adtidy.org/adguardhome/edge/AdGuardHome_freebsd_armv5.tar.gz), [32-bit ARMv6](https://static.adtidy.org/adguardhome/edge/AdGuardHome_freebsd_armv6.tar.gz), [32-bit ARMv7](https://static.adtidy.org/adguardhome/edge/AdGuardHome_freebsd_armv7.tar.gz) - * OpenBSD: [64-bit (experimental)](https://static.adtidy.org/adguardhome/edge/AdGuardHome_openbsd_amd64.tar.gz) - * OpenBSD ARM: [64-bit (experimental)](https://static.adtidy.org/adguardhome/edge/AdGuardHome_openbsd_arm64.tar.gz) + ```sh + curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c edge + ``` +[wiki-platf]: https://github.com/AdguardTeam/AdGuardHome/wiki/Platforms - -### Report issues -If you run into any problem or have a suggestion, head to [this page](https://github.com/AdguardTeam/AdGuardHome/issues) and click on the `New issue` button. + ### Report issues - -### Help with translations +If you run into any problem or have a suggestion, head to [this page][iss] and +click on the “New issue” button. + +[iss]: https://github.com/AdguardTeam/AdGuardHome/issues + + + + ### Help with translations If you want to help with AdGuard Home translations, please learn more about -translating AdGuard products -[in our Knowledge Base](https://kb.adguard.com/en/general/adguard-translations). +translating AdGuard products [in our Knowledge Base][kb-trans]. You can +contribute to the [AdGuardHome project on CrowdIn][crowdin]. -Here is a link to AdGuard Home project: - +[crowdin]: https://crowdin.com/project/adguard-applications/en#/adguard-home +[kb-trans]: https://kb.adguard.com/en/general/adguard-translations - -### Other -Here's what you can also do to contribute: -1. [Look for issues][helpissues] marked as "help wanted". -2. Actualize the list of *Blocked services*. It can be found in - [filtering/blocked.go][blocked.go]. -3. Actualize the list of known *trackers*. It it can be found in [this repo] - [companiesdb]. -4. Actualize the list of vetted *blocklists*. It it can be found in - [client/src/helpers/filters/filters.json][filters.json]. + ### Other -[helpissues]: https://github.com/AdguardTeam/AdGuardHome/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22+ -[blocked.go]: https://github.com/AdguardTeam/AdGuardHome/blob/master/internal/filtering/blocked.go -[companiesdb]: https://github.com/AdguardTeam/companiesdb -[filters.json]: https://github.com/AdguardTeam/AdGuardHome/blob/master/client/src/helpers/filters/filters.json +Another way you can contribute is by [looking for issues][iss-help] marked as +`help wanted`, asking if the issue is up for grabs, and sending a PR fixing the +bug or implementing the feature. - -## Projects that use AdGuard Home +[iss-help]: https://github.com/AdguardTeam/AdGuardHome/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 -* [AdGuard Home Remote](https://apps.apple.com/app/apple-store/id1543143740) - iOS app by [Joost](https://rocketscience-it.nl/) -* [Python library](https://github.com/frenck/python-adguardhome) by [@frenck](https://github.com/frenck) -* [Home Assistant add-on](https://github.com/hassio-addons/addon-adguard-home) by [@frenck](https://github.com/frenck) -* [OpenWrt LUCI app](https://github.com/kongfl888/luci-app-adguardhome) by [@kongfl888](https://github.com/kongfl888) (originally by [@rufengsuixing](https://github.com/rufengsuixing)) -* [Prometheus exporter for AdGuard Home](https://github.com/ebrianne/adguard-exporter) by [@ebrianne](https://github.com/ebrianne) -* [AdGuard Home on GLInet routers](https://forum.gl-inet.com/t/adguardhome-on-gl-routers/10664) by [Gl-Inet](https://gl-inet.com/) -* [Cloudron app](https://git.cloudron.io/cloudron/adguard-home-app) by [@gramakri](https://github.com/gramakri) -* [Asuswrt-Merlin-AdGuardHome-Installer](https://github.com/jumpsmm7/Asuswrt-Merlin-AdGuardHome-Installer) by [@jumpsmm7](https://github.com/jumpsmm7) aka [@SomeWhereOverTheRainBow](https://www.snbforums.com/members/somewhereovertherainbow.64179/) -* [Node.js library](https://github.com/Andrea055/AdguardHomeAPI) by [@Andrea055](https://github.com/Andrea055/) - -## Acknowledgments + +## Projects that use AdGuard Home + + + + * [AdGuard Home Remote](https://apps.apple.com/app/apple-store/id1543143740): + iOS app by [Joost](https://rocketscience-it.nl/). + + * [Python library](https://github.com/frenck/python-adguardhome) by + [@frenck](https://github.com/frenck). + + * [Home Assistant add-on](https://github.com/hassio-addons/addon-adguard-home) + by [@frenck](https://github.com/frenck). + + * [OpenWrt LUCI app](https://github.com/kongfl888/luci-app-adguardhome) by + [@kongfl888](https://github.com/kongfl888) (originally by + [@rufengsuixing](https://github.com/rufengsuixing)). + + * [Prometheus exporter for AdGuard + Home](https://github.com/ebrianne/adguard-exporter) by + [@ebrianne](https://github.com/ebrianne). + + * [AdGuard Home on GLInet + routers](https://forum.gl-inet.com/t/adguardhome-on-gl-routers/10664) by + [Gl-Inet](https://gl-inet.com/). + + * [Cloudron app](https://git.cloudron.io/cloudron/adguard-home-app) by + [@gramakri](https://github.com/gramakri). + + * [Asuswrt-Merlin-AdGuardHome-Installer](https://github.com/jumpsmm7/Asuswrt-Merlin-AdGuardHome-Installer) + by [@jumpsmm7](https://github.com/jumpsmm7) aka + [@SomeWhereOverTheRainBow](https://www.snbforums.com/members/somewhereovertherainbow.64179/). + + * [Node.js library](https://github.com/Andrea055/AdguardHomeAPI) by + [@Andrea055](https://github.com/Andrea055/). + + + +## Acknowledgments + + This software wouldn't have been possible without: - * [Go](https://golang.org/dl/) and its libraries: - * [gcache](https://github.com/bluele/gcache) - * [miekg's dns](https://github.com/miekg/dns) - * [go-yaml](https://github.com/go-yaml/yaml) - * [service](https://godoc.org/github.com/kardianos/service) - * [dnsproxy](https://github.com/AdguardTeam/dnsproxy) - * [urlfilter](https://github.com/AdguardTeam/urlfilter) - * [Node.js](https://nodejs.org/) and its libraries: - * [React.js](https://reactjs.org) - * [Tabler](https://github.com/tabler/tabler) - * And many more node.js packages. - * [whotracks.me data](https://github.com/cliqz-oss/whotracks.me) + * [Go](https://golang.org/dl/) and its libraries: + * [gcache](https://github.com/bluele/gcache) + * [miekg's dns](https://github.com/miekg/dns) + * [go-yaml](https://github.com/go-yaml/yaml) + * [service](https://godoc.org/github.com/kardianos/service) + * [dnsproxy](https://github.com/AdguardTeam/dnsproxy) + * [urlfilter](https://github.com/AdguardTeam/urlfilter) + * [Node.js](https://nodejs.org/) and its libraries: + * And many more Node.js packages. + * [React.js](https://reactjs.org) + * [Tabler](https://github.com/tabler/tabler) + * [whotracks.me data](https://github.com/cliqz-oss/whotracks.me) -You might have seen that [CoreDNS](https://coredns.io) was mentioned here -before, but we've stopped using it in AdGuard Home. +You might have seen that [CoreDNS] was mentioned here before, but we've stopped +using it in AdGuard Home. -For a full list of all node.js packages in use, please take a look at [client/package.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/package.json) file. +For the full list of all Node.js packages in use, please take a look at +[`client/package.json`][src-packagejson] file. - -## Privacy +[CoreDNS]: https://coredns.io +[src-packagejson]: https://github.com/AdguardTeam/AdGuardHome/blob/master/client/package.json + +## Privacy + Our main idea is that you are the one, who should be in control of your data. So it is only natural, that AdGuard Home does not collect any usage statistics, -and does not use any web services unless you configure it to do so. Full policy -with every bit that *could in theory be* sent by AdGuard Home is available -[here](https://adguard.com/en/privacy/home.html) +and does not use any web services unless you configure it to do so. See also +the [full privacy policy][privacy] with every bit that *could in theory be sent* +by AdGuard Home is available. + +[privacy]: https://adguard.com/en/privacy/home.html diff --git a/bamboo-specs/release.yaml b/bamboo-specs/release.yaml index 4232b734..86cc16ec 100644 --- a/bamboo-specs/release.yaml +++ b/bamboo-specs/release.yaml @@ -7,7 +7,7 @@ # Make sure to sync any changes with the branch overrides below. 'variables': 'channel': 'edge' - 'dockerGo': 'adguard/golang-ubuntu:5.2' + 'dockerGo': 'adguard/golang-ubuntu:5.3' 'stages': - 'Build frontend': @@ -322,7 +322,7 @@ # need to build a few of these. 'variables': 'channel': 'beta' - 'dockerGo': 'adguard/golang-ubuntu:5.2' + 'dockerGo': 'adguard/golang-ubuntu:5.3' # release-vX.Y.Z branches are the branches from which the actual final release # is built. - '^release-v[0-9]+\.[0-9]+\.[0-9]+': @@ -337,4 +337,4 @@ # are the ones that actually get released. 'variables': 'channel': 'release' - 'dockerGo': 'adguard/golang-ubuntu:5.2' + 'dockerGo': 'adguard/golang-ubuntu:5.3' diff --git a/bamboo-specs/test.yaml b/bamboo-specs/test.yaml index 81796e1f..ac8c67fd 100644 --- a/bamboo-specs/test.yaml +++ b/bamboo-specs/test.yaml @@ -5,7 +5,7 @@ 'key': 'AHBRTSPECS' 'name': 'AdGuard Home - Build and run tests' 'variables': - 'dockerGo': 'adguard/golang-ubuntu:5.2' + 'dockerGo': 'adguard/golang-ubuntu:5.3' 'stages': - 'Tests': diff --git a/client/src/__locales/be.json b/client/src/__locales/be.json index c666daab..af646119 100644 --- a/client/src/__locales/be.json +++ b/client/src/__locales/be.json @@ -139,7 +139,7 @@ "average_processing_time": "Сярэдні час апрацоўкі запыту", "average_processing_time_hint": "Сярэдні час для апрацоўкі запыту DNS у мілісекундах", "block_domain_use_filters_and_hosts": "Блакаваць дамены з выкарыстаннем фільтраў і файлаў хастоў", - "filters_block_toggle_hint": "Вы можаце наладзіць правілы блакавання ў «Фільтрах».", + "filters_block_toggle_hint": "Вы можаце наладзіць правілы блакавання ў «Фільтрах».", "use_adguard_browsing_sec": "Выкарыстаць Бяспечную навігацыю AdGuard", "use_adguard_browsing_sec_hint": "AdGuard Home праверыць, ці ўлучаны дамен у ўэб-службу бяспекі браўзара. Ён будзе выкарыстоўваць API, каб выканаць праверку: на сервер адсылаецца толькі кароткі прэфікс імя дамена SHA256.", "use_adguard_parental": "Ужывайце модуль Бацькоўскага кантролю AdGuard ", @@ -215,6 +215,7 @@ "example_upstream_udp": "звычайны DNS (праз UDP, імя хаста);", "example_upstream_dot": "зашыфраваны <0>DNS-over-TLS;", "example_upstream_doh": "зашыфраваны <0>DNS-over-HTTPS;", + "example_upstream_doh3": "зашыфраваны DNS-над-HTTPS з прымусовым <0>HTTP/3 і без вяртання да HTTP/2 або ніжэй;", "example_upstream_doq": "зашыфраваны <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS Stamps для <1>DNSCrypt ці <2>DNS-over-HTTPS рэзалвераў;", "example_upstream_tcp": "звычайны DNS (наўзверх TCP);", @@ -339,7 +340,7 @@ "install_devices_router_list_3": "Увядзіце туды адрас вашага AdGuard Home.", "install_devices_router_list_4": "Вы не можаце ўсталяваць уласны DNS-сервер на некаторых тыпах маршрутызатараў. У гэтым выпадку можа дапамагчы налада AdGuard Home у якасці DHCP-сервера. У адваротным выпадку вам трэба звярнуцца да кіраўніцтва па наладзе DNS-сервераў для вашай пэўнай мадэлі маршрутызатара.", "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_4": "Пстрыкніце правай кнопкай мышы ваша актыўнае злучэнне і абярыце Уласцівасці.", "install_devices_windows_list_5": "Знайдзіце ў спісе пункт «IP версіі 4 (TCP/IPv4)», вылучыце яго і потым ізноў націсніце «Уласцівасці».", @@ -605,7 +606,7 @@ "blocklist": "Чорны спіс", "milliseconds_abbreviation": "мс", "cache_size": "Памер кэша", - "cache_size_desc": "Памер кэша DNS (у байтах).", + "cache_size_desc": "Памер кэша DNS (у байтах). Каб адключыць кэшаванне, пакіньце пустым.", "cache_ttl_min_override": "Перавызначыць мінімальны TTL", "cache_ttl_max_override": "Перавызначыць максімальны TTL", "enter_cache_size": "Увядзіце памер кэша (байты)", diff --git a/client/src/__locales/cs.json b/client/src/__locales/cs.json index 8c879b09..160b1046 100644 --- a/client/src/__locales/cs.json +++ b/client/src/__locales/cs.json @@ -215,6 +215,7 @@ "example_upstream_udp": "obvyklý DNS (skrze UDP, název hostitele);", "example_upstream_dot": "šifrovaný <0>DNS skrze TLS;", "example_upstream_doh": "šifrovaný <0>DNS skrze HTTPS;", + "example_upstream_doh3": "šifrovaný DNS skrze HTTPS s vynuceným <0>HTTP/3 a bez možnosti zpětného přechodu na HTTP/2 nebo nižší;", "example_upstream_doq": "šifrovaný <0>DNS skrze QUIC;", "example_upstream_sdns": "<0>DNS razítka pro <1>DNSCrypt nebo <2>DNS skrze HTTPS řešitele;", "example_upstream_tcp": "obvyklý DNS (přes TCP);", @@ -605,7 +606,7 @@ "blocklist": "Zakázaný", "milliseconds_abbreviation": "ms", "cache_size": "Velikost mezipaměti", - "cache_size_desc": "Velikost mezipaměti DNS (v bajtech).", + "cache_size_desc": "Velikost mezipaměti DNS (v bajtech). Chcete-li ukládání do mezipaměti zakázat, ponechte prázdné.", "cache_ttl_min_override": "Přepsat minimální hodnotu TTL", "cache_ttl_max_override": "Přepsat maximální hodnotu TTL", "enter_cache_size": "Zadejte velikost mezipaměti (v bajtech)", diff --git a/client/src/__locales/da.json b/client/src/__locales/da.json index 0df5ff72..941645d8 100644 --- a/client/src/__locales/da.json +++ b/client/src/__locales/da.json @@ -215,6 +215,7 @@ "example_upstream_udp": "almindelig DNS (over UDP, værtsnavn);", "example_upstream_dot": "krypteret <0>DNS-over-TLS", "example_upstream_doh": "krypteret <0>DNS-over-HTTPS", + "example_upstream_doh3": "krypteret DNS-over-HTTPS med tvungen <0>HTTP/3 uden fallback til HTTP/2 eller lavere;", "example_upstream_doq": "krypteret <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS Stamps til <1>DNSCrypt eller <2>DNS-over-HTTPS-opløsere;", "example_upstream_tcp": "almindelig DNS (over TCP)", @@ -605,7 +606,7 @@ "blocklist": "Sortliste", "milliseconds_abbreviation": "ms", "cache_size": "Cache-størrelse", - "cache_size_desc": "DNS cache-størrelse (i bytes).", + "cache_size_desc": "DNS cache-størrelse (i bytes). Lad stå tomt for at deaktivere cache.", "cache_ttl_min_override": "Tilsidesæt minimum TTL", "cache_ttl_max_override": "Tilsidesæt maksimal TTL", "enter_cache_size": "Angiv cache-størrelse (bytes)", diff --git a/client/src/__locales/de.json b/client/src/__locales/de.json index cff3d43d..25c4bd9e 100644 --- a/client/src/__locales/de.json +++ b/client/src/__locales/de.json @@ -215,6 +215,7 @@ "example_upstream_udp": "normales DNS (über UDP, Hostname);", "example_upstream_dot": "verschlüsseltes <0>DNS-over-TLS;", "example_upstream_doh": "verschlüsseltes <0>DNS-over-HTTPS;", + "example_upstream_doh3": "verschlüsseltes DNS-over-HTTPS mit erzwungenem <0>HTTP/3 und keinem Fallback zu HTTP/2 oder darunter;", "example_upstream_doq": "verschlüsseltes <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS-Stempel für <1>DNSCrypt oder <2>DNS-over-HTTPS Resolver;", "example_upstream_tcp": "reguläres DNS (over TCP);", @@ -447,7 +448,7 @@ "access_disallowed_title": "Nicht zugelassene Clients", "access_disallowed_desc": "Eine Liste von CIDRs, IP-Adressen oder ClientIDs. Wenn diese Liste gefüllt ist, weist AdGuard Home Anfragen von diesen Clients zurück. Dieses Feld wird ignoriert, wenn es Einträge in der Liste „Zugelassene Clients“ gibt.", "access_blocked_title": "Nicht zugelassene Domains", - "access_blocked_desc": "Verwechseln Sie dies nicht mit Filtern. AdGuard Home verwirft DNS-Abfragen, die mit diesen Domänen übereinstimmen, und diese Abfragen erscheinen nicht einmal im Abfrageprotokoll. Hier können Sie die genauen Domain-Namen, Wildcards und URL-Filter-Regeln angeben, z.B. „example.org“, „*.example.org“ oder „||example.org^“.", + "access_blocked_desc": "Nicht zu verwechseln mit Filtern. AdGuard Home verwirft DNS-Anfragen, die mit diesen Domains übereinstimmen, und diese Abfragen werden nicht einmal im Abfrageprotokoll angezeigt. Sie können exakte Domainnamen, Wildcards oder URL-Filterregeln angeben, z. B. „example.org“, „*.example.org“ oder „||example.org^“.", "access_settings_saved": "Zugriffseinstellungen erfolgreich gespeichert", "updates_checked": "Neue Version von AdGuard Home ist jetzt verfügbar", "updates_version_equal": "AdGuard Home ist aktuell", @@ -605,7 +606,7 @@ "blocklist": "Sperrliste", "milliseconds_abbreviation": "ms", "cache_size": "Größe des Cache", - "cache_size_desc": "Größe des DNS-Zwischenspeichers (in Bytes).", + "cache_size_desc": "Größe des DNS-Zwischenspeichers (in Bytes)", "cache_ttl_min_override": "TTL-Minimalwert überschreiben", "cache_ttl_max_override": "TTL-Höchstwert überschreiben", "enter_cache_size": "Größe des Cache (Bytes) eingeben", diff --git a/client/src/__locales/en.json b/client/src/__locales/en.json index e059c9f4..b986dea1 100644 --- a/client/src/__locales/en.json +++ b/client/src/__locales/en.json @@ -215,6 +215,7 @@ "example_upstream_udp": "regular DNS (over UDP, hostname);", "example_upstream_dot": "encrypted <0>DNS-over-TLS;", "example_upstream_doh": "encrypted <0>DNS-over-HTTPS;", + "example_upstream_doh3": "encrypted DNS-over-HTTPS with forced <0>HTTP/3 and no fallback to HTTP/2 or below;", "example_upstream_doq": "encrypted <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS Stamps for <1>DNSCrypt or <2>DNS-over-HTTPS resolvers;", "example_upstream_tcp": "regular DNS (over TCP);", @@ -605,7 +606,7 @@ "blocklist": "Blocklist", "milliseconds_abbreviation": "ms", "cache_size": "Cache size", - "cache_size_desc": "DNS cache size (in bytes).", + "cache_size_desc": "DNS cache size (in bytes). To disable caching, leave empty.", "cache_ttl_min_override": "Override minimum TTL", "cache_ttl_max_override": "Override maximum TTL", "enter_cache_size": "Enter cache size (bytes)", diff --git a/client/src/__locales/es.json b/client/src/__locales/es.json index 506f98d7..8f8eaf11 100644 --- a/client/src/__locales/es.json +++ b/client/src/__locales/es.json @@ -215,6 +215,7 @@ "example_upstream_udp": "DNS regular (mediante UDP, nombre del host).", "example_upstream_dot": "cifrado <0>DNS mediante TLS.", "example_upstream_doh": "cifrado <0>DNS mediante HTTPS.", + "example_upstream_doh3": "cifrado DNS mediante HTTPS con <0>HTTP/3 forzado y sin alternativa a HTTP/2 o inferior.", "example_upstream_doq": "cifrado <0>DNS mediante QUIC.", "example_upstream_sdns": "<0>DNS Stamps para <1>DNSCrypt o resolutores <2>DNS mediante HTTPS.", "example_upstream_tcp": "DNS regular (mediante TCP).", @@ -605,7 +606,7 @@ "blocklist": "Lista de bloqueo", "milliseconds_abbreviation": "ms", "cache_size": "Tamaño de la caché", - "cache_size_desc": "Tamaño de la caché DNS (en bytes).", + "cache_size_desc": "Tamaño de la caché DNS (en bytes). Para deshabilitar el almacenamiento en caché, déjalo vacío.", "cache_ttl_min_override": "Anular TTL mínimo", "cache_ttl_max_override": "Anular TTL máximo", "enter_cache_size": "Ingresa el tamaño de la caché (bytes)", diff --git a/client/src/__locales/fi.json b/client/src/__locales/fi.json index 3231d087..831b1cc6 100644 --- a/client/src/__locales/fi.json +++ b/client/src/__locales/fi.json @@ -88,7 +88,7 @@ "response_details": "Vastauksen tiedot", "request_details": "Pyynnön tiedot", "client_details": "Päätelaitteen tiedot", - "details": "Tiedot", + "details": "Yksityiskohdat", "back": "Takaisin", "dashboard": "Tila", "settings": "Asetukset", @@ -215,6 +215,7 @@ "example_upstream_udp": "tavallinen DNS (UDP, isäntänimi);", "example_upstream_dot": "salattu <0>DNS-over-TLS;", "example_upstream_doh": "salattu <0>DNS-over-HTTPS;", + "example_upstream_doh3": "salattu DNS-over-HTTPS <0>HTTP/3-pakotuksella, ilman HTTP/2 (tai alempi) -varmistusta;", "example_upstream_doq": "salattu <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS Stamp -merkinnät <1>DNSCrypt tai <2>DNS-over-HTTPS -resolvereille;", "example_upstream_tcp": "tavallinen DNS (TCP);", @@ -274,7 +275,7 @@ "nxdomain": "NXDOMAIN", "refused": "REFUSED", "null_ip": "Tyhjä IP", - "custom_ip": "Oma IP", + "custom_ip": "Oma IP-osoite", "blocking_ipv4": "IPv4-esto", "blocking_ipv6": "IPv6-esto", "dnscrypt": "DNSCrypt", @@ -414,8 +415,8 @@ "clients_title": "Pysyvät päätelaitteet", "clients_desc": "Määritä pysyvät AdGuard Homeen yhdistetyt päätelaitetiedot.", "settings_global": "Yleinen", - "settings_custom": "Oma", - "table_client": "Päätelaite", + "settings_custom": "Muut aiheet", + "table_client": "Asiakas", "table_name": "Nimi", "save_btn": "Tallenna", "client_add": "Lisää päätelaite", @@ -596,7 +597,7 @@ "show_whitelisted_responses": "Sallitut", "show_processed_responses": "Käsitelty", "blocked_safebrowsing": "Turvallisen selauksen estämät", - "blocked_adult_websites": "Lapsilukon estämät", + "blocked_adult_websites": "Estetty lapsilukolla", "blocked_threats": "Estetyt uhat", "allowed": "Sallitut", "filtered": "Suodatetut", @@ -605,7 +606,7 @@ "blocklist": "Estolista", "milliseconds_abbreviation": "ms", "cache_size": "Välimuistin koko", - "cache_size_desc": "DNS-välimuistin koko (tavuina).", + "cache_size_desc": "DNS-välimuistin koko (tavuina). Jätä tyhjäksi poistaaksesi välimuistin käytöstä.", "cache_ttl_min_override": "Korvaa vähimmäis-TTL", "cache_ttl_max_override": "Korvaa enimmäis-TTL", "enter_cache_size": "Syötä välimuistin koko (tavuina)", diff --git a/client/src/__locales/fr.json b/client/src/__locales/fr.json index f9528e82..3f840948 100644 --- a/client/src/__locales/fr.json +++ b/client/src/__locales/fr.json @@ -215,6 +215,7 @@ "example_upstream_udp": "DNS normal (sur UDP, nom d’hôte) ;", "example_upstream_dot": "<0>DNS-over-TLS chiffré ;", "example_upstream_doh": "<0>DNS-over-HTTPS chiffré ;", + "example_upstream_doh3": "DNS-over-HTTPS chiffré avec <0>HTTP/3 forcé sans repli sur HTTP/2 ou inférieur ;", "example_upstream_doq": "<0>DNS-over-QUIC chiffré;", "example_upstream_sdns": "vous pouvez utiliser <0>DNS Stamps pour <1>DNSCrypt ou les résolveurs <2>DNS_over_HTTPS ;", "example_upstream_tcp": "DNS classique (au-dessus de TCP) ;", @@ -605,7 +606,7 @@ "blocklist": "Liste de blocage", "milliseconds_abbreviation": "ms", "cache_size": "Taille du cache", - "cache_size_desc": "Taille du cache DNS (en bytes) .", + "cache_size_desc": "Taille du cache DNS (en octets). Pour désactiver la mise en cache, laissez vide.", "cache_ttl_min_override": "Remplacer le TTL minimum", "cache_ttl_max_override": "Remplacer le TTL maximum", "enter_cache_size": "Entrer la taille du cache (octets)", diff --git a/client/src/__locales/hr.json b/client/src/__locales/hr.json index 8a64f6c8..e3ec2290 100644 --- a/client/src/__locales/hr.json +++ b/client/src/__locales/hr.json @@ -215,6 +215,7 @@ "example_upstream_udp": "obični DNS (preko UDP-a, ime hosta);", "example_upstream_dot": "šifrirano <0>DNS-over-TLS;", "example_upstream_doh": "šifrirano <0>DNS-over-HTTPS;", + "example_upstream_doh3": "šifrirani DNS-over-HTTPS s prisilnim <0>HTTP/3 i nema povratka na HTTP/2 ili niže;", "example_upstream_doq": "šifrirano <0>DNS-over-QUIC (eksperimentalno);", "example_upstream_sdns": "<0>DNS Stamps za <1>DNSCrypt ili <2>DNS-over-HTTPS rezolvere;", "example_upstream_tcp": "zadani DNS (putem TCP);", @@ -605,7 +606,7 @@ "blocklist": "Popis nedopuštenih", "milliseconds_abbreviation": "ms", "cache_size": "Veličina predmemorije", - "cache_size_desc": "Veličina DNS predmemorije (u bajtovima).", + "cache_size_desc": "Veličina DNS predmemorije (u bajtovima). Da biste onemogućili predmemoriju, ostavite prazno.", "cache_ttl_min_override": "Nadjačaj minimum TTL-a", "cache_ttl_max_override": "Nadjačaj maksimum TTL-a", "enter_cache_size": "Unesite veličinu predmemorije (u bajtovima)", diff --git a/client/src/__locales/hu.json b/client/src/__locales/hu.json index 7bc43b33..1c1cd839 100644 --- a/client/src/__locales/hu.json +++ b/client/src/__locales/hu.json @@ -215,6 +215,7 @@ "example_upstream_udp": "normál DNS (UDP felett, hostnév);", "example_upstream_dot": "titkosított <0>DNS-over-TLS;", "example_upstream_doh": "titkosított <0>DNS-over-HTTPS;", + "example_upstream_doh3": "titkosított DNS-over-HTTPS kényszerített <0>HTTP/3-mal és nincs visszalépés a HTTP/2-re vagy az alább;", "example_upstream_doq": "titkosított <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS Stamps a <1>DNSCrypt vagy <2>DNS-over-HTTPS feloldókhoz;", "example_upstream_tcp": "hagyományos DNS (TCP felett);", @@ -605,7 +606,7 @@ "blocklist": "Tiltólista", "milliseconds_abbreviation": "ms", "cache_size": "Gyorsítótár mérete", - "cache_size_desc": "DNS gyorsítótár mérete (bájtokban).", + "cache_size_desc": "DNS-gyorsítótár mérete (byte-ban). A gyorsítótárazás letiltásához hagyja üresen.", "cache_ttl_min_override": "A minimális TTL felülírása", "cache_ttl_max_override": "A maximális TTL felülírása", "enter_cache_size": "Adja meg a gyorsítótár méretét", diff --git a/client/src/__locales/id.json b/client/src/__locales/id.json index beb011f0..93526063 100644 --- a/client/src/__locales/id.json +++ b/client/src/__locales/id.json @@ -215,6 +215,7 @@ "example_upstream_udp": "DNS biasa (lebih dari UDP, nama host);", "example_upstream_dot": "terenkripsi <0>DNS-over-TLS;", "example_upstream_doh": "terenkripsi <0>DNS-over-HTTPS;", + "example_upstream_doh3": "DNS-over-HTTPS terenkripsi dengan paksa <0>HTTP/3 dan tidak ada fallback ke HTTP/2 atau lebih rendah;", "example_upstream_doq": "terenkripsi <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>Stempel DNS untuk <1>DNSCrypt atau pengarah <2>DNS-over-HTTPS;", "example_upstream_tcp": "DNS reguler (melalui TCP);", @@ -605,7 +606,7 @@ "blocklist": "Daftar blokir", "milliseconds_abbreviation": "ms", "cache_size": "Ukuran cache", - "cache_size_desc": "Ukuran DNS cache (dalam bit).", + "cache_size_desc": "Ukuran cache DNS (dalam byte). Untuk menonaktifkan caching, biarkan kosong.", "cache_ttl_min_override": "Tumpuk TTL minimum", "cache_ttl_max_override": "Tumpuk TTL maksimum", "enter_cache_size": "Masukkan ukuran cache (bytes)", diff --git a/client/src/__locales/it.json b/client/src/__locales/it.json index 74b109ff..499a8d81 100644 --- a/client/src/__locales/it.json +++ b/client/src/__locales/it.json @@ -215,6 +215,7 @@ "example_upstream_udp": "DNS regolare (over UDP, nome host);", "example_upstream_dot": "<0>DNS su TLS crittografato;", "example_upstream_doh": "<0>DNS su HTTPS crittografato;", + "example_upstream_doh3": "DNS-over-HTTPS crittografato con <0>HTTP/3 forzato e nessun fallback su HTTP/2 o inferiore;", "example_upstream_doq": "<0>DNS su QUIC crittografato;", "example_upstream_sdns": "<0>DNS Stamps per <1>DNSCrypt oppure i risolutori <2>DNS su HTTPS;", "example_upstream_tcp": "DNS regolare (over TCP);", @@ -605,7 +606,7 @@ "blocklist": "Lista nera", "milliseconds_abbreviation": "ms", "cache_size": "Dimensioni cache", - "cache_size_desc": "Dimensioni cache DNS (in byte).", + "cache_size_desc": "Dimensione della cache DNS (in byte). Per disabilitare la memorizzazione nella cache, lascia vuoto.", "cache_ttl_min_override": "Sovrascrivi TTL minimo", "cache_ttl_max_override": "Sovrascrivi TTL massimo", "enter_cache_size": "Immetti dimensioni cache (in byte)", diff --git a/client/src/__locales/ja.json b/client/src/__locales/ja.json index 9fc9ac6f..e4faaa06 100644 --- a/client/src/__locales/ja.json +++ b/client/src/__locales/ja.json @@ -215,6 +215,7 @@ "example_upstream_udp": "通常のDNS(over UDP, ホスト名)。", "example_upstream_dot": "暗号化されている <0>DNS-over-TLS。", "example_upstream_doh": "暗号化されている <0>DNS-over-HTTPS。", + "example_upstream_doh3": "暗号化されたDNS-over-HTTPS(<0>HTTP/3の強制、HTTP/2 以下へのフォールバックなし)", "example_upstream_doq": "暗号化 <0>DNS-over-QUIC。", "example_upstream_sdns": "<1>DNSCrypt または <2>DNS-over-HTTPS リゾルバのための <0>DNS Stamps。", "example_upstream_tcp": "通常のDNS(over TCP)。", @@ -605,7 +606,7 @@ "blocklist": "ブロックリスト", "milliseconds_abbreviation": "ms", "cache_size": "キャッシュサイズ", - "cache_size_desc": "DNSキャッシュサイズ(バイト単位)", + "cache_size_desc": "DNSキャッシュサイズ(バイト単位)。※キャッシュを無効化するには、この欄を空してください。", "cache_ttl_min_override": "最小TTLの上書き(秒単位)", "cache_ttl_max_override": "最大TTLの上書き(秒単位)", "enter_cache_size": "キャッシュサイズ(バイト単位)を入力してください", diff --git a/client/src/__locales/ko.json b/client/src/__locales/ko.json index 96da066c..779f2f98 100644 --- a/client/src/__locales/ko.json +++ b/client/src/__locales/ko.json @@ -215,6 +215,7 @@ "example_upstream_udp": "일반 DNS (UDP를 통한, 호스트명);", "example_upstream_dot": "암호화된 <0>DNS-over-TLS;", "example_upstream_doh": "암호화된 <0>DNS-over-HTTPS;", + "example_upstream_doh3": "암호화된 DNS-over-HTTPS가 강제로 <0>HTTP/3를 사용하며 HTTP/2 이하로 폴백하지 않습니다.", "example_upstream_doq": "암호화된 <0>DNS-over-QUIC;", "example_upstream_sdns": "<1>DNSCrypt 또는 <2>DNS-over-HTTPS 리졸버를 위한 <0>DNS 스탬프;", "example_upstream_tcp": "일반 DNS (TCP를 통한 접속);", @@ -605,7 +606,7 @@ "blocklist": "차단 목록", "milliseconds_abbreviation": "ms", "cache_size": "캐시 크기", - "cache_size_desc": "DNS 캐시 크기 (바이트).", + "cache_size_desc": "DNS 캐시 크기(바이트). 캐싱을 비활성화하려면 비워 둡니다.", "cache_ttl_min_override": "최소 TTL (초) 무시", "cache_ttl_max_override": "최대 TTL (초) 무시", "enter_cache_size": "캐시 크기를 입력하세요", diff --git a/client/src/__locales/nl.json b/client/src/__locales/nl.json index 6a2c2ac4..c21addcf 100644 --- a/client/src/__locales/nl.json +++ b/client/src/__locales/nl.json @@ -215,6 +215,7 @@ "example_upstream_udp": "standaard DNS (via UDP, hostnaam);", "example_upstream_dot": "versleutelde <0>DNS-via-TLS;", "example_upstream_doh": "versleutelde <0>DNS-via-HTTPS;", + "example_upstream_doh3": "versleutelde DNS-over-HTTPS met geforceerde <0>HTTP/3 en geen terugval naar HTTP/2 of lager;", "example_upstream_doq": "versleutelde <0>DNS-via-QUIC;", "example_upstream_sdns": "<0>DNS Stamps voor <1>DNSCrypt of <2>DNS-via-HTTPS oplossingen;", "example_upstream_tcp": "standaard DNS (over TCP);", @@ -605,7 +606,7 @@ "blocklist": "Blokkeerlijst", "milliseconds_abbreviation": "ms", "cache_size": "Cache grootte", - "cache_size_desc": "DNS-cache grootte (in bytes).", + "cache_size_desc": "DNS-cachegrootte (in bytes). Leeg laten om caching uit te schakelen.", "cache_ttl_min_override": "Minimale TTL overschrijven", "cache_ttl_max_override": "Maximale TTL overschrijven", "enter_cache_size": "Cache grootte invoeren (bytes)", diff --git a/client/src/__locales/no.json b/client/src/__locales/no.json index 7ff4664f..ca9baf02 100644 --- a/client/src/__locales/no.json +++ b/client/src/__locales/no.json @@ -584,7 +584,7 @@ "blocklist": "Blokkeringsliste", "milliseconds_abbreviation": "ms", "cache_size": "Mellomlagerstørrelse", - "cache_size_desc": "DNS-mellomlagerstørrelse (i bytes)", + "cache_size_desc": "DNS-bufferstørrelse (i byte). For å deaktivere caching, la stå tomt.", "cache_ttl_min_override": "Overstyr minimumslevetiden", "cache_ttl_max_override": "Overstyr maksimallevetiden", "enter_cache_size": "Skriv inn mellomlagerstørrelse (i bytes)", diff --git a/client/src/__locales/pl.json b/client/src/__locales/pl.json index 48e75a4f..8e5ccb4b 100644 --- a/client/src/__locales/pl.json +++ b/client/src/__locales/pl.json @@ -215,6 +215,7 @@ "example_upstream_udp": "zwykły DNS (przez UDP, nazwa hosta);", "example_upstream_dot": "zaszyfrowany <0>DNS-over-TLS;", "example_upstream_doh": "zaszyfrowany <0>DNS-over-HTTPS;", + "example_upstream_doh3": "szyfrowany DNS-over-HTTPS z wymuszonym <0>HTTP/3 i nie ma powrotu do HTTP/2 lub niższego;", "example_upstream_doq": "zaszyfrowany <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>Stempel DNS dla resolwerów <1>DNSCrypt lub <2>DNS-over-HTTPS;", "example_upstream_tcp": "zwykły DNS (przez TCP);", @@ -605,7 +606,7 @@ "blocklist": "Lista zablokowanych", "milliseconds_abbreviation": "ms", "cache_size": "Rozmiar pamięci podręcznej", - "cache_size_desc": "Rozmiar pamięci podręcznej DNS (w bajtach).", + "cache_size_desc": "Rozmiar pamięci podręcznej DNS (w bajtach). Aby wyłączyć buforowanie, pozostaw puste.", "cache_ttl_min_override": "Nadpisz minimalną wartość TTL", "cache_ttl_max_override": "Nadpisz maksymalną wartość TTL", "enter_cache_size": "Wpisz rozmiar pamięci podręcznej (w bajtach)", diff --git a/client/src/__locales/pt-br.json b/client/src/__locales/pt-br.json index 1a1bbecb..ee8b5c1e 100644 --- a/client/src/__locales/pt-br.json +++ b/client/src/__locales/pt-br.json @@ -215,6 +215,7 @@ "example_upstream_udp": "DNS normal (através do UDP, nome do servidor);", "example_upstream_dot": "<0>DNS-sobre-TLS criptografado;", "example_upstream_doh": "<0>DNS-sobre-HTTPS criptografado;", + "example_upstream_doh3": "DNS-over-HTTPS criptografado com <0>HTTP/3 forçado e sem fallback para HTTP/2 ou inferior;", "example_upstream_doq": "<0>DNS-sobre-QUIC criptografado;", "example_upstream_sdns": "<0>DNS Stamps para o <1>DNSCrypt ou usar os resolvedores <2>DNS-sobre-HTTPS;", "example_upstream_tcp": "DNS regular (através do TCP);", @@ -605,7 +606,7 @@ "blocklist": "Lista de bloqueio", "milliseconds_abbreviation": "ms", "cache_size": "Tamanho do cache", - "cache_size_desc": "Tamanho do cache do DNS (em bytes).", + "cache_size_desc": "Tamanho do cache do DNS (em bytes). Para desativar o cache, deixe em branco.", "cache_ttl_min_override": "Sobrepor o TTL mínimo", "cache_ttl_max_override": "Sobrepor o TTL máximo", "enter_cache_size": "Digite o tamanho do cache (bytes)", diff --git a/client/src/__locales/pt-pt.json b/client/src/__locales/pt-pt.json index 8be5b304..b143afae 100644 --- a/client/src/__locales/pt-pt.json +++ b/client/src/__locales/pt-pt.json @@ -215,6 +215,7 @@ "example_upstream_udp": "DNS normal (através do UDP, nome do servidor);", "example_upstream_dot": "<0>DNS-sobre-TLS criptografado;", "example_upstream_doh": "<0>DNS-sobre-HTTPS criptografado;", + "example_upstream_doh3": "DNS-over-HTTPS encriptado com <0>HTTP/3 forçado e sem retorno para HTTP/2 ou inferior;", "example_upstream_doq": "<0>DNS-sobre-QUIC criptografado;", "example_upstream_sdns": "<0>DNS Stamps para o <1>DNSCrypt ou usar os resolvedores <2>DNS-sobre-HTTPS;", "example_upstream_tcp": "DNS regular (através do TCP);", @@ -605,7 +606,7 @@ "blocklist": "Lista de bloqueio", "milliseconds_abbreviation": "ms", "cache_size": "Tamanho do cache", - "cache_size_desc": "Tamanho do cache do DNS (em bytes).", + "cache_size_desc": "Tamanho do cache DNS (em bytes). Para desativar o cache, deixar o campo vazio.", "cache_ttl_min_override": "Sobrepor o TTL mínimo", "cache_ttl_max_override": "Sobrepor o TTL máximo", "enter_cache_size": "Digite o tamanho do cache (bytes)", diff --git a/client/src/__locales/ro.json b/client/src/__locales/ro.json index cbc458e7..a8f94d39 100644 --- a/client/src/__locales/ro.json +++ b/client/src/__locales/ro.json @@ -215,6 +215,7 @@ "example_upstream_udp": "DNS obișnuit (over UDP, nume de gazdă);", "example_upstream_dot": "<0>DNS-over-TLS criptat;", "example_upstream_doh": "<0>DNS-over-HTTPS criptat;", + "example_upstream_doh3": "DNS-over-HTTPS criptat cu <0>HTTP/3 forțat și fără revenire la HTTP/2 sau inferior;", "example_upstream_doq": "criptat <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS Stamps pentru <1>DNSCrypt sau rezolvatori <2>DNS-over-HTTPS;", "example_upstream_tcp": "DNS clasic (over TCP);", @@ -605,7 +606,7 @@ "blocklist": "Lista de blocări", "milliseconds_abbreviation": "ms", "cache_size": "Mărime cache", - "cache_size_desc": "Mărime cache DNS (în octeți).", + "cache_size_desc": "Mărimea cache-ului DNS (în bytes). Pentru a dezactiva caching-ul, lăsați gol.", "cache_ttl_min_override": "Suprascrieți minimum TTL", "cache_ttl_max_override": "Suprascrieți maximum TTL", "enter_cache_size": "Introduceți mărimea cache-ului (bytes)", diff --git a/client/src/__locales/ru.json b/client/src/__locales/ru.json index fd605df7..7cf3732f 100644 --- a/client/src/__locales/ru.json +++ b/client/src/__locales/ru.json @@ -215,6 +215,7 @@ "example_upstream_udp": "обычный DNS (поверх UDP, с именем хоста);", "example_upstream_dot": "зашифрованный <0>DNS-over-TLS;", "example_upstream_doh": "зашифрованный <0>DNS-over-HTTPS;", + "example_upstream_doh3": "зашифрованный DNS-over-HTTPS с принудительным <0>HTTP/3 без отката к HTTP/2 или ниже;", "example_upstream_doq": "зашифрован <0>DNS-over-QUIC", "example_upstream_sdns": "<0>DNS Stamps для <1>DNSCrypt или <2>DNS-over-HTTPS серверов;", "example_upstream_tcp": "обычный DNS (поверх TCP);", @@ -605,7 +606,7 @@ "blocklist": "Чёрный список", "milliseconds_abbreviation": "мс", "cache_size": "Размер кеша", - "cache_size_desc": "Размера кеша DNS (в байтах).", + "cache_size_desc": "Размера кеша DNS (в байтах). Чтобы отключить кэширование, оставьте поле пустым.", "cache_ttl_min_override": "Переопределить минимальный TTL", "cache_ttl_max_override": "Переопределить максимальный TTL", "enter_cache_size": "Введите размер кеша (в байтах)", diff --git a/client/src/__locales/si-lk.json b/client/src/__locales/si-lk.json index 8d4c335a..a9c8d378 100644 --- a/client/src/__locales/si-lk.json +++ b/client/src/__locales/si-lk.json @@ -126,7 +126,7 @@ "number_of_dns_query_to_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කළ සෙවුම් යන්ත්‍ර සඳහා ව.නා.ප. ඉල්ලීම් ගණන", "average_processing_time": "සාමාන්‍ය සැකසුම් කාලය", "average_processing_time_hint": "ව.නා.ප. ඉල්ලීමක් සැකසීමේ සාමාන්‍ය කාලය මිලි තත්පර වලින්", - "block_domain_use_filters_and_hosts": "පෙරහන් සහ ධාරක ගොනු භාවිතා කරමින් වසම් අවහිර කරන්න", + "block_domain_use_filters_and_hosts": "පෙරහන් හා සත්කාරක ගොනු භාවිතයෙන් වසම් අවහිර කරන්න", "filters_block_toggle_hint": "ඔබට අවහිර කිරීමේ නීති පෙරහන් තුළ පිහිටුවිය හැකිය.", "use_adguard_browsing_sec": "ඇඩ්ගාර්ඩ් පිරික්සුම් ආරක්‍ෂණ වියමන සේවාව භාවිතා කරන්න", "use_adguard_browsing_sec_hint": "ඇඩ්ගාර්ඩ් හෝම් විසින් පිරික්සුම් ආරක්‍ෂණ වියමන සේවාව මගින් වසම අවහිර කර ඇත්දැයි පරීක්‍ෂා කරයි. එය සිදු කිරීමට රහස්‍යතා-හිතකාමී බැලීමේ යෙ.ක්‍ර.මු. භාවිතා කෙරේ: වසමේ කෙටි උපසර්ගයක SHA256 පූරකයක් පමණක් සේවාදායකය වෙත යවනු ලැබේ.", @@ -575,7 +575,7 @@ "blocklist": "අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුව", "milliseconds_abbreviation": "මිලි තත්.", "cache_size": "නිහිතයෙහි ප්‍රමාණය", - "cache_size_desc": "ව.නා.ප. නිහිතයෙහි ප්‍රමාණය (බයිට)", + "cache_size_desc": "ව.නා.ප. නිහිතයෙහි ප්‍රමාණය (බයිට). නිහිතය අබල කිරීමට, හිස්ව තබන්න.", "cache_ttl_min_override": "අවම පව. කා. අභිබවන්න", "cache_ttl_max_override": "උපරිම පව. කා. අභිබවන්න", "enter_cache_size": "ව.නා.ප. නිහිතයෙහි ප්‍රමාණය යොදන්න (බයිට)", diff --git a/client/src/__locales/sk.json b/client/src/__locales/sk.json index 631d2457..243ed299 100644 --- a/client/src/__locales/sk.json +++ b/client/src/__locales/sk.json @@ -215,6 +215,7 @@ "example_upstream_udp": "štandardné DNS (cez UDP, hostname);", "example_upstream_dot": "šifrované <0>DNS-over-TLS;", "example_upstream_doh": "šifrované <0>DNS-over-HTTPS;", + "example_upstream_doh3": "šifrované DNS-over-HTTPS s vynúteným <0>HTTP/3 a bez spätného prechodu na HTTP/2 alebo nižšie;", "example_upstream_doq": "šifrované <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS pečiatky pre <1>DNSCrypt alebo <2>DNS-over-HTTPS rezolvery;", "example_upstream_tcp": "obyčajná DNS (cez TCP);", @@ -605,7 +606,7 @@ "blocklist": "Zoznam blokovaní", "milliseconds_abbreviation": "ms", "cache_size": "Veľkosť cache", - "cache_size_desc": "Veľkosť DNS cache (v bajtoch)", + "cache_size_desc": "Veľkosť vyrovnávacej pamäte DNS (v bajtoch). Ak chcete zakázať ukladanie do vyrovnávacej pamäte, ponechajte pole prázdne.", "cache_ttl_min_override": "Prepísať minimálne TTL", "cache_ttl_max_override": "Prepísať maximálne TTL", "enter_cache_size": "Zadať veľkosť cache (v bajtoch)", diff --git a/client/src/__locales/sl.json b/client/src/__locales/sl.json index b779868d..2c8436ae 100644 --- a/client/src/__locales/sl.json +++ b/client/src/__locales/sl.json @@ -215,6 +215,7 @@ "example_upstream_udp": "redni DNS (nad UDP, ime gostitelja);", "example_upstream_dot": "šifriran <0>DNS-prek-TLS;", "example_upstream_doh": "šifriran <0>DNS-prek-HTTPS;", + "example_upstream_doh3": "šifriran DNS prek HTTPS s prisilnim <0>HTTP/3 in brez povratne možnosti za HTTP/2 ali nižjim;", "example_upstream_doq": "šifriran <0>DNS-prek-QUIC;", "example_upstream_sdns": "lahko uporabite <0>DNS Žige za reševalce <1>DNSCrypt ali <2>DNS-prek-HTTPS;", "example_upstream_tcp": "redni DNS (nad TCP);", @@ -605,7 +606,7 @@ "blocklist": "Seznam nedovoljenih", "milliseconds_abbreviation": "ms", "cache_size": "Velikost predpomnilnika", - "cache_size_desc": "Velikost predpomnilnika DNS (v bajtih).", + "cache_size_desc": "Velikost predpomnilnika DNS (v bajtih). Če želite onemogočiti predpomnjenje, pustite prazno.", "cache_ttl_min_override": "Preglasi najmanjši TTL", "cache_ttl_max_override": "Preglasi največji TTL", "enter_cache_size": "Vnesite velikost predpomnilnika (v bajtih)", diff --git a/client/src/__locales/sr-cs.json b/client/src/__locales/sr-cs.json index 23f5647b..4bb3f011 100644 --- a/client/src/__locales/sr-cs.json +++ b/client/src/__locales/sr-cs.json @@ -215,6 +215,7 @@ "example_upstream_udp": "uobičajen DNS (preko UDP, imena domaćina);", "example_upstream_dot": "šifrovano <0>DNS-over-TLS;", "example_upstream_doh": "šifrovano <0>DNS-over-HTTPS;", + "example_upstream_doh3": "šifrovani DNS-over-HTTPS sa prinudnim <0>HTTP/3 bez povratka na HTTP/2 ili ispod;", "example_upstream_doq": "šifrovano <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS brojeve za <1>DNSCrypt ili <2>DNS-over-HTTPS razrešivače;", "example_upstream_tcp": "uobičajeni DNS (preko TCP);", @@ -605,7 +606,7 @@ "blocklist": "Lista blokiranih", "milliseconds_abbreviation": "ms", "cache_size": "Veličina predmemorije", - "cache_size_desc": "Veličina DNS predmemorije (u bitovima).", + "cache_size_desc": "Veličina DNS keša (u bajtovima). Da biste onemogućili keširanje, ostavite prazno.", "cache_ttl_min_override": "Prepiši najmanji TTL", "cache_ttl_max_override": "Prepiši najveći TTL", "enter_cache_size": "Unesite veličinu predmemorije", diff --git a/client/src/__locales/sv.json b/client/src/__locales/sv.json index 8818f9d7..2d3cbcaa 100644 --- a/client/src/__locales/sv.json +++ b/client/src/__locales/sv.json @@ -215,6 +215,7 @@ "example_upstream_udp": "vanlig DNS (över UDP, värdnamn);", "example_upstream_dot": "krypterat <0>DNS-over-TLS", "example_upstream_doh": "krypterat <0>DNS-over-HTTPS", + "example_upstream_doh3": "krypterad DNS-över-HTTPS med påtvingad <0>HTTP/3 och ingen reserv till HTTP/2 eller lägre;", "example_upstream_doq": "krypterat <0>DNS-over-QUIC;", "example_upstream_sdns": "Du kan använda <0>DNS-stamps för <1>DNSCrypt eller <2>DNS-over-HTTPS-resolvers", "example_upstream_tcp": "vanlig DNS (över UDP)", @@ -605,7 +606,7 @@ "blocklist": "Blocklista", "milliseconds_abbreviation": "ms", "cache_size": "Cachestorlek", - "cache_size_desc": "DNS cachestorlek (i byte).", + "cache_size_desc": "DNS-cachestorlek (i byte). Lämna tomt om du vill inaktivera cachelagring.", "cache_ttl_min_override": "Åsidosätt minsta TTL", "cache_ttl_max_override": "Åsidosätt maximal TTL", "enter_cache_size": "Ange cachestorlek (byte)", diff --git a/client/src/__locales/tr.json b/client/src/__locales/tr.json index bcd06813..791c397d 100644 --- a/client/src/__locales/tr.json +++ b/client/src/__locales/tr.json @@ -59,7 +59,7 @@ "dhcp_form_range_title": "IP adresi aralığı", "dhcp_form_range_start": "Başlangıç aralığı", "dhcp_form_range_end": "Bitiş aralığı", - "dhcp_form_lease_title": "DHCP kira süresi (saniye olarak)", + "dhcp_form_lease_title": "DHCP kiralama süresi (saniye cinsinden)", "dhcp_form_lease_input": "Kira süresi", "dhcp_interface_select": "DHCP arayüzünü seç", "dhcp_hardware_address": "Donanım adresi", @@ -215,6 +215,7 @@ "example_upstream_udp": "normal DNS (UDP üzerinden, ana makine adı);", "example_upstream_dot": "şifrelenmiş <0>DNS-over-TLS;", "example_upstream_doh": "şifrelenmiş <0>DNS-over-HTTPS;", + "example_upstream_doh3": "<0>HTTP/3 uygulanmış ve HTTP/2 veya aşağısı için yedek olmayan şifrelenmiş DNS-over-HTTPS;", "example_upstream_doq": "şifrelenmiş <0>DNS-over-QUIC;", "example_upstream_sdns": "<1>DNSCrypt veya <2>DNS-over-HTTPS çözümleyicileri için <0>DNS Damgaları;", "example_upstream_tcp": "normal DNS (TCP üzerinden);", @@ -317,7 +318,7 @@ "install_settings_interface_link": "AdGuard Home yönetici web arayüzünüz aşağıdaki adreslerde bulunacaktır:", "form_error_port": "Geçerli bir bağlantı noktası değeri girin", "install_settings_dns": "DNS sunucusu", - "install_settings_dns_desc": "Cihazlarınızı veya yönlendiricinizi şu adresteki DNS sunucusunu kullanması için ayarlamanız gerekecek:", + "install_settings_dns_desc": "Aşağıdaki adreslerde DNS sunucusunu kullanmak için cihazlarınızı veya yönlendiricinizi yapılandırmanız gerekir:", "install_settings_all_interfaces": "Tüm arayüzler", "install_auth_title": "Kimlik Doğrulama", "install_auth_desc": "AdGuard Home yönetim web arayüzü için şifre doğrulaması yapılandırılmalıdır. AdGuard Home'a yalnızca yerel ağınızdan erişilebilir olsa bile, onu sınırsız erişimden korumak yine de önemlidir.", @@ -351,7 +352,7 @@ "install_devices_android_list_1": "Android Menüsü ana ekranından Ayarlar'a dokunun.", "install_devices_android_list_2": "Menüde bulunan Wi-Fi öğesine dokunun. Mevcut tüm ağlar listelenecektir (mobil ağlar için özel DNS sunucusu ayarlanamaz).", "install_devices_android_list_3": "Bağlı olduğunuz ağın üzerine basılı tutun ve Ağı Değiştir'e dokunun.", - "install_devices_android_list_4": "Bazı cihazlarda, diğer ayarları görmek için \"Gelişmiş\" seçeneğini seçmeniz gerekebilir. Android DNS ayarlarınızı yapmak için IP ayarlarını DHCP modundan Statik moda almanız gerekecektir.", + "install_devices_android_list_4": "Bazı cihazlarda, diğer ayarları görmek için \"Gelişmiş\" seçeneğini seçmeniz gerekebilir. Android DNS ayarlarınızı yapmak için IP ayarlarını DHCP modundan Statik moda değiştirmeniz gerekir.", "install_devices_android_list_5": "DNS 1 ve DNS 2 değerlerini AdGuard Home sunucunuzun adresleriyle değiştirin.", "install_devices_ios_list_1": "Ana ekrandan Ayarlar'a dokunun.", "install_devices_ios_list_2": "Sol menüde bulunan Wi-Fi bölümüne girin (mobil ağlar için özel DNS sunucusu ayarlanamaz).", @@ -368,13 +369,13 @@ "encryption_server_enter": "Alan adınızı girin", "encryption_server_desc": "Ayarlanırsa, AdGuard Home ClientID'leri algılar, DDR sorgularına yanıt verir ve ek bağlantı doğrulamaları gerçekleştirir. Ayarlanmazsa, bu özellikler devre dışı bırakılır. Sertifikadaki DNS Adlarından biriyle eşleşmelidir.", "encryption_redirect": "Otomatik olarak HTTPS'e yönlendir", - "encryption_redirect_desc": "İşaretlenirse, AdGuard Home sizi otomatik olarak HTTP adresinden HTTPS adreslerine yönlendirecektir.", + "encryption_redirect_desc": "İşaretlenirse, AdGuard Home sizi otomatik olarak HTTP adresinden HTTPS adreslerine yönlendirir.", "encryption_https": "HTTPS bağlantı noktası", - "encryption_https_desc": "HTTPS bağlantı noktası yapılandırılırsa, AdGuard Home yönetici arayüzüne HTTPS aracılığıyla erişilebilir olacak ve ayrıca '/dns-query' üzerinden DNS-over-HTTPS bağlantısı sağlayacaktır.", + "encryption_https_desc": "HTTPS bağlantı noktası yapılandırılırsa, AdGuard Home yönetici arayüzüne HTTPS aracılığıyla erişilebilir olacak ve ayrıca '/dns-query' üzerinden DNS-over-HTTPS bağlantısı sağlar.", "encryption_dot": "DNS-over-TLS bağlantı noktası", - "encryption_dot_desc": "Bu bağlantı noktası yapılandırılırsa, AdGuard Home, DNS-over-TLS sunucusunu bu bağlantı noktası üzerinden çalıştıracaktır.", + "encryption_dot_desc": "Bu bağlantı noktası yapılandırılırsa, AdGuard Home, DNS-over-TLS sunucusunu bu bağlantı noktası üzerinden çalıştırır.", "encryption_doq": "DNS-over-QUIC bağlantı noktası", - "encryption_doq_desc": "Bu bağlantı noktası yapılandırılırsa, AdGuard Home, bu bağlantı noktasında bir DNS-over-QUIC sunucusu çalıştıracaktır.", + "encryption_doq_desc": "Bu bağlantı noktası yapılandırılırsa, AdGuard Home, bu bağlantı noktasında bir DNS-over-QUIC sunucusu çalıştırır.", "encryption_certificates": "Sertifikalar", "encryption_certificates_desc": "Şifrelemeyi kullanmak için alan adınıza geçerli bir SSL sertifika zinciri sağlamanız gerekir. <0>{{link}} adresinden ücretsiz bir sertifika alabilir veya güvenilir Sertifika Yetkililerinden satın alabilirsiniz.", "encryption_certificates_input": "PEM biçimindeki sertifikalarınızı kopyalayıp buraya yapıştırın.", @@ -467,7 +468,7 @@ "setup_dns_privacy_other_2": "<0>dnsproxy, bilinen tüm güvenli DNS protokollerini destekler.", "setup_dns_privacy_other_3": "<0>dnscrypt-proxy, <1>DNS-over-HTTPS protokolünü destekler.", "setup_dns_privacy_other_4": "<0>Mozilla Firefox, <1>DNS-over-HTTPS protokolünü destekler.", - "setup_dns_privacy_other_5": "<0>Burada ve <1>burada daha fazla kullanım alanı bulacaksınız.", + "setup_dns_privacy_other_5": "<0>Burada ve <1>burada daha fazla kullanım alanı bulabilirsiniz.", "setup_dns_privacy_ioc_mac": "iOS ve macOS yapılandırması", "setup_dns_notice": "<1>DNS-over-HTTPS veya <1>DNS-over-TLS protokolünü kullanmak için AdGuard Home üzerinde <0>Şifreleme ayarları bölümünden ayarları yapmanız gerekir.", "rewrite_added": "\"{{key}}\" için DNS yeniden yazımı başarıyla eklendi", @@ -556,7 +557,7 @@ "fastest_addr": "En hızlı IP adresi", "fastest_addr_desc": "Tüm DNS sunucularını sorgulayın ve tüm yanıtlar arasından en hızlı olan IP adresini döndürün. AdGuard Home'un tüm DNS sunucularından yanıt beklemesi gerektiği için DNS sorgularını yavaşlatır, ancak genel bağlantıyı iyileştirir.", "autofix_warning_text": "\"Düzelt\" seçeneğine tıklarsanız, AdGuard Home, sisteminizi AdGuard Home DNS sunucusunu kullanacak şekilde yapılandırır.", - "autofix_warning_list": "Bu görevleri gerçekleştirecek: <0>Sistem DNSStubListener'ı devre dışı bırakın <0>DNS sunucusu adresini 127.0.0.1 olarak ayarlayın <0>/etc/resolv.conf'un sembolik bağlantı hedefini /run/systemd/resolve/resolv.conf ile değiştirin<0> <0>DNSStubListener'ı durdurun (systemd çözümlenmiş hizmeti yeniden yükleyin)", + "autofix_warning_list": "Bu görevleri gerçekleştirir: <0>Sistem DNSStubListener'ı devre dışı bırakın <0>DNS sunucusu adresini 127.0.0.1 olarak ayarlayın <0>/etc/resolv.conf'un sembolik bağlantı hedefini /run/systemd/resolve/resolv.conf ile değiştirin<0> <0>DNSStubListener'ı durdurun (systemd çözümlenmiş hizmeti yeniden yükleyin)", "autofix_warning_result": "Sonuç olarak, sisteminizden gelen tüm DNS istekleri varsayılan olarak AdGuard Home tarafından işlenecektir.", "tags_title": "Etiketler", "tags_desc": "İstemciye karşılık gelen etiketleri seçebilirsiniz. Etiketleri daha kesin olarak uygulamak için filtreleme kurallarına dahil edin. <0>Daha fazla bilgi edinin.", @@ -585,7 +586,7 @@ "install_static_ok": "Güzel haber! Sabit IP adresi zaten yapılandırılmış", "install_static_error": "AdGuard Home, bu ağ arayüzü için otomatik olarak yapılandıramıyor. Lütfen bunu elle nasıl yapacağınızla ilgili talimatlara bakın.", "install_static_configure": "AdGuard Home, <0>{{ip}} dinamik IP adresinin kullanıldığını tespit etti. Sabit adresiniz olarak ayarlanmasını ister misiniz?", - "confirm_static_ip": "AdGuard Home, {{ip}} adresini sabit IP adresiniz olacak şekilde yapılandıracaktır. Devam etmek istiyor musunuz?", + "confirm_static_ip": "AdGuard Home, {{ip}} adresini sabit IP adresiniz olacak şekilde yapılandırır. Devam etmek istiyor musunuz?", "list_updated": "{{count}} liste güncellendi", "list_updated_plural": "{{count}} liste güncellendi", "dnssec_enable": "DNSSEC'i etkinleştir", @@ -605,7 +606,7 @@ "blocklist": "Engel listesi", "milliseconds_abbreviation": "ms", "cache_size": "Önbellek boyutu", - "cache_size_desc": "DNS önbellek boyutu (bayt cinsinden).", + "cache_size_desc": "DNS önbellek boyutu (bayt cinsinden). Önbelleğe almayı devre dışı bırakmak için boş bırakın.", "cache_ttl_min_override": "Minimum kullanım süresini geçersiz kıl", "cache_ttl_max_override": "Maksimum kullanım süresini geçersiz kıl", "enter_cache_size": "Önbellek boyutunu girin (bayt)", @@ -629,7 +630,7 @@ "click_to_view_queries": "Sorguları görmek için tıklayın", "port_53_faq_link": "53 numaralı bağlantı noktası genellikle \"DNSStubListener\" veya \"systemd-resolved\" hizmetleri tarafından kullanılır. Lütfen bu sorunun nasıl çözüleceğine ilişkin <0>bu talimatı okuyun.", "adg_will_drop_dns_queries": "AdGuard Home, bu istemciden gelen tüm DNS sorgularını yok sayacaktır.", - "filter_allowlist": "UYARI: Bu işlem ayrıca \"{{disallowed_rule}}\" kuralını izin verilen istemciler listesinden hariç tutacaktır.", + "filter_allowlist": "UYARI: Bu işlem ayrıca \"{{disallowed_rule}}\" kuralını izin verilen istemciler listesinden hariç tutar.", "last_rule_in_allowlist": "\"{{disallowed_rule}}\" kuralı hariç tutulduğunda \"İzin verilen istemciler\" listesi DEVRE DIŞI bırakılacağı için bu istemciye izin verilemez.", "use_saved_key": "Önceden kaydedilmiş anahtarı kullan", "parental_control": "Ebeveyn Denetimi", diff --git a/client/src/__locales/uk.json b/client/src/__locales/uk.json index b882e856..d9f61146 100644 --- a/client/src/__locales/uk.json +++ b/client/src/__locales/uk.json @@ -215,6 +215,7 @@ "example_upstream_udp": "звичайний DNS (поверх UDP, з назвою вузла);", "example_upstream_dot": "зашифрований <0>DNS-over-TLS;", "example_upstream_doh": "зашифрований <0>DNS-over-HTTPS;", + "example_upstream_doh3": "зашифрований DNS через HTTPS із примусовим <0>HTTP/3 і без повернення до HTTP/2 або нижче;", "example_upstream_doq": "зашифрований <0>DNS-over-QUIC;", "example_upstream_sdns": "<0>DNS Stamps для <1>DNSCrypt- або <2>DNS-over-HTTPS-вирішувачів;", "example_upstream_tcp": "звичайний DNS (через TCP);", @@ -605,7 +606,7 @@ "blocklist": "Список блокування", "milliseconds_abbreviation": "мс", "cache_size": "Розмір кешу", - "cache_size_desc": "Розмір кешу DNS (у байтах).", + "cache_size_desc": "Розмір кешу DNS (у байтах). Щоб вимкнути кешування, залиште пустим.", "cache_ttl_min_override": "Змінити мінімальний TTL", "cache_ttl_max_override": "Змінити максимальний TTL", "enter_cache_size": "Введіть розмір кешу (байт)", diff --git a/client/src/__locales/vi.json b/client/src/__locales/vi.json index 05c9cf46..52020d80 100644 --- a/client/src/__locales/vi.json +++ b/client/src/__locales/vi.json @@ -215,6 +215,7 @@ "example_upstream_udp": "DNS thông thường (qua UDP, tên máy chủ);", "example_upstream_dot": "được mã hoá <0>DNS-over-TLS;", "example_upstream_doh": "được mã hoá <0>DNS-over-HTTPS;", + "example_upstream_doh3": "DNS-over-HTTPS được mã hóa với <0>HTTP/3 bắt buộc và không có dự phòng cho HTTP/2 trở xuống;", "example_upstream_doq": "được mã hoá <0>DNS-over-QUIC;", "example_upstream_sdns": "bạn có thể sử dụng <0>DNS Stamps for <1>DNSCrypt hoặc <2>DNS-over-HTTPS ", "example_upstream_tcp": "DNS thông thường(dùng TCP);", @@ -605,7 +606,7 @@ "blocklist": "Danh sách chặn", "milliseconds_abbreviation": "ms", "cache_size": "Kích thước cache", - "cache_size_desc": "Kích thước cache DNS (bytes).", + "cache_size_desc": "Kích thước bộ nhớ cache DNS (tính bằng byte). Để tắt bộ nhớ đệm, hãy để trống.", "cache_ttl_min_override": "Ghi đè TTL tối thiểu", "cache_ttl_max_override": "Ghi đè TTL tối đa", "enter_cache_size": "Nhập kích thước bộ nhớ cache (byte)", diff --git a/client/src/__locales/zh-cn.json b/client/src/__locales/zh-cn.json index aa51902f..cc22c96b 100644 --- a/client/src/__locales/zh-cn.json +++ b/client/src/__locales/zh-cn.json @@ -215,6 +215,7 @@ "example_upstream_udp": "常规 DNS(通过 UDP、主机名);", "example_upstream_dot": "加密 <0>DNS-over-TLS;", "example_upstream_doh": "加密 <0>DNS-over-HTTPS;", + "example_upstream_doh3": "带有强制 <0>HTTP/3 的加密 DNS-over-HTTPS,并且没有回退到 HTTP/2 或更低版本;", "example_upstream_doq": "加密 <0>DNS-over-QUIC", "example_upstream_sdns": "<1>DNSCrypt 的 <0>DNS Stamps 或者 <2>DNS-over-HTTPS 解析器;", "example_upstream_tcp": "常规 DNS(基于 TCP );", @@ -605,7 +606,7 @@ "blocklist": "拦截列表", "milliseconds_abbreviation": "毫秒", "cache_size": "缓存大小", - "cache_size_desc": "DNS 缓存大小(单位:字节)。", + "cache_size_desc": "DNS 缓存大小(单位:字节)。要关闭缓存,请留空。", "cache_ttl_min_override": "覆盖最小TTL值", "cache_ttl_max_override": "覆盖最大TTL值", "enter_cache_size": "输入缓存大小(字节)", diff --git a/client/src/__locales/zh-tw.json b/client/src/__locales/zh-tw.json index 9ca99a64..4a5913ba 100644 --- a/client/src/__locales/zh-tw.json +++ b/client/src/__locales/zh-tw.json @@ -215,7 +215,8 @@ "example_upstream_udp": "常規 DNS(透過 UDP,主機名稱);", "example_upstream_dot": "加密的 <0>DNS-over-TLS;", "example_upstream_doh": "加密的 <0>DNS-over-HTTPS;", - "example_upstream_doq": "加密的 <0>DNS-over-QUIC;", + "example_upstream_doh3": "有強制的 <0>HTTP/3 且無退回到 HTTP/2 或更低版本之加密的 DNS-over-HTTPS;", + "example_upstream_doq": "加密的 <0>DNS-over-QUIC;", "example_upstream_sdns": "關於 <1>DNSCrypt 或 <2>DNS-over-HTTPS 解析器之 <0>DNS 戳記;", "example_upstream_tcp": "常規 DNS(透過 TCP);", "example_upstream_tcp_port": "常規 DNS(透過 TCP,含連接埠);", @@ -605,7 +606,7 @@ "blocklist": "封鎖清單", "milliseconds_abbreviation": "ms", "cache_size": "快取大小", - "cache_size_desc": "DNS 快取大小(以位元組)。", + "cache_size_desc": "DNS 快取大小(以位元組)。要禁用快取,留空。", "cache_ttl_min_override": "覆寫最小的存活時間(TTL)", "cache_ttl_max_override": "覆寫最大的存活時間(TTL)", "enter_cache_size": "輸入快取大小(位元組)", diff --git a/client/src/actions/services.js b/client/src/actions/services.js index 650aa330..f360081e 100644 --- a/client/src/actions/services.js +++ b/client/src/actions/services.js @@ -32,6 +32,21 @@ export const getBlockedServices = () => async (dispatch) => { } }; +export const getAllBlockedServicesRequest = createAction('GET_ALL_BLOCKED_SERVICES_REQUEST'); +export const getAllBlockedServicesFailure = createAction('GET_ALL_BLOCKED_SERVICES_FAILURE'); +export const getAllBlockedServicesSuccess = createAction('GET_ALL_BLOCKED_SERVICES_SUCCESS'); + +export const getAllBlockedServices = () => async (dispatch) => { + dispatch(getAllBlockedServicesRequest()); + try { + const data = await apiClient.getAllBlockedServices(); + dispatch(getAllBlockedServicesSuccess(data)); + } catch (error) { + dispatch(addErrorToast({ error })); + dispatch(getAllBlockedServicesFailure()); + } +}; + export const setBlockedServicesRequest = createAction('SET_BLOCKED_SERVICES_REQUEST'); export const setBlockedServicesFailure = createAction('SET_BLOCKED_SERVICES_FAILURE'); export const setBlockedServicesSuccess = createAction('SET_BLOCKED_SERVICES_SUCCESS'); diff --git a/client/src/api/Api.js b/client/src/api/Api.js index 036f9050..bc030fa1 100644 --- a/client/src/api/Api.js +++ b/client/src/api/Api.js @@ -465,11 +465,18 @@ class Api { BLOCKED_SERVICES_SET = { path: 'blocked_services/set', method: 'POST' }; + BLOCKED_SERVICES_ALL = { path: 'blocked_services/all', method: 'GET' }; + getBlockedServicesAvailableServices() { const { path, method } = this.BLOCKED_SERVICES_SERVICES; return this.makeRequest(path, method); } + getAllBlockedServices() { + const { path, method } = this.BLOCKED_SERVICES_ALL; + return this.makeRequest(path, method); + } + getBlockedServices() { const { path, method } = this.BLOCKED_SERVICES_LIST; return this.makeRequest(path, method); diff --git a/client/src/components/Filters/DnsBlocklist.js b/client/src/components/Filters/DnsBlocklist.js index 4059b48f..c4facadc 100644 --- a/client/src/components/Filters/DnsBlocklist.js +++ b/client/src/components/Filters/DnsBlocklist.js @@ -15,7 +15,7 @@ import { getObjDiff, } from '../../helpers/helpers'; -const filtersCatalog = require('../../helpers/filters/filters.json'); +import filtersCatalog from '../../helpers/filters/filters'; class DnsBlocklist extends Component { componentDidMount() { diff --git a/client/src/components/Filters/Form.js b/client/src/components/Filters/Form.js index 39791a5f..f4e902f5 100644 --- a/client/src/components/Filters/Form.js +++ b/client/src/components/Filters/Form.js @@ -7,8 +7,7 @@ import classNames from 'classnames'; import { validatePath, validateRequiredValue } from '../../helpers/validators'; import { CheckboxField, renderInputField } from '../../helpers/form'; import { MODAL_OPEN_TIMEOUT, MODAL_TYPE, FORM_NAME } from '../../helpers/constants'; - -const filtersCatalog = require('../../helpers/filters/filters.json'); +import filtersCatalog from '../../helpers/filters/filters'; const getIconsData = (homepage, source) => ([ { diff --git a/client/src/components/Filters/Services/Form.js b/client/src/components/Filters/Services/Form.js index 4aed810d..1684d5ea 100644 --- a/client/src/components/Filters/Services/Form.js +++ b/client/src/components/Filters/Services/Form.js @@ -6,10 +6,11 @@ import flow from 'lodash/flow'; import { toggleAllServices } from '../../../helpers/helpers'; import { renderServiceField } from '../../../helpers/form'; -import { FORM_NAME, SERVICES } from '../../../helpers/constants'; +import { FORM_NAME } from '../../../helpers/constants'; const Form = (props) => { const { + blockedServices, handleSubmit, change, pristine, @@ -27,7 +28,7 @@ const Form = (props) => { type="button" className="btn btn-secondary btn-block" disabled={processing || processingSet} - onClick={() => toggleAllServices(SERVICES, change, true)} + onClick={() => toggleAllServices(blockedServices, change, true)} > block_all @@ -37,17 +38,17 @@ const Form = (props) => { type="button" className="btn btn-secondary btn-block" disabled={processing || processingSet} - onClick={() => toggleAllServices(SERVICES, change, false)} + onClick={() => toggleAllServices(blockedServices, change, false)} > unblock_all
- {SERVICES.map((service) => ( + {blockedServices.map((service) => ( { }; Form.propTypes = { + blockedServices: PropTypes.array.isRequired, pristine: PropTypes.bool.isRequired, handleSubmit: PropTypes.func.isRequired, change: PropTypes.func.isRequired, diff --git a/client/src/components/Filters/Services/index.js b/client/src/components/Filters/Services/index.js index be5516bd..09cdd7c8 100644 --- a/client/src/components/Filters/Services/index.js +++ b/client/src/components/Filters/Services/index.js @@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import Form from './Form'; import Card from '../../ui/Card'; -import { getBlockedServices, setBlockedServices } from '../../../actions/services'; +import { getBlockedServices, getAllBlockedServices, setBlockedServices } from '../../../actions/services'; import PageTitle from '../../ui/PageTitle'; const getInitialDataForServices = (initial) => (initial ? initial.reduce( @@ -21,6 +21,7 @@ const Services = () => { useEffect(() => { dispatch(getBlockedServices()); + dispatch(getAllBlockedServices()); }, []); const handleSubmit = (values) => { @@ -49,6 +50,7 @@ const Services = () => {
( ; const blockClientButton = - - - - ); - } -} + return ( + + <> + + + + + + ); +}; ClientsTable.propTypes = { - t: PropTypes.func.isRequired, clients: PropTypes.array.isRequired, normalizedTopClients: PropTypes.object.isRequired, toggleClientModal: PropTypes.func.isRequired, @@ -353,4 +382,4 @@ ClientsTable.propTypes = { supportedTags: PropTypes.array.isRequired, }; -export default withTranslation()(ClientsTable); +export default ClientsTable; diff --git a/client/src/components/Settings/Clients/ClientsTable/index.js b/client/src/components/Settings/Clients/ClientsTable/index.js new file mode 100644 index 00000000..fdbe7807 --- /dev/null +++ b/client/src/components/Settings/Clients/ClientsTable/index.js @@ -0,0 +1 @@ +export { default as ClientsTable } from './ClientsTable'; diff --git a/client/src/components/Settings/Clients/Form.js b/client/src/components/Settings/Clients/Form.js index 353b0bea..35d9764d 100644 --- a/client/src/components/Settings/Clients/Form.js +++ b/client/src/components/Settings/Clients/Form.js @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { connect } from 'react-redux'; +import { connect, useSelector } from 'react-redux'; import PropTypes from 'prop-types'; import { Field, FieldArray, reduxForm, formValueSelector, @@ -19,7 +19,7 @@ import { renderServiceField, } from '../../../helpers/form'; import { validateClientId, validateRequiredValue } from '../../../helpers/validators'; -import { CLIENT_ID_LINK, FORM_NAME, SERVICES } from '../../../helpers/constants'; +import { CLIENT_ID_LINK, FORM_NAME } from '../../../helpers/constants'; import './Service.css'; const settingsCheckboxes = [ @@ -139,6 +139,7 @@ let Form = (props) => { invalid, tagsOptions, } = props; + const services = useSelector((store) => store?.services); const [activeTabLabel, setActiveTabLabel] = useState('settings'); @@ -180,7 +181,9 @@ let Form = (props) => { type="button" className="btn btn-secondary btn-block" disabled={useGlobalServices} - onClick={() => toggleAllServices(SERVICES, change, true)} + onClick={() => ( + toggleAllServices(services.allServices, change, true) + )} > block_all @@ -190,25 +193,29 @@ let Form = (props) => { type="button" className="btn btn-secondary btn-block" disabled={useGlobalServices} - onClick={() => toggleAllServices(SERVICES, change, false)} + onClick={() => ( + toggleAllServices(services.allServices, change, false) + )} > unblock_all
-
- {SERVICES.map((service) => ( - - ))} -
+ {services.allServices.length > 0 && ( +
+ {services.allServices.map((service) => ( + + ))} +
+ )} , }, diff --git a/client/src/components/Settings/Clients/Service.css b/client/src/components/Settings/Clients/Service.css index 7c1890fe..153cf2d8 100644 --- a/client/src/components/Settings/Clients/Service.css +++ b/client/src/components/Settings/Clients/Service.css @@ -9,6 +9,12 @@ cursor: pointer; } +.service__text { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + @media screen and (min-width: 768px) { .services { display: flex; @@ -33,7 +39,7 @@ margin-right: 30px; margin-left: 0; } - + .service:nth-child(3n) { margin-right: 0; margin-left: auto; diff --git a/client/src/components/Settings/Clients/index.js b/client/src/components/Settings/Clients/index.js index a6dfc0b1..b7c50ae8 100644 --- a/client/src/components/Settings/Clients/index.js +++ b/client/src/components/Settings/Clients/index.js @@ -2,7 +2,7 @@ import React, { Component, Fragment } from 'react'; import { withTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; -import ClientsTable from './ClientsTable'; +import { ClientsTable } from './ClientsTable'; import AutoClients from './AutoClients'; import PageTitle from '../../ui/PageTitle'; import Loading from '../../ui/Loading'; diff --git a/client/src/components/Settings/Dns/Upstream/Examples.js b/client/src/components/Settings/Dns/Upstream/Examples.js index c17e9456..a975e444 100644 --- a/client/src/components/Settings/Dns/Upstream/Examples.js +++ b/client/src/components/Settings/Dns/Upstream/Examples.js @@ -57,6 +57,22 @@ const Examples = (props) => ( example_upstream_doh +
  • + h3://unfiltered.adguard-dns.com/dns-query: + HTTP/3 + , + ]} + > + example_upstream_doh3 + +
  • quic://unfiltered.adguard-dns.com: ( d="M15 3C10.57 3 6.701 5.419 4.623 9h2.39a10.063 10.063 0 0 1 4.05-3.19c-.524.89-.961 1.973-1.3 3.19h2.108c.79-2.459 1.998-4 3.129-4s2.339 1.541 3.129 4h2.107c-.338-1.217-.774-2.3-1.299-3.19A10.062 10.062 0 0 1 22.989 9h2.389C23.298 5.419 19.43 3 15 3zm7.035 9.129c-1.372 0-2.264.73-2.264 1.842 0 .896.538 1.463 1.579 1.66l.75.15c.65.13.898.3.898.615 0 .375-.37.635-.91.635-.6 0-1.014-.265-1.049-.68h-1.38c.023 1.097.93 1.776 2.37 1.776 1.491 0 2.399-.717 2.399-1.904 0-.903-.504-1.412-1.63-1.63l-.734-.142c-.6-.118-.851-.3-.851-.611 0-.378.336-.62.844-.62.509 0 .891.28.923.682h1.336c-.024-1.053-.948-1.773-2.28-1.773zm-16.185.148v5.696h2.39c1.712 0 2.662-1.033 2.662-2.903 0-1.779-.966-2.793-2.662-2.793H5.85zm6.933.004v5.692h1.373v-3.235h.076l2.377 3.235h1.149V12.28h-1.373v3.203h-.076l-2.372-3.203h-1.154zm-5.486 1.16h.682c.912 0 1.449.596 1.449 1.657 0 1.128-.51 1.713-1.45 1.713h-.681v-3.37zM4.623 21C6.701 24.581 10.57 27 15 27c4.43 0 8.299-2.419 10.377-6h-2.389a10.063 10.063 0 0 1-4.049 3.19c.524-.89.96-1.973 1.297-3.19H18.13c-.79 2.459-1.996 4-3.127 4-1.131 0-2.339-1.541-3.129-4h-2.11c.339 1.217.776 2.3 1.3 3.19A10.056 10.056 0 0 1 7.013 21h-2.39z"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -356,62 +205,6 @@ const Icons = () => ( d="M8.036 10.93l3.93 4.07 4.068-3.93" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); diff --git a/client/src/components/ui/Tabler.css b/client/src/components/ui/Tabler.css index 34d37622..fac3d80a 100644 --- a/client/src/components/ui/Tabler.css +++ b/client/src/components/ui/Tabler.css @@ -15452,6 +15452,7 @@ a.tag-addon:hover { } .custom-switch-indicator { + flex-shrink: 0; display: inline-block; height: 1.25rem; width: 2.25rem; diff --git a/client/src/helpers/constants.js b/client/src/helpers/constants.js index 943b28ac..c13ab952 100644 --- a/client/src/helpers/constants.js +++ b/client/src/helpers/constants.js @@ -202,158 +202,6 @@ export const FILTERS_URLS = { blocked_services: '/blocked_services', }; -export const SERVICES = [ - { - id: '9gag', - name: '9GAG', - }, - { - id: 'amazon', - name: 'Amazon', - }, - { - id: 'bilibili', - name: 'Bilibili', - }, - { - id: 'cloudflare', - name: 'CloudFlare', - }, - { - id: 'dailymotion', - name: 'Dailymotion', - }, - { - id: 'discord', - name: 'Discord', - }, - { - id: 'disneyplus', - name: 'Disney+', - }, - { - id: 'ebay', - name: 'EBay', - }, - { - id: 'epic_games', - name: 'Epic Games', - }, - { - id: 'facebook', - name: 'Facebook', - }, - { - id: 'hulu', - name: 'Hulu', - }, - { - id: 'imgur', - name: 'Imgur', - }, - { - id: 'instagram', - name: 'Instagram', - }, - { - id: 'mail_ru', - name: 'Mail.ru', - }, - { - id: 'netflix', - name: 'Netflix', - }, - { - id: 'ok', - name: 'OK.ru', - }, - { - id: 'origin', - name: 'Origin', - }, - { - id: 'pinterest', - name: 'Pinterest', - }, - { - id: 'qq', - name: 'QQ', - }, - { - id: 'reddit', - name: 'Reddit', - }, - { - id: 'skype', - name: 'Skype', - }, - { - id: 'snapchat', - name: 'Snapchat', - }, - { - id: 'spotify', - name: 'Spotify', - }, - { - id: 'steam', - name: 'Steam', - }, - { - id: 'telegram', - name: 'Telegram', - }, - { - id: 'tiktok', - name: 'TikTok', - }, - { - id: 'tinder', - name: 'Tinder', - }, - { - id: 'twitch', - name: 'Twitch', - }, - { - id: 'twitter', - name: 'Twitter', - }, - { - id: 'viber', - name: 'Viber', - }, - { - id: 'vimeo', - name: 'Vimeo', - }, - { - id: 'vk', - name: 'VK.com', - }, - { - id: 'wechat', - name: 'WeChat', - }, - { - id: 'weibo', - name: 'Weibo', - }, - { - id: 'whatsapp', - name: 'WhatsApp', - }, - { - id: 'youtube', - name: 'YouTube', - }, -]; - -export const SERVICES_ID_NAME_MAP = SERVICES.reduce((acc, { id, name }) => { - acc[id] = name; - return acc; -}, {}); - export const ENCRYPTION_SOURCE = { PATH: 'path', CONTENT: 'content', diff --git a/client/src/helpers/filters/filters.json b/client/src/helpers/filters/filters.js similarity index 59% rename from client/src/helpers/filters/filters.json rename to client/src/helpers/filters/filters.js index 63fe0995..8be075e9 100644 --- a/client/src/helpers/filters/filters.json +++ b/client/src/helpers/filters/filters.js @@ -1,162 +1,220 @@ -{ +// Code generated by go run ./scripts/vetted-filters/main.go; DO NOT EDIT. + +/* eslint quote-props: 'off', quotes: 'off', comma-dangle: 'off', semi: 'off' */ + +export default { "categories": { "general": { "name": "filter_category_general", "description": "filter_category_general_desc" }, - "security": { - "name": "filter_category_security", - "description": "filter_category_security_desc" + "other": { + "name": "filter_category_other", + "description": "filter_category_other_desc" }, "regional": { "name": "filter_category_regional", "description": "filter_category_regional_desc" }, - "other": { - "name": "filter_category_other", - "description": "filter_category_other_desc" + "security": { + "name": "filter_category_security", + "description": "filter_category_security_desc" } }, "filters": { - "adguard-dns-filter": { - "name": "AdGuard DNS filter", + "1hosts_lite": { + "name": "1Hosts (Lite)", "categoryId": "general", - "homepage": "https://github.com/AdguardTeam/AdGuardSDNSFilter", - "source": "https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt" + "homepage": "https://badmojr.github.io/1Hosts/", + "source": "https://badmojr.gitlab.io/1hosts/Lite/adblock.txt" }, - "adaway-default-blocklist": { - "name": "AdAway Default Blocklist", - "categoryId": "general", - "homepage": "https://github.com/AdAway/adaway.github.io/", - "source": "https://adaway.org/hosts.txt" - }, - "peter-lowe-list": { - "name": "Peter Lowe's List", - "categoryId": "general", - "homepage": "https://pgl.yoyo.org/adservers/", - "source": "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=adblockplus&showintro=1&mimetype=plaintext" - }, - "dan-pollock-list": { - "name": "Dan Pollock's List", - "categoryId": "general", - "homepage": "https://someonewhocares.org/", - "source": "https://someonewhocares.org/hosts/zero/hosts" - }, - "oisd": { - "name": "OISD Blocklist Basic", - "categoryId": "general", - "homepage": "https://oisd.nl/", - "source": "https://abp.oisd.nl/basic/" - }, - "game-console-adblock-list": { - "name": "Game Console Adblock List", - "categoryId": "general", - "homepage": "https://github.com/DandelionSprout/adfilt", - "source": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/GameConsoleAdblockList.txt" - }, - "perflyst-dandelion-sprout-smart-tv-blocklist-for-adguard-home": { - "name": "Perflyst and Dandelion Sprout's Smart-TV Blocklist", - "categoryId": "general", - "homepage": "https://github.com/Perflyst/PiHoleBlocklist", - "source": "https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV-AGH.txt" - }, - "nocoin-filter-list": { - "name": "NoCoin Filter List", - "categoryId": "security", - "homepage": "https://github.com/hoshsadiq/adblock-nocoin-list/", - "source": "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt" - }, - "the-big-list-of-hacked-malware-web-sites": { - "name": "The Big List of Hacked Malware Web Sites", - "categoryId": "security", - "homepage": "https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites", - "source": "https://raw.githubusercontent.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites/master/hosts" - }, - "scam-blocklist-by-durable-napkin": { - "name": "Scam Blocklist by DurableNapkin", - "categoryId": "security", - "homepage": "https://github.com/durablenapkin/scamblocklist", - "source": "https://raw.githubusercontent.com/durablenapkin/scamblocklist/master/adguard.txt" - }, - "urlhaus-filter-online": { - "name": "Online Malicious URL Blocklist", - "categoryId": "security", - "homepage": "https://gitlab.com/malware-filter/urlhaus-filter", - "source": "https://malware-filter.gitlab.io/malware-filter/urlhaus-filter-agh-online.txt" - }, - "dandelion-sprouts-anti-malware-list": { - "name": "Dandelion Sprout's Anti-Malware List", - "categoryId": "security", - "homepage": "https://github.com/DandelionSprout/adfilt", - "source": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/Alternate%20versions%20Anti-Malware%20List/AntiMalwareAdGuardHome.txt" - }, - "NOR-dandelion-sprouts-nordiske-filtre": { - "name": "NOR: Dandelion Sprouts nordiske filtre", + "CHN_adrules": { + "name": "CHN: AdRules DNS List", "categoryId": "regional", - "homepage": "https://github.com/DandelionSprout/adfilt", - "source": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianExperimentalList%20alternate%20versions/NordicFiltersAdGuardHome.txt" + "homepage": "https://github.com/Cats-Team/AdRules", + "source": "https://raw.githubusercontent.com/Cats-Team/AdRules/main/dns.txt" }, - "POL-polish-filters-for-pihole": { - "name": "POL: Polish filters for Pi hole", - "categoryId": "regional", - "homepage": "https://www.certyficate.it/", - "source": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-pihole-filters/hostfile.txt" - }, - "KOR-youslist": { - "name": "KOR: YousList", - "categoryId": "regional", - "homepage": "https://github.com/yous/YousList", - "source": "https://raw.githubusercontent.com/yous/YousList/master/hosts.txt" - }, - "VNM-abpvn-list": { - "name": "VNM: ABPVN List", - "categoryId": "regional", - "homepage": "http://abpvn.com/", - "source": "https://abpvn.com/android/abpvn.txt" - }, - "SWE-frellwit-swedish-hosts-file": { - "name": "SWE: Frellwit's Swedish Hosts File", - "categoryId": "regional", - "homepage": "https://github.com/lassekongo83/Frellwits-filter-lists/", - "source": "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Hosts-File.txt" - }, - "ITA-filtri-dns": { - "name": "ITA: Filtri-DNS", - "categoryId": "regional", - "homepage": "https://filtri-dns.ga/", - "source": "https://filtri-dns.ga/filtri.txt" - }, - "IRN-unwanted-iranian-domains": { - "name": "IRN: Unwanted Iranian domains", - "categoryId": "regional", - "homepage": "https://github.com/DRSDavidSoft/additional-hosts", - "source": "https://raw.githubusercontent.com/DRSDavidSoft/additional-hosts/master/domains/blacklist/unwanted-iranian.txt" - }, - "MKD-macedonian-pi-hole-blocklist": { - "name": "MKD: Macedonian Pi-hole Blocklist", - "categoryId": "regional", - "homepage": "https://github.com/cchevy/macedonian-pi-hole-blocklist", - "source": "https://raw.githubusercontent.com/cchevy/macedonian-pi-hole-blocklist/master/hosts.txt" - }, - "CHN-anti-ad" : { + "CHN_anti_ad": { "name": "CHN: anti-AD", "categoryId": "regional", "homepage": "https://anti-ad.net/", "source": "https://anti-ad.net/easylist.txt" }, - "IDN-abpindo": { + "IDN_abpindo": { "name": "IDN: ABPindo", "categoryId": "regional", - "homepage": "https://github.com/ABPindo/indonesianadblockrules/", - "source": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt" + "homepage": "https://github.com/ABPindo/indonesianadblockrules", + "source": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/aghome.txt" }, - "NLD-Easylist": { - "name": "NLD: Easylist", + "IRN_unwanted_iranian_domains": { + "name": "IRN: PersianBlocker list", "categoryId": "regional", - "homepage": "https://forums.lanik.us/viewforum.php?f=100", - "source": "https://easylist-downloads.adblockplus.org/easylistdutch.txt" + "homepage": "https://github.com/MasterKia/PersianBlocker", + "source": "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlockerHosts.txt" }, - "windows-spy-blocker" : { + "ITA_filtri_dns": { + "name": "ITA: Filtri-DNS", + "categoryId": "regional", + "homepage": "https://filtri-dns.ga/", + "source": "https://filtri-dns.ga/filtri.txt" + }, + "KOR_list_kr": { + "name": "KOR: List-KR DNS", + "categoryId": "regional", + "homepage": "https://github.com/List-KR/List-KR", + "source": "https://github.com/List-KR/List-KR" + }, + "KOR_youslist": { + "name": "KOR: YousList", + "categoryId": "regional", + "homepage": "https://github.com/yous/YousList", + "source": "https://raw.githubusercontent.com/yous/YousList/master/hosts.txt" + }, + "MKD_macedonian_pi_hole_blocklist": { + "name": "MKD: Macedonian Pi-hole Blocklist", + "categoryId": "regional", + "homepage": "https://github.com/cchevy/macedonian-pi-hole-blocklist", + "source": "https://raw.githubusercontent.com/cchevy/macedonian-pi-hole-blocklist/master/hosts.txt" + }, + "NOR_dandelion_sprouts_anti_malware_list": { + "name": "NOR: Dandelion Sprouts nordiske filtre", + "categoryId": "regional", + "homepage": "https://github.com/DandelionSprout/adfilt", + "source": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianExperimentalList%20alternate%20versions/NordicFiltersAdGuardHome.txt" + }, + "POL_polish_filters_for_pi_hole": { + "name": "POL: Polish filters for Pi hole", + "categoryId": "regional", + "homepage": "https://www.certyficate.it/", + "source": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-pihole-filters/hostfile.txt" + }, + "SWE_frellwit_swedish_hosts_file": { + "name": "SWE: Frellwit's Swedish Hosts File", + "categoryId": "regional", + "homepage": "https://github.com/lassekongo83/Frellwits-filter-lists/", + "source": "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Hosts-File.txt" + }, + "TUR_turk_adlist": { + "name": "TUR: turk-adlist", + "categoryId": "regional", + "homepage": "https://github.com/bkrucarci/turk-adlist", + "source": "https://raw.githubusercontent.com/bkrucarci/turk-adlist/master/hosts" + }, + "VNM_abpvn": { + "name": "VNM: ABPVN List", + "categoryId": "regional", + "homepage": "http://abpvn.com/", + "source": "https://abpvn.com/android/abpvn.txt" + }, + "adguard_dns_filter": { + "name": "AdGuard DNS filter", + "categoryId": "general", + "homepage": "https://github.com/AdguardTeam/AdGuardSDNSFilter", + "source": "https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt" + }, + "adway_default_blocklist": { + "name": "AdAway Default Blocklist", + "categoryId": "general", + "homepage": "https://github.com/AdAway/adaway.github.io/", + "source": "https://adaway.org/hosts.txt" + }, + "curben_phishing_filter": { + "name": "Phishing URL Blocklist (PhishTank and OpenPhish)", + "categoryId": "security", + "homepage": "https://gitlab.com/malware-filter/phishing-filter", + "source": "https://malware-filter.gitlab.io/malware-filter/phishing-filter-agh.txt" + }, + "dan_pollocks_list": { + "name": "Dan Pollock's List", + "categoryId": "general", + "homepage": "https://someonewhocares.org/", + "source": "https://someonewhocares.org/hosts/zero/hosts" + }, + "dandelion_sprouts_anti_malware_list": { + "name": "Dandelion Sprout's Anti-Malware List", + "categoryId": "security", + "homepage": "https://github.com/DandelionSprout/adfilt", + "source": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/Alternate%20versions%20Anti-Malware%20List/AntiMalwareAdGuardHome.txt" + }, + "dandelion_sprouts_game_console_adblock_list": { + "name": "Dandelion Sprout's Game Console Adblock List", + "categoryId": "other", + "homepage": "https://github.com/DandelionSprout/adfilt", + "source": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/GameConsoleAdblockList.txt" + }, + "energized_spark": { + "name": "Energized Spark", + "categoryId": "general", + "homepage": "https://energized.pro/", + "source": "https://block.energized.pro/spark/formats/filter" + }, + "nocoin_filter_list": { + "name": "NoCoin Filter List", + "categoryId": "security", + "homepage": "https://github.com/hoshsadiq/adblock-nocoin-list/", + "source": "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt" + }, + "notracking_hosts_blocklists": { + "name": "The NoTracking blocklist", + "categoryId": "general", + "homepage": "https://github.com/notracking/hosts-blocklists", + "source": "https://raw.githubusercontent.com/notracking/hosts-blocklists/master/adblock/adblock.txt" + }, + "oisd_basic": { + "name": "OISD Blocklist Basic", + "categoryId": "general", + "homepage": "https://oisd.nl/", + "source": "https://abp.oisd.nl/basic/" + }, + "oisd_full": { + "name": "OISD Blocklist Full", + "categoryId": "general", + "homepage": "https://oisd.nl/", + "source": "https://abp.oisd.nl/" + }, + "perflyst_dandelion_sprout_smart_tv_blocklist_for_adguard_home": { + "name": "Perflyst and Dandelion Sprout's Smart-TV Blocklist", + "categoryId": "other", + "homepage": "https://github.com/Perflyst/PiHoleBlocklist", + "source": "https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV-AGH.txt" + }, + "peter_lowe_list": { + "name": "Peter Lowe's Blocklist", + "categoryId": "general", + "homepage": "https://pgl.yoyo.org/adservers/", + "source": "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=adblockplus\u0026showintro=1\u0026mimetype=plaintext" + }, + "scam_blocklist_by_durablenapkin": { + "name": "Scam Blocklist by DurableNapkin", + "categoryId": "security", + "homepage": "https://github.com/durablenapkin/scamblocklist", + "source": "https://raw.githubusercontent.com/durablenapkin/scamblocklist/master/adguard.txt" + }, + "staklerware_indicators_list": { + "name": "Stalkerware Indicators List", + "categoryId": "security", + "homepage": "https://github.com/AssoEchap/stalkerware-indicators", + "source": "https://raw.githubusercontent.com/AssoEchap/stalkerware-indicators/master/generated/hosts" + }, + "steven_blacks_list": { + "name": "Steven Black's List", + "categoryId": "general", + "homepage": "https://github.com/StevenBlack/hosts", + "source": "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts" + }, + "the_big_list_of_hacked_malware_web_sites": { + "name": "The Big List of Hacked Malware Web Sites", + "categoryId": "security", + "homepage": "https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites", + "source": "https://raw.githubusercontent.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites/master/hosts" + }, + "urlhaus_filter_online": { + "name": "Malicious URL Blocklist (URLHaus)", + "categoryId": "security", + "homepage": "https://gitlab.com/malware-filter/urlhaus-filter", + "source": "https://malware-filter.gitlab.io/malware-filter/urlhaus-filter-agh.txt" + }, + "windowsspyblocker_hosts_spy_rules": { "name": "WindowsSpyBlocker - Hosts spy rules", "categoryId": "other", "homepage": "https://github.com/crazy-max/WindowsSpyBlocker", diff --git a/client/src/helpers/form.js b/client/src/helpers/form.js index c4f90722..f58aa830 100644 --- a/client/src/helpers/form.js +++ b/client/src/helpers/form.js @@ -1,6 +1,8 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { Trans } from 'react-i18next'; +import cn from 'classnames'; + import { createOnBlurHandler } from './helpers'; import { R_MAC_WITHOUT_COLON, R_UNIX_ABSOLUTE_PATH, R_WIN_ABSOLUTE_PATH } from './constants'; @@ -229,24 +231,34 @@ export const renderServiceField = ({ modifier, icon, meta: { touched, error }, -}) => - - {!disabled && touched && error - && {error}} -; +}) => ( + <> +