Compare commits
194 Commits
2499-rewri
...
AG-23822
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
317233cec9 | ||
|
|
7b92d53b84 | ||
|
|
f7dd832517 | ||
|
|
c21f958eaf | ||
|
|
5a195b441c | ||
|
|
c46516475d | ||
|
|
97af062f7b | ||
|
|
8004b135b1 | ||
|
|
4b9264531b | ||
|
|
9a506d3755 | ||
|
|
e320eb29c2 | ||
|
|
282f11a7c2 | ||
|
|
91f3e29c08 | ||
|
|
1fd6cf1a2f | ||
|
|
efed23701a | ||
|
|
ad1bf5cf6e | ||
|
|
ee8eb1d8a6 | ||
|
|
39f5c50acd | ||
|
|
d4a4bda645 | ||
|
|
2069eddf98 | ||
|
|
c652653ea4 | ||
|
|
6889837785 | ||
|
|
cf7c12c97b | ||
|
|
d88181343c | ||
|
|
e7e638443f | ||
|
|
2f515e8d8f | ||
|
|
e54fc9b1e9 | ||
|
|
66345e855e | ||
|
|
37e046acc4 | ||
|
|
f40ef76c79 | ||
|
|
123ca87388 | ||
|
|
994906fbd4 | ||
|
|
06d465b0d1 | ||
|
|
ca313521dc | ||
|
|
2902f030be | ||
|
|
371261b2c6 | ||
|
|
d26c480d03 | ||
|
|
b6d00f774b | ||
|
|
d3ada9881a | ||
|
|
7309a53356 | ||
|
|
15b937d68b | ||
|
|
681c604c22 | ||
|
|
9fda7bfd34 | ||
|
|
826b314f19 | ||
|
|
156c199bbb | ||
|
|
040596f3a0 | ||
|
|
fde082af44 | ||
|
|
329e144b4f | ||
|
|
367b319f10 | ||
|
|
d6fe0bd740 | ||
|
|
ae7bd79a6c | ||
|
|
0211424191 | ||
|
|
ea8d634f65 | ||
|
|
0fec990bcf | ||
|
|
a7680a593a | ||
|
|
cbc7985e75 | ||
|
|
941eb1dd73 | ||
|
|
fc64e0089e | ||
|
|
24b41100c3 | ||
|
|
b72a3d01b8 | ||
|
|
0393e41096 | ||
|
|
c77b2a0ce5 | ||
|
|
db52f7a3ac | ||
|
|
381f2f651d | ||
|
|
620b51e3ea | ||
|
|
757ddb06f8 | ||
|
|
d6043e2352 | ||
|
|
aeec9a86e2 | ||
|
|
584182e264 | ||
|
|
96cd512d32 | ||
|
|
11898a3f73 | ||
|
|
a91a257b15 | ||
|
|
76a74b271b | ||
|
|
1842f7d888 | ||
|
|
4afd39b22f | ||
|
|
e43ba17884 | ||
|
|
6d402dc86c | ||
|
|
18acdf9b09 | ||
|
|
5da7751463 | ||
|
|
7631ca4ab3 | ||
|
|
c6d4f2317e | ||
|
|
0ea224a9e4 | ||
|
|
d78a3edb22 | ||
|
|
bbbdea2635 | ||
|
|
6c8d89a4da | ||
|
|
f082312e49 | ||
|
|
ea03d1af93 | ||
|
|
67d8b7df90 | ||
|
|
b23ea0a690 | ||
|
|
a186b5c436 | ||
|
|
6da7392345 | ||
|
|
c1924a8b8a | ||
|
|
0376afb38e | ||
|
|
230d7b8c17 | ||
|
|
950ecb1f5e | ||
|
|
9e14d5f99f | ||
|
|
89bf3721b5 | ||
|
|
15bba281ee | ||
|
|
f9fe3172c4 | ||
|
|
5d5a729569 | ||
|
|
b1120221c7 | ||
|
|
f553eee842 | ||
|
|
61b4043775 | ||
|
|
a55cbbe79c | ||
|
|
10bffd89c9 | ||
|
|
91ecbede7d | ||
|
|
27dbb427a1 | ||
|
|
195300f56e | ||
|
|
2a0d062947 | ||
|
|
3575aa0570 | ||
|
|
f191cb07a5 | ||
|
|
1731ce9c63 | ||
|
|
2eb3bf6ea5 | ||
|
|
a0349b6c7e | ||
|
|
da9008aba3 | ||
|
|
c576d5059e | ||
|
|
487675b9ad | ||
|
|
132ec556dc | ||
|
|
d58772f177 | ||
|
|
0df32601bb | ||
|
|
fb7b8bba6a | ||
|
|
d859a33787 | ||
|
|
67c9abe119 | ||
|
|
2409282d51 | ||
|
|
9c48e96939 | ||
|
|
0bc3ef89ea | ||
|
|
8de994d077 | ||
|
|
59a8265e31 | ||
|
|
bea39934bd | ||
|
|
df61741f60 | ||
|
|
143616ca6e | ||
|
|
306c1983a2 | ||
|
|
194ead3479 | ||
|
|
c3edab4387 | ||
|
|
f736d85e6e | ||
|
|
1daabb97e5 | ||
|
|
dd2095e05d | ||
|
|
a0205a54ec | ||
|
|
48431f8b86 | ||
|
|
9f7a582dbc | ||
|
|
2b5e4850d0 | ||
|
|
c6706445c9 | ||
|
|
595484e0b3 | ||
|
|
a2053526c3 | ||
|
|
e616429d44 | ||
|
|
622181b88f | ||
|
|
1011b8f93d | ||
|
|
6b265c6488 | ||
|
|
c11a52d60c | ||
|
|
f23a0d4753 | ||
|
|
057804a459 | ||
|
|
012e5beb51 | ||
|
|
ae653f166f | ||
|
|
51b72a4cd8 | ||
|
|
f13dc59bfa | ||
|
|
bb226434f8 | ||
|
|
a772212d05 | ||
|
|
bb80a7c215 | ||
|
|
386add033b | ||
|
|
304f2ba2cc | ||
|
|
3a0b27e7e8 | ||
|
|
76a513cdaf | ||
|
|
ff9b24ad69 | ||
|
|
20531de760 | ||
|
|
91dee0986b | ||
|
|
a556ce8fb8 | ||
|
|
6f6ced33c1 | ||
|
|
be43ce1760 | ||
|
|
4d295a384b | ||
|
|
eb0d7d39d9 | ||
|
|
6575c068b8 | ||
|
|
3378d1c103 | ||
|
|
a50a8abb45 | ||
|
|
ff04b2a7d3 | ||
|
|
ec19a85ed0 | ||
|
|
b89105e3b5 | ||
|
|
137d280032 | ||
|
|
4baa6e6990 | ||
|
|
b8d55eaffe | ||
|
|
b31bab591d | ||
|
|
6a032bb821 | ||
|
|
a5f059b1f5 | ||
|
|
04f4993385 | ||
|
|
46382e8825 | ||
|
|
d52f1d0e70 | ||
|
|
6aa93f4ae7 | ||
|
|
99ec1d840c | ||
|
|
2ecf2a4c42 | ||
|
|
54a141abde | ||
|
|
6e8033750d | ||
|
|
46624c79de | ||
|
|
a7dca7aa56 | ||
|
|
cd76a30790 | ||
|
|
68bc9969b7 |
130
.github/ISSUE_TEMPLATE/bug.yml
vendored
130
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -10,52 +10,58 @@
|
|||||||
- 'label': >
|
- 'label': >
|
||||||
I have checked the
|
I have checked the
|
||||||
[Wiki](https://github.com/AdguardTeam/AdGuardHome/wiki) and
|
[Wiki](https://github.com/AdguardTeam/AdGuardHome/wiki) and
|
||||||
[Discussions](https://github.com/AdguardTeam/AdGuardHome/discussions)
|
[Discussions](https://github.com/AdguardTeam/AdGuardHome/discussions/categories/q-a)
|
||||||
and found no answer
|
and found no answer
|
||||||
'required': true
|
'required': true
|
||||||
- 'label': >
|
- 'label': >
|
||||||
I have searched other issues and found no duplicates
|
I have searched other issues and found no duplicates
|
||||||
'required': true
|
'required': true
|
||||||
- 'label': >
|
- 'label': >
|
||||||
I want to report a bug and not ask a question
|
I want to report a bug and not [ask a question or ask for
|
||||||
|
help](https://github.com/AdguardTeam/AdGuardHome/discussions/categories/q-a)
|
||||||
|
'required': true
|
||||||
|
- 'label': >
|
||||||
|
I have set up AdGuard Home correctly and [configured clients to
|
||||||
|
use it](https://github.com/AdguardTeam/AdGuardHome/wiki/Clients).
|
||||||
|
(Use the
|
||||||
|
[Discussions](https://github.com/AdguardTeam/AdGuardHome/discussions/categories/q-a)
|
||||||
|
for help with installing and configuring clients.)
|
||||||
'required': true
|
'required': true
|
||||||
'id': 'prerequisites'
|
'id': 'prerequisites'
|
||||||
'type': 'checkboxes'
|
'type': 'checkboxes'
|
||||||
- 'attributes':
|
- 'attributes':
|
||||||
'description': 'On which operating system type does the issue occur?'
|
'description': 'On which Platform does the issue occur?'
|
||||||
'label': 'Operating system type'
|
'label': 'Platform (OS and CPU architecture)'
|
||||||
'options':
|
'options':
|
||||||
- 'FreeBSD'
|
- 'Darwin (aka macOS)/AMD64 (aka x86_64)'
|
||||||
- 'Linux, OpenWrt'
|
- 'Darwin (aka macOS)/ARM64'
|
||||||
- 'Linux, Other (please mention the version in the description)'
|
- 'FreeBSD/386'
|
||||||
- 'macOS (aka Darwin)'
|
- 'FreeBSD/AMD64 (aka x86_64)'
|
||||||
- 'OpenBSD'
|
- 'FreeBSD/ARM64'
|
||||||
- 'Windows'
|
- 'FreeBSD/ARMv5'
|
||||||
- 'Other (please mention in the description)'
|
- 'FreeBSD/ARMv6'
|
||||||
|
- 'FreeBSD/ARMv7'
|
||||||
|
- 'Linux/386'
|
||||||
|
- 'Linux/AMD64 (aka x86_64)'
|
||||||
|
- 'Linux/ARM64'
|
||||||
|
- 'Linux/ARMv5'
|
||||||
|
- 'Linux/ARMv6'
|
||||||
|
- 'Linux/ARMv7'
|
||||||
|
- 'Linux/MIPS LE'
|
||||||
|
- 'Linux/MIPS'
|
||||||
|
- 'Linux/MIPS64 LE'
|
||||||
|
- 'Linux/MIPS64'
|
||||||
|
- 'Linux/PPC64 LE'
|
||||||
|
- 'OpenBSD/AMD64 (aka x86_64)'
|
||||||
|
- 'OpenBSD/ARM64'
|
||||||
|
- 'Windows/386'
|
||||||
|
- 'Windows/AMD64 (aka x86_64)'
|
||||||
|
- 'Windows/ARM64'
|
||||||
|
- 'Custom (please mention in the description)'
|
||||||
'id': 'os'
|
'id': 'os'
|
||||||
'type': 'dropdown'
|
'type': 'dropdown'
|
||||||
'validations':
|
'validations':
|
||||||
'required': true
|
'required': true
|
||||||
- 'attributes':
|
|
||||||
'description': 'On which CPU architecture does the issue occur?'
|
|
||||||
'label': 'CPU architecture'
|
|
||||||
'options':
|
|
||||||
- 'AMD64'
|
|
||||||
- 'x86'
|
|
||||||
- '64-bit ARM'
|
|
||||||
- 'ARMv5'
|
|
||||||
- 'ARMv6'
|
|
||||||
- 'ARMv7'
|
|
||||||
- '64-bit MIPS'
|
|
||||||
- '64-bit MIPS LE'
|
|
||||||
- '32-bit MIPS'
|
|
||||||
- '32-bit MIPS LE'
|
|
||||||
- '64-bit PowerPC LE'
|
|
||||||
- 'Other (please mention in the description)'
|
|
||||||
'id': 'arch'
|
|
||||||
'type': 'dropdown'
|
|
||||||
'validations':
|
|
||||||
'required': true
|
|
||||||
- 'attributes':
|
- 'attributes':
|
||||||
'description': 'How did you install AdGuard Home?'
|
'description': 'How did you install AdGuard Home?'
|
||||||
'label': 'Installation'
|
'label': 'Installation'
|
||||||
@@ -63,7 +69,7 @@
|
|||||||
- 'GitHub releases or script from README'
|
- 'GitHub releases or script from README'
|
||||||
- 'Docker'
|
- 'Docker'
|
||||||
- 'Snapcraft'
|
- 'Snapcraft'
|
||||||
- 'Custom port'
|
- 'Custom package (OpenWrt, HomeAssistant, etc; please mention in the description)'
|
||||||
- 'Other (please mention in the description)'
|
- 'Other (please mention in the description)'
|
||||||
'id': 'install'
|
'id': 'install'
|
||||||
'type': 'dropdown'
|
'type': 'dropdown'
|
||||||
@@ -89,21 +95,55 @@
|
|||||||
'validations':
|
'validations':
|
||||||
'required': true
|
'required': true
|
||||||
- 'attributes':
|
- 'attributes':
|
||||||
'description': 'Please describe the bug'
|
'description': >
|
||||||
'label': 'Description'
|
Please describe what you did. An `nslookup` or a `dig` command is
|
||||||
|
the best way. For crashes, please provide a full failure log.
|
||||||
|
'label': 'Action'
|
||||||
'value': |
|
'value': |
|
||||||
#### What did you do?
|
```sh
|
||||||
|
nslookup -debug -type=a 'www.example.com' '$YOUR_AGH_ADDRESS'
|
||||||
#### Expected result
|
```
|
||||||
|
'id': 'failing_action'
|
||||||
#### Actual result
|
|
||||||
|
|
||||||
#### Screenshots (if applicable)
|
|
||||||
|
|
||||||
#### Additional information
|
|
||||||
'id': 'description'
|
|
||||||
'type': 'textarea'
|
'type': 'textarea'
|
||||||
'validations':
|
'validations':
|
||||||
'required': true
|
'required': true
|
||||||
'description': 'File a bug report'
|
- 'attributes':
|
||||||
|
'description': >
|
||||||
|
What did you expect to see? Please add a description and/or
|
||||||
|
screenshots, if applicable.
|
||||||
|
'label': 'Expected result'
|
||||||
|
'placeholder': >
|
||||||
|
What did you expect to see?
|
||||||
|
'id': 'expected'
|
||||||
|
'type': 'textarea'
|
||||||
|
'validations':
|
||||||
|
'required': true
|
||||||
|
- 'attributes':
|
||||||
|
'description': >
|
||||||
|
What happened instead? Please add a description and/or screenshots,
|
||||||
|
if applicable.
|
||||||
|
'label': 'Actual result'
|
||||||
|
'placeholder': >
|
||||||
|
What did you see instead?
|
||||||
|
'id': 'result'
|
||||||
|
'type': 'textarea'
|
||||||
|
'validations':
|
||||||
|
'required': true
|
||||||
|
- 'attributes':
|
||||||
|
'description': >
|
||||||
|
Please add additional information, such as non-standard OS or port,
|
||||||
|
here. You can also put screenshots here, if applicable. For
|
||||||
|
example, it is better to copy and paste text from a terminal instead
|
||||||
|
of posting a screenshot of the terminal.
|
||||||
|
'label': 'Additional information and/or screenshots'
|
||||||
|
'placeholder': >
|
||||||
|
Additional OS information, screenshots of the UI, etc.
|
||||||
|
'id': 'additional'
|
||||||
|
'type': 'textarea'
|
||||||
|
'validations':
|
||||||
|
'required': false
|
||||||
|
'description': >
|
||||||
|
Open a bug report. Please do not open bug reports for questions or help
|
||||||
|
with configuring clients. If you want to ask for help, use the Discussions
|
||||||
|
section.
|
||||||
'name': 'Bug'
|
'name': 'Bug'
|
||||||
|
|||||||
35
.github/ISSUE_TEMPLATE/feature.yml
vendored
35
.github/ISSUE_TEMPLATE/feature.yml
vendored
@@ -23,19 +23,32 @@
|
|||||||
'id': 'prerequisites'
|
'id': 'prerequisites'
|
||||||
'type': 'checkboxes'
|
'type': 'checkboxes'
|
||||||
- 'attributes':
|
- 'attributes':
|
||||||
'description': 'Please describe the request'
|
'description': 'Please describe the problem you are trying to solve'
|
||||||
'label': 'Description'
|
'label': 'The problem'
|
||||||
'value': |
|
'placeholder': >
|
||||||
#### What problem are you trying to solve?
|
Please describe the problem you are trying to solve
|
||||||
|
'id': 'problem'
|
||||||
#### Proposed solution
|
|
||||||
|
|
||||||
#### Alternatives considered
|
|
||||||
|
|
||||||
#### Additional information
|
|
||||||
'id': 'description'
|
|
||||||
'type': 'textarea'
|
'type': 'textarea'
|
||||||
'validations':
|
'validations':
|
||||||
'required': true
|
'required': true
|
||||||
|
- 'attributes':
|
||||||
|
'description': 'What feature are you proposing to solve this problem?'
|
||||||
|
'label': 'Proposed solution'
|
||||||
|
'placeholder': >
|
||||||
|
What feature are you proposing to solve this problem?
|
||||||
|
'id': 'proposed_solution'
|
||||||
|
'type': 'textarea'
|
||||||
|
'validations':
|
||||||
|
'required': true
|
||||||
|
- 'attributes':
|
||||||
|
'label': 'Alternatives considered and additional information'
|
||||||
|
'placeholder': >
|
||||||
|
Are there any other ways to solve the problem?
|
||||||
|
'id': 'additional'
|
||||||
|
'type': 'textarea'
|
||||||
|
'validations':
|
||||||
|
'required': false
|
||||||
'description': 'Suggest a feature or an enhancement for AdGuard Home'
|
'description': 'Suggest a feature or an enhancement for AdGuard Home'
|
||||||
|
'labels':
|
||||||
|
- 'feature request'
|
||||||
'name': 'Feature request or enhancement'
|
'name': 'Feature request or enhancement'
|
||||||
|
|||||||
20
.github/PULL_REQUEST_TEMPLATE
vendored
Normal file
20
.github/PULL_REQUEST_TEMPLATE
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
Before submitting a PR please make sure that:
|
||||||
|
|
||||||
|
1. You have discussed your solution in an issue and have got an
|
||||||
|
approval from a maintainer.
|
||||||
|
|
||||||
|
2. This isn't a localization fix; please send those to our
|
||||||
|
[CrowdIn](https://crowdin.com/project/adguard-applications/en#/adguard-home)
|
||||||
|
page.
|
||||||
|
|
||||||
|
3. Your code follows our
|
||||||
|
[code guidelines](https://github.com/AdguardTeam/CodeGuidelines/blob/master/Go/Go.md).
|
||||||
|
|
||||||
|
Add a short description here. The description should include:
|
||||||
|
|
||||||
|
1. Which issue this PR closes (`Closes #NNNN.`) or updates (`Updates
|
||||||
|
#NNNN.`).
|
||||||
|
|
||||||
|
2. A short description of how the change achieves that.
|
||||||
|
|
||||||
|
Do not forget to remove these instructions.
|
||||||
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
'name': 'build'
|
'name': 'build'
|
||||||
|
|
||||||
'env':
|
'env':
|
||||||
'GO_VERSION': '1.18.9'
|
'GO_VERSION': '1.19.10'
|
||||||
'NODE_VERSION': '14'
|
'NODE_VERSION': '14'
|
||||||
|
|
||||||
'on':
|
'on':
|
||||||
|
|||||||
2
.github/workflows/lint.yml
vendored
2
.github/workflows/lint.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
'name': 'lint'
|
'name': 'lint'
|
||||||
|
|
||||||
'env':
|
'env':
|
||||||
'GO_VERSION': '1.18.9'
|
'GO_VERSION': '1.19.10'
|
||||||
|
|
||||||
'on':
|
'on':
|
||||||
'push':
|
'push':
|
||||||
|
|||||||
18
.github/workflows/potential-duplicates.yml
vendored
Normal file
18
.github/workflows/potential-duplicates.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
'name': 'potential-duplicates'
|
||||||
|
'on':
|
||||||
|
'issues':
|
||||||
|
'types':
|
||||||
|
- 'opened'
|
||||||
|
'jobs':
|
||||||
|
'run':
|
||||||
|
'runs-on': 'ubuntu-latest'
|
||||||
|
'steps':
|
||||||
|
- 'uses': 'wow-actions/potential-duplicates@v1'
|
||||||
|
'with':
|
||||||
|
'GITHUB_TOKEN': '${{ secrets.GITHUB_TOKEN }}'
|
||||||
|
'state': 'all'
|
||||||
|
'threshold': 0.6
|
||||||
|
'comment': |
|
||||||
|
Potential duplicates: {{#issues}}
|
||||||
|
* [#{{ number }}] {{ title }} ({{ accuracy }}%)
|
||||||
|
{{/issues}}
|
||||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -9,21 +9,22 @@
|
|||||||
*.db
|
*.db
|
||||||
*.log
|
*.log
|
||||||
*.snap
|
*.snap
|
||||||
|
*.test
|
||||||
/agh-backup/
|
/agh-backup/
|
||||||
/bin/
|
/bin/
|
||||||
/build/*
|
/build/*
|
||||||
/build2/*
|
|
||||||
/data/
|
/data/
|
||||||
/dist/
|
/dist/
|
||||||
/filtering/tests/filtering.TestLotsOfRules*.pprof
|
/filtering/tests/filtering.TestLotsOfRules*.pprof
|
||||||
/filtering/tests/top-1m.csv
|
/filtering/tests/top-1m.csv
|
||||||
|
/internal/next/AdGuardHome.yaml
|
||||||
/launchpad_credentials
|
/launchpad_credentials
|
||||||
/querylog.json*
|
/querylog.json*
|
||||||
/snapcraft_login
|
/snapcraft_login
|
||||||
AdGuardHome*
|
AdGuardHome
|
||||||
|
AdGuardHome.exe
|
||||||
|
AdGuardHome.yaml*
|
||||||
coverage.txt
|
coverage.txt
|
||||||
leases.db
|
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
||||||
!/build/gitkeep
|
!/build/gitkeep
|
||||||
!/build2/gitkeep
|
|
||||||
|
|||||||
@@ -399,6 +399,7 @@ Response:
|
|||||||
"protection_enabled":true,
|
"protection_enabled":true,
|
||||||
"running":true,
|
"running":true,
|
||||||
"dhcp_available":true,
|
"dhcp_available":true,
|
||||||
|
"protection_disabled_duration":0
|
||||||
"version":"undefined"
|
"version":"undefined"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
762
CHANGELOG.md
762
CHANGELOG.md
@@ -13,21 +13,733 @@ and this project adheres to
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
## [v0.108.0] - TBA
|
## [v0.108.0] - TBA
|
||||||
|
|
||||||
|
## [v0.107.34] - 2023-07-26 (APPROX.)
|
||||||
|
|
||||||
|
See also the [v0.107.34 GitHub milestone][ms-v0.107.34].
|
||||||
|
|
||||||
|
[ms-v0.107.34]: https://github.com/AdguardTeam/AdGuardHome/milestone/69?closed=1
|
||||||
|
|
||||||
|
NOTE: Add new changes BELOW THIS COMMENT.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Improved CPU and RAM consumption during updates of filtering-rule lists.
|
||||||
|
|
||||||
|
#### Configuration Changes
|
||||||
|
|
||||||
|
In this release, the schema version has changed from 23 to 24.
|
||||||
|
|
||||||
|
- Properties starting with `log_`, and `verbose` property, which used to set up
|
||||||
|
logging are now moved to the new object `log` containing new properties `file`,
|
||||||
|
`max_backups`, `max_size`, `max_age`, `compress`, `local_time`, and `verbose`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# BEFORE:
|
||||||
|
'log_file': ""
|
||||||
|
'log_max_backups': 0
|
||||||
|
'log_max_size': 100
|
||||||
|
'log_max_age': 3
|
||||||
|
'log_compress': false
|
||||||
|
'log_localtime': false
|
||||||
|
'verbose': false
|
||||||
|
|
||||||
|
# AFTER:
|
||||||
|
'log':
|
||||||
|
'file': ""
|
||||||
|
'max_backups': 0
|
||||||
|
'max_size': 100
|
||||||
|
'max_age': 3
|
||||||
|
'compress': false
|
||||||
|
'local_time': false
|
||||||
|
'verbose': false
|
||||||
|
```
|
||||||
|
|
||||||
|
To rollback this change, remove the new object `log`, set back `log_` and
|
||||||
|
`verbose` properties and change the `schema_version` back to `23`.
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
|
||||||
|
- Default exposure of the non-standard ports 784 and 8853 for DNS-over-QUIC in
|
||||||
|
the `Dockerfile`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Excessive RAM and CPU consumption by Safe Browsing and Parental Control
|
||||||
|
filters ([#5896]).
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- The `HEALTHCHECK` section and the use of `tini` in the `ENTRYPOINT` section in
|
||||||
|
`Dockerfile` ([#5939]). They caused a lot of issues, especially with tools
|
||||||
|
like `docker-compose` and `podman`.
|
||||||
|
|
||||||
|
**NOTE:** Some Docker tools may cache `ENTRYPOINT` sections, so some users may
|
||||||
|
be required to backup their configuration, stop the container, purge the old
|
||||||
|
image, and reload it from scratch.
|
||||||
|
|
||||||
|
[#5896]: https://github.com/AdguardTeam/AdGuardHome/issues/5896
|
||||||
|
|
||||||
|
<!--
|
||||||
|
NOTE: Add new changes ABOVE THIS COMMENT.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
## [v0.107.33] - 2023-07-03
|
||||||
## [v0.107.22] - 2222-12-28 (APPROX.)
|
|
||||||
|
See also the [v0.107.33 GitHub milestone][ms-v0.107.33].
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- The new command-line flag `--web-addr` is the address to serve the web UI on,
|
||||||
|
in the host:port format.
|
||||||
|
- The ability to set inactivity periods for filtering blocked services, both
|
||||||
|
globally and per client, in the configuration file ([#951]). The UI changes
|
||||||
|
are coming in the upcoming releases.
|
||||||
|
- The ability to edit rewrite rules via `PUT /control/rewrite/update` HTTP API
|
||||||
|
and the Web UI ([#1577]).
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
#### Configuration Changes
|
||||||
|
|
||||||
|
In this release, the schema version has changed from 20 to 23.
|
||||||
|
|
||||||
|
- Properties `bind_host`, `bind_port`, and `web_session_ttl` which used to setup
|
||||||
|
web UI binding configuration, are now moved to a new object `http` containing
|
||||||
|
new properties `address` and `session_ttl`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# BEFORE:
|
||||||
|
'bind_host': '1.2.3.4'
|
||||||
|
'bind_port': 8080
|
||||||
|
'web_session_ttl': 720
|
||||||
|
|
||||||
|
# AFTER:
|
||||||
|
'http':
|
||||||
|
'address': '1.2.3.4:8080'
|
||||||
|
'session_ttl': '720h'
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the new `http.session_ttl` property is now a duration string. To
|
||||||
|
rollback this change, remove the new object `http`, set back `bind_host`,
|
||||||
|
`bind_port`, `web_session_ttl`, and change the `schema_version` back to `22`.
|
||||||
|
- Property `clients.persistent.blocked_services`, which in schema versions 21
|
||||||
|
and earlier used to be a list containing ids of blocked services, is now an
|
||||||
|
object containing ids and schedule for blocked services:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# BEFORE:
|
||||||
|
'clients':
|
||||||
|
'persistent':
|
||||||
|
- 'name': 'client-name'
|
||||||
|
'blocked_services':
|
||||||
|
- id_1
|
||||||
|
- id_2
|
||||||
|
|
||||||
|
# AFTER:
|
||||||
|
'clients':
|
||||||
|
'persistent':
|
||||||
|
- 'name': client-name
|
||||||
|
'blocked_services':
|
||||||
|
'ids':
|
||||||
|
- id_1
|
||||||
|
- id_2
|
||||||
|
'schedule':
|
||||||
|
'time_zone': 'Local'
|
||||||
|
'sun':
|
||||||
|
'start': '0s'
|
||||||
|
'end': '24h'
|
||||||
|
'mon':
|
||||||
|
'start': '1h'
|
||||||
|
'end': '23h'
|
||||||
|
```
|
||||||
|
|
||||||
|
To rollback this change, replace `clients.persistent.blocked_services` object
|
||||||
|
with the list of ids of blocked services and change the `schema_version` back
|
||||||
|
to `21`.
|
||||||
|
- Property `dns.blocked_services`, which in schema versions 20 and earlier used
|
||||||
|
to be a list containing ids of blocked services, is now an object containing
|
||||||
|
ids and schedule for blocked services:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# BEFORE:
|
||||||
|
'blocked_services':
|
||||||
|
- id_1
|
||||||
|
- id_2
|
||||||
|
|
||||||
|
# AFTER:
|
||||||
|
'blocked_services':
|
||||||
|
'ids':
|
||||||
|
- id_1
|
||||||
|
- id_2
|
||||||
|
'schedule':
|
||||||
|
'time_zone': 'Local'
|
||||||
|
'sun':
|
||||||
|
'start': '0s'
|
||||||
|
'end': '24h'
|
||||||
|
'mon':
|
||||||
|
'start': '10m'
|
||||||
|
'end': '23h30m'
|
||||||
|
'tue':
|
||||||
|
'start': '20m'
|
||||||
|
'end': '23h'
|
||||||
|
'wed':
|
||||||
|
'start': '30m'
|
||||||
|
'end': '22h30m'
|
||||||
|
'thu':
|
||||||
|
'start': '40m'
|
||||||
|
'end': '22h'
|
||||||
|
'fri':
|
||||||
|
'start': '50m'
|
||||||
|
'end': '21h30m'
|
||||||
|
'sat':
|
||||||
|
'start': '1h'
|
||||||
|
'end': '21h'
|
||||||
|
```
|
||||||
|
|
||||||
|
To rollback this change, replace `dns.blocked_services` object with the list
|
||||||
|
of ids of blocked services and change the `schema_version` back to `20`.
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
|
||||||
|
- The `HEALTHCHECK` section and the use of `tini` in the `ENTRYPOINT` section in
|
||||||
|
`Dockerfile` ([#5939]). They cause a lot of issues, especially with tools
|
||||||
|
like `docker-compose` and `podman`, and will be removed in a future release.
|
||||||
|
- Flags `-h`, `--host`, `-p`, `--port` have been deprecated. The `-h` flag
|
||||||
|
will work as an alias for `--help`, instead of the deprecated `--host` in the
|
||||||
|
future releases.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Ignoring of `/etc/hosts` file when resolving the hostnames of upstream DNS
|
||||||
|
servers ([#5902]).
|
||||||
|
- Excessive error logging when using DNS-over-QUIC ([#5285]).
|
||||||
|
- Inability to set `bind_host` in `AdGuardHome.yaml` in Docker ([#4231],
|
||||||
|
[#4235]).
|
||||||
|
- The blocklists can now be deleted properly ([#5700]).
|
||||||
|
- Queries with the question-section target `.`, for example `NS .`, are now
|
||||||
|
counted in the statistics and correctly shown in the query log ([#5910]).
|
||||||
|
- Safe Search not working with `AAAA` queries for domains that don't have `AAAA`
|
||||||
|
records ([#5913]).
|
||||||
|
|
||||||
|
[#951]: https://github.com/AdguardTeam/AdGuardHome/issues/951
|
||||||
|
[#1577]: https://github.com/AdguardTeam/AdGuardHome/issues/1577
|
||||||
|
[#4231]: https://github.com/AdguardTeam/AdGuardHome/issues/4231
|
||||||
|
[#4235]: https://github.com/AdguardTeam/AdGuardHome/pull/4235
|
||||||
|
[#5285]: https://github.com/AdguardTeam/AdGuardHome/issues/5285
|
||||||
|
[#5700]: https://github.com/AdguardTeam/AdGuardHome/issues/5700
|
||||||
|
[#5902]: https://github.com/AdguardTeam/AdGuardHome/issues/5902
|
||||||
|
[#5910]: https://github.com/AdguardTeam/AdGuardHome/issues/5910
|
||||||
|
[#5913]: https://github.com/AdguardTeam/AdGuardHome/issues/5913
|
||||||
|
[#5939]: https://github.com/AdguardTeam/AdGuardHome/discussions/5939
|
||||||
|
|
||||||
|
[ms-v0.107.33]: https://github.com/AdguardTeam/AdGuardHome/milestone/68?closed=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.32] - 2023-06-13
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- DNSCrypt upstream not resetting the client and resolver information on
|
||||||
|
dialing errors ([#5872]).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.31] - 2023-06-08
|
||||||
|
|
||||||
|
See also the [v0.107.31 GitHub milestone][ms-v0.107.31].
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Startup errors on OpenWrt ([#5872]).
|
||||||
|
- Plain-UDP upstreams always falling back to TCP, causing outages and slowdowns
|
||||||
|
([#5873], [#5874]).
|
||||||
|
|
||||||
|
[#5872]: https://github.com/AdguardTeam/AdGuardHome/issues/5872
|
||||||
|
[#5873]: https://github.com/AdguardTeam/AdGuardHome/issues/5873
|
||||||
|
[#5874]: https://github.com/AdguardTeam/AdGuardHome/issues/5874
|
||||||
|
|
||||||
|
[ms-v0.107.31]: https://github.com/AdguardTeam/AdGuardHome/milestone/67?closed=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.30] - 2023-06-07
|
||||||
|
|
||||||
|
See also the [v0.107.30 GitHub milestone][ms-v0.107.30].
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Go version has been updated to prevent the possibility of exploiting the
|
||||||
|
CVE-2023-29402, CVE-2023-29403, and CVE-2023-29404 Go vulnerabilities fixed in
|
||||||
|
[Go 1.19.10][go-1.19.10].
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Unquoted IPv6 bind hosts with trailing colons erroneously considered
|
||||||
|
unspecified addresses are now properly validated ([#5752]).
|
||||||
|
|
||||||
|
**NOTE:** the Docker healthcheck script now also doesn't interpret the `""`
|
||||||
|
value as unspecified address.
|
||||||
|
- Incorrect `Content-Type` header value in `POST /control/version.json` and `GET
|
||||||
|
/control/dhcp/interfaces` HTTP APIs ([#5716]).
|
||||||
|
- Provided bootstrap servers are now used to resolve the hostnames of plain
|
||||||
|
UDP/TCP upstream servers.
|
||||||
|
|
||||||
|
[#5716]: https://github.com/AdguardTeam/AdGuardHome/issues/5716
|
||||||
|
|
||||||
|
[go-1.19.10]: https://groups.google.com/g/golang-announce/c/q5135a9d924/m/j0ZoAJOHAwAJ
|
||||||
|
[ms-v0.107.30]: https://github.com/AdguardTeam/AdGuardHome/milestone/66?closed=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.29] - 2023-04-18
|
||||||
|
|
||||||
|
See also the [v0.107.29 GitHub milestone][ms-v0.107.29].
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- The ability to exclude client activity from the query log or statistics by
|
||||||
|
editing client's settings on the respective page in the UI ([#1717], [#4299]).
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Stored DHCP leases moved from `leases.db` to `data/leases.json`. The file
|
||||||
|
format has also been optimized.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- The `github.com/mdlayher/raw` dependency has been temporarily returned to
|
||||||
|
support raw connections on Darwin ([#5712]).
|
||||||
|
- Incorrect recording of blocked results as “Blocked by CNAME or IP” in the
|
||||||
|
query log ([#5725]).
|
||||||
|
- All Safe Search services being unchecked by default.
|
||||||
|
- Panic when a DNSCrypt stamp is invalid ([#5721]).
|
||||||
|
|
||||||
|
[#5712]: https://github.com/AdguardTeam/AdGuardHome/issues/5712
|
||||||
|
[#5721]: https://github.com/AdguardTeam/AdGuardHome/issues/5721
|
||||||
|
[#5725]: https://github.com/AdguardTeam/AdGuardHome/issues/5725
|
||||||
|
[#5752]: https://github.com/AdguardTeam/AdGuardHome/issues/5752
|
||||||
|
|
||||||
|
[ms-v0.107.29]: https://github.com/AdguardTeam/AdGuardHome/milestone/65?closed=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.28] - 2023-04-12
|
||||||
|
|
||||||
|
See also the [v0.107.28 GitHub milestone][ms-v0.107.28].
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- The ability to exclude client activity from the query log or statistics by
|
||||||
|
using the new properties `ignore_querylog` and `ignore_statistics` of the
|
||||||
|
items of the `clients.persistent` array ([#1717], [#4299]). The UI changes
|
||||||
|
are coming in the upcoming releases.
|
||||||
|
- Better profiling information when `debug_pprof` is set to `true`.
|
||||||
|
- IPv6 support in Safe Search for some services.
|
||||||
|
- The ability to make bootstrap DNS lookups prefer IPv6 addresses to IPv4 ones
|
||||||
|
using the new `dns.bootstrap_prefer_ipv6` configuration file property
|
||||||
|
([#4262]).
|
||||||
|
- Docker container's healthcheck ([#3290]).
|
||||||
|
- The new HTTP API `POST /control/protection`, that updates protection state
|
||||||
|
and adds an optional pause duration ([#1333]). The format of request body
|
||||||
|
is described in `openapi/openapi.yaml`. The duration of this pause could
|
||||||
|
also be set with the property `protection_disabled_until` in the `dns` object
|
||||||
|
of the YAML configuration file.
|
||||||
|
- The ability to create a static DHCP lease from a dynamic one more easily
|
||||||
|
([#3459]).
|
||||||
|
- Two new HTTP APIs, `PUT /control/stats/config/update` and `GET
|
||||||
|
control/stats/config`, which can be used to set and receive the query log
|
||||||
|
configuration. See `openapi/openapi.yaml` for the full description.
|
||||||
|
- Two new HTTP APIs, `PUT /control/querylog/config/update` and `GET
|
||||||
|
control/querylog/config`, which can be used to set and receive the statistics
|
||||||
|
configuration. See `openapi/openapi.yaml` for the full description.
|
||||||
|
- The ability to set custom IP for EDNS Client Subnet by using the DNS-server
|
||||||
|
configuration section on the DNS settings page in the UI ([#1472]).
|
||||||
|
- The ability to manage Safe Search for each service by using the new
|
||||||
|
`safe_search` property ([#1163]).
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- ARPA domain names containing a subnet within private networks now also
|
||||||
|
considered private, behaving closer to [RFC 6761][rfc6761] ([#5567]).
|
||||||
|
|
||||||
|
#### Configuration Changes
|
||||||
|
|
||||||
|
In this release, the schema version has changed from 17 to 20.
|
||||||
|
|
||||||
|
- Property `statistics.interval`, which in schema versions 19 and earlier used
|
||||||
|
to be an integer number of days, is now a string with a human-readable
|
||||||
|
duration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# BEFORE:
|
||||||
|
'statistics':
|
||||||
|
# …
|
||||||
|
'interval': 1
|
||||||
|
|
||||||
|
# AFTER:
|
||||||
|
'statistics':
|
||||||
|
# …
|
||||||
|
'interval': '24h'
|
||||||
|
```
|
||||||
|
|
||||||
|
To rollback this change, convert the property back into days and change the
|
||||||
|
`schema_version` back to `19`.
|
||||||
|
- The `dns.safesearch_enabled` property has been replaced with `safe_search`
|
||||||
|
object containing per-service settings.
|
||||||
|
- The `clients.persistent.safesearch_enabled` property has been replaced with
|
||||||
|
`safe_search` object containing per-service settings.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# BEFORE:
|
||||||
|
'safesearch_enabled': true
|
||||||
|
|
||||||
|
# AFTER:
|
||||||
|
'safe_search':
|
||||||
|
'enabled': true
|
||||||
|
'bing': true
|
||||||
|
'duckduckgo': true
|
||||||
|
'google': true
|
||||||
|
'pixabay': true
|
||||||
|
'yandex': true
|
||||||
|
'youtube': true
|
||||||
|
```
|
||||||
|
|
||||||
|
To rollback this change, move the value of `dns.safe_search.enabled` into the
|
||||||
|
`dns.safesearch_enabled`, then remove `dns.safe_search` property. Do the same
|
||||||
|
client's specific `clients.persistent.safesearch` and then change the
|
||||||
|
`schema_version` back to `17`.
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
|
||||||
|
- The `POST /control/safesearch/enable` HTTP API is deprecated. Use the new
|
||||||
|
`PUT /control/safesearch/settings` API.
|
||||||
|
- The `POST /control/safesearch/disable` HTTP API is deprecated. Use the new
|
||||||
|
`PUT /control/safesearch/settings` API
|
||||||
|
- The `safesearch_enabled` property is deprecated in the following HTTP APIs:
|
||||||
|
- `GET /control/clients`;
|
||||||
|
- `POST /control/clients/add`;
|
||||||
|
- `POST /control/clients/update`;
|
||||||
|
- `GET /control/clients/find?ip0=...&ip1=...&ip2=...`.
|
||||||
|
|
||||||
|
Check `openapi/openapi.yaml` for more details.
|
||||||
|
- The `GET /control/stats_info` HTTP API; use the new `GET
|
||||||
|
/control/stats/config` API instead.
|
||||||
|
|
||||||
|
**NOTE:** If interval is custom then it will be equal to `90` days for
|
||||||
|
compatibility reasons. See `openapi/openapi.yaml` and `openapi/CHANGELOG.md`.
|
||||||
|
- The `POST /control/stats_config` HTTP API; use the new `PUT
|
||||||
|
/control/stats/config/update` API instead.
|
||||||
|
- The `GET /control/querylog_info` HTTP API; use the new `GET
|
||||||
|
/control/querylog/config` API instead.
|
||||||
|
|
||||||
|
**NOTE:** If interval is custom then it will be equal to `90` days for
|
||||||
|
compatibility reasons. See `openapi/openapi.yaml` and `openapi/CHANGELOG.md`.
|
||||||
|
- The `POST /control/querylog_config` HTTP API; use the new `PUT
|
||||||
|
/control/querylog/config/update` API instead.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Logging of the client's IP address after failed login attempts ([#5701]).
|
||||||
|
|
||||||
|
[#1163]: https://github.com/AdguardTeam/AdGuardHome/issues/1163
|
||||||
|
[#1333]: https://github.com/AdguardTeam/AdGuardHome/issues/1333
|
||||||
|
[#1472]: https://github.com/AdguardTeam/AdGuardHome/issues/1472
|
||||||
|
[#3290]: https://github.com/AdguardTeam/AdGuardHome/issues/3290
|
||||||
|
[#3459]: https://github.com/AdguardTeam/AdGuardHome/issues/3459
|
||||||
|
[#4262]: https://github.com/AdguardTeam/AdGuardHome/issues/4262
|
||||||
|
[#5567]: https://github.com/AdguardTeam/AdGuardHome/issues/5567
|
||||||
|
[#5701]: https://github.com/AdguardTeam/AdGuardHome/issues/5701
|
||||||
|
|
||||||
|
[ms-v0.107.28]: https://github.com/AdguardTeam/AdGuardHome/milestone/64?closed=1
|
||||||
|
[rfc6761]: https://www.rfc-editor.org/rfc/rfc6761
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.27] - 2023-04-05
|
||||||
|
|
||||||
|
See also the [v0.107.27 GitHub milestone][ms-v0.107.27].
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Go version has been updated to prevent the possibility of exploiting the
|
||||||
|
CVE-2023-24534, CVE-2023-24536, CVE-2023-24537, and CVE-2023-24538 Go
|
||||||
|
vulnerabilities fixed in [Go 1.19.8][go-1.19.8].
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Query log not showing all filtered queries when the “Filtered” log filter is
|
||||||
|
selected ([#5639]).
|
||||||
|
- Panic in empty hostname in the filter's URL ([#5631]).
|
||||||
|
- Panic caused by empty top-level domain name label in `/etc/hosts` files
|
||||||
|
([#5584]).
|
||||||
|
|
||||||
|
[#5584]: https://github.com/AdguardTeam/AdGuardHome/issues/5584
|
||||||
|
[#5631]: https://github.com/AdguardTeam/AdGuardHome/issues/5631
|
||||||
|
[#5639]: https://github.com/AdguardTeam/AdGuardHome/issues/5639
|
||||||
|
|
||||||
|
[go-1.19.8]: https://groups.google.com/g/golang-announce/c/Xdv6JL9ENs8/m/OV40vnafAwAJ
|
||||||
|
[ms-v0.107.27]: https://github.com/AdguardTeam/AdGuardHome/milestone/63?closed=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.26] - 2023-03-09
|
||||||
|
|
||||||
|
See also the [v0.107.26 GitHub milestone][ms-v0.107.26].
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Go version has been updated to prevent the possibility of exploiting the
|
||||||
|
CVE-2023-24532 Go vulnerability fixed in [Go 1.19.7][go-1.19.7].
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- The ability to set custom IP for EDNS Client Subnet by using the new
|
||||||
|
`dns.edns_client_subnet.use_custom` and `dns.edns_client_subnet.custom_ip`
|
||||||
|
properties ([#1472]). The UI changes are coming in the upcoming releases.
|
||||||
|
- The ability to use `dnstype` rules in the disallowed domains list ([#5468]).
|
||||||
|
This allows dropping requests based on their question types.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
#### Configuration Changes
|
||||||
|
|
||||||
|
- Property `edns_client_subnet`, which in schema versions 16 and earlier used
|
||||||
|
to be a part of the `dns` object, is now part of the `dns.edns_client_subnet`
|
||||||
|
object:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# BEFORE:
|
||||||
|
'dns':
|
||||||
|
# …
|
||||||
|
'edns_client_subnet': false
|
||||||
|
|
||||||
|
# AFTER:
|
||||||
|
'dns':
|
||||||
|
# …
|
||||||
|
'edns_client_subnet':
|
||||||
|
'enabled': false
|
||||||
|
'use_custom': false
|
||||||
|
'custom_ip': ''
|
||||||
|
```
|
||||||
|
|
||||||
|
To rollback this change, move the value of `dns.edns_client_subnet.enabled`
|
||||||
|
into the `dns.edns_client_subnet`, remove the properties
|
||||||
|
`dns.edns_client_subnet.enabled`, `dns.edns_client_subnet.use_custom`,
|
||||||
|
`dns.edns_client_subnet.custom_ip`, and change the `schema_version` back to
|
||||||
|
`16`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Obsolete value of the Interface MTU DHCP option is now omitted ([#5281]).
|
||||||
|
- Various dark theme bugs ([#5439], [#5441], [#5442], [#5515]).
|
||||||
|
- Automatic update on MIPS64 and little-endian 32-bit MIPS architectures
|
||||||
|
([#5270], [#5373]).
|
||||||
|
- Requirements to domain names in domain-specific upstream configurations have
|
||||||
|
been relaxed to meet those from [RFC 3696][rfc3696] ([#4884]).
|
||||||
|
- Failing service installation via script on FreeBSD ([#5431]).
|
||||||
|
|
||||||
|
[#1472]: https://github.com/AdguardTeam/AdGuardHome/issues/1472
|
||||||
|
[#4884]: https://github.com/AdguardTeam/AdGuardHome/issues/4884
|
||||||
|
[#5270]: https://github.com/AdguardTeam/AdGuardHome/issues/5270
|
||||||
|
[#5281]: https://github.com/AdguardTeam/AdGuardHome/issues/5281
|
||||||
|
[#5373]: https://github.com/AdguardTeam/AdGuardHome/issues/5373
|
||||||
|
[#5431]: https://github.com/AdguardTeam/AdGuardHome/issues/5431
|
||||||
|
[#5439]: https://github.com/AdguardTeam/AdGuardHome/issues/5439
|
||||||
|
[#5441]: https://github.com/AdguardTeam/AdGuardHome/issues/5441
|
||||||
|
[#5442]: https://github.com/AdguardTeam/AdGuardHome/issues/5442
|
||||||
|
[#5468]: https://github.com/AdguardTeam/AdGuardHome/issues/5468
|
||||||
|
[#5515]: https://github.com/AdguardTeam/AdGuardHome/issues/5515
|
||||||
|
|
||||||
|
[go-1.19.7]: https://groups.google.com/g/golang-announce/c/3-TpUx48iQY
|
||||||
|
[ms-v0.107.26]: https://github.com/AdguardTeam/AdGuardHome/milestone/62?closed=1
|
||||||
|
[rfc3696]: https://datatracker.ietf.org/doc/html/rfc3696
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.25] - 2023-02-21
|
||||||
|
|
||||||
|
See also the [v0.107.25 GitHub milestone][ms-v0.107.25].
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Panic when using unencrypted DNS-over-HTTPS ([#5518]).
|
||||||
|
|
||||||
|
[#5518]: https://github.com/AdguardTeam/AdGuardHome/issues/5518
|
||||||
|
|
||||||
|
[ms-v0.107.25]: https://github.com/AdguardTeam/AdGuardHome/milestone/61?closed=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.24] - 2023-02-15
|
||||||
|
|
||||||
|
See also the [v0.107.24 GitHub milestone][ms-v0.107.24].
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Go version has been updated, both because Go 1.18 has reached end of life an
|
||||||
|
to prevent the possibility of exploiting the Go vulnerabilities fixed in [Go
|
||||||
|
1.19.6][go-1.19.6].
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- The ability to disable statistics by using the new `statistics.enabled`
|
||||||
|
property. Previously it was necessary to set the `statistics_interval` to 0,
|
||||||
|
losing the previous value ([#1717], [#4299]).
|
||||||
|
- The ability to exclude domain names from the query log or statistics by using
|
||||||
|
the new `querylog.ignored` or `statistics.ignored` properties ([#1717],
|
||||||
|
[#4299]). The UI changes are coming in the upcoming releases.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
#### Configuration Changes
|
||||||
|
|
||||||
|
In this release, the schema version has changed from 14 to 16.
|
||||||
|
|
||||||
|
- Property `statistics_interval`, which in schema versions 15 and earlier used
|
||||||
|
to be a part of the `dns` object, is now a part of the `statistics` object:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# BEFORE:
|
||||||
|
'dns':
|
||||||
|
# …
|
||||||
|
'statistics_interval': 1
|
||||||
|
|
||||||
|
# AFTER:
|
||||||
|
'statistics':
|
||||||
|
# …
|
||||||
|
'interval': 1
|
||||||
|
```
|
||||||
|
|
||||||
|
To rollback this change, move the property back into the `dns` object and
|
||||||
|
change the `schema_version` back to `15`.
|
||||||
|
- The properties `dns.querylog_enabled`, `dns.querylog_file_enabled`,
|
||||||
|
`dns.querylog_interval`, and `dns.querylog_size_memory` have been moved to the
|
||||||
|
new `querylog` object.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# BEFORE:
|
||||||
|
'dns':
|
||||||
|
'querylog_enabled': true
|
||||||
|
'querylog_file_enabled': true
|
||||||
|
'querylog_interval': '2160h'
|
||||||
|
'querylog_size_memory': 1000
|
||||||
|
|
||||||
|
# AFTER:
|
||||||
|
'querylog':
|
||||||
|
'enabled': true
|
||||||
|
'file_enabled': true
|
||||||
|
'interval': '2160h'
|
||||||
|
'size_memory': 1000
|
||||||
|
'ignored': []
|
||||||
|
```
|
||||||
|
|
||||||
|
To rollback this change, rename and move properties back into the `dns`
|
||||||
|
object, remove `querylog` object and `querylog.ignored` property, and change
|
||||||
|
the `schema_version` back to `14`.
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
|
||||||
|
- Go 1.19 support. Future versions will require at least Go 1.20 to build.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Setting the AD (Authenticated Data) flag on responses that have the DO (DNSSEC
|
||||||
|
OK) flag set but not the AD flag ([#5479]).
|
||||||
|
- Client names resolved via reverse DNS not being updated ([#4939]).
|
||||||
|
- The icon for League Of Legends on the Blocked services page ([#5433]).
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Go 1.18 support, as it has reached end of life.
|
||||||
|
|
||||||
|
[#1717]: https://github.com/AdguardTeam/AdGuardHome/issues/1717
|
||||||
|
[#4299]: https://github.com/AdguardTeam/AdGuardHome/issues/4299
|
||||||
|
[#4939]: https://github.com/AdguardTeam/AdGuardHome/issues/4939
|
||||||
|
[#5433]: https://github.com/AdguardTeam/AdGuardHome/issues/5433
|
||||||
|
[#5479]: https://github.com/AdguardTeam/AdGuardHome/issues/5479
|
||||||
|
|
||||||
|
[go-1.19.6]: https://groups.google.com/g/golang-announce/c/V0aBFqaFs_E
|
||||||
|
[ms-v0.107.24]: https://github.com/AdguardTeam/AdGuardHome/milestone/60?closed=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.23] - 2023-02-01
|
||||||
|
|
||||||
|
See also the [v0.107.23 GitHub milestone][ms-v0.107.23].
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- DNS64 support ([#5117]). The function may be enabled with new `use_dns64`
|
||||||
|
property under `dns` object in the configuration along with `dns64_prefixes`,
|
||||||
|
the set of exclusion prefixes to filter AAAA responses. The Well-Known Prefix
|
||||||
|
(`64:ff9b::/96`) is used if no custom prefixes are specified.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Filtering rules with `*` as the hostname not working properly ([#5245]).
|
||||||
|
- Various dark theme bugs ([#5375]).
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- The “beta frontend” and the corresponding APIs. They never quite worked
|
||||||
|
properly, and the future new version of AdGuard Home API will probably be
|
||||||
|
different.
|
||||||
|
|
||||||
|
Correspondingly, the configuration parameter `beta_bind_port` has been removed
|
||||||
|
as well.
|
||||||
|
|
||||||
|
[#5117]: https://github.com/AdguardTeam/AdGuardHome/issues/5117
|
||||||
|
[#5245]: https://github.com/AdguardTeam/AdGuardHome/issues/5245
|
||||||
|
[#5375]: https://github.com/AdguardTeam/AdGuardHome/issues/5375
|
||||||
|
|
||||||
|
[ms-v0.107.23]: https://github.com/AdguardTeam/AdGuardHome/milestone/59?closed=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.107.22] - 2023-01-19
|
||||||
|
|
||||||
See also the [v0.107.22 GitHub milestone][ms-v0.107.22].
|
See also the [v0.107.22 GitHub milestone][ms-v0.107.22].
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Experimental Dark UI theme ([#613]).
|
||||||
|
- The new HTTP API `PUT /control/profile/update`, that updates current user
|
||||||
|
language and UI theme. The format of request body is described in
|
||||||
|
`openapi/openapi.yaml`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- The HTTP API `GET /control/profile` now returns enhanced object with
|
||||||
|
current user's name, language, and UI theme. The format of response body is
|
||||||
|
described in `openapi/openapi.yaml` and `openapi/CHANGELOG.md`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- `AdGuardHome --update` freezing when another instance of AdGuard Home is
|
||||||
|
running ([#4223], [#5191]).
|
||||||
|
- The `--update` flag performing an update even when there is no version change.
|
||||||
|
- Failing HTTPS redirection on saving the encryption settings ([#4898]).
|
||||||
|
- Zeroing rules counter of erroneously edited filtering rule lists ([#5290]).
|
||||||
|
- Filters updating strategy, which could sometimes lead to use of broken or
|
||||||
|
incompletely downloaded lists ([#5258]).
|
||||||
|
|
||||||
|
[#613]: https://github.com/AdguardTeam/AdGuardHome/issues/613
|
||||||
|
[#5191]: https://github.com/AdguardTeam/AdGuardHome/issues/5191
|
||||||
|
[#5290]: https://github.com/AdguardTeam/AdGuardHome/issues/5290
|
||||||
|
[#5258]: https://github.com/AdguardTeam/AdGuardHome/issues/5258
|
||||||
|
|
||||||
[ms-v0.107.22]: https://github.com/AdguardTeam/AdGuardHome/milestone/58?closed=1
|
[ms-v0.107.22]: https://github.com/AdguardTeam/AdGuardHome/milestone/58?closed=1
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [v0.107.21] - 2122-12-15
|
## [v0.107.21] - 2022-12-15
|
||||||
|
|
||||||
See also the [v0.107.21 GitHub milestone][ms-v0.107.21].
|
See also the [v0.107.21 GitHub milestone][ms-v0.107.21].
|
||||||
|
|
||||||
@@ -42,22 +754,11 @@ See also the [v0.107.21 GitHub milestone][ms-v0.107.21].
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- `AdGuardHome --update` freezing when another instance of AdGuard Home is
|
|
||||||
running ([#4223], [#5191]).
|
|
||||||
- The `--update` flag performing an update even with the same version.
|
|
||||||
- Failing HTTPS redirection on saving the encryption settings ([#4898]).
|
|
||||||
- Zeroing rules counter of erroneusly edited filtering rule lists ([#5290]).
|
|
||||||
- Filters updating strategy, which could sometimes lead to use of broken or
|
|
||||||
incompletely downloaded lists ([#5258]).
|
|
||||||
- Errors popping up during updates of settings, which could sometimes cause the
|
- Errors popping up during updates of settings, which could sometimes cause the
|
||||||
server to stop responding ([#5251]).
|
server to stop responding ([#5251]).
|
||||||
|
|
||||||
[#4898]: https://github.com/AdguardTeam/AdGuardHome/issues/4898
|
|
||||||
[#5191]: https://github.com/AdguardTeam/AdGuardHome/issues/5191
|
|
||||||
[#5238]: https://github.com/AdguardTeam/AdGuardHome/issues/5238
|
[#5238]: https://github.com/AdguardTeam/AdGuardHome/issues/5238
|
||||||
[#5251]: https://github.com/AdguardTeam/AdGuardHome/issues/5251
|
[#5251]: https://github.com/AdguardTeam/AdGuardHome/issues/5251
|
||||||
[#5258]: https://github.com/AdguardTeam/AdGuardHome/issues/5258
|
|
||||||
[#5290]: https://github.com/AdguardTeam/AdGuardHome/issues/5290
|
|
||||||
|
|
||||||
[ms-v0.107.21]: https://github.com/AdguardTeam/AdGuardHome/milestone/57?closed=1
|
[ms-v0.107.21]: https://github.com/AdguardTeam/AdGuardHome/milestone/57?closed=1
|
||||||
|
|
||||||
@@ -635,7 +1336,7 @@ In this release, the schema version has changed from 12 to 14.
|
|||||||
hosts: true
|
hosts: true
|
||||||
```
|
```
|
||||||
|
|
||||||
The value for `clients.runtime_sources.rdns` field is taken from
|
The value for `clients.runtime_sources.rdns` property is taken from
|
||||||
`dns.resolve_clients` property. To rollback this change, remove the
|
`dns.resolve_clients` property. To rollback this change, remove the
|
||||||
`runtime_sources` property, move the contents of `persistent` into the
|
`runtime_sources` property, move the contents of `persistent` into the
|
||||||
`clients` itself, the value of `clients.runtime_sources.rdns` into the
|
`clients` itself, the value of `clients.runtime_sources.rdns` into the
|
||||||
@@ -885,7 +1586,7 @@ See also the [v0.107.0 GitHub milestone][ms-v0.107.0].
|
|||||||
log entries concerning cached responses won't include that information.
|
log entries concerning cached responses won't include that information.
|
||||||
- Finnish and Ukrainian localizations.
|
- Finnish and Ukrainian localizations.
|
||||||
- Setting the timeout for IP address pinging in the "Fastest IP address" mode
|
- Setting the timeout for IP address pinging in the "Fastest IP address" mode
|
||||||
through the new `fastest_timeout` field in the configuration file ([#1992]).
|
through the new `fastest_timeout` property in the configuration file ([#1992]).
|
||||||
- Static IP address detection on FreeBSD ([#3289]).
|
- Static IP address detection on FreeBSD ([#3289]).
|
||||||
- Optimistic cache ([#2145]).
|
- Optimistic cache ([#2145]).
|
||||||
- New possible value of `6h` for `querylog_interval` property ([#2504]).
|
- New possible value of `6h` for `querylog_interval` property ([#2504]).
|
||||||
@@ -971,7 +1672,6 @@ In this release, the schema version has changed from 10 to 12.
|
|||||||
|
|
||||||
To rollback this change, convert the property back into days and change the
|
To rollback this change, convert the property back into days and change the
|
||||||
`schema_version` back to `11`.
|
`schema_version` back to `11`.
|
||||||
|
|
||||||
- Property `rlimit_nofile`, which in schema versions 10 and earlier used to be
|
- Property `rlimit_nofile`, which in schema versions 10 and earlier used to be
|
||||||
on the top level, is now moved to the new `os` object:
|
on the top level, is now moved to the new `os` object:
|
||||||
|
|
||||||
@@ -1302,7 +2002,7 @@ See also the [v0.105.2 GitHub milestone][ms-v0.105.2].
|
|||||||
- Inconsistent responses for messages with EDNS0 and AD when DNS caching is
|
- Inconsistent responses for messages with EDNS0 and AD when DNS caching is
|
||||||
enabled ([#2600]).
|
enabled ([#2600]).
|
||||||
- Incomplete OpenWrt detection ([#2757]).
|
- Incomplete OpenWrt detection ([#2757]).
|
||||||
- DHCP lease's `expired` field incorrect time format ([#2692]).
|
- DHCP lease's `expired` property incorrect time format ([#2692]).
|
||||||
- Incomplete DNS upstreams validation ([#2674]).
|
- Incomplete DNS upstreams validation ([#2674]).
|
||||||
- Wrong parsing of DHCP options of the `ip` type ([#2688]).
|
- Wrong parsing of DHCP options of the `ip` type ([#2688]).
|
||||||
|
|
||||||
@@ -1339,8 +2039,8 @@ See also the [v0.105.1 GitHub milestone][ms-v0.105.1].
|
|||||||
the machine has a static IP.
|
the machine has a static IP.
|
||||||
- Optical issue on custom rules ([#2641]).
|
- Optical issue on custom rules ([#2641]).
|
||||||
- Occasional crashes during startup.
|
- Occasional crashes during startup.
|
||||||
- The field `"range_start"` in the `GET /control/dhcp/status` HTTP API response
|
- The property `"range_start"` in the `GET /control/dhcp/status` HTTP API
|
||||||
is now correctly named again ([#2678]).
|
response is now correctly named again ([#2678]).
|
||||||
- DHCPv6 server's `ra_slaac_only` and `ra_allow_slaac` properties aren't reset
|
- DHCPv6 server's `ra_slaac_only` and `ra_allow_slaac` properties aren't reset
|
||||||
to `false` on update anymore ([#2653]).
|
to `false` on update anymore ([#2653]).
|
||||||
- The `Vary` header is now added along with `Access-Control-Allow-Origin` to
|
- The `Vary` header is now added along with `Access-Control-Allow-Origin` to
|
||||||
@@ -1410,7 +2110,7 @@ See also the [v0.105.0 GitHub milestone][ms-v0.105.0].
|
|||||||
|
|
||||||
- Go 1.14 support. v0.106.0 will require at least Go 1.15 to build.
|
- Go 1.14 support. v0.106.0 will require at least Go 1.15 to build.
|
||||||
- The `darwin/386` port. It will be removed in v0.106.0.
|
- The `darwin/386` port. It will be removed in v0.106.0.
|
||||||
- The `"rule"` and `"filter_id"` fields in `GET /filtering/check_host` and
|
- The `"rule"` and `"filter_id"` property in `GET /filtering/check_host` and
|
||||||
`GET /querylog` responses. They will be removed in v0.106.0 ([#2102]).
|
`GET /querylog` responses. They will be removed in v0.106.0 ([#2102]).
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
@@ -1518,11 +2218,23 @@ See also the [v0.104.2 GitHub milestone][ms-v0.104.2].
|
|||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.22...HEAD
|
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.34...HEAD
|
||||||
[v0.107.22]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.21...v0.107.22
|
[v0.107.34]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.33...v0.107.34
|
||||||
-->
|
-->
|
||||||
|
|
||||||
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.21...HEAD
|
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.33...HEAD
|
||||||
|
[v0.107.33]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.32...v0.107.33
|
||||||
|
[v0.107.32]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.31...v0.107.32
|
||||||
|
[v0.107.31]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.30...v0.107.31
|
||||||
|
[v0.107.30]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.29...v0.107.30
|
||||||
|
[v0.107.29]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.28...v0.107.29
|
||||||
|
[v0.107.28]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.27...v0.107.28
|
||||||
|
[v0.107.27]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.26...v0.107.27
|
||||||
|
[v0.107.26]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.25...v0.107.26
|
||||||
|
[v0.107.25]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.24...v0.107.25
|
||||||
|
[v0.107.24]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.23...v0.107.24
|
||||||
|
[v0.107.23]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.22...v0.107.23
|
||||||
|
[v0.107.22]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.21...v0.107.22
|
||||||
[v0.107.21]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.20...v0.107.21
|
[v0.107.21]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.20...v0.107.21
|
||||||
[v0.107.20]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.19...v0.107.20
|
[v0.107.20]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.19...v0.107.20
|
||||||
[v0.107.19]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.18...v0.107.19
|
[v0.107.19]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.18...v0.107.19
|
||||||
|
|||||||
47
Makefile
47
Makefile
@@ -4,18 +4,26 @@
|
|||||||
# See https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html.
|
# See https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html.
|
||||||
.POSIX:
|
.POSIX:
|
||||||
|
|
||||||
CHANNEL = development
|
# This comment is used to simplify checking local copies of the
|
||||||
CLIENT_BETA_DIR = client2
|
# Makefile. Bump this number every time a significant change is made to
|
||||||
CLIENT_DIR = client
|
# this Makefile.
|
||||||
COMMIT = $$( git rev-parse --short HEAD )
|
#
|
||||||
DIST_DIR = dist
|
# AdGuard-Project-Version: 2
|
||||||
# Don't name this macro "GO", because GNU Make apparenly makes it an
|
|
||||||
# exported environment variable with the literal value of "${GO:-go}",
|
# Don't name these macros "GO" etc., because GNU Make apparently makes
|
||||||
# which is not what we need. Use a dot in the name to make sure that
|
# them exported environment variables with the literal value of
|
||||||
# users don't have an environment variable with the same name.
|
# "${GO:-go}" and so on, which is not what we need. Use a dot in the
|
||||||
|
# name to make sure that users don't have an environment variable with
|
||||||
|
# the same name.
|
||||||
#
|
#
|
||||||
# See https://unix.stackexchange.com/q/646255/105635.
|
# See https://unix.stackexchange.com/q/646255/105635.
|
||||||
GO.MACRO = $${GO:-go}
|
GO.MACRO = $${GO:-go}
|
||||||
|
VERBOSE.MACRO = $${VERBOSE:-0}
|
||||||
|
|
||||||
|
CHANNEL = development
|
||||||
|
CLIENT_DIR = client
|
||||||
|
COMMIT = $$( git rev-parse --short HEAD )
|
||||||
|
DIST_DIR = dist
|
||||||
GOPROXY = https://goproxy.cn|https://proxy.golang.org|direct
|
GOPROXY = https://goproxy.cn|https://proxy.golang.org|direct
|
||||||
GOSUMDB = sum.golang.google.cn
|
GOSUMDB = sum.golang.google.cn
|
||||||
GPG_KEY = devteam@adguard.com
|
GPG_KEY = devteam@adguard.com
|
||||||
@@ -26,13 +34,8 @@ NPM_INSTALL_FLAGS = $(NPM_FLAGS) --quiet --no-progress --ignore-engines\
|
|||||||
--ignore-optional --ignore-platform --ignore-scripts
|
--ignore-optional --ignore-platform --ignore-scripts
|
||||||
RACE = 0
|
RACE = 0
|
||||||
SIGN = 1
|
SIGN = 1
|
||||||
VERBOSE = 0
|
|
||||||
VERSION = v0.0.0
|
VERSION = v0.0.0
|
||||||
YARN = yarn
|
YARN = yarn
|
||||||
YARN_FLAGS = --cwd $(CLIENT_BETA_DIR)
|
|
||||||
YARN_INSTALL_FLAGS = $(YARN_FLAGS) --network-timeout 120000 --silent\
|
|
||||||
--ignore-engines --ignore-optional --ignore-platform\
|
|
||||||
--ignore-scripts
|
|
||||||
|
|
||||||
NEXTAPI = 0
|
NEXTAPI = 0
|
||||||
|
|
||||||
@@ -64,18 +67,18 @@ ENV = env\
|
|||||||
RACE='$(RACE)'\
|
RACE='$(RACE)'\
|
||||||
SIGN='$(SIGN)'\
|
SIGN='$(SIGN)'\
|
||||||
NEXTAPI='$(NEXTAPI)'\
|
NEXTAPI='$(NEXTAPI)'\
|
||||||
VERBOSE='$(VERBOSE)'\
|
VERBOSE="$(VERBOSE.MACRO)"\
|
||||||
VERSION='$(VERSION)'\
|
VERSION='$(VERSION)'\
|
||||||
|
|
||||||
# Keep the line above blank.
|
# Keep the line above blank.
|
||||||
|
|
||||||
# Keep this target first, so that a naked make invocation triggers
|
# Keep this target first, so that a naked make invocation triggers a
|
||||||
# a full build.
|
# full build.
|
||||||
build: deps quick-build
|
build: deps quick-build
|
||||||
|
|
||||||
quick-build: js-build go-build
|
quick-build: js-build go-build
|
||||||
|
|
||||||
ci: deps test
|
ci: deps test go-bench go-fuzz
|
||||||
|
|
||||||
deps: js-deps go-deps
|
deps: js-deps go-deps
|
||||||
lint: js-lint go-lint
|
lint: js-lint go-lint
|
||||||
@@ -93,20 +96,18 @@ init: ; git config core.hooksPath ./scripts/hooks
|
|||||||
|
|
||||||
js-build:
|
js-build:
|
||||||
$(NPM) $(NPM_FLAGS) run build-prod
|
$(NPM) $(NPM_FLAGS) run build-prod
|
||||||
$(YARN) $(YARN_FLAGS) build
|
|
||||||
js-deps:
|
js-deps:
|
||||||
$(NPM) $(NPM_INSTALL_FLAGS) ci
|
$(NPM) $(NPM_INSTALL_FLAGS) ci
|
||||||
$(YARN) $(YARN_INSTALL_FLAGS) install
|
|
||||||
|
|
||||||
# TODO(a.garipov): Remove the legacy client tasks support once the new
|
# TODO(a.garipov): Remove the legacy client tasks support once the new
|
||||||
# client is done and the old one is removed.
|
# client is done and the old one is removed.
|
||||||
js-lint: ; $(NPM) $(NPM_FLAGS) run lint
|
js-lint: ; $(NPM) $(NPM_FLAGS) run lint
|
||||||
js-test: ; $(NPM) $(NPM_FLAGS) run test
|
js-test: ; $(NPM) $(NPM_FLAGS) run test
|
||||||
js-beta-lint: ; $(YARN) $(YARN_FLAGS) lint
|
|
||||||
js-beta-test: ; # TODO(v.abdulmyanov): Add tests for the new client.
|
|
||||||
|
|
||||||
|
go-bench: ; $(ENV) "$(SHELL)" ./scripts/make/go-bench.sh
|
||||||
go-build: ; $(ENV) "$(SHELL)" ./scripts/make/go-build.sh
|
go-build: ; $(ENV) "$(SHELL)" ./scripts/make/go-build.sh
|
||||||
go-deps: ; $(ENV) "$(SHELL)" ./scripts/make/go-deps.sh
|
go-deps: ; $(ENV) "$(SHELL)" ./scripts/make/go-deps.sh
|
||||||
|
go-fuzz: ; $(ENV) "$(SHELL)" ./scripts/make/go-fuzz.sh
|
||||||
go-lint: ; $(ENV) "$(SHELL)" ./scripts/make/go-lint.sh
|
go-lint: ; $(ENV) "$(SHELL)" ./scripts/make/go-lint.sh
|
||||||
go-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-tools.sh
|
go-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-tools.sh
|
||||||
|
|
||||||
@@ -128,4 +129,4 @@ go-os-check:
|
|||||||
openapi-lint: ; cd ./openapi/ && $(YARN) test
|
openapi-lint: ; cd ./openapi/ && $(YARN) test
|
||||||
openapi-show: ; cd ./openapi/ && $(YARN) start
|
openapi-show: ; cd ./openapi/ && $(YARN) start
|
||||||
|
|
||||||
txt-lint: ; $(ENV) "$(SHELL)" ./scripts/make/txt-lint.sh
|
txt-lint: ; $(ENV) "$(SHELL)" ./scripts/make/txt-lint.sh
|
||||||
|
|||||||
20
README.md
20
README.md
@@ -81,12 +81,24 @@ code.
|
|||||||
|
|
||||||
### <a href="#automated-install-linux-and-mac" id="automated-install-linux-and-mac" name="automated-install-linux-and-mac">Automated install (Unix)</a>
|
### <a href="#automated-install-linux-and-mac" id="automated-install-linux-and-mac" name="automated-install-linux-and-mac">Automated install (Unix)</a>
|
||||||
|
|
||||||
Run the following command in your terminal:
|
To install with `curl` run the following command:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
|
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To install with `wget` run the following command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
wget --no-verbose -O - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
|
||||||
|
```
|
||||||
|
|
||||||
|
To install with `fetch` run the following command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
fetch -o - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
|
||||||
|
```
|
||||||
|
|
||||||
The script also accepts some options:
|
The script also accepts some options:
|
||||||
|
|
||||||
* `-c <channel>` to use specified channel;
|
* `-c <channel>` to use specified channel;
|
||||||
@@ -249,7 +261,7 @@ Run `make init` to prepare the development environment.
|
|||||||
|
|
||||||
You will need this to build AdGuard Home:
|
You will need this to build AdGuard Home:
|
||||||
|
|
||||||
* [Go](https://golang.org/dl/) v1.18 or later;
|
* [Go](https://golang.org/dl/) v1.19 or later;
|
||||||
* [Node.js](https://nodejs.org/en/download/) v10.16.2 or later;
|
* [Node.js](https://nodejs.org/en/download/) v10.16.2 or later;
|
||||||
* [npm](https://www.npmjs.com/) v6.14 or later;
|
* [npm](https://www.npmjs.com/) v6.14 or later;
|
||||||
* [yarn](https://yarnpkg.com/) v1.22.5 or later.
|
* [yarn](https://yarnpkg.com/) v1.22.5 or later.
|
||||||
@@ -454,6 +466,10 @@ bug or implementing the feature.
|
|||||||
Home](https://github.com/ebrianne/adguard-exporter) by
|
Home](https://github.com/ebrianne/adguard-exporter) by
|
||||||
[@ebrianne](https://github.com/ebrianne).
|
[@ebrianne](https://github.com/ebrianne).
|
||||||
|
|
||||||
|
* [Terminal-based, real-time traffic monitoring and statistics for your AdGuard Home
|
||||||
|
instance](https://github.com/Lissy93/AdGuardian-Term) by
|
||||||
|
[@Lissy93](https://github.com/Lissy93)
|
||||||
|
|
||||||
* [AdGuard Home on GLInet
|
* [AdGuard Home on GLInet
|
||||||
routers](https://forum.gl-inet.com/t/adguardhome-on-gl-routers/10664) by
|
routers](https://forum.gl-inet.com/t/adguardhome-on-gl-routers/10664) by
|
||||||
[Gl-Inet](https://gl-inet.com/).
|
[Gl-Inet](https://gl-inet.com/).
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
---
|
|
||||||
!include test.yaml
|
|
||||||
|
|
||||||
---
|
---
|
||||||
!include release.yaml
|
!include release.yaml
|
||||||
|
|
||||||
|
---
|
||||||
|
!include snapcraft.yaml
|
||||||
|
|
||||||
|
---
|
||||||
|
!include test.yaml
|
||||||
|
|||||||
@@ -1,340 +1,290 @@
|
|||||||
---
|
---
|
||||||
'version': 2
|
'version': 2
|
||||||
'plan':
|
'plan':
|
||||||
'project-key': 'AGH'
|
'project-key': 'AGH'
|
||||||
'key': 'AGHBSNAPSPECS'
|
'key': 'AGHBSNAPSPECS'
|
||||||
'name': 'AdGuard Home - Build and publish release'
|
'name': 'AdGuard Home - Build and publish release'
|
||||||
# Make sure to sync any changes with the branch overrides below.
|
# Make sure to sync any changes with the branch overrides below.
|
||||||
'variables':
|
'variables':
|
||||||
'channel': 'edge'
|
'channel': 'edge'
|
||||||
'dockerGo': 'adguard/golang-ubuntu:5.4'
|
'dockerGo': 'adguard/golang-ubuntu:6.7'
|
||||||
|
|
||||||
'stages':
|
'stages':
|
||||||
- 'Build frontend':
|
- 'Build frontend':
|
||||||
'manual': false
|
'manual': false
|
||||||
'final': false
|
'final': false
|
||||||
'jobs':
|
'jobs':
|
||||||
- 'Build frontend'
|
- 'Build frontend'
|
||||||
|
|
||||||
- 'Make release':
|
- 'Make release':
|
||||||
'manual': false
|
'manual': false
|
||||||
'final': false
|
'final': false
|
||||||
'jobs':
|
'jobs':
|
||||||
- 'Make release'
|
- 'Make release'
|
||||||
|
|
||||||
- 'Make and publish docker':
|
- 'Make and publish docker':
|
||||||
'manual': false
|
'manual': false
|
||||||
'final': false
|
'final': false
|
||||||
'jobs':
|
'jobs':
|
||||||
- 'Make and publish docker'
|
- 'Make and publish docker'
|
||||||
|
|
||||||
- 'Publish to static storage':
|
- 'Publish to static storage':
|
||||||
'manual': false
|
'manual': false
|
||||||
'final': false
|
'final': false
|
||||||
'jobs':
|
'jobs':
|
||||||
- 'Publish to static storage'
|
- 'Publish to static storage'
|
||||||
|
|
||||||
- 'Publish to Snapstore':
|
- 'Publish to GitHub Releases':
|
||||||
'manual': false
|
'manual': false
|
||||||
'final': false
|
'final': false
|
||||||
'jobs':
|
'jobs':
|
||||||
- 'Publish to Snapstore'
|
- 'Publish to GitHub Releases'
|
||||||
|
|
||||||
- 'Publish to GitHub Releases':
|
|
||||||
'manual': false
|
|
||||||
'final': false
|
|
||||||
'jobs':
|
|
||||||
- 'Publish to GitHub Releases'
|
|
||||||
|
|
||||||
'Build frontend':
|
'Build frontend':
|
||||||
'docker':
|
'docker':
|
||||||
'image': '${bamboo.dockerGo}'
|
'image': '${bamboo.dockerGo}'
|
||||||
'volumes':
|
'volumes':
|
||||||
'${system.YARN_DIR}': '${bamboo.cacheYarn}'
|
'${system.YARN_DIR}': '${bamboo.cacheYarn}'
|
||||||
'key': 'BF'
|
'key': 'BF'
|
||||||
'other':
|
'other':
|
||||||
'clean-working-dir': true
|
'clean-working-dir': true
|
||||||
'tasks':
|
'tasks':
|
||||||
- 'checkout':
|
- 'checkout':
|
||||||
'force-clean-build': true
|
'force-clean-build': true
|
||||||
- 'script':
|
- 'script':
|
||||||
'interpreter': 'SHELL'
|
'interpreter': 'SHELL'
|
||||||
'scripts':
|
'scripts':
|
||||||
- |
|
- |
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e -f -u -x
|
set -e -f -u -x
|
||||||
|
|
||||||
# Explicitly checkout the revision that we need.
|
# Explicitly checkout the revision that we need.
|
||||||
git checkout "${bamboo.repository.revision.number}"
|
git checkout "${bamboo.repository.revision.number}"
|
||||||
|
|
||||||
make js-deps js-build
|
make js-deps js-build
|
||||||
'artifacts':
|
'artifacts':
|
||||||
- 'name': 'AdGuardHome frontend'
|
- 'name': 'AdGuardHome frontend'
|
||||||
'pattern': 'build*/**'
|
'pattern': 'build/**'
|
||||||
'shared': true
|
'shared': true
|
||||||
'required': true
|
'required': true
|
||||||
'requirements':
|
'requirements':
|
||||||
- 'adg-docker': 'true'
|
- 'adg-docker': 'true'
|
||||||
|
|
||||||
'Make release':
|
'Make release':
|
||||||
'docker':
|
'docker':
|
||||||
'image': '${bamboo.dockerGo}'
|
'image': '${bamboo.dockerGo}'
|
||||||
'volumes':
|
'volumes':
|
||||||
'${system.GO_CACHE_DIR}': '${bamboo.cacheGo}'
|
'${system.GO_CACHE_DIR}': '${bamboo.cacheGo}'
|
||||||
'${system.GO_PKG_CACHE_DIR}': '${bamboo.cacheGoPkg}'
|
'${system.GO_PKG_CACHE_DIR}': '${bamboo.cacheGoPkg}'
|
||||||
'key': 'MR'
|
'key': 'MR'
|
||||||
'other':
|
'other':
|
||||||
'clean-working-dir': true
|
'clean-working-dir': true
|
||||||
'tasks':
|
'tasks':
|
||||||
- 'checkout':
|
- 'checkout':
|
||||||
'force-clean-build': true
|
'force-clean-build': true
|
||||||
- 'script':
|
- 'script':
|
||||||
'interpreter': 'SHELL'
|
'interpreter': 'SHELL'
|
||||||
'scripts':
|
'scripts':
|
||||||
- |
|
- |
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e -f -u -x
|
set -e -f -u -x
|
||||||
|
|
||||||
# Explicitly checkout the revision that we need.
|
# Explicitly checkout the revision that we need.
|
||||||
git checkout "${bamboo.repository.revision.number}"
|
git checkout "${bamboo.repository.revision.number}"
|
||||||
|
|
||||||
# Run the build with the specified channel.
|
# Run the build with the specified channel.
|
||||||
echo "${bamboo.gpgSecretKeyPart1}${bamboo.gpgSecretKeyPart2}"\
|
echo "${bamboo.gpgSecretKeyPart1}${bamboo.gpgSecretKeyPart2}"\
|
||||||
| awk '{ gsub(/\\n/, "\n"); print; }'\
|
| awk '{ gsub(/\\n/, "\n"); print; }'\
|
||||||
| gpg --import --batch --yes
|
| gpg --import --batch --yes
|
||||||
|
|
||||||
make\
|
make\
|
||||||
CHANNEL=${bamboo.channel}\
|
CHANNEL=${bamboo.channel}\
|
||||||
GPG_KEY_PASSPHRASE=${bamboo.gpgPassword}\
|
GPG_KEY_PASSPHRASE=${bamboo.gpgPassword}\
|
||||||
FRONTEND_PREBUILT=1\
|
FRONTEND_PREBUILT=1\
|
||||||
VERBOSE=1\
|
PARALLELISM=1\
|
||||||
build-release
|
VERBOSE=2\
|
||||||
# TODO(a.garipov): Use more fine-grained artifact rules.
|
build-release
|
||||||
'artifacts':
|
# TODO(a.garipov): Use more fine-grained artifact rules.
|
||||||
- 'name': 'AdGuardHome dists'
|
'artifacts':
|
||||||
'pattern': 'dist/**'
|
- 'name': 'AdGuardHome dists'
|
||||||
'shared': true
|
'pattern': 'dist/**'
|
||||||
'required': true
|
'shared': true
|
||||||
'requirements':
|
'required': true
|
||||||
- 'adg-docker': 'true'
|
'requirements':
|
||||||
|
- 'adg-docker': 'true'
|
||||||
|
|
||||||
'Make and publish docker':
|
'Make and publish docker':
|
||||||
'key': 'MPD'
|
'key': 'MPD'
|
||||||
'other':
|
'other':
|
||||||
'clean-working-dir': true
|
'clean-working-dir': true
|
||||||
'tasks':
|
'tasks':
|
||||||
- 'checkout':
|
- 'checkout':
|
||||||
'force-clean-build': true
|
'force-clean-build': true
|
||||||
- 'script':
|
- 'script':
|
||||||
'interpreter': 'SHELL'
|
'interpreter': 'SHELL'
|
||||||
'scripts':
|
'scripts':
|
||||||
- |
|
- |
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e -f -u -x
|
set -e -f -u -x
|
||||||
|
|
||||||
# Explicitly checkout the revision that we need.
|
COMMIT="${bamboo.repository.revision.number}"
|
||||||
git checkout "${bamboo.repository.revision.number}"
|
export COMMIT
|
||||||
|
readonly COMMIT
|
||||||
|
|
||||||
# Install Qemu, create builder.
|
# Explicitly checkout the revision that we need.
|
||||||
docker version -f '{{ .Server.Experimental }}'
|
git checkout "$COMMIT"
|
||||||
docker buildx rm buildx-builder || :
|
|
||||||
docker buildx create --name buildx-builder --driver docker-container\
|
|
||||||
--use
|
|
||||||
docker buildx inspect --bootstrap
|
|
||||||
|
|
||||||
# Login to DockerHub.
|
# Install Qemu, create builder.
|
||||||
docker login -u="${bamboo.dockerHubUsername}"\
|
docker version -f '{{ .Server.Experimental }}'
|
||||||
-p="${bamboo.dockerHubPassword}"
|
docker buildx rm buildx-builder || :
|
||||||
|
docker buildx create --name buildx-builder --driver docker-container\
|
||||||
|
--use
|
||||||
|
docker buildx inspect --bootstrap
|
||||||
|
|
||||||
# Boot the builder.
|
# Login to DockerHub.
|
||||||
docker buildx inspect --bootstrap
|
docker login -u="${bamboo.dockerHubUsername}"\
|
||||||
|
-p="${bamboo.dockerHubPassword}"
|
||||||
|
|
||||||
# Print Docker info.
|
# Boot the builder.
|
||||||
docker info
|
docker buildx inspect --bootstrap
|
||||||
|
|
||||||
# Prepare and push the build.
|
# Print Docker info.
|
||||||
make\
|
docker info
|
||||||
CHANNEL="${bamboo.channel}"\
|
|
||||||
DOCKER_IMAGE_NAME='adguard/adguardhome'\
|
# Prepare and push the build.
|
||||||
DOCKER_OUTPUT="type=image,name=adguard/adguardhome,push=true"\
|
env\
|
||||||
VERBOSE='1'\
|
CHANNEL="${bamboo.channel}"\
|
||||||
build-docker
|
DIST_DIR='dist'\
|
||||||
'environment':
|
DOCKER_IMAGE_NAME='adguard/adguardhome'\
|
||||||
DOCKER_CLI_EXPERIMENTAL=enabled
|
DOCKER_OUTPUT="type=image,name=adguard/adguardhome,push=true"\
|
||||||
'final-tasks':
|
VERBOSE='1'\
|
||||||
- 'clean'
|
sh ./scripts/make/build-docker.sh
|
||||||
'requirements':
|
'environment':
|
||||||
- 'adg-docker': 'true'
|
DOCKER_CLI_EXPERIMENTAL=enabled
|
||||||
|
'final-tasks':
|
||||||
|
- 'clean'
|
||||||
|
'requirements':
|
||||||
|
- 'adg-docker': 'true'
|
||||||
|
|
||||||
'Publish to static storage':
|
'Publish to static storage':
|
||||||
'key': 'PUB'
|
'key': 'PUB'
|
||||||
'other':
|
'other':
|
||||||
'clean-working-dir': true
|
'clean-working-dir': true
|
||||||
'tasks':
|
'tasks':
|
||||||
- 'clean'
|
- 'clean'
|
||||||
- 'checkout':
|
- 'checkout':
|
||||||
'repository': 'bamboo-deploy-publisher'
|
'repository': 'bamboo-deploy-publisher'
|
||||||
'path': 'bamboo-deploy-publisher'
|
'path': 'bamboo-deploy-publisher'
|
||||||
'force-clean-build': true
|
'force-clean-build': true
|
||||||
- 'script':
|
- 'script':
|
||||||
'interpreter': 'SHELL'
|
'interpreter': 'SHELL'
|
||||||
'scripts':
|
'scripts':
|
||||||
- |
|
- |
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e -f -u -x
|
set -e -f -u -x
|
||||||
|
|
||||||
cd ./dist/
|
cd ./dist/
|
||||||
|
|
||||||
CHANNEL="${bamboo.channel}"
|
CHANNEL="${bamboo.channel}"
|
||||||
export CHANNEL
|
export CHANNEL
|
||||||
|
|
||||||
../bamboo-deploy-publisher/deploy.sh adguard-home-"$CHANNEL"
|
../bamboo-deploy-publisher/deploy.sh adguard-home-"$CHANNEL"
|
||||||
'final-tasks':
|
'final-tasks':
|
||||||
- 'clean'
|
- 'clean'
|
||||||
'requirements':
|
'requirements':
|
||||||
- 'adg-docker': 'true'
|
- 'adg-docker': 'true'
|
||||||
|
|
||||||
'Publish to Snapstore':
|
|
||||||
'docker':
|
|
||||||
'image': '${bamboo.dockerGo}'
|
|
||||||
'key': 'PTS'
|
|
||||||
'other':
|
|
||||||
'clean-working-dir': true
|
|
||||||
'tasks':
|
|
||||||
- 'clean'
|
|
||||||
- 'checkout':
|
|
||||||
'repository': 'bamboo-deploy-publisher'
|
|
||||||
'path': 'bamboo-deploy-publisher'
|
|
||||||
'force-clean-build': true
|
|
||||||
- 'script':
|
|
||||||
'interpreter': 'SHELL'
|
|
||||||
'scripts':
|
|
||||||
- |
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e -f -u -x
|
|
||||||
|
|
||||||
cd ./dist/
|
|
||||||
|
|
||||||
channel="${bamboo.channel}"
|
|
||||||
readonly channel
|
|
||||||
case "$channel"
|
|
||||||
in
|
|
||||||
('release')
|
|
||||||
snapchannel='candidate'
|
|
||||||
;;
|
|
||||||
('beta')
|
|
||||||
snapchannel='beta'
|
|
||||||
;;
|
|
||||||
('edge')
|
|
||||||
snapchannel='edge'
|
|
||||||
;;
|
|
||||||
(*)
|
|
||||||
echo "invalid channel '$channel'"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
env\
|
|
||||||
SNAPCRAFT_CHANNEL="$snapchannel"\
|
|
||||||
SNAPCRAFT_EMAIL="${bamboo.snapcraftEmail}"\
|
|
||||||
SNAPCRAFT_MACAROON="${bamboo.snapcraftMacaroonPassword}"\
|
|
||||||
SNAPCRAFT_UBUNTU_DISCHARGE="${bamboo.snapcraftUbuntuDischargePassword}"\
|
|
||||||
../bamboo-deploy-publisher/deploy.sh adguard-home-snap
|
|
||||||
'final-tasks':
|
|
||||||
- 'clean'
|
|
||||||
'requirements':
|
|
||||||
- 'adg-docker': 'true'
|
|
||||||
|
|
||||||
'Publish to GitHub Releases':
|
'Publish to GitHub Releases':
|
||||||
'key': 'PTGR'
|
'key': 'PTGR'
|
||||||
'other':
|
'other':
|
||||||
'clean-working-dir': true
|
'clean-working-dir': true
|
||||||
'tasks':
|
'tasks':
|
||||||
- 'clean'
|
- 'clean'
|
||||||
- 'checkout':
|
- 'checkout':
|
||||||
'repository': 'bamboo-deploy-publisher'
|
'repository': 'bamboo-deploy-publisher'
|
||||||
'path': 'bamboo-deploy-publisher'
|
'path': 'bamboo-deploy-publisher'
|
||||||
'force-clean-build': true
|
'force-clean-build': true
|
||||||
- 'script':
|
- 'script':
|
||||||
'interpreter': 'SHELL'
|
'interpreter': 'SHELL'
|
||||||
'scripts':
|
'scripts':
|
||||||
- |
|
- |
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e -f -u -x
|
set -e -f -u -x
|
||||||
|
|
||||||
export CHANNEL="${bamboo.channel}"
|
channel="${bamboo.channel}"
|
||||||
if [ "$CHANNEL" != 'release' ] && [ "${CHANNEL}" != 'beta' ]
|
readonly channel
|
||||||
then
|
|
||||||
echo "don't publish to GitHub Releases for this channel"
|
|
||||||
|
|
||||||
exit 0
|
if [ "$channel" != 'release' ] && [ "${channel}" != 'beta' ]
|
||||||
fi
|
then
|
||||||
|
echo "don't publish to GitHub Releases for this channel"
|
||||||
|
|
||||||
cd ./dist/
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
env\
|
cd ./dist/
|
||||||
GITHUB_TOKEN="${bamboo.githubPublicRepoPassword}"\
|
|
||||||
../bamboo-deploy-publisher/deploy.sh adguard-home-github
|
env\
|
||||||
'final-tasks':
|
GITHUB_TOKEN="${bamboo.githubPublicRepoPassword}"\
|
||||||
- 'clean'
|
../bamboo-deploy-publisher/deploy.sh adguard-home-github
|
||||||
'requirements':
|
'final-tasks':
|
||||||
- 'adg-docker': 'true'
|
- 'clean'
|
||||||
|
'requirements':
|
||||||
|
- 'adg-docker': 'true'
|
||||||
|
|
||||||
'triggers':
|
'triggers':
|
||||||
# Don't use minute values that end with a zero or a five as these are often used
|
# Don't use minute values that end with a zero or a five as these are often
|
||||||
# in CI and so resources during these minutes can be quite busy.
|
# used in CI and so resources during these minutes can be quite busy.
|
||||||
- 'cron': '0 42 13 ? * MON-FRI *'
|
- 'cron': '0 42 13 ? * MON-FRI *'
|
||||||
'branches':
|
'branches':
|
||||||
'create': 'manually'
|
'create': 'manually'
|
||||||
'delete':
|
'delete':
|
||||||
'after-deleted-days': 1
|
'after-deleted-days': 1
|
||||||
'after-inactive-days': 30
|
'after-inactive-days': 30
|
||||||
'integration':
|
'integration':
|
||||||
'push-on-success': false
|
'push-on-success': false
|
||||||
'merge-from': 'AdGuard Home - Build and publish release'
|
'merge-from': 'AdGuard Home - Build and publish release'
|
||||||
'link-to-jira': true
|
'link-to-jira': true
|
||||||
|
|
||||||
'notifications':
|
'notifications':
|
||||||
- 'events':
|
- 'events':
|
||||||
- 'plan-completed'
|
- 'plan-completed'
|
||||||
'recipients':
|
'recipients':
|
||||||
- 'webhook':
|
- 'webhook':
|
||||||
'name': 'Build webhook'
|
'name': 'Build webhook'
|
||||||
'url': 'http://prod.jirahub.service.eu.consul/v1/webhook/bamboo?channel=adguard-qa'
|
'url': 'http://prod.jirahub.service.eu.consul/v1/webhook/bamboo?channel=adguard-qa'
|
||||||
|
|
||||||
'labels': []
|
'labels': []
|
||||||
'other':
|
'other':
|
||||||
'concurrent-build-plugin': 'system-default'
|
'concurrent-build-plugin': 'system-default'
|
||||||
|
|
||||||
'branch-overrides':
|
'branch-overrides':
|
||||||
# beta-vX.Y branches are the branches into which the commits that are needed to
|
# beta-vX.Y branches are the branches into which the commits that are needed
|
||||||
# release a new patch version are initially cherry-picked.
|
# to release a new patch version are initially cherry-picked.
|
||||||
- '^beta-v[0-9]+\.[0-9]+':
|
- '^beta-v[0-9]+\.[0-9]+':
|
||||||
# Build betas on release branches manually.
|
# Build betas on release branches manually.
|
||||||
'triggers': []
|
'triggers': []
|
||||||
# Set the default release channel on the release branch to beta, as we may
|
# Set the default release channel on the release branch to beta, as we may
|
||||||
# need to build a few of these.
|
# need to build a few of these.
|
||||||
'variables':
|
'variables':
|
||||||
'channel': 'beta'
|
'channel': 'beta'
|
||||||
'dockerGo': 'adguard/golang-ubuntu:5.4'
|
'dockerGo': 'adguard/golang-ubuntu:6.7'
|
||||||
# release-vX.Y.Z branches are the branches from which the actual final release
|
# release-vX.Y.Z branches are the branches from which the actual final
|
||||||
# is built.
|
# release is built.
|
||||||
- '^release-v[0-9]+\.[0-9]+\.[0-9]+':
|
- '^release-v[0-9]+\.[0-9]+\.[0-9]+':
|
||||||
# Disable integration branches for release branches.
|
# Disable integration branches for release branches.
|
||||||
'branch-config':
|
'branch-config':
|
||||||
'integration':
|
'integration':
|
||||||
'push-on-success': false
|
'push-on-success': false
|
||||||
'merge-from': 'beta-v0.107'
|
'merge-from': 'beta-v0.107'
|
||||||
# Build final releases on release branches manually.
|
# Build final releases on release branches manually.
|
||||||
'triggers': []
|
'triggers': []
|
||||||
# Set the default release channel on the final branch to release, as these
|
# Set the default release channel on the final branch to release, as these
|
||||||
# are the ones that actually get released.
|
# are the ones that actually get released.
|
||||||
'variables':
|
'variables':
|
||||||
'channel': 'release'
|
'channel': 'release'
|
||||||
'dockerGo': 'adguard/golang-ubuntu:5.4'
|
'dockerGo': 'adguard/golang-ubuntu:6.7'
|
||||||
|
|||||||
211
bamboo-specs/snapcraft.yaml
Normal file
211
bamboo-specs/snapcraft.yaml
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
---
|
||||||
|
# This part of the release build is separate from the one described in
|
||||||
|
# release.yaml, because the Snapcraft infrastructure is brittle, and timeouts
|
||||||
|
# during logins and uploads often lead to release blocking.
|
||||||
|
'version': 2
|
||||||
|
'plan':
|
||||||
|
'project-key': 'AGH'
|
||||||
|
'key': 'AGHSNAP'
|
||||||
|
'name': 'AdGuard Home - Build and publish Snapcraft release'
|
||||||
|
# Make sure to sync any changes with the branch overrides below.
|
||||||
|
'variables':
|
||||||
|
'channel': 'edge'
|
||||||
|
'dockerGo': 'adguard/golang-ubuntu:6.7'
|
||||||
|
'snapcraftChannel': 'edge'
|
||||||
|
|
||||||
|
'stages':
|
||||||
|
- 'Download release':
|
||||||
|
'manual': false
|
||||||
|
'final': false
|
||||||
|
'jobs':
|
||||||
|
- 'Download release'
|
||||||
|
|
||||||
|
- 'Build packages':
|
||||||
|
'manual': false
|
||||||
|
'final': false
|
||||||
|
'jobs':
|
||||||
|
- 'Build packages'
|
||||||
|
|
||||||
|
- 'Publish to Snapstore':
|
||||||
|
'manual': false
|
||||||
|
'final': false
|
||||||
|
'jobs':
|
||||||
|
- 'Publish to Snapstore'
|
||||||
|
|
||||||
|
# TODO(a.garipov): Consider using the Artifact Downloader Task if it ever learns
|
||||||
|
# about plan branches.
|
||||||
|
'Download release':
|
||||||
|
'artifacts':
|
||||||
|
- 'name': 'i386_binary'
|
||||||
|
'pattern': 'AdGuardHome_i386'
|
||||||
|
'shared': true
|
||||||
|
'required': true
|
||||||
|
- 'name': 'amd64_binary'
|
||||||
|
'pattern': 'AdGuardHome_amd64'
|
||||||
|
'shared': true
|
||||||
|
'required': true
|
||||||
|
- 'name': 'armhf_binary'
|
||||||
|
'pattern': 'AdGuardHome_armhf'
|
||||||
|
'shared': true
|
||||||
|
'required': true
|
||||||
|
- 'name': 'arm64_binary'
|
||||||
|
'pattern': 'AdGuardHome_arm64'
|
||||||
|
'shared': true
|
||||||
|
'required': true
|
||||||
|
'docker':
|
||||||
|
'image': '${bamboo.dockerGo}'
|
||||||
|
'key': 'DR'
|
||||||
|
'other':
|
||||||
|
'clean-working-dir': true
|
||||||
|
'tasks':
|
||||||
|
- 'checkout':
|
||||||
|
'force-clean-build': true
|
||||||
|
- 'script':
|
||||||
|
'interpreter': 'SHELL'
|
||||||
|
'scripts':
|
||||||
|
- |
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e -f -u -x
|
||||||
|
|
||||||
|
env\
|
||||||
|
CHANNEL="${bamboo.channel}"\
|
||||||
|
VERBOSE='1'\
|
||||||
|
sh ./scripts/snap/download.sh
|
||||||
|
'requirements':
|
||||||
|
- 'adg-docker': 'true'
|
||||||
|
|
||||||
|
'Build packages':
|
||||||
|
'artifact-subscriptions':
|
||||||
|
- 'artifact': 'i386_binary'
|
||||||
|
- 'artifact': 'amd64_binary'
|
||||||
|
- 'artifact': 'armhf_binary'
|
||||||
|
- 'artifact': 'arm64_binary'
|
||||||
|
'artifacts':
|
||||||
|
- 'name': 'i386_snap'
|
||||||
|
'pattern': 'AdGuardHome_i386.snap'
|
||||||
|
'shared': true
|
||||||
|
'required': true
|
||||||
|
- 'name': 'amd64_snap'
|
||||||
|
'pattern': 'AdGuardHome_amd64.snap'
|
||||||
|
'shared': true
|
||||||
|
'required': true
|
||||||
|
- 'name': 'armhf_snap'
|
||||||
|
'pattern': 'AdGuardHome_armhf.snap'
|
||||||
|
'shared': true
|
||||||
|
'required': true
|
||||||
|
- 'name': 'arm64_snap'
|
||||||
|
'pattern': 'AdGuardHome_arm64.snap'
|
||||||
|
'shared': true
|
||||||
|
'required': true
|
||||||
|
'docker':
|
||||||
|
'image': '${bamboo.dockerGo}'
|
||||||
|
'key': 'BP'
|
||||||
|
'other':
|
||||||
|
'clean-working-dir': true
|
||||||
|
'tasks':
|
||||||
|
- 'checkout':
|
||||||
|
'force-clean-build': true
|
||||||
|
- 'script':
|
||||||
|
'interpreter': 'SHELL'
|
||||||
|
'scripts':
|
||||||
|
- |
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e -f -u -x
|
||||||
|
|
||||||
|
env\
|
||||||
|
VERBOSE='1'\
|
||||||
|
sh ./scripts/snap/build.sh
|
||||||
|
'requirements':
|
||||||
|
- 'adg-docker': 'true'
|
||||||
|
|
||||||
|
'Publish to Snapstore':
|
||||||
|
'artifact-subscriptions':
|
||||||
|
- 'artifact': 'i386_snap'
|
||||||
|
- 'artifact': 'amd64_snap'
|
||||||
|
- 'artifact': 'armhf_snap'
|
||||||
|
- 'artifact': 'arm64_snap'
|
||||||
|
'docker':
|
||||||
|
'image': '${bamboo.dockerGo}'
|
||||||
|
'key': 'PTS'
|
||||||
|
'other':
|
||||||
|
'clean-working-dir': true
|
||||||
|
'tasks':
|
||||||
|
- 'checkout':
|
||||||
|
'force-clean-build': true
|
||||||
|
- 'script':
|
||||||
|
'interpreter': 'SHELL'
|
||||||
|
'scripts':
|
||||||
|
- |
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e -f -u -x
|
||||||
|
|
||||||
|
env\
|
||||||
|
SNAPCRAFT_CHANNEL="${bamboo.snapcraftChannel}"\
|
||||||
|
SNAPCRAFT_STORE_CREDENTIALS="${bamboo.snapcraftMacaroonPassword}"\
|
||||||
|
VERBOSE='1'\
|
||||||
|
sh ./scripts/snap/upload.sh
|
||||||
|
'final-tasks':
|
||||||
|
- 'clean'
|
||||||
|
'requirements':
|
||||||
|
- 'adg-docker': 'true'
|
||||||
|
|
||||||
|
'triggers':
|
||||||
|
# Don't use minute values that end with a zero or a five as these are often
|
||||||
|
# used in CI and so resources during these minutes can be quite busy.
|
||||||
|
#
|
||||||
|
# NOTE: The time is chosen to be exactly one hour after the main release
|
||||||
|
# build as defined as in release.yaml.
|
||||||
|
- 'cron': '0 42 14 ? * MON-FRI *'
|
||||||
|
'branches':
|
||||||
|
'create': 'manually'
|
||||||
|
'delete':
|
||||||
|
'after-deleted-days': 1
|
||||||
|
'after-inactive-days': 30
|
||||||
|
'integration':
|
||||||
|
'push-on-success': false
|
||||||
|
'merge-from': 'AdGuard Home - Build and publish Snapcraft release'
|
||||||
|
'link-to-jira': true
|
||||||
|
|
||||||
|
'notifications':
|
||||||
|
- 'events':
|
||||||
|
- 'plan-completed'
|
||||||
|
'recipients':
|
||||||
|
- 'webhook':
|
||||||
|
'name': 'Build webhook'
|
||||||
|
'url': 'http://prod.jirahub.service.eu.consul/v1/webhook/bamboo?channel=adguard-qa'
|
||||||
|
|
||||||
|
'labels': []
|
||||||
|
'other':
|
||||||
|
'concurrent-build-plugin': 'system-default'
|
||||||
|
|
||||||
|
'branch-overrides':
|
||||||
|
# beta-vX.Y branches are the branches into which the commits that are needed
|
||||||
|
# to release a new patch version are initially cherry-picked.
|
||||||
|
- '^beta-v[0-9]+\.[0-9]+':
|
||||||
|
# Build betas on release branches manually.
|
||||||
|
'triggers': []
|
||||||
|
# Set the default release channel on the release branch to beta, as we may
|
||||||
|
# need to build a few of these.
|
||||||
|
'variables':
|
||||||
|
'channel': 'beta'
|
||||||
|
'dockerGo': 'adguard/golang-ubuntu:6.7'
|
||||||
|
'snapcraftChannel': 'beta'
|
||||||
|
# release-vX.Y.Z branches are the branches from which the actual final
|
||||||
|
# release is built.
|
||||||
|
- '^release-v[0-9]+\.[0-9]+\.[0-9]+':
|
||||||
|
# Disable integration branches for release branches.
|
||||||
|
'branch-config':
|
||||||
|
'integration':
|
||||||
|
'push-on-success': false
|
||||||
|
'merge-from': 'beta-v0.107'
|
||||||
|
# Build final releases on release branches manually.
|
||||||
|
'triggers': []
|
||||||
|
# Set the default release channel on the final branch to release, as these
|
||||||
|
# are the ones that actually get released.
|
||||||
|
'variables':
|
||||||
|
'channel': 'release'
|
||||||
|
'dockerGo': 'adguard/golang-ubuntu:6.7'
|
||||||
|
'snapcraftChannel': 'candidate'
|
||||||
@@ -1,64 +1,64 @@
|
|||||||
---
|
---
|
||||||
'version': 2
|
'version': 2
|
||||||
'plan':
|
'plan':
|
||||||
'project-key': 'AGH'
|
'project-key': 'AGH'
|
||||||
'key': 'AHBRTSPECS'
|
'key': 'AHBRTSPECS'
|
||||||
'name': 'AdGuard Home - Build and run tests'
|
'name': 'AdGuard Home - Build and run tests'
|
||||||
'variables':
|
'variables':
|
||||||
'dockerGo': 'adguard/golang-ubuntu:5.4'
|
'dockerGo': 'adguard/golang-ubuntu:6.7'
|
||||||
|
|
||||||
'stages':
|
'stages':
|
||||||
- 'Tests':
|
- 'Tests':
|
||||||
'manual': false
|
'manual': false
|
||||||
'final': false
|
'final': false
|
||||||
'jobs':
|
'jobs':
|
||||||
- 'Test'
|
- 'Test'
|
||||||
|
|
||||||
'Test':
|
'Test':
|
||||||
'docker':
|
'docker':
|
||||||
'image': '${bamboo.dockerGo}'
|
'image': '${bamboo.dockerGo}'
|
||||||
'volumes':
|
'volumes':
|
||||||
'${system.YARN_DIR}': '${bamboo.cacheYarn}'
|
'${system.YARN_DIR}': '${bamboo.cacheYarn}'
|
||||||
'${system.GO_CACHE_DIR}': '${bamboo.cacheGo}'
|
'${system.GO_CACHE_DIR}': '${bamboo.cacheGo}'
|
||||||
'${system.GO_PKG_CACHE_DIR}': '${bamboo.cacheGoPkg}'
|
'${system.GO_PKG_CACHE_DIR}': '${bamboo.cacheGoPkg}'
|
||||||
'key': 'TEST'
|
'key': 'TEST'
|
||||||
'other':
|
'other':
|
||||||
'clean-working-dir': true
|
'clean-working-dir': true
|
||||||
'tasks':
|
'tasks':
|
||||||
- 'checkout':
|
- 'checkout':
|
||||||
'force-clean-build': true
|
'force-clean-build': true
|
||||||
- 'script':
|
- 'script':
|
||||||
'interpreter': 'SHELL'
|
'interpreter': 'SHELL'
|
||||||
'scripts':
|
'scripts':
|
||||||
- |
|
- |
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e -f -u -x
|
set -e -f -u -x
|
||||||
|
|
||||||
make VERBOSE=1 ci go-tools lint
|
make VERBOSE=1 ci go-tools lint
|
||||||
'final-tasks':
|
'final-tasks':
|
||||||
- 'clean'
|
- 'clean'
|
||||||
'requirements':
|
'requirements':
|
||||||
- 'adg-docker': 'true'
|
- 'adg-docker': 'true'
|
||||||
|
|
||||||
'branches':
|
'branches':
|
||||||
'create': 'for-pull-request'
|
'create': 'for-pull-request'
|
||||||
'delete':
|
'delete':
|
||||||
'after-deleted-days': 1
|
'after-deleted-days': 1
|
||||||
'after-inactive-days': 5
|
'after-inactive-days': 5
|
||||||
'integration':
|
'integration':
|
||||||
'push-on-success': false
|
'push-on-success': false
|
||||||
'merge-from': 'AdGuard Home - Build and run tests'
|
'merge-from': 'AdGuard Home - Build and run tests'
|
||||||
'link-to-jira': true
|
'link-to-jira': true
|
||||||
|
|
||||||
'notifications':
|
'notifications':
|
||||||
- 'events':
|
- 'events':
|
||||||
- 'plan-status-changed'
|
- 'plan-status-changed'
|
||||||
'recipients':
|
'recipients':
|
||||||
- 'webhook':
|
- 'webhook':
|
||||||
'name': 'Build webhook'
|
'name': 'Build webhook'
|
||||||
'url': 'http://prod.jirahub.service.eu.consul/v1/webhook/bamboo'
|
'url': 'http://prod.jirahub.service.eu.consul/v1/webhook/bamboo'
|
||||||
|
|
||||||
'labels': []
|
'labels': []
|
||||||
'other':
|
'other':
|
||||||
'concurrent-build-plugin': 'system-default'
|
'concurrent-build-plugin': 'system-default'
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
Keep this file non-hidden for Go's embedding to work.
|
|
||||||
2
client/dev.eslintrc
vendored
2
client/dev.eslintrc
vendored
@@ -3,4 +3,4 @@
|
|||||||
"rules": {
|
"rules": {
|
||||||
"no-debugger":"warn",
|
"no-debugger":"warn",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,40 @@
|
|||||||
<link rel="mask-icon" href="assets/safari-pinned-tab.svg" color="#67B279">
|
<link rel="mask-icon" href="assets/safari-pinned-tab.svg" color="#67B279">
|
||||||
<link rel="icon" type="image/png" href="assets/favicon.png" sizes="48x48">
|
<link rel="icon" type="image/png" href="assets/favicon.png" sizes="48x48">
|
||||||
<title>AdGuard Home</title>
|
<title>AdGuard Home</title>
|
||||||
|
<style>
|
||||||
|
.wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="DARK"] .wrapper {
|
||||||
|
background-color: #f5f7fb;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<noscript>
|
<noscript>
|
||||||
You need to enable JavaScript to run this app.
|
You need to enable JavaScript to run this app.
|
||||||
</noscript>
|
</noscript>
|
||||||
<div id="root"></div>
|
<div id="root">
|
||||||
|
<div class="wrapper"></div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
var LOCAL_STORAGE_THEME_KEY = 'account_theme';
|
||||||
|
var theme = 'light';
|
||||||
|
|
||||||
|
try {
|
||||||
|
theme = window.localStorage.getItem(LOCAL_STORAGE_THEME_KEY);
|
||||||
|
} catch(e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.body.dataset.theme = theme;
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -17,5 +17,12 @@
|
|||||||
You need to enable JavaScript to run this app.
|
You need to enable JavaScript to run this app.
|
||||||
</noscript>
|
</noscript>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||||
|
var currentTheme = prefersDark ? 'dark' : 'light';
|
||||||
|
document.body.dataset.theme = currentTheme;
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -37,8 +37,6 @@
|
|||||||
"dhcp_ipv6_settings": "DHCP IPv6 إعدادات",
|
"dhcp_ipv6_settings": "DHCP IPv6 إعدادات",
|
||||||
"form_error_required": "الحقل مطلوب",
|
"form_error_required": "الحقل مطلوب",
|
||||||
"form_error_ip4_format": "عنوان IPv4 غير صالح",
|
"form_error_ip4_format": "عنوان IPv4 غير صالح",
|
||||||
"form_error_ip4_range_start_format": "عناوين البداية لـIPv4 غير صالحة للنطاق",
|
|
||||||
"form_error_ip4_range_end_format": "عناوين IPv4 غير صالحة لنطاق النهاية",
|
|
||||||
"form_error_ip4_gateway_format": "عنوان IPv4 غير صالح للبوابة",
|
"form_error_ip4_gateway_format": "عنوان IPv4 غير صالح للبوابة",
|
||||||
"form_error_ip6_format": "عنوان IPv6 غير صالح",
|
"form_error_ip6_format": "عنوان IPv6 غير صالح",
|
||||||
"form_error_ip_format": "عنوان IP غير صحيح",
|
"form_error_ip_format": "عنوان IP غير صحيح",
|
||||||
@@ -51,7 +49,6 @@
|
|||||||
"out_of_range_error": "يجب أن يكون خارج النطاق \"{{start}}\" - \"{{end}}\"",
|
"out_of_range_error": "يجب أن يكون خارج النطاق \"{{start}}\" - \"{{end}}\"",
|
||||||
"lower_range_start_error": "يجب أن يكون أقل من نطاق البداية",
|
"lower_range_start_error": "يجب أن يكون أقل من نطاق البداية",
|
||||||
"greater_range_start_error": "يجب أن يكون أكبر من نطاق البداية",
|
"greater_range_start_error": "يجب أن يكون أكبر من نطاق البداية",
|
||||||
"greater_range_end_error": "يجب أن يكون أكبر من نطاق النهاية",
|
|
||||||
"subnet_error": "يجب أن تكون العناوين في شبكة فرعية واحدة",
|
"subnet_error": "يجب أن تكون العناوين في شبكة فرعية واحدة",
|
||||||
"gateway_or_subnet_invalid": "قناع الشبكة الفرعية غير صالح",
|
"gateway_or_subnet_invalid": "قناع الشبكة الفرعية غير صالح",
|
||||||
"dhcp_form_gateway_input": "IP البوابة",
|
"dhcp_form_gateway_input": "IP البوابة",
|
||||||
@@ -300,6 +297,8 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: الرد باستخدام رمز NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: الرد باستخدام رمز NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "IP Null: الاستجابة بعنوان IP صفري (0.0.0.0 لـ A ؛ :: لـ AAAA)",
|
"blocking_mode_null_ip": "IP Null: الاستجابة بعنوان IP صفري (0.0.0.0 لـ A ؛ :: لـ AAAA)",
|
||||||
"blocking_mode_custom_ip": "استجابة IP مخصصة بعنوان IP تم تعيينه يدويًا",
|
"blocking_mode_custom_ip": "استجابة IP مخصصة بعنوان IP تم تعيينه يدويًا",
|
||||||
|
"theme_light": "فاتح",
|
||||||
|
"theme_dark": "ليلي",
|
||||||
"upstream_dns_client_desc": "إذا احتفظت بهذا الحقل فارغًا ، فسيستخدم AdGuard Home الخوادم التي تم تكوينها في<0>DNS إعدادات</0>.",
|
"upstream_dns_client_desc": "إذا احتفظت بهذا الحقل فارغًا ، فسيستخدم AdGuard Home الخوادم التي تم تكوينها في<0>DNS إعدادات</0>.",
|
||||||
"tracker_source": "مصدر المتعقب",
|
"tracker_source": "مصدر المتعقب",
|
||||||
"source_label": "المصدر",
|
"source_label": "المصدر",
|
||||||
@@ -636,5 +635,6 @@
|
|||||||
"parental_control": "الرقابة الابويه",
|
"parental_control": "الرقابة الابويه",
|
||||||
"safe_browsing": "تصفح آمن",
|
"safe_browsing": "تصفح آمن",
|
||||||
"served_from_cache": "{{value}} <i>(يتم تقديمه من ذاكرة التخزين المؤقت)</i>",
|
"served_from_cache": "{{value}} <i>(يتم تقديمه من ذاكرة التخزين المؤقت)</i>",
|
||||||
"form_error_password_length": "يجب أن تتكون كلمة المرور من {{value}} من الأحرف على الأقل"
|
"form_error_password_length": "يجب أن تتكون كلمة المرور من {{value}} من الأحرف على الأقل",
|
||||||
|
"protection_section_label": "الحماية"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,7 +150,7 @@
|
|||||||
"dns_allowlists": "Белыя спісы DNS",
|
"dns_allowlists": "Белыя спісы DNS",
|
||||||
"dns_blocklists_desc": "AdGuard Home будзе блакаваць дамены з чорных спісаў.",
|
"dns_blocklists_desc": "AdGuard Home будзе блакаваць дамены з чорных спісаў.",
|
||||||
"dns_allowlists_desc": "Дамены з белых спісаў DNS будуць дазволены, нават калі яны знаходзяцца ў любым з чорных спісаў.",
|
"dns_allowlists_desc": "Дамены з белых спісаў DNS будуць дазволены, нават калі яны знаходзяцца ў любым з чорных спісаў.",
|
||||||
"custom_filtering_rules": "Карыстацкія правілы фільтрацыі",
|
"custom_filtering_rules": "Карыстальніцкія правілы фільтрацыі",
|
||||||
"encryption_settings": "Налады шыфравання",
|
"encryption_settings": "Налады шыфравання",
|
||||||
"dhcp_settings": "Налады DHCP",
|
"dhcp_settings": "Налады DHCP",
|
||||||
"upstream_dns": "Upstream DNS-серверы",
|
"upstream_dns": "Upstream DNS-серверы",
|
||||||
@@ -247,7 +247,7 @@
|
|||||||
"loading_table_status": "Загрузка...",
|
"loading_table_status": "Загрузка...",
|
||||||
"page_table_footer_text": "Старонка",
|
"page_table_footer_text": "Старонка",
|
||||||
"rows_table_footer_text": "радкоў",
|
"rows_table_footer_text": "радкоў",
|
||||||
"updated_custom_filtering_toast": "Занесены змены ў карыстацкія правілы",
|
"updated_custom_filtering_toast": "Карыстальніцкія правілы паспяхова захаваны",
|
||||||
"rule_removed_from_custom_filtering_toast": "Карыстацкае правіла выдалена: {{rule}}",
|
"rule_removed_from_custom_filtering_toast": "Карыстацкае правіла выдалена: {{rule}}",
|
||||||
"rule_added_to_custom_filtering_toast": "Карыстацкае правіла дададзена: {{rule}}",
|
"rule_added_to_custom_filtering_toast": "Карыстацкае правіла дададзена: {{rule}}",
|
||||||
"query_log_response_status": "Статус: {{value}}",
|
"query_log_response_status": "Статус: {{value}}",
|
||||||
@@ -261,7 +261,7 @@
|
|||||||
"query_log_configuration": "Налада часопіса",
|
"query_log_configuration": "Налада часопіса",
|
||||||
"query_log_disabled": "Часопіс запытаў выключаны, яго можна ўключыць у <0>наладах</0>",
|
"query_log_disabled": "Часопіс запытаў выключаны, яго можна ўключыць у <0>наладах</0>",
|
||||||
"query_log_strict_search": "Ужывайце падвойныя двукоссі для строгага пошуку",
|
"query_log_strict_search": "Ужывайце падвойныя двукоссі для строгага пошуку",
|
||||||
"query_log_retention_confirm": "Вы ўпэўнены, што хочаце змяніць тэрмін захоўвання запытаў? Пры скарачэнні інтэрвалу дадзеныя могуць быць згублены",
|
"query_log_retention_confirm": "Вы ўпэўнены, што хочаце змяніць тэрмін захоўвання запытаў? Пры памяншэнні інтэрвалу, некаторыя даныя могуць быць страчаны",
|
||||||
"anonymize_client_ip": "Ананімізацыя IP-адрасы кліента",
|
"anonymize_client_ip": "Ананімізацыя IP-адрасы кліента",
|
||||||
"anonymize_client_ip_desc": "Не захоўвайце поўныя IP-адрасы гэтых удзельнікаў у часопісах або статыстыцы",
|
"anonymize_client_ip_desc": "Не захоўвайце поўныя IP-адрасы гэтых удзельнікаў у часопісах або статыстыцы",
|
||||||
"dns_config": "Налады DNS-сервера",
|
"dns_config": "Налады DNS-сервера",
|
||||||
@@ -298,6 +298,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Адказвае з кодам NXDOMAIN\n",
|
"blocking_mode_nxdomain": "NXDOMAIN: Адказвае з кодам NXDOMAIN\n",
|
||||||
"blocking_mode_null_ip": "Нулёвы IP: Адказвае з нулёвым IP-адрасам (0.0.0.0 для A; :: для AAAA)",
|
"blocking_mode_null_ip": "Нулёвы IP: Адказвае з нулёвым IP-адрасам (0.0.0.0 для A; :: для AAAA)",
|
||||||
"blocking_mode_custom_ip": "Карыстацкі IP: Адказвае з ручна наладжаным IP-адрасам",
|
"blocking_mode_custom_ip": "Карыстацкі IP: Адказвае з ручна наладжаным IP-адрасам",
|
||||||
|
"theme_auto": "Аўто",
|
||||||
|
"theme_light": "Светлая",
|
||||||
|
"theme_dark": "Цёмная",
|
||||||
"upstream_dns_client_desc": "Калі пакінуць поле пустым, AdGuard Home будзе звяртацца да сервераў, паказаных у <0>наладах DNS</0>.",
|
"upstream_dns_client_desc": "Калі пакінуць поле пустым, AdGuard Home будзе звяртацца да сервераў, паказаных у <0>наладах DNS</0>.",
|
||||||
"tracker_source": "Крыніца трэкінгу",
|
"tracker_source": "Крыніца трэкінгу",
|
||||||
"source_label": "Крыніца",
|
"source_label": "Крыніца",
|
||||||
@@ -353,7 +356,7 @@
|
|||||||
"install_devices_android_list_5": "Зараз можна змяніць палі «DNS 1» і «DNS 2». Увядзіце ў іх адрасы AdGuard Home.",
|
"install_devices_android_list_5": "Зараз можна змяніць палі «DNS 1» і «DNS 2». Увядзіце ў іх адрасы AdGuard Home.",
|
||||||
"install_devices_ios_list_1": "Увайдзіце ў меню налад прылады.",
|
"install_devices_ios_list_1": "Увайдзіце ў меню налад прылады.",
|
||||||
"install_devices_ios_list_2": "Абярыце пункт «Wi-Fi» (для мабільных сетак ручная наладка DNS немагчыма).",
|
"install_devices_ios_list_2": "Абярыце пункт «Wi-Fi» (для мабільных сетак ручная наладка DNS немагчыма).",
|
||||||
"install_devices_ios_list_3": "Націсніце на назву сетцы, да якой прылада падлучана ў дадзены момант.",
|
"install_devices_ios_list_3": "Націсніце на назву актыўнай у дадзены момант сеткі.",
|
||||||
"install_devices_ios_list_4": "У поле «DNS» увядзіце ўвядзіце адрасы AdGuard Home.",
|
"install_devices_ios_list_4": "У поле «DNS» увядзіце ўвядзіце адрасы AdGuard Home.",
|
||||||
"get_started": "Паехалі",
|
"get_started": "Паехалі",
|
||||||
"next": "Далей",
|
"next": "Далей",
|
||||||
@@ -451,6 +454,7 @@
|
|||||||
"updates_checked": "Даступная новая версія AdGuard Home",
|
"updates_checked": "Даступная новая версія AdGuard Home",
|
||||||
"updates_version_equal": "Версія AdGuard Home актуальная",
|
"updates_version_equal": "Версія AdGuard Home актуальная",
|
||||||
"check_updates_now": "Праверыць абнаўленні",
|
"check_updates_now": "Праверыць абнаўленні",
|
||||||
|
"version_request_error": "Памылка пры праверцы наяўнасці абнаўленняў. Праверце ваша інтэрнэт-злучэнне.",
|
||||||
"dns_privacy": "Зашыфраваны DNS",
|
"dns_privacy": "Зашыфраваны DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Ужывайце радок <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Ужывайце радок <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Ужывайце радок <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Ужывайце радок <1>{{address}}</1>.",
|
||||||
@@ -471,7 +475,9 @@
|
|||||||
"setup_dns_notice": "Каб выкарыстоўваць <1>DNS-over-HTTPS</1> ці <1>DNS-over-TLS</1>, вам патрэбна <0>наладзіць шыфраванне</0> у наладах AdGuard Home.",
|
"setup_dns_notice": "Каб выкарыстоўваць <1>DNS-over-HTTPS</1> ці <1>DNS-over-TLS</1>, вам патрэбна <0>наладзіць шыфраванне</0> у наладах AdGuard Home.",
|
||||||
"rewrite_added": "Правіла перанакіравання DNS для «{{key}}» паспяхова дададзена",
|
"rewrite_added": "Правіла перанакіравання DNS для «{{key}}» паспяхова дададзена",
|
||||||
"rewrite_deleted": "Правіла перанакіравання DNS для «{{key}}» паспяхова выдалена",
|
"rewrite_deleted": "Правіла перанакіравання DNS для «{{key}}» паспяхова выдалена",
|
||||||
|
"rewrite_updated": "Перазапіс DNS паспяхова абноўлены",
|
||||||
"rewrite_add": "Дадаць правіла перанакіравання DNS",
|
"rewrite_add": "Дадаць правіла перанакіравання DNS",
|
||||||
|
"rewrite_edit": "Рэдагаваць перазапіс DNS",
|
||||||
"rewrite_not_found": "Не знойдзена правілаў перанакіравання DNS",
|
"rewrite_not_found": "Не знойдзена правілаў перанакіравання DNS",
|
||||||
"rewrite_confirm_delete": "Вы ўпэўнены, што хочаце выдаліць правіла перанакіравання DNS для «{{key}}»?",
|
"rewrite_confirm_delete": "Вы ўпэўнены, што хочаце выдаліць правіла перанакіравання DNS для «{{key}}»?",
|
||||||
"rewrite_desc": "Дазваляе лёгка наладзіць карыстацкі DNS-адказ для пэўнага дамена.",
|
"rewrite_desc": "Дазваляе лёгка наладзіць карыстацкі DNS-адказ для пэўнага дамена.",
|
||||||
@@ -513,10 +519,10 @@
|
|||||||
"filter_updated": "Спіс паспяхова абноўлены",
|
"filter_updated": "Спіс паспяхова абноўлены",
|
||||||
"statistics_configuration": "Канфігурацыя статыстыкі",
|
"statistics_configuration": "Канфігурацыя статыстыкі",
|
||||||
"statistics_retention": "Захаванне статыстыкі",
|
"statistics_retention": "Захаванне статыстыкі",
|
||||||
"statistics_retention_desc": "Калі вы зменшыце значэнне інтэрвалу, некаторыя дадзеныя могуць быць згублены",
|
"statistics_retention_desc": "Калі вы паменшыце значэнне інтэрвалу, некаторыя даныя могуць быць страчаны",
|
||||||
"statistics_clear": "Ачысціць статыстыку",
|
"statistics_clear": "Ачысціць статыстыку",
|
||||||
"statistics_clear_confirm": "Вы ўпэўнены, што хочаце ачысціць статыстыку?",
|
"statistics_clear_confirm": "Вы ўпэўнены, што хочаце ачысціць статыстыку?",
|
||||||
"statistics_retention_confirm": "Вы ўпэўнены, што хочаце змяніць тэрмін захоўвання статыстыкі? Пры скарачэнні інтэрвалу дадзеныя могуць быць згублены",
|
"statistics_retention_confirm": "Вы ўпэўнены, што хочаце змяніць тэрмін захоўвання статыстыкі? Пры памяншэнні інтэрвалу, некаторыя даныя могуць быць страчаны",
|
||||||
"statistics_cleared": "Статыстыка паспяхова вычышчана",
|
"statistics_cleared": "Статыстыка паспяхова вычышчана",
|
||||||
"statistics_enable": "Уключыць статыстыку",
|
"statistics_enable": "Уключыць статыстыку",
|
||||||
"interval_hours": "{{count}} гадзіна",
|
"interval_hours": "{{count}} гадзіна",
|
||||||
@@ -564,7 +570,7 @@
|
|||||||
"check_desc": "Праверыць фільтрацыю імя хаста",
|
"check_desc": "Праверыць фільтрацыю імя хаста",
|
||||||
"check": "Праверыць",
|
"check": "Праверыць",
|
||||||
"form_enter_host": "Увядзіце імя хаста",
|
"form_enter_host": "Увядзіце імя хаста",
|
||||||
"filtered_custom_rules": "Адфільтраваны з дапамогай карыстацкіх правілаў фільтрацыі",
|
"filtered_custom_rules": "Адфільтраваны з дапамогай карыстальніцкіх правіл фільтрацыі",
|
||||||
"choose_from_list": "Абраць са спіса",
|
"choose_from_list": "Абраць са спіса",
|
||||||
"add_custom_list": "Дадаць свой спіс",
|
"add_custom_list": "Дадаць свой спіс",
|
||||||
"host_whitelisted": "Хост занесены ў белы спіс",
|
"host_whitelisted": "Хост занесены ў белы спіс",
|
||||||
@@ -594,7 +600,7 @@
|
|||||||
"show_blocked_responses": "Заблакавана",
|
"show_blocked_responses": "Заблакавана",
|
||||||
"show_whitelisted_responses": "Белы спіс",
|
"show_whitelisted_responses": "Белы спіс",
|
||||||
"show_processed_responses": "Апрацавана",
|
"show_processed_responses": "Апрацавана",
|
||||||
"blocked_safebrowsing": "Заблакавана згодна базе дадзеных Safe Browsing",
|
"blocked_safebrowsing": "Заблакіравана згодна з базай даных Safe Browsing",
|
||||||
"blocked_adult_websites": "Заблакавана Бацькоўскім кантролем",
|
"blocked_adult_websites": "Заблакавана Бацькоўскім кантролем",
|
||||||
"blocked_threats": "Заблакавана пагроз",
|
"blocked_threats": "Заблакавана пагроз",
|
||||||
"allowed": "Дазволены",
|
"allowed": "Дазволены",
|
||||||
@@ -635,8 +641,9 @@
|
|||||||
"safe_browsing": "Бяспечны інтэрнэт",
|
"safe_browsing": "Бяспечны інтэрнэт",
|
||||||
"served_from_cache": "{{value}} <i>(атрымана з кэша)</i>",
|
"served_from_cache": "{{value}} <i>(атрымана з кэша)</i>",
|
||||||
"form_error_password_length": "Пароль павінен быць не менш за {{value}} сімвалаў",
|
"form_error_password_length": "Пароль павінен быць не менш за {{value}} сімвалаў",
|
||||||
"anonymizer_notification": "<0>Заўвага:</0> Ананімізацыя IP уключана. Вы можаце адключыць яго ў <1>Агульных наладах</1> .",
|
"anonymizer_notification": "<0>Заўвага:</0> Ананімізацыя IP уключана. Вы можаце адключыць яе ў <1>Агульных наладах</1>.",
|
||||||
"confirm_dns_cache_clear": "Вы ўпэўнены, што хочаце ачысціць кэш DNS?",
|
"confirm_dns_cache_clear": "Вы ўпэўнены, што хочаце ачысціць кэш DNS?",
|
||||||
"cache_cleared": "Кэш DNS паспяхова ачышчаны",
|
"cache_cleared": "Кэш DNS паспяхова ачышчаны",
|
||||||
"clear_cache": "Ачысціць кэш"
|
"clear_cache": "Ачысціць кэш",
|
||||||
|
"protection_section_label": "Ахова"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,8 +165,9 @@
|
|||||||
"enabled_safe_browsing_toast": "Zapnuté bezpečné prohlížení",
|
"enabled_safe_browsing_toast": "Zapnuté bezpečné prohlížení",
|
||||||
"disabled_parental_toast": "Vypnutá Rodičovská kontrola",
|
"disabled_parental_toast": "Vypnutá Rodičovská kontrola",
|
||||||
"enabled_parental_toast": "Zapnutá Rodičovská kontrola",
|
"enabled_parental_toast": "Zapnutá Rodičovská kontrola",
|
||||||
"disabled_safe_search_toast": "Zapnuté bezpečné vyhledávání",
|
"disabled_safe_search_toast": "Vypnuté bezpečné vyhledávání",
|
||||||
"enabled_save_search_toast": "Vypnuté bezpečné vyhledávání",
|
"enabled_save_search_toast": "Zapnuté bezpečné vyhledávání",
|
||||||
|
"updated_save_search_toast": "Nastavení Bezpečného vyhledávání aktualizováno",
|
||||||
"enabled_table_header": "Zapnuto",
|
"enabled_table_header": "Zapnuto",
|
||||||
"name_table_header": "Název",
|
"name_table_header": "Název",
|
||||||
"list_url_table_header": "Seznam URL",
|
"list_url_table_header": "Seznam URL",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Protokol dotazů byl úspěšně vymazán",
|
"query_log_cleared": "Protokol dotazů byl úspěšně vymazán",
|
||||||
"query_log_updated": "Protokol dotazů byl úspěšně aktualizován",
|
"query_log_updated": "Protokol dotazů byl úspěšně aktualizován",
|
||||||
"query_log_clear": "Vymazat protokoly dotazů",
|
"query_log_clear": "Vymazat protokoly dotazů",
|
||||||
"query_log_retention": "Uchování protokolů dotazů",
|
"query_log_retention": "Rotace protokolů dotazů",
|
||||||
"query_log_enable": "Povolit protokol",
|
"query_log_enable": "Povolit protokol",
|
||||||
"query_log_configuration": "Konfigurace protokolů",
|
"query_log_configuration": "Konfigurace protokolů",
|
||||||
"query_log_disabled": "Protokol dotazu je zakázán a lze jej nakonfigurovat v <0>nastavení</0>",
|
"query_log_disabled": "Protokol dotazu je zakázán a lze jej nakonfigurovat v <0>nastavení</0>",
|
||||||
"query_log_strict_search": "Pro striktní vyhledávání použijte dvojité uvozovky",
|
"query_log_strict_search": "Pro striktní vyhledávání použijte dvojité uvozovky",
|
||||||
"query_log_retention_confirm": "Opravdu chcete změnit uchovávání protokolu dotazů? Pokud snížíte hodnotu intervalu, některá data budou ztracena",
|
"query_log_retention_confirm": "Opravdu chcete změnit rotaci protokolu dotazů? Pokud snížíte hodnotu intervalu, některá data budou ztracena",
|
||||||
"anonymize_client_ip": "Anonymizovat IP klienta",
|
"anonymize_client_ip": "Anonymizovat IP klienta",
|
||||||
"anonymize_client_ip_desc": "Neukládat úplnou IP adresu klienta do protokolů a statistik",
|
"anonymize_client_ip_desc": "Neukládat úplnou IP adresu klienta do protokolů a statistik",
|
||||||
"dns_config": "Konfigurace DNS serveru",
|
"dns_config": "Konfigurace DNS serveru",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Rychlostní limit",
|
"rate_limit": "Rychlostní limit",
|
||||||
"edns_enable": "Povolit klientskou podsíť EDNS",
|
"edns_enable": "Povolit klientskou podsíť EDNS",
|
||||||
"edns_cs_desc": "Přidá možnost podsítě klienta EDNS (ECS) do odchozích požadavků a zaznamá hodnoty odeslané klienty do protokolu dotazů.",
|
"edns_cs_desc": "Přidá možnost podsítě klienta EDNS (ECS) do odchozích požadavků a zaznamá hodnoty odeslané klienty do protokolu dotazů.",
|
||||||
|
"edns_use_custom_ip": "Použít vlastní IP pro EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Povolit použití vlastní IP pro EDNS",
|
||||||
"rate_limit_desc": "Počet požadavků za sekundu, které smí jeden klient provádět (0: neomezeno)",
|
"rate_limit_desc": "Počet požadavků za sekundu, které smí jeden klient provádět (0: neomezeno)",
|
||||||
"blocking_ipv4_desc": "IP adresa, která se má vrátit v případě blokovaného požadavku typu A",
|
"blocking_ipv4_desc": "IP adresa, která se má vrátit v případě blokovaného požadavku typu A",
|
||||||
"blocking_ipv6_desc": "IP adresa, která se má vrátit v případě blokovaného požadavku typu AAAA",
|
"blocking_ipv6_desc": "IP adresa, která se má vrátit v případě blokovaného požadavku typu AAAA",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Odezva s kódem NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Odezva s kódem NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "Nulová IP: Odezva s nulovou IP adresou (0.0.0.0 pro A; :: pro AAAA)",
|
"blocking_mode_null_ip": "Nulová IP: Odezva s nulovou IP adresou (0.0.0.0 pro A; :: pro AAAA)",
|
||||||
"blocking_mode_custom_ip": "Vlastní IP. odezva s ručně nastavenou IP adresou",
|
"blocking_mode_custom_ip": "Vlastní IP. odezva s ručně nastavenou IP adresou",
|
||||||
|
"theme_auto": "Autom.",
|
||||||
|
"theme_light": "Světlý",
|
||||||
|
"theme_dark": "Tmavý",
|
||||||
"upstream_dns_client_desc": "Pokud toto pole ponecháte prázdné, AdGuard Home použije servery nakonfigurované v<0>DNS nastavení</0>.",
|
"upstream_dns_client_desc": "Pokud toto pole ponecháte prázdné, AdGuard Home použije servery nakonfigurované v<0>DNS nastavení</0>.",
|
||||||
"tracker_source": "Zdroj slídiče",
|
"tracker_source": "Zdroj slídiče",
|
||||||
"source_label": "Zdroj",
|
"source_label": "Zdroj",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Nová verze AdGuard Home je k dispozici\n",
|
"updates_checked": "Nová verze AdGuard Home je k dispozici\n",
|
||||||
"updates_version_equal": "AdGuard Home je aktuální",
|
"updates_version_equal": "AdGuard Home je aktuální",
|
||||||
"check_updates_now": "Zkontrolovat aktualizace nyní",
|
"check_updates_now": "Zkontrolovat aktualizace nyní",
|
||||||
|
"version_request_error": "Kontrola aktualizace se nezdařila. Zkontrolujte prosím připojení k Internetu.",
|
||||||
"dns_privacy": "Soukromí DNS",
|
"dns_privacy": "Soukromí DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS skrze TLS:</0> Použít <1>{{address}}</1> řetězec.",
|
"setup_dns_privacy_1": "<0>DNS skrze TLS:</0> Použít <1>{{address}}</1> řetězec.",
|
||||||
"setup_dns_privacy_2": "<0>DNS skrze HTTPS:</0> Použít <1>{{address}}</1> řetězec.",
|
"setup_dns_privacy_2": "<0>DNS skrze HTTPS:</0> Použít <1>{{address}}</1> řetězec.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Pro použití <1>DNS skrze HTTPS</1> nebo <1>DNS skrze TLS</1> potřebujete v nastaveních AdGuard Home <0>nakonfigurovat šifrování</0>.",
|
"setup_dns_notice": "Pro použití <1>DNS skrze HTTPS</1> nebo <1>DNS skrze TLS</1> potřebujete v nastaveních AdGuard Home <0>nakonfigurovat šifrování</0>.",
|
||||||
"rewrite_added": "Přesměrování DNS pro „{{key}}“ úspěšně přidáno",
|
"rewrite_added": "Přesměrování DNS pro „{{key}}“ úspěšně přidáno",
|
||||||
"rewrite_deleted": "Přesměrování DNS pro „{{key}}“ úspěšně smazáno",
|
"rewrite_deleted": "Přesměrování DNS pro „{{key}}“ úspěšně smazáno",
|
||||||
|
"rewrite_updated": "Přesměrování DNS bylo úspěšně aktualizováno",
|
||||||
"rewrite_add": "Přidat přesměrování DNS",
|
"rewrite_add": "Přidat přesměrování DNS",
|
||||||
|
"rewrite_edit": "Upravit přesměrování DNS",
|
||||||
"rewrite_not_found": "Přesměrování DNS nenalezeny",
|
"rewrite_not_found": "Přesměrování DNS nenalezeny",
|
||||||
"rewrite_confirm_delete": "Jste si jisti, že chcete smazat přesměrování DNS pro „{{key}}“?",
|
"rewrite_confirm_delete": "Jste si jisti, že chcete smazat přesměrování DNS pro „{{key}}“?",
|
||||||
"rewrite_desc": "Umožňuje snadno nakonfigurovat vlastní DNS odezvy pro konkrétní název domény.",
|
"rewrite_desc": "Umožňuje snadno nakonfigurovat vlastní DNS odezvy pro konkrétní název domény.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Opravdu chcete změnit uchovávání statistik? Pokud snížíte hodnotu intervalu, některá data budou ztracena",
|
"statistics_retention_confirm": "Opravdu chcete změnit uchovávání statistik? Pokud snížíte hodnotu intervalu, některá data budou ztracena",
|
||||||
"statistics_cleared": "Statistiky úspěšně vyčištěny",
|
"statistics_cleared": "Statistiky úspěšně vyčištěny",
|
||||||
"statistics_enable": "Povolit statistiky",
|
"statistics_enable": "Povolit statistiky",
|
||||||
|
"ignore_domains": "Ignorované domény (oddělené novým řádkem)",
|
||||||
|
"ignore_domains_title": "Ignorované domény",
|
||||||
|
"ignore_domains_desc_stats": "Dotazy pro tyto domény se do statistik nezapisují",
|
||||||
|
"ignore_domains_desc_query": "Dotazy pro tyto domény se do záznamu dotazů nezapisují",
|
||||||
"interval_hours": "Hodiny: {{count}}",
|
"interval_hours": "Hodiny: {{count}}",
|
||||||
"interval_hours_plural": "Hodiny: {{count}}",
|
"interval_hours_plural": "Hodiny: {{count}}",
|
||||||
"filters_configuration": "Konfigurace filtrů",
|
"filters_configuration": "Konfigurace filtrů",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Poznámka:</0> Anonymizace IP je zapnuta. Můžete ji vypnout v <1>Obecných nastaveních</1>.",
|
"anonymizer_notification": "<0>Poznámka:</0> Anonymizace IP je zapnuta. Můžete ji vypnout v <1>Obecných nastaveních</1>.",
|
||||||
"confirm_dns_cache_clear": "Opravdu chcete vymazat mezipaměť DNS?",
|
"confirm_dns_cache_clear": "Opravdu chcete vymazat mezipaměť DNS?",
|
||||||
"cache_cleared": "Mezipaměť DNS úspěšně vymazána",
|
"cache_cleared": "Mezipaměť DNS úspěšně vymazána",
|
||||||
"clear_cache": "Vymazat mezipaměť"
|
"clear_cache": "Vymazat mezipaměť",
|
||||||
|
"make_static": "Nastavit jako statickou",
|
||||||
|
"theme_auto_desc": "Automatický (podle barevného motivu vašeho zařízení)",
|
||||||
|
"theme_dark_desc": "Tmavý motiv",
|
||||||
|
"theme_light_desc": "Světlý motiv",
|
||||||
|
"disable_for_seconds": "Na {{count}} sek.",
|
||||||
|
"disable_for_seconds_plural": "Na {{count}} sek.",
|
||||||
|
"disable_for_minutes": "Na {{count}} min.",
|
||||||
|
"disable_for_minutes_plural": "Na {{count}} min.",
|
||||||
|
"disable_for_hours": "Na {{count}} hod.",
|
||||||
|
"disable_for_hours_plural": "Na {{count}} hod.",
|
||||||
|
"disable_until_tomorrow": "Do zítřka",
|
||||||
|
"disable_notify_for_seconds": "Vypnout ochranu na {{count}} sek.",
|
||||||
|
"disable_notify_for_seconds_plural": "Vypnout ochranu na {{count}} sek.",
|
||||||
|
"disable_notify_for_minutes": "Vypnout ochranu na {{count}} min.",
|
||||||
|
"disable_notify_for_minutes_plural": "Vypnout ochranu na {{count}} min.",
|
||||||
|
"disable_notify_for_hours": "Vypnout ochranu na {{count}} hod.",
|
||||||
|
"disable_notify_for_hours_plural": "Vypnout ochranu na {{count}} hod.",
|
||||||
|
"disable_notify_until_tomorrow": "Vypnout ochranu do zítřka",
|
||||||
|
"enable_protection_timer": "Ochrana bude zapnuta za {{time}}",
|
||||||
|
"custom_retention_input": "Zadejte retenci v hodinách",
|
||||||
|
"custom_rotation_input": "Zadejte rotaci v hodinách",
|
||||||
|
"protection_section_label": "Ochrana",
|
||||||
|
"log_and_stats_section_label": "Protokol dotazů a statistiky",
|
||||||
|
"ignore_query_log": "Ignorovat tohoto klienta v protokolu dotazů",
|
||||||
|
"ignore_statistics": "Ignorovat tohoto klienta ve statistikách"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Forældrekontrol aktiveret",
|
"enabled_parental_toast": "Forældrekontrol aktiveret",
|
||||||
"disabled_safe_search_toast": "Sikker søgning deaktiveret",
|
"disabled_safe_search_toast": "Sikker søgning deaktiveret",
|
||||||
"enabled_save_search_toast": "Sikker søgning aktiveret",
|
"enabled_save_search_toast": "Sikker søgning aktiveret",
|
||||||
|
"updated_save_search_toast": "Sikker søgning opdateret",
|
||||||
"enabled_table_header": "Aktiveret",
|
"enabled_table_header": "Aktiveret",
|
||||||
"name_table_header": "Navn",
|
"name_table_header": "Navn",
|
||||||
"list_url_table_header": "Liste-URL",
|
"list_url_table_header": "Liste-URL",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Forespørgselsloggen er blevet ryddet",
|
"query_log_cleared": "Forespørgselsloggen er blevet ryddet",
|
||||||
"query_log_updated": "Forespørgselsloggen er blevet opdateret",
|
"query_log_updated": "Forespørgselsloggen er blevet opdateret",
|
||||||
"query_log_clear": "Ryd forespørgselslogfiler",
|
"query_log_clear": "Ryd forespørgselslogfiler",
|
||||||
"query_log_retention": "Opbevar forespørgselslogger i",
|
"query_log_retention": "Rotation af forespørgselslog",
|
||||||
"query_log_enable": "Aktivér log",
|
"query_log_enable": "Aktivér log",
|
||||||
"query_log_configuration": "Opsætning af logger",
|
"query_log_configuration": "Opsætning af logger",
|
||||||
"query_log_disabled": "Forespørgselsloggen er deaktiveret og kan opsættes i <0>indstillingerne</0>",
|
"query_log_disabled": "Forespørgselsloggen er deaktiveret og kan opsættes i <0>indstillingerne</0>",
|
||||||
"query_log_strict_search": "Brug dobbelt anførselstegn til stringent søgning",
|
"query_log_strict_search": "Brug dobbelt anførselstegn til stringent søgning",
|
||||||
"query_log_retention_confirm": "Sikker på, at du vil ændre forespørgselsloggens opbevaringperiode? Mindskes intervalværdien, mistes data",
|
"query_log_retention_confirm": "Sikker på, at forespørgselsloggens rotationstid skal ændres? Mindskes intervalværdien, mistes nogle data",
|
||||||
"anonymize_client_ip": "Anonymisér klient-IP",
|
"anonymize_client_ip": "Anonymisér klient-IP",
|
||||||
"anonymize_client_ip_desc": "Gem ikke fuld klient IP-adresse i logfiler eller statistikker",
|
"anonymize_client_ip_desc": "Gem ikke fuld klient IP-adresse i logfiler eller statistikker",
|
||||||
"dns_config": "DNS-serveropsætning",
|
"dns_config": "DNS-serveropsætning",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Hyppighedsgrænse",
|
"rate_limit": "Hyppighedsgrænse",
|
||||||
"edns_enable": "Aktivér EDNS-klientundernet",
|
"edns_enable": "Aktivér EDNS-klientundernet",
|
||||||
"edns_cs_desc": "Tilføj indstillingen EDNS Client Subnet (ECS) til upstream-forespørgsler og log de af klienterne sendte værdier i forespørgselsloggen.",
|
"edns_cs_desc": "Tilføj indstillingen EDNS Client Subnet (ECS) til upstream-forespørgsler og log de af klienterne sendte værdier i forespørgselsloggen.",
|
||||||
|
"edns_use_custom_ip": "Brug tilpasset IP til EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Tillad brug af tilpasset IP til EDNS",
|
||||||
"rate_limit_desc": "Antallet af forespørgsler pr. sekund tilladt pr. klient (værdien 0 = ubegrænset)",
|
"rate_limit_desc": "Antallet af forespørgsler pr. sekund tilladt pr. klient (værdien 0 = ubegrænset)",
|
||||||
"blocking_ipv4_desc": "Returneret IP-adresse for en blokeret A-forespørgsel",
|
"blocking_ipv4_desc": "Returneret IP-adresse for en blokeret A-forespørgsel",
|
||||||
"blocking_ipv6_desc": "Returneret IP-adresse for en blokeret AAAA-forespørgsel",
|
"blocking_ipv6_desc": "Returneret IP-adresse for en blokeret AAAA-forespørgsel",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Svar med NXDOMAIN-kode",
|
"blocking_mode_nxdomain": "NXDOMAIN: Svar med NXDOMAIN-kode",
|
||||||
"blocking_mode_null_ip": "Null IP: Svar med nul IP-adresse (0.0.0.0 for A; :: for AAAA)",
|
"blocking_mode_null_ip": "Null IP: Svar med nul IP-adresse (0.0.0.0 for A; :: for AAAA)",
|
||||||
"blocking_mode_custom_ip": "Tilpasset IP: Svar med en manuelt indstillet IP-adresse",
|
"blocking_mode_custom_ip": "Tilpasset IP: Svar med en manuelt indstillet IP-adresse",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Lyst",
|
||||||
|
"theme_dark": "Mørkt",
|
||||||
"upstream_dns_client_desc": "Holdes dette felt tomt, bruger AdGuard Home de i <0>DNS-indstillingerne</0> opsatte servere.",
|
"upstream_dns_client_desc": "Holdes dette felt tomt, bruger AdGuard Home de i <0>DNS-indstillingerne</0> opsatte servere.",
|
||||||
"tracker_source": "Tracker-kilde",
|
"tracker_source": "Tracker-kilde",
|
||||||
"source_label": "Kilde",
|
"source_label": "Kilde",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "En ny version af AdGuard Home er tilgængelig\n",
|
"updates_checked": "En ny version af AdGuard Home er tilgængelig\n",
|
||||||
"updates_version_equal": "AdGuard Home er opdateret",
|
"updates_version_equal": "AdGuard Home er opdateret",
|
||||||
"check_updates_now": "Søg efter opdateringer nu",
|
"check_updates_now": "Søg efter opdateringer nu",
|
||||||
|
"version_request_error": "Opdateringstjek mislykkedes. Tjek internetforbindelsen.",
|
||||||
"dns_privacy": "DNS-fortrolighed",
|
"dns_privacy": "DNS-fortrolighed",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Brug <1>{{address}}</1> streng.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Brug <1>{{address}}</1> streng.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Brug <1>{{address}}</1> streng.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Brug <1>{{address}}</1> streng.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "For at kunne bruge <1>DNS-over-HTTPS</1> eller <1>DNS-over-TLS</1>, skal du <0>opsætte Krypteringen</0> i AdGuard Homes indstillinger.",
|
"setup_dns_notice": "For at kunne bruge <1>DNS-over-HTTPS</1> eller <1>DNS-over-TLS</1>, skal du <0>opsætte Krypteringen</0> i AdGuard Homes indstillinger.",
|
||||||
"rewrite_added": "DNS-omskrivning for \"{{key}}\" blev tilføjet",
|
"rewrite_added": "DNS-omskrivning for \"{{key}}\" blev tilføjet",
|
||||||
"rewrite_deleted": "DNS-omskrivning for \"{{key}}\" blev slettet",
|
"rewrite_deleted": "DNS-omskrivning for \"{{key}}\" blev slettet",
|
||||||
|
"rewrite_updated": "DNS-omskrivning hermed opdateret",
|
||||||
"rewrite_add": "Tilføj DNS-omskrivning",
|
"rewrite_add": "Tilføj DNS-omskrivning",
|
||||||
|
"rewrite_edit": "Redigér DNS-omskrivning",
|
||||||
"rewrite_not_found": "Ingen DNS-omskrivninger fundet",
|
"rewrite_not_found": "Ingen DNS-omskrivninger fundet",
|
||||||
"rewrite_confirm_delete": "Sikker på, at du vil slette DNS-omskrivning for \"{{key}}\"?",
|
"rewrite_confirm_delete": "Sikker på, at du vil slette DNS-omskrivning for \"{{key}}\"?",
|
||||||
"rewrite_desc": "Gør det nemt at opsætte det tilpassede DNS-svar for et specifikt domænenavn.",
|
"rewrite_desc": "Gør det nemt at opsætte det tilpassede DNS-svar for et specifikt domænenavn.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Sikker på, at du vil ændre på statistikbevaring? Mindskes intervalværdien, vil nogle data gå tabt",
|
"statistics_retention_confirm": "Sikker på, at du vil ændre på statistikbevaring? Mindskes intervalværdien, vil nogle data gå tabt",
|
||||||
"statistics_cleared": "Statistikkerne er ryddet",
|
"statistics_cleared": "Statistikkerne er ryddet",
|
||||||
"statistics_enable": "Aktivér statistikker",
|
"statistics_enable": "Aktivér statistikker",
|
||||||
|
"ignore_domains": "Ignorerede domæner (adskilt af ny linje)",
|
||||||
|
"ignore_domains_title": "Ignorerede domæner",
|
||||||
|
"ignore_domains_desc_stats": "Forespørgsler til disse domæner opføres ikke i statistikken",
|
||||||
|
"ignore_domains_desc_query": "Forespørgsler til disse domæner opføres ikke i forespørgselsloggen",
|
||||||
"interval_hours": "{{count}} time",
|
"interval_hours": "{{count}} time",
|
||||||
"interval_hours_plural": "{{count}} timer",
|
"interval_hours_plural": "{{count}} timer",
|
||||||
"filters_configuration": "Filteropsætninger",
|
"filters_configuration": "Filteropsætninger",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Bemærk:</0> IP-anonymisering er aktiveret. Det kan deaktiveres via <1>Generelle indstillinger</1>.",
|
"anonymizer_notification": "<0>Bemærk:</0> IP-anonymisering er aktiveret. Det kan deaktiveres via <1>Generelle indstillinger</1>.",
|
||||||
"confirm_dns_cache_clear": "Sikker på, at DNS-cache skal ryddes?",
|
"confirm_dns_cache_clear": "Sikker på, at DNS-cache skal ryddes?",
|
||||||
"cache_cleared": "DNS-cache hermed ryddet",
|
"cache_cleared": "DNS-cache hermed ryddet",
|
||||||
"clear_cache": "Ryd cache"
|
"clear_cache": "Ryd cache",
|
||||||
|
"make_static": "Gør statisk",
|
||||||
|
"theme_auto_desc": "Auto (baseret på enhedens farveskema)",
|
||||||
|
"theme_dark_desc": "Mørkt tema",
|
||||||
|
"theme_light_desc": "Lyst tema",
|
||||||
|
"disable_for_seconds": "I {{count}} sekund",
|
||||||
|
"disable_for_seconds_plural": "I {{count}} sekunder",
|
||||||
|
"disable_for_minutes": "I {{count}} minut",
|
||||||
|
"disable_for_minutes_plural": "I {{count}} minutter",
|
||||||
|
"disable_for_hours": "I {{count}} time",
|
||||||
|
"disable_for_hours_plural": "I {{count}} timer",
|
||||||
|
"disable_until_tomorrow": "Indtil i morgen",
|
||||||
|
"disable_notify_for_seconds": "Deaktivere beskyttelse i {{count}} sekund",
|
||||||
|
"disable_notify_for_seconds_plural": "Deaktivere beskyttelse i {{count}} sekunder",
|
||||||
|
"disable_notify_for_minutes": "Deaktivere beskyttelse i {{count}} minut",
|
||||||
|
"disable_notify_for_minutes_plural": "Deaktivere beskyttelse i {{count}} minutter",
|
||||||
|
"disable_notify_for_hours": "Deaktivere beskyttelse i {{count}} time",
|
||||||
|
"disable_notify_for_hours_plural": "Deaktivere beskyttelse i {{count}} timer",
|
||||||
|
"disable_notify_until_tomorrow": "Deaktiver beskyttelse indtil i morgen",
|
||||||
|
"enable_protection_timer": "Beskyttelse deaktiveres om {{time}}",
|
||||||
|
"custom_retention_input": "Angiv opbevaringstid i timer",
|
||||||
|
"custom_rotation_input": "Angiv rotationstid i timer",
|
||||||
|
"protection_section_label": "Beskyttelse",
|
||||||
|
"log_and_stats_section_label": "Forespørgselslog og statistik",
|
||||||
|
"ignore_query_log": "Ignorér denne klient i forespørgselslog",
|
||||||
|
"ignore_statistics": "Ignorér denne klient i statistik"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Kindersicherung aktiviert",
|
"enabled_parental_toast": "Kindersicherung aktiviert",
|
||||||
"disabled_safe_search_toast": "Sichere Suche deaktiviert",
|
"disabled_safe_search_toast": "Sichere Suche deaktiviert",
|
||||||
"enabled_save_search_toast": "Sichere Suche aktiviert",
|
"enabled_save_search_toast": "Sichere Suche aktiviert",
|
||||||
|
"updated_save_search_toast": "Einstellungen für die sichere Suche aktualisiert",
|
||||||
"enabled_table_header": "Aktiviert",
|
"enabled_table_header": "Aktiviert",
|
||||||
"name_table_header": "Name",
|
"name_table_header": "Name",
|
||||||
"list_url_table_header": "Adressliste",
|
"list_url_table_header": "Adressliste",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Das Abfrageprotokoll wurde erfolgreich gelöscht",
|
"query_log_cleared": "Das Abfrageprotokoll wurde erfolgreich gelöscht",
|
||||||
"query_log_updated": "Das Abfrageprotokoll wurde erfolgreich aktualisiert",
|
"query_log_updated": "Das Abfrageprotokoll wurde erfolgreich aktualisiert",
|
||||||
"query_log_clear": "Abfrageprotokolle leeren",
|
"query_log_clear": "Abfrageprotokolle leeren",
|
||||||
"query_log_retention": "Abfrageprotokolle aufbewahren",
|
"query_log_retention": "Rotation der Abfrageprotokolle",
|
||||||
"query_log_enable": "Protokoll aktivieren",
|
"query_log_enable": "Protokoll aktivieren",
|
||||||
"query_log_configuration": "Konfiguration der Protokolle",
|
"query_log_configuration": "Konfiguration der Protokolle",
|
||||||
"query_log_disabled": "Das Abfrageprotokoll ist deaktiviert und kann in den <0>Einstellungen</0> konfiguriert werden.",
|
"query_log_disabled": "Das Abfrageprotokoll ist deaktiviert und kann in den <0>Einstellungen</0> konfiguriert werden.",
|
||||||
"query_log_strict_search": "Doppelte Anführungszeichen für die strikte Suche verwenden",
|
"query_log_strict_search": "Doppelte Anführungszeichen für die strikte Suche verwenden",
|
||||||
"query_log_retention_confirm": "Möchten Sie die Aufbewahrung des Abfrageprotokolls wirklich ändern? Wenn Sie den Zeitabstand verringern, gehen einige Daten verloren.",
|
"query_log_retention_confirm": "Möchten Sie die Abfrageprotokollrotation wirklich ändern? Wenn Sie den Intervallwert verringern, gehen einige Daten verloren",
|
||||||
"anonymize_client_ip": "Client-IP anonymisieren",
|
"anonymize_client_ip": "Client-IP anonymisieren",
|
||||||
"anonymize_client_ip_desc": "Vollständige IP-Adresse des Clients nicht in Protokollen und Statistiken speichern",
|
"anonymize_client_ip_desc": "Vollständige IP-Adresse des Clients nicht in Protokollen und Statistiken speichern",
|
||||||
"dns_config": "DNS-Serverkonfiguration",
|
"dns_config": "DNS-Serverkonfiguration",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Begrenzungswert",
|
"rate_limit": "Begrenzungswert",
|
||||||
"edns_enable": "EDNS Client Subnetz aktivieren",
|
"edns_enable": "EDNS Client Subnetz aktivieren",
|
||||||
"edns_cs_desc": "Die Option EDNS Client Subnetz (ECS) zu Upstream-Anfragen hinzufügen und die von Clients gesendeten Werte protokollieren.",
|
"edns_cs_desc": "Die Option EDNS Client Subnetz (ECS) zu Upstream-Anfragen hinzufügen und die von Clients gesendeten Werte protokollieren.",
|
||||||
|
"edns_use_custom_ip": "Benutzerdefinierte IP für EDNS verwenden",
|
||||||
|
"edns_use_custom_ip_desc": "Benutzerdefinierte IP für EDNS zulassen",
|
||||||
"rate_limit_desc": "Die Anzahl der Anfragen pro Sekunde, die ein einzelner Client stellen darf. Das Setzen auf 0 bedeutet keine Begrenzung.",
|
"rate_limit_desc": "Die Anzahl der Anfragen pro Sekunde, die ein einzelner Client stellen darf. Das Setzen auf 0 bedeutet keine Begrenzung.",
|
||||||
"blocking_ipv4_desc": "IP-Adresse, die für eine gesperrte A-Anfrage zurückgegeben werden soll",
|
"blocking_ipv4_desc": "IP-Adresse, die für eine gesperrte A-Anfrage zurückgegeben werden soll",
|
||||||
"blocking_ipv6_desc": "IP-Adresse, die für eine gesperrte AAAA-Anfrage zurückgegeben werden soll",
|
"blocking_ipv6_desc": "IP-Adresse, die für eine gesperrte AAAA-Anfrage zurückgegeben werden soll",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Mit NXDOMAIN-Code antworten",
|
"blocking_mode_nxdomain": "NXDOMAIN: Mit NXDOMAIN-Code antworten",
|
||||||
"blocking_mode_null_ip": "Null-IP: Antworten mit Null-IP-Adresse (0.0.0.0.0 für A; :: für AAAA)",
|
"blocking_mode_null_ip": "Null-IP: Antworten mit Null-IP-Adresse (0.0.0.0.0 für A; :: für AAAA)",
|
||||||
"blocking_mode_custom_ip": "Benutzerdefinierte IP: Mit einer manuell eingestellten IP-Adresse antworten",
|
"blocking_mode_custom_ip": "Benutzerdefinierte IP: Mit einer manuell eingestellten IP-Adresse antworten",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Hell",
|
||||||
|
"theme_dark": "Dunkel",
|
||||||
"upstream_dns_client_desc": "Wenn Sie dieses Feld leer lassen, verwendet AdGuard Home die Server, die in den <0>DNS-Einstellungen</0> konfiguriert sind.",
|
"upstream_dns_client_desc": "Wenn Sie dieses Feld leer lassen, verwendet AdGuard Home die Server, die in den <0>DNS-Einstellungen</0> konfiguriert sind.",
|
||||||
"tracker_source": "Tracker-Quelle",
|
"tracker_source": "Tracker-Quelle",
|
||||||
"source_label": "Quelle",
|
"source_label": "Quelle",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Neue Version von AdGuard Home ist jetzt verfügbar",
|
"updates_checked": "Neue Version von AdGuard Home ist jetzt verfügbar",
|
||||||
"updates_version_equal": "AdGuard Home ist aktuell",
|
"updates_version_equal": "AdGuard Home ist aktuell",
|
||||||
"check_updates_now": "Jetzt nach Aktualisierungen suchen",
|
"check_updates_now": "Jetzt nach Aktualisierungen suchen",
|
||||||
|
"version_request_error": "Aktualisierungsprüfung fehlgeschlagen. Bitte überprüfen Sie Ihre Internetverbindung.",
|
||||||
"dns_privacy": "DNS-Datenschutz",
|
"dns_privacy": "DNS-Datenschutz",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Zeichenkette <1>{{address}}</1> verwenden.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Zeichenkette <1>{{address}}</1> verwenden.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Zeichenkette <1>{{address}}</1> verwenden.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Zeichenkette <1>{{address}}</1> verwenden.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Um <1>DNS-over-HTTTPS</1> oder <1>DNS-over-TLS</1> verwenden zu können, müssen Sie in den AdGuard Home Einstellungen die <0>Verschlüsselung konfigurieren</0>.",
|
"setup_dns_notice": "Um <1>DNS-over-HTTTPS</1> oder <1>DNS-over-TLS</1> verwenden zu können, müssen Sie in den AdGuard Home Einstellungen die <0>Verschlüsselung konfigurieren</0>.",
|
||||||
"rewrite_added": "DNS-Umschreibung für „{{key}}“ erfolgreich hinzugefügt",
|
"rewrite_added": "DNS-Umschreibung für „{{key}}“ erfolgreich hinzugefügt",
|
||||||
"rewrite_deleted": "DNS-Umschreibung für „{{key}}“ erfolgreich entfernt",
|
"rewrite_deleted": "DNS-Umschreibung für „{{key}}“ erfolgreich entfernt",
|
||||||
|
"rewrite_updated": "DNS-Rewrite erfolgreich aktualisiert",
|
||||||
"rewrite_add": "DNS-Umschreibung hinzufügen",
|
"rewrite_add": "DNS-Umschreibung hinzufügen",
|
||||||
|
"rewrite_edit": "DNS-Rewrite bearbeiten",
|
||||||
"rewrite_not_found": "Keine DNS-Umschreibungen gefunden",
|
"rewrite_not_found": "Keine DNS-Umschreibungen gefunden",
|
||||||
"rewrite_confirm_delete": "Möchten Sie die DNS-Umschreibung für „{{key}}“ wirklich entfernen?",
|
"rewrite_confirm_delete": "Möchten Sie die DNS-Umschreibung für „{{key}}“ wirklich entfernen?",
|
||||||
"rewrite_desc": "Ermöglicht die einfache Konfiguration der benutzerdefinierten DNS-Antwort für einen bestimmten Domainnamen.",
|
"rewrite_desc": "Ermöglicht die einfache Konfiguration der benutzerdefinierten DNS-Antwort für einen bestimmten Domainnamen.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Möchten Sie wirklich die Aufbewahrung der Statistiken ändern? Wenn Sie den Zeitabstand verringern, gehen einige Daten verloren.",
|
"statistics_retention_confirm": "Möchten Sie wirklich die Aufbewahrung der Statistiken ändern? Wenn Sie den Zeitabstand verringern, gehen einige Daten verloren.",
|
||||||
"statistics_cleared": "Statistiken wurden erfolgreich gelöscht",
|
"statistics_cleared": "Statistiken wurden erfolgreich gelöscht",
|
||||||
"statistics_enable": "Statistiken aktivieren",
|
"statistics_enable": "Statistiken aktivieren",
|
||||||
|
"ignore_domains": "Ignorierte Domains (durch Zeilenumbruch getrennt)",
|
||||||
|
"ignore_domains_title": "Ignorierte Domains",
|
||||||
|
"ignore_domains_desc_stats": "Abfragen für diese Domains werden nicht in die Statistik aufgenommen",
|
||||||
|
"ignore_domains_desc_query": "Abfragen für diese Domains werden nicht in das Abfrageprotokoll aufgenommen",
|
||||||
"interval_hours": "{{count}} Stunde",
|
"interval_hours": "{{count}} Stunde",
|
||||||
"interval_hours_plural": "{{count}} Stunden",
|
"interval_hours_plural": "{{count}} Stunden",
|
||||||
"filters_configuration": "Filterkonfiguration",
|
"filters_configuration": "Filterkonfiguration",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Hinweis:</0> Die IP-Anonymisierung ist aktiviert. Sie können sie in den <1>Allgemeinen Einstellungen</1> deaktivieren.",
|
"anonymizer_notification": "<0>Hinweis:</0> Die IP-Anonymisierung ist aktiviert. Sie können sie in den <1>Allgemeinen Einstellungen</1> deaktivieren.",
|
||||||
"confirm_dns_cache_clear": "Möchten Sie den DNS-Cache wirklich leeren?",
|
"confirm_dns_cache_clear": "Möchten Sie den DNS-Cache wirklich leeren?",
|
||||||
"cache_cleared": "DNS-Cache erfolgreich geleert",
|
"cache_cleared": "DNS-Cache erfolgreich geleert",
|
||||||
"clear_cache": "Cache leeren"
|
"clear_cache": "Cache leeren",
|
||||||
|
"make_static": "Statisch machen",
|
||||||
|
"theme_auto_desc": "Automatisch (basierend auf dem Farbschema Ihres Geräts)",
|
||||||
|
"theme_dark_desc": "Dunkles Farbschema",
|
||||||
|
"theme_light_desc": "Helles Farbschema",
|
||||||
|
"disable_for_seconds": "Für {{count}} Sekunde",
|
||||||
|
"disable_for_seconds_plural": "Für {{count}} Sekunden",
|
||||||
|
"disable_for_minutes": "Für {{count}} Minute",
|
||||||
|
"disable_for_minutes_plural": "Für {{count}} Minuten",
|
||||||
|
"disable_for_hours": "Für {{count}} Stunde",
|
||||||
|
"disable_for_hours_plural": "Für {{count}} Stunden",
|
||||||
|
"disable_until_tomorrow": "Bis morgen",
|
||||||
|
"disable_notify_for_seconds": "Schutz für {{count}} Sekunde deaktivieren",
|
||||||
|
"disable_notify_for_seconds_plural": "Schutz für {{count}} Sekunden deaktivieren",
|
||||||
|
"disable_notify_for_minutes": "Schutz für {{count}} Minute deaktivieren",
|
||||||
|
"disable_notify_for_minutes_plural": "Schutz für {{count}} Minuten deaktivieren",
|
||||||
|
"disable_notify_for_hours": "Schutz für {{count}} Stunde deaktivieren",
|
||||||
|
"disable_notify_for_hours_plural": "Schutz für {{count}} Stunden deaktivieren",
|
||||||
|
"disable_notify_until_tomorrow": "Schutz bis morgen deaktivieren",
|
||||||
|
"enable_protection_timer": "Der Schutz wird in {{time}} wieder aktiviert",
|
||||||
|
"custom_retention_input": "Rückhaltezeit in Stunden eingeben",
|
||||||
|
"custom_rotation_input": "Rotation in Stunden eingeben",
|
||||||
|
"protection_section_label": "Schutz",
|
||||||
|
"log_and_stats_section_label": "Abfrageprotokoll und Statistik",
|
||||||
|
"ignore_query_log": "Diesen Client im Abfrageprotokoll ignorieren",
|
||||||
|
"ignore_statistics": "Diesen Client in der Statistik ignorieren"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Enabled Parental Control",
|
"enabled_parental_toast": "Enabled Parental Control",
|
||||||
"disabled_safe_search_toast": "Disabled Safe Search",
|
"disabled_safe_search_toast": "Disabled Safe Search",
|
||||||
"enabled_save_search_toast": "Enabled Safe Search",
|
"enabled_save_search_toast": "Enabled Safe Search",
|
||||||
|
"updated_save_search_toast": "Safe Search settings updated",
|
||||||
"enabled_table_header": "Enabled",
|
"enabled_table_header": "Enabled",
|
||||||
"name_table_header": "Name",
|
"name_table_header": "Name",
|
||||||
"list_url_table_header": "List URL",
|
"list_url_table_header": "List URL",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "The query log has been successfully cleared",
|
"query_log_cleared": "The query log has been successfully cleared",
|
||||||
"query_log_updated": "The query log has been successfully updated",
|
"query_log_updated": "The query log has been successfully updated",
|
||||||
"query_log_clear": "Clear query logs",
|
"query_log_clear": "Clear query logs",
|
||||||
"query_log_retention": "Query logs retention",
|
"query_log_retention": "Query logs rotation",
|
||||||
"query_log_enable": "Enable log",
|
"query_log_enable": "Enable log",
|
||||||
"query_log_configuration": "Logs configuration",
|
"query_log_configuration": "Logs configuration",
|
||||||
"query_log_disabled": "The query log is disabled and can be configured in the <0>settings</0>",
|
"query_log_disabled": "The query log is disabled and can be configured in the <0>settings</0>",
|
||||||
"query_log_strict_search": "Use double quotes for strict search",
|
"query_log_strict_search": "Use double quotes for strict search",
|
||||||
"query_log_retention_confirm": "Are you sure you want to change query log retention? If you decrease the interval value, some data will be lost",
|
"query_log_retention_confirm": "Are you sure you want to change query log rotation? If you decrease the interval value, some data will be lost",
|
||||||
"anonymize_client_ip": "Anonymize client IP",
|
"anonymize_client_ip": "Anonymize client IP",
|
||||||
"anonymize_client_ip_desc": "Don't save the client's full IP address to logs or statistics",
|
"anonymize_client_ip_desc": "Don't save the client's full IP address to logs or statistics",
|
||||||
"dns_config": "DNS server configuration",
|
"dns_config": "DNS server configuration",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Rate limit",
|
"rate_limit": "Rate limit",
|
||||||
"edns_enable": "Enable EDNS client subnet",
|
"edns_enable": "Enable EDNS client subnet",
|
||||||
"edns_cs_desc": "Add the EDNS Client Subnet option (ECS) to upstream requests and log the values sent by the clients in the query log.",
|
"edns_cs_desc": "Add the EDNS Client Subnet option (ECS) to upstream requests and log the values sent by the clients in the query log.",
|
||||||
|
"edns_use_custom_ip": "Use custom IP for EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Allow to use custom IP for EDNS",
|
||||||
"rate_limit_desc": "The number of requests per second allowed per client. Setting it to 0 means no limit.",
|
"rate_limit_desc": "The number of requests per second allowed per client. Setting it to 0 means no limit.",
|
||||||
"blocking_ipv4_desc": "IP address to be returned for a blocked A request",
|
"blocking_ipv4_desc": "IP address to be returned for a blocked A request",
|
||||||
"blocking_ipv6_desc": "IP address to be returned for a blocked AAAA request",
|
"blocking_ipv6_desc": "IP address to be returned for a blocked AAAA request",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Respond with NXDOMAIN code",
|
"blocking_mode_nxdomain": "NXDOMAIN: Respond with NXDOMAIN code",
|
||||||
"blocking_mode_null_ip": "Null IP: Respond with zero IP address (0.0.0.0 for A; :: for AAAA)",
|
"blocking_mode_null_ip": "Null IP: Respond with zero IP address (0.0.0.0 for A; :: for AAAA)",
|
||||||
"blocking_mode_custom_ip": "Custom IP: Respond with a manually set IP address",
|
"blocking_mode_custom_ip": "Custom IP: Respond with a manually set IP address",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Light",
|
||||||
|
"theme_dark": "Dark",
|
||||||
"upstream_dns_client_desc": "If you keep this field empty, AdGuard Home will use the servers configured in the <0>DNS settings</0>.",
|
"upstream_dns_client_desc": "If you keep this field empty, AdGuard Home will use the servers configured in the <0>DNS settings</0>.",
|
||||||
"tracker_source": "Tracker source",
|
"tracker_source": "Tracker source",
|
||||||
"source_label": "Source",
|
"source_label": "Source",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "A new version of AdGuard Home is available",
|
"updates_checked": "A new version of AdGuard Home is available",
|
||||||
"updates_version_equal": "AdGuard Home is up-to-date",
|
"updates_version_equal": "AdGuard Home is up-to-date",
|
||||||
"check_updates_now": "Check for updates now",
|
"check_updates_now": "Check for updates now",
|
||||||
|
"version_request_error": "Update check failed. Please check your Internet connection.",
|
||||||
"dns_privacy": "DNS Privacy",
|
"dns_privacy": "DNS Privacy",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Use <1>{{address}}</1> string.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Use <1>{{address}}</1> string.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Use <1>{{address}}</1> string.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Use <1>{{address}}</1> string.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "In order to use <1>DNS-over-HTTPS</1> or <1>DNS-over-TLS</1>, you need to <0>configure Encryption</0> in AdGuard Home settings.",
|
"setup_dns_notice": "In order to use <1>DNS-over-HTTPS</1> or <1>DNS-over-TLS</1>, you need to <0>configure Encryption</0> in AdGuard Home settings.",
|
||||||
"rewrite_added": "DNS rewrite for \"{{key}}\" successfully added",
|
"rewrite_added": "DNS rewrite for \"{{key}}\" successfully added",
|
||||||
"rewrite_deleted": "DNS rewrite for \"{{key}}\" successfully deleted",
|
"rewrite_deleted": "DNS rewrite for \"{{key}}\" successfully deleted",
|
||||||
|
"rewrite_updated": "DNS rewrite successfully updated",
|
||||||
"rewrite_add": "Add DNS rewrite",
|
"rewrite_add": "Add DNS rewrite",
|
||||||
|
"rewrite_edit": "Edit DNS rewrite",
|
||||||
"rewrite_not_found": "No DNS rewrites found",
|
"rewrite_not_found": "No DNS rewrites found",
|
||||||
"rewrite_confirm_delete": "Are you sure you want to delete DNS rewrite for \"{{key}}\"?",
|
"rewrite_confirm_delete": "Are you sure you want to delete DNS rewrite for \"{{key}}\"?",
|
||||||
"rewrite_desc": "Allows to easily configure custom DNS response for a specific domain name.",
|
"rewrite_desc": "Allows to easily configure custom DNS response for a specific domain name.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Are you sure you want to change statistics retention? If you decrease the interval value, some data will be lost",
|
"statistics_retention_confirm": "Are you sure you want to change statistics retention? If you decrease the interval value, some data will be lost",
|
||||||
"statistics_cleared": "Statistics successfully cleared",
|
"statistics_cleared": "Statistics successfully cleared",
|
||||||
"statistics_enable": "Enable statistics",
|
"statistics_enable": "Enable statistics",
|
||||||
|
"ignore_domains": "Ignored domains (separated by newline)",
|
||||||
|
"ignore_domains_title": "Ignored domains",
|
||||||
|
"ignore_domains_desc_stats": "Queries for these domains are not written to the statistics",
|
||||||
|
"ignore_domains_desc_query": "Queries for these domains are not written to the query log",
|
||||||
"interval_hours": "{{count}} hour",
|
"interval_hours": "{{count}} hour",
|
||||||
"interval_hours_plural": "{{count}} hours",
|
"interval_hours_plural": "{{count}} hours",
|
||||||
"filters_configuration": "Filters configuration",
|
"filters_configuration": "Filters configuration",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Note:</0> IP anonymization is enabled. You can disable it in <1>General settings</1>.",
|
"anonymizer_notification": "<0>Note:</0> IP anonymization is enabled. You can disable it in <1>General settings</1>.",
|
||||||
"confirm_dns_cache_clear": "Are you sure you want to clear DNS cache?",
|
"confirm_dns_cache_clear": "Are you sure you want to clear DNS cache?",
|
||||||
"cache_cleared": "DNS cache successfully cleared",
|
"cache_cleared": "DNS cache successfully cleared",
|
||||||
"clear_cache": "Clear cache"
|
"clear_cache": "Clear cache",
|
||||||
|
"make_static": "Make static",
|
||||||
|
"theme_auto_desc": "Auto (based on the color scheme of your device)",
|
||||||
|
"theme_dark_desc": "Dark theme",
|
||||||
|
"theme_light_desc": "Light theme",
|
||||||
|
"disable_for_seconds": "For {{count}} second",
|
||||||
|
"disable_for_seconds_plural": "For {{count}} seconds",
|
||||||
|
"disable_for_minutes": "For {{count}} minute",
|
||||||
|
"disable_for_minutes_plural": "For {{count}} minutes",
|
||||||
|
"disable_for_hours": "For {{count}} hour",
|
||||||
|
"disable_for_hours_plural": "For {{count}} hours",
|
||||||
|
"disable_until_tomorrow": "Until tomorrow",
|
||||||
|
"disable_notify_for_seconds": "Disable protection for {{count}} second",
|
||||||
|
"disable_notify_for_seconds_plural": "Disable protection for {{count}} seconds",
|
||||||
|
"disable_notify_for_minutes": "Disable protection for {{count}} minute",
|
||||||
|
"disable_notify_for_minutes_plural": "Disable protection for {{count}} minutes",
|
||||||
|
"disable_notify_for_hours": "Disable protection for {{count}} hour",
|
||||||
|
"disable_notify_for_hours_plural": "Disable protection for {{count}} hours",
|
||||||
|
"disable_notify_until_tomorrow": "Disable protection until tomorrow",
|
||||||
|
"enable_protection_timer": "Protection will be enabled in {{time}}",
|
||||||
|
"custom_retention_input": "Enter retention in hours",
|
||||||
|
"custom_rotation_input": "Enter rotation in hours",
|
||||||
|
"protection_section_label": "Protection",
|
||||||
|
"log_and_stats_section_label": "Query log and statistics",
|
||||||
|
"ignore_query_log": "Ignore this client in query log",
|
||||||
|
"ignore_statistics": "Ignore this client in statistics"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Control parental habilitado",
|
"enabled_parental_toast": "Control parental habilitado",
|
||||||
"disabled_safe_search_toast": "Búsqueda segura deshabilitada",
|
"disabled_safe_search_toast": "Búsqueda segura deshabilitada",
|
||||||
"enabled_save_search_toast": "Búsqueda segura habilitada",
|
"enabled_save_search_toast": "Búsqueda segura habilitada",
|
||||||
|
"updated_save_search_toast": "Configuración de búsqueda segura actualizada",
|
||||||
"enabled_table_header": "Habilitado",
|
"enabled_table_header": "Habilitado",
|
||||||
"name_table_header": "Nombre",
|
"name_table_header": "Nombre",
|
||||||
"list_url_table_header": "URL de la lista",
|
"list_url_table_header": "URL de la lista",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "El registro de consultas se ha borrado correctamente",
|
"query_log_cleared": "El registro de consultas se ha borrado correctamente",
|
||||||
"query_log_updated": "El registro de consultas se ha actualizado correctamente",
|
"query_log_updated": "El registro de consultas se ha actualizado correctamente",
|
||||||
"query_log_clear": "Borrar registros de consultas",
|
"query_log_clear": "Borrar registros de consultas",
|
||||||
"query_log_retention": "Retención de registros de consultas",
|
"query_log_retention": "Rotanción de registros de consultas",
|
||||||
"query_log_enable": "Habilitar registro",
|
"query_log_enable": "Habilitar registro",
|
||||||
"query_log_configuration": "Configuración de registros",
|
"query_log_configuration": "Configuración de registros",
|
||||||
"query_log_disabled": "El registro de consultas está deshabilitado y se puede configurar en la <0>configuración</0>",
|
"query_log_disabled": "El registro de consultas está deshabilitado y se puede configurar en la <0>configuración</0>",
|
||||||
"query_log_strict_search": "Usar comillas dobles para una búsqueda estricta",
|
"query_log_strict_search": "Usar comillas dobles para una búsqueda estricta",
|
||||||
"query_log_retention_confirm": "¿Estás seguro de que deseas cambiar la retención del registro de consultas? Si disminuye el valor del intervalo, se perderán algunos datos",
|
"query_log_retention_confirm": "¿Está seguro de que deseas cambiar la rotación del registro de consultas? Si reduces el valor del intervalo, se perderán algunos datos",
|
||||||
"anonymize_client_ip": "Anonimizar IP del cliente",
|
"anonymize_client_ip": "Anonimizar IP del cliente",
|
||||||
"anonymize_client_ip_desc": "No guarda la dirección IP completa del cliente en registros o estadísticas",
|
"anonymize_client_ip_desc": "No guarda la dirección IP completa del cliente en registros o estadísticas",
|
||||||
"dns_config": "Configuración del servidor DNS",
|
"dns_config": "Configuración del servidor DNS",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Límite de cantidad",
|
"rate_limit": "Límite de cantidad",
|
||||||
"edns_enable": "Habilitar subred de cliente EDNS",
|
"edns_enable": "Habilitar subred de cliente EDNS",
|
||||||
"edns_cs_desc": "Añade la opción subred de cliente EDNS (ECS) a las peticiones del DNS de subida y registra los valores enviados por los clientes en el registro de consultas.",
|
"edns_cs_desc": "Añade la opción subred de cliente EDNS (ECS) a las peticiones del DNS de subida y registra los valores enviados por los clientes en el registro de consultas.",
|
||||||
|
"edns_use_custom_ip": "Usar IP personalizada para EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Permitir el uso de IP personalizadas para EDNS",
|
||||||
"rate_limit_desc": "Número de peticiones por segundo permitidas por cliente. Establecerlo en 0 significa que no hay límite.",
|
"rate_limit_desc": "Número de peticiones por segundo permitidas por cliente. Establecerlo en 0 significa que no hay límite.",
|
||||||
"blocking_ipv4_desc": "Dirección IP devolverá una petición A bloqueada",
|
"blocking_ipv4_desc": "Dirección IP devolverá una petición A bloqueada",
|
||||||
"blocking_ipv6_desc": "Dirección IP devolverá una petición AAAA bloqueada",
|
"blocking_ipv6_desc": "Dirección IP devolverá una petición AAAA bloqueada",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Responde con el código NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Responde con el código NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "IP nulo: Responde con dirección IP cero (0.0.0.0 para A; :: para AAAA)",
|
"blocking_mode_null_ip": "IP nulo: Responde con dirección IP cero (0.0.0.0 para A; :: para AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP personalizada: Responde con una dirección IP establecida manualmente",
|
"blocking_mode_custom_ip": "IP personalizada: Responde con una dirección IP establecida manualmente",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Claro",
|
||||||
|
"theme_dark": "Oscuro",
|
||||||
"upstream_dns_client_desc": "Si se mantiene este campo vacío, AdGuard Home utilizará los servidores configurados en la <0>configuración del DNS</0>.",
|
"upstream_dns_client_desc": "Si se mantiene este campo vacío, AdGuard Home utilizará los servidores configurados en la <0>configuración del DNS</0>.",
|
||||||
"tracker_source": "Fuente del rastreador",
|
"tracker_source": "Fuente del rastreador",
|
||||||
"source_label": "Fuente",
|
"source_label": "Fuente",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "La nueva versión de AdGuard Home está disponible",
|
"updates_checked": "La nueva versión de AdGuard Home está disponible",
|
||||||
"updates_version_equal": "AdGuard Home está actualizado",
|
"updates_version_equal": "AdGuard Home está actualizado",
|
||||||
"check_updates_now": "Buscar actualizaciones ahora",
|
"check_updates_now": "Buscar actualizaciones ahora",
|
||||||
|
"version_request_error": "Error buscar la actualización. Comprueba tu conexión a Internet.",
|
||||||
"dns_privacy": "DNS cifrado",
|
"dns_privacy": "DNS cifrado",
|
||||||
"setup_dns_privacy_1": "<0>DNS mediante TLS:</0> Utiliza la cadena <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS mediante TLS:</0> Utiliza la cadena <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS mediante HTTPS:</0> Utiliza la cadena <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS mediante HTTPS:</0> Utiliza la cadena <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Para utilizar <1>DNS mediante HTTPS</1> o <1>DNS mediante TLS</1>, debes <0>configurar el cifrado</0> en la configuración de AdGuard Home.",
|
"setup_dns_notice": "Para utilizar <1>DNS mediante HTTPS</1> o <1>DNS mediante TLS</1>, debes <0>configurar el cifrado</0> en la configuración de AdGuard Home.",
|
||||||
"rewrite_added": "Reescritura DNS para \"{{key}}\" añadido correctamente",
|
"rewrite_added": "Reescritura DNS para \"{{key}}\" añadido correctamente",
|
||||||
"rewrite_deleted": "Reescritura DNS para \"{{key}}\" eliminado correctamente",
|
"rewrite_deleted": "Reescritura DNS para \"{{key}}\" eliminado correctamente",
|
||||||
|
"rewrite_updated": "Reconfiguración de DNS actualizada correctamente",
|
||||||
"rewrite_add": "Añadir reescritura DNS",
|
"rewrite_add": "Añadir reescritura DNS",
|
||||||
|
"rewrite_edit": "Editar reconfiguración de DNS",
|
||||||
"rewrite_not_found": "No se han encontrado reescrituras DNS",
|
"rewrite_not_found": "No se han encontrado reescrituras DNS",
|
||||||
"rewrite_confirm_delete": "¿Estás seguro de que deseas eliminar la reescritura DNS para \"{{key}}\"?",
|
"rewrite_confirm_delete": "¿Estás seguro de que deseas eliminar la reescritura DNS para \"{{key}}\"?",
|
||||||
"rewrite_desc": "Permite configurar fácilmente la respuesta DNS personalizada para un nombre de dominio específico.",
|
"rewrite_desc": "Permite configurar fácilmente la respuesta DNS personalizada para un nombre de dominio específico.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "¿Estás seguro de que deseas cambiar la retención de estadísticas? Si disminuye el valor del intervalo, se perderán algunos datos",
|
"statistics_retention_confirm": "¿Estás seguro de que deseas cambiar la retención de estadísticas? Si disminuye el valor del intervalo, se perderán algunos datos",
|
||||||
"statistics_cleared": "Estadísticas borradas correctamente",
|
"statistics_cleared": "Estadísticas borradas correctamente",
|
||||||
"statistics_enable": "Habilitar estadísticas",
|
"statistics_enable": "Habilitar estadísticas",
|
||||||
|
"ignore_domains": "Dominios ignorados (separados por una nueva línea)",
|
||||||
|
"ignore_domains_title": "Dominios ignorados",
|
||||||
|
"ignore_domains_desc_stats": "Las consultas para estos dominios no aparecen en las estadísticas",
|
||||||
|
"ignore_domains_desc_query": "Las consultas para estos dominios no aparecen en el registro de consultas",
|
||||||
"interval_hours": "{{count}} hora",
|
"interval_hours": "{{count}} hora",
|
||||||
"interval_hours_plural": "{{count}} horas",
|
"interval_hours_plural": "{{count}} horas",
|
||||||
"filters_configuration": "Configuración de filtros",
|
"filters_configuration": "Configuración de filtros",
|
||||||
@@ -636,7 +649,32 @@
|
|||||||
"served_from_cache": "{{value}} <i>(servido desde la caché)</i>",
|
"served_from_cache": "{{value}} <i>(servido desde la caché)</i>",
|
||||||
"form_error_password_length": "La contraseña debe tener al menos {{value}} caracteres",
|
"form_error_password_length": "La contraseña debe tener al menos {{value}} caracteres",
|
||||||
"anonymizer_notification": "<0>Nota:</0> La anonimización de IP está habilitada. Puedes deshabilitarla en <1>Configuración general</1>.",
|
"anonymizer_notification": "<0>Nota:</0> La anonimización de IP está habilitada. Puedes deshabilitarla en <1>Configuración general</1>.",
|
||||||
"confirm_dns_cache_clear": "¿Estás seguro de que deseas borrar la caché de DNS?",
|
"confirm_dns_cache_clear": "¿Estás seguro de que deseas borrar la caché DNS?",
|
||||||
"cache_cleared": "Caché DNS borrado con éxito",
|
"cache_cleared": "Caché DNS borrado correctamente",
|
||||||
"clear_cache": "Borrar caché"
|
"clear_cache": "Borrar caché",
|
||||||
|
"make_static": "Hacer estático",
|
||||||
|
"theme_auto_desc": "Automático (basado en el esquema de colores de tu dispositivo)",
|
||||||
|
"theme_dark_desc": "Tema oscuro",
|
||||||
|
"theme_light_desc": "Tema claro",
|
||||||
|
"disable_for_seconds": "Por {{count}} segundo",
|
||||||
|
"disable_for_seconds_plural": "Por {{count}} segundos",
|
||||||
|
"disable_for_minutes": "Por {{count}} minuto",
|
||||||
|
"disable_for_minutes_plural": "Por {{count}} minutos",
|
||||||
|
"disable_for_hours": "Por {{count}} hora",
|
||||||
|
"disable_for_hours_plural": "Por {{count}} horas",
|
||||||
|
"disable_until_tomorrow": "Hasta mañana",
|
||||||
|
"disable_notify_for_seconds": "Desactivar la protección por {{count}} segundo",
|
||||||
|
"disable_notify_for_seconds_plural": "Desactivar la protección por {{count}} segundos",
|
||||||
|
"disable_notify_for_minutes": "Desactivar la protección por {{count}} minuto",
|
||||||
|
"disable_notify_for_minutes_plural": "Desactivar la protección por {{count}} minutos",
|
||||||
|
"disable_notify_for_hours": "Desactivar la protección por {{count}} hora",
|
||||||
|
"disable_notify_for_hours_plural": "Desactivar la protección por {{count}} horas",
|
||||||
|
"disable_notify_until_tomorrow": "Desactivar la protección hasta mañana",
|
||||||
|
"enable_protection_timer": "La protección se activará en {{time}}",
|
||||||
|
"custom_retention_input": "Ingresa la retención en horas",
|
||||||
|
"custom_rotation_input": "Ingresa la rotación en horas",
|
||||||
|
"protection_section_label": "Protección",
|
||||||
|
"log_and_stats_section_label": "Registro de consultas y estadísticas",
|
||||||
|
"ignore_query_log": "Ignorar este cliente en el registro de consultas",
|
||||||
|
"ignore_statistics": "Ignorar este cliente en las estadísticas"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,8 +32,6 @@
|
|||||||
"dhcp_config_saved": "پیکربندی سرور DHCP ذخیره شده است",
|
"dhcp_config_saved": "پیکربندی سرور DHCP ذخیره شده است",
|
||||||
"form_error_required": "فیلد مورد نیاز",
|
"form_error_required": "فیلد مورد نیاز",
|
||||||
"form_error_ip4_format": "فرمت نامعتبر IPv4",
|
"form_error_ip4_format": "فرمت نامعتبر IPv4",
|
||||||
"form_error_ip4_range_start_format": "قالب IPv4 شروع دامنه نامعتبر است",
|
|
||||||
"form_error_ip4_range_end_format": "قالب IPv4 پایان دامنه نامعتبر است",
|
|
||||||
"form_error_ip4_gateway_format": "قالب IPv4 درگاه نامعتبر است",
|
"form_error_ip4_gateway_format": "قالب IPv4 درگاه نامعتبر است",
|
||||||
"form_error_ip6_format": "فرمت نامعتبر IPv6",
|
"form_error_ip6_format": "فرمت نامعتبر IPv6",
|
||||||
"form_error_ip_format": "فرمت IPv4 نامعتبر است",
|
"form_error_ip_format": "فرمت IPv4 نامعتبر است",
|
||||||
@@ -44,7 +42,6 @@
|
|||||||
"out_of_range_error": "باید خارج از دامنه باشد\"{{start}}\"-\"{{end}}\"",
|
"out_of_range_error": "باید خارج از دامنه باشد\"{{start}}\"-\"{{end}}\"",
|
||||||
"lower_range_start_error": "باید کمتر از شروع دامنه باشد",
|
"lower_range_start_error": "باید کمتر از شروع دامنه باشد",
|
||||||
"greater_range_start_error": "باید بیشتر از شروع دامنه باشد",
|
"greater_range_start_error": "باید بیشتر از شروع دامنه باشد",
|
||||||
"greater_range_end_error": "باید بیشتر از پایان دامنه باشد",
|
|
||||||
"subnet_error": "آدرس ها باید در یک زیرشبکه باشند",
|
"subnet_error": "آدرس ها باید در یک زیرشبکه باشند",
|
||||||
"gateway_or_subnet_invalid": "پوشش زیرشبکه نامعتبر است",
|
"gateway_or_subnet_invalid": "پوشش زیرشبکه نامعتبر است",
|
||||||
"dhcp_form_gateway_input": "آی پی دروازه",
|
"dhcp_form_gateway_input": "آی پی دروازه",
|
||||||
@@ -271,6 +268,8 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: پاسخ با کُد NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: پاسخ با کُد NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "Null IP: پاسخ با آدرس آی پی صفر(0.0.0.0 برای A; :: برای AAAA)",
|
"blocking_mode_null_ip": "Null IP: پاسخ با آدرس آی پی صفر(0.0.0.0 برای A; :: برای AAAA)",
|
||||||
"blocking_mode_custom_ip": "آی پی دستی: پاسخ با آدرس آی پی دستی تنظیم شده",
|
"blocking_mode_custom_ip": "آی پی دستی: پاسخ با آدرس آی پی دستی تنظیم شده",
|
||||||
|
"theme_light": "پوسته روشن",
|
||||||
|
"theme_dark": "پوسته تیره",
|
||||||
"upstream_dns_client_desc": "اگر این فیلد را خالی نگه دارید، AdGuard Home از سرور پیکربندی شده در <0> تنظیماتDNS </0> استفاده می کند.",
|
"upstream_dns_client_desc": "اگر این فیلد را خالی نگه دارید، AdGuard Home از سرور پیکربندی شده در <0> تنظیماتDNS </0> استفاده می کند.",
|
||||||
"tracker_source": "منبع ردیاب",
|
"tracker_source": "منبع ردیاب",
|
||||||
"source_label": "منبع",
|
"source_label": "منبع",
|
||||||
@@ -422,6 +421,7 @@
|
|||||||
"updates_checked": "نسخه جدیدی از AdGuard Home در دسترس است",
|
"updates_checked": "نسخه جدیدی از AdGuard Home در دسترس است",
|
||||||
"updates_version_equal": "AdGuard Home بروز است",
|
"updates_version_equal": "AdGuard Home بروز است",
|
||||||
"check_updates_now": "حالا بررسی برای بروز رسانی",
|
"check_updates_now": "حالا بررسی برای بروز رسانی",
|
||||||
|
"version_request_error": "بررسی بروزرسانی موفق نشد.لطفا ارتباط اینترنتی خود را بررسی کنید",
|
||||||
"dns_privacy": "حریم خصوصی DNS",
|
"dns_privacy": "حریم خصوصی DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> استفاده از<1>{{address}}</1> .",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> استفاده از<1>{{address}}</1> .",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> استفاده از <1>{{address}}</1> .",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> استفاده از <1>{{address}}</1> .",
|
||||||
@@ -440,7 +440,9 @@
|
|||||||
"setup_dns_notice": "به منظور استفاده از <1>DNS-over-HTTPS</1> یا <1>DNS-over-TLS</1>، شما نیاز به <0>پیکربندی رمزگذاری</0> در تنظیمات AdGuard Home دارید.",
|
"setup_dns_notice": "به منظور استفاده از <1>DNS-over-HTTPS</1> یا <1>DNS-over-TLS</1>، شما نیاز به <0>پیکربندی رمزگذاری</0> در تنظیمات AdGuard Home دارید.",
|
||||||
"rewrite_added": "بازنویسی DNS برای \"{{key}}\" با موفقیت اضافه شد",
|
"rewrite_added": "بازنویسی DNS برای \"{{key}}\" با موفقیت اضافه شد",
|
||||||
"rewrite_deleted": "بازنویسی DNS برای \"{{key}}\" با موفقیت حذف شد",
|
"rewrite_deleted": "بازنویسی DNS برای \"{{key}}\" با موفقیت حذف شد",
|
||||||
|
"rewrite_updated": "بازنویسی DNS با موفقیت به روز شد",
|
||||||
"rewrite_add": "افزودن بازنویسی DNS",
|
"rewrite_add": "افزودن بازنویسی DNS",
|
||||||
|
"rewrite_edit": "بازنویسی DNS را ویرایش کنید",
|
||||||
"rewrite_not_found": "بازنویسی DNS یافت نشد",
|
"rewrite_not_found": "بازنویسی DNS یافت نشد",
|
||||||
"rewrite_confirm_delete": "آیا واقعا میخواهید بازنویسی DNS برای \"{{key}}\" را حذف کنید؟",
|
"rewrite_confirm_delete": "آیا واقعا میخواهید بازنویسی DNS برای \"{{key}}\" را حذف کنید؟",
|
||||||
"rewrite_desc": "به آسانی اجازه پیکربندی پاسخ DNS دستی برای یک نام دامنه خاص را می دهد.",
|
"rewrite_desc": "به آسانی اجازه پیکربندی پاسخ DNS دستی برای یک نام دامنه خاص را می دهد.",
|
||||||
@@ -569,5 +571,6 @@
|
|||||||
"use_saved_key": "از کلید ذخیره شده قبلی استفاده کنید",
|
"use_saved_key": "از کلید ذخیره شده قبلی استفاده کنید",
|
||||||
"parental_control": "نظارت والدین",
|
"parental_control": "نظارت والدین",
|
||||||
"safe_browsing": "وب گردی اَمن",
|
"safe_browsing": "وب گردی اَمن",
|
||||||
"form_error_password_length": "رمزعبور باید حداقل {{value}} کاراکتر باشد."
|
"form_error_password_length": "رمزعبور باید حداقل {{value}} کاراکتر باشد.",
|
||||||
|
"protection_section_label": "حفاظت"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,12 @@
|
|||||||
"bootstrap_dns": "Bootstrap DNS-palvelimet",
|
"bootstrap_dns": "Bootstrap DNS-palvelimet",
|
||||||
"bootstrap_dns_desc": "Bootstrap DNS-palvelimia käytetään ylävirroiksi määritettyjen DoH/DoT-resolvereiden IP-osoitteiden selvitykseen.",
|
"bootstrap_dns_desc": "Bootstrap DNS-palvelimia käytetään ylävirroiksi määritettyjen DoH/DoT-resolvereiden IP-osoitteiden selvitykseen.",
|
||||||
"local_ptr_title": "Yksityiset käänteiset DNS-palvelimet",
|
"local_ptr_title": "Yksityiset käänteiset DNS-palvelimet",
|
||||||
"local_ptr_desc": "DNS-palvelimet, joita AdGuard Home käyttää paikallisille PTR-kyselyille. Näitä palvelimia käytetään yksityistä IP-osoitetta käyttävien PTR-kyselyiden osoitteiden, kuten \"192.168.12.34\", selvitykseen käänteisen DNS:n avulla. Jos ei käytössä, AdGuard Home käyttää käyttöjärjestelmän oletusarvoisia DNS-resolvereita, poislukien AdGuard Homen omat osoitteet.",
|
"local_ptr_desc": "DNS-palvelimet, joita AdGuard Home käyttää paikallisille PTR-pyynnöille. Näitä palvelimia käytetään yksityistä IP-osoitetta käyttävien PTR-pyyntöjen osoitteiden, kuten \"192.168.12.34\", selvitykseen käänteisen DNS:n avulla. Jos ei käytössä, AdGuard Home käyttää käyttöjärjestelmän oletusarvoisia DNS-resolvereita, poislukien AdGuard Homen omat osoitteet.",
|
||||||
"local_ptr_default_resolver": "Oletusarvoisesti AdGuard Home käyttää seuraavia käänteisiä DNS-resolvereita: {{ip}}.",
|
"local_ptr_default_resolver": "Oletusarvoisesti AdGuard Home käyttää seuraavia käänteisiä DNS-resolvereita: {{ip}}.",
|
||||||
"local_ptr_no_default_resolver": "AdGuard Home ei voinut määrittää tälle järjestelmälle sopivaa yksityistä käänteistä DNS-resolveria.",
|
"local_ptr_no_default_resolver": "AdGuard Home ei voinut määrittää tälle järjestelmälle sopivaa yksityistä käänteistä DNS-resolveria.",
|
||||||
"local_ptr_placeholder": "Syötä yksi palvelimen osoite per rivi",
|
"local_ptr_placeholder": "Syötä yksi palvelimen osoite per rivi",
|
||||||
"resolve_clients_title": "Käytä päätelaitteiden IP-osoitteille käänteistä selvitystä",
|
"resolve_clients_title": "Käytä päätelaitteiden IP-osoitteille käänteistä selvitystä",
|
||||||
"resolve_clients_desc": "Selvitä päätelaitteiden IP-osoitteiden isäntänimet käänteisesti lähettämällä PTR-kyselyt sopiville resolvereille (yksityiset DNS-palvelimet paikallisille päätelaitteille, lähtevät palvelimet päätelaitteille, joilla on julkiset IP-osoitteet).",
|
"resolve_clients_desc": "Selvitä päätelaitteiden IP-osoitteiden isäntänimet käänteisesti lähettämällä PTR-pyynnöt sopiville resolvereille (yksityiset DNS-palvelimet paikallisille päätelaitteille, lähtevät palvelimet päätelaitteille, joilla on julkiset IP-osoitteet).",
|
||||||
"use_private_ptr_resolvers_title": "Käytä yksityisiä käänteisiä DNS-resolvereita",
|
"use_private_ptr_resolvers_title": "Käytä yksityisiä käänteisiä DNS-resolvereita",
|
||||||
"use_private_ptr_resolvers_desc": "Suorita käänteiset DNS-selvitykset paikallisesti tarjotuille osoitteille käyttäen näitä ylävirran palvelimia. Jos ei käytössä, vastaa AdGuard Home kaikkiin sen tyyppisiin PTR-pyyntöihin NXDOMAIN-arvolla, pois lukien DHCP, /etc/hosts, yms. -tiedoista tunnistettut päätelaitteet.",
|
"use_private_ptr_resolvers_desc": "Suorita käänteiset DNS-selvitykset paikallisesti tarjotuille osoitteille käyttäen näitä ylävirran palvelimia. Jos ei käytössä, vastaa AdGuard Home kaikkiin sen tyyppisiin PTR-pyyntöihin NXDOMAIN-arvolla, pois lukien DHCP, /etc/hosts, yms. -tiedoista tunnistettut päätelaitteet.",
|
||||||
"check_dhcp_servers": "Etsi DHCP-palvelimia",
|
"check_dhcp_servers": "Etsi DHCP-palvelimia",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"unavailable_dhcp": "DHCP ei ole käytettävissä",
|
"unavailable_dhcp": "DHCP ei ole käytettävissä",
|
||||||
"unavailable_dhcp_desc": "AdGuard Home ei voi suorittaa DHCP-palvelinta käyttöjärjestelmässäsi",
|
"unavailable_dhcp_desc": "AdGuard Home ei voi suorittaa DHCP-palvelinta käyttöjärjestelmässäsi",
|
||||||
"dhcp_title": "DHCP-palvelin (kokeellinen!)",
|
"dhcp_title": "DHCP-palvelin (kokeellinen!)",
|
||||||
"dhcp_description": "Jos reitittimessäsi ei ole DHCP-asetuksia, voit käyttää AdGuard Homen omaa sisäänrakennettua DHCP-palvelinta.",
|
"dhcp_description": "Jollei reitittimesi tarjoa DHCP-asetuksia, voit käyttää AdGuard Homen omaa sisäänrakennettua DHCP-palvelinta.",
|
||||||
"dhcp_enable": "Ota DHCP-palvelin käyttöön",
|
"dhcp_enable": "Ota DHCP-palvelin käyttöön",
|
||||||
"dhcp_disable": "Poista DHCP-palvelin käytöstä",
|
"dhcp_disable": "Poista DHCP-palvelin käytöstä",
|
||||||
"dhcp_not_found": "On turvallista ottaa sisäänrakennettu DHCP-palvelin käyttöön, koska AdGuard Home ei havainnut verkossa muita aktiivisia DHCP-palvelimia. Suosittelemme, että varmistat tämän vielä itse, koska automaattinen tunnistus ei ole 100% varma.",
|
"dhcp_not_found": "On turvallista ottaa sisäänrakennettu DHCP-palvelin käyttöön, koska AdGuard Home ei havainnut verkossa muita aktiivisia DHCP-palvelimia. Suosittelemme, että varmistat tämän vielä itse, koska automaattinen tunnistus ei ole 100% varma.",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"dhcp_add_static_lease": "Lisää kiinteä laina",
|
"dhcp_add_static_lease": "Lisää kiinteä laina",
|
||||||
"dhcp_reset_leases": "Tyhjennä kaikki lainat",
|
"dhcp_reset_leases": "Tyhjennä kaikki lainat",
|
||||||
"dhcp_reset_leases_confirm": "Haluatko varmasti tyhjentää kaikki lainat?",
|
"dhcp_reset_leases_confirm": "Haluatko varmasti tyhjentää kaikki lainat?",
|
||||||
"dhcp_reset_leases_success": "DHCP-lainat tyhjennettiin",
|
"dhcp_reset_leases_success": "DHCP-lainojen tyhjennys onnistui",
|
||||||
"dhcp_reset": "Haluatko varmasti palauttaa DHCP-asetukset?",
|
"dhcp_reset": "Haluatko varmasti palauttaa DHCP-asetukset?",
|
||||||
"country": "Maa",
|
"country": "Maa",
|
||||||
"city": "Kaupunki",
|
"city": "Kaupunki",
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
"request_details": "Pyynnön tiedot",
|
"request_details": "Pyynnön tiedot",
|
||||||
"client_details": "Päätelaitteen tiedot",
|
"client_details": "Päätelaitteen tiedot",
|
||||||
"details": "Yksityiskohdat",
|
"details": "Yksityiskohdat",
|
||||||
"back": "Takaisin",
|
"back": "Palaa takaisin",
|
||||||
"dashboard": "Tila",
|
"dashboard": "Tila",
|
||||||
"settings": "Asetukset",
|
"settings": "Asetukset",
|
||||||
"filters": "Suodattimet",
|
"filters": "Suodattimet",
|
||||||
@@ -146,8 +146,8 @@
|
|||||||
"no_servers_specified": "Palvelimia ei ole määritetty",
|
"no_servers_specified": "Palvelimia ei ole määritetty",
|
||||||
"general_settings": "Yleiset asetukset",
|
"general_settings": "Yleiset asetukset",
|
||||||
"dns_settings": "DNS-asetukset",
|
"dns_settings": "DNS-asetukset",
|
||||||
"dns_blocklists": "DNS-estolistat",
|
"dns_blocklists": "DNS-estot",
|
||||||
"dns_allowlists": "DNS-sallittujen listat",
|
"dns_allowlists": "DNS-sallinnat",
|
||||||
"dns_blocklists_desc": "AdGuard Home estää estolistalla olevat verkkotunnukset.",
|
"dns_blocklists_desc": "AdGuard Home estää estolistalla olevat verkkotunnukset.",
|
||||||
"dns_allowlists_desc": "DNS-sallittujen listalla olevat verkkotunnukset sallitaan myös silloin, jos ne ovat jollain muulla estolistalla.",
|
"dns_allowlists_desc": "DNS-sallittujen listalla olevat verkkotunnukset sallitaan myös silloin, jos ne ovat jollain muulla estolistalla.",
|
||||||
"custom_filtering_rules": "Omat suodatussäännöt",
|
"custom_filtering_rules": "Omat suodatussäännöt",
|
||||||
@@ -167,10 +167,11 @@
|
|||||||
"enabled_parental_toast": "Lapsilukko otettiin käyttöön",
|
"enabled_parental_toast": "Lapsilukko otettiin käyttöön",
|
||||||
"disabled_safe_search_toast": "Turvallinen haku poistettiin käytöstä",
|
"disabled_safe_search_toast": "Turvallinen haku poistettiin käytöstä",
|
||||||
"enabled_save_search_toast": "Turvallinen haku otettiin käyttöön",
|
"enabled_save_search_toast": "Turvallinen haku otettiin käyttöön",
|
||||||
|
"updated_save_search_toast": "Turvallisen haun asetukset päivitettiin",
|
||||||
"enabled_table_header": "Käytössä",
|
"enabled_table_header": "Käytössä",
|
||||||
"name_table_header": "Nimi",
|
"name_table_header": "Nimi",
|
||||||
"list_url_table_header": "Listan URL",
|
"list_url_table_header": "Listan URL",
|
||||||
"rules_count_table_header": "Sääntöjä",
|
"rules_count_table_header": "Sääntöjen määrä",
|
||||||
"last_time_updated_table_header": "Viimeisin päivitys",
|
"last_time_updated_table_header": "Viimeisin päivitys",
|
||||||
"actions_table_header": "Toiminnot",
|
"actions_table_header": "Toiminnot",
|
||||||
"request_table_header": "Pyyntö",
|
"request_table_header": "Pyyntö",
|
||||||
@@ -221,7 +222,7 @@
|
|||||||
"all_lists_up_to_date_toast": "Kaikki listat ovat ajan tasalla",
|
"all_lists_up_to_date_toast": "Kaikki listat ovat ajan tasalla",
|
||||||
"updated_upstream_dns_toast": "Ylävirtojen palvelimet tallennettiin",
|
"updated_upstream_dns_toast": "Ylävirtojen palvelimet tallennettiin",
|
||||||
"dns_test_ok_toast": "Määritetyt DNS-palvelimet toimivat oikein",
|
"dns_test_ok_toast": "Määritetyt DNS-palvelimet toimivat oikein",
|
||||||
"dns_test_not_ok_toast": "Palvelin \"{{key}}\": ei voitu käyttää, tarkista sen oikeinkirjoitus",
|
"dns_test_not_ok_toast": "Palvelin \"{{key}}\": Ei voitu käyttää, tarkista oikeinkirjoitus",
|
||||||
"dns_test_warning_toast": "Datavuon \"{{key}}\" ei vastaa testipyyntöihin eikä välttämättä toimi kunnolla",
|
"dns_test_warning_toast": "Datavuon \"{{key}}\" ei vastaa testipyyntöihin eikä välttämättä toimi kunnolla",
|
||||||
"unblock": "Salli",
|
"unblock": "Salli",
|
||||||
"block": "Estä",
|
"block": "Estä",
|
||||||
@@ -253,15 +254,15 @@
|
|||||||
"query_log_response_status": "Tila: {{value}}",
|
"query_log_response_status": "Tila: {{value}}",
|
||||||
"query_log_filtered": "Suodattanut {{filter}}",
|
"query_log_filtered": "Suodattanut {{filter}}",
|
||||||
"query_log_confirm_clear": "Haluatko varmasti tyhjentää pyyntöhistorian?",
|
"query_log_confirm_clear": "Haluatko varmasti tyhjentää pyyntöhistorian?",
|
||||||
"query_log_cleared": "Pyyntöhistoria tyhjennettiin",
|
"query_log_cleared": "Pyyntöhistorian tyhjennys onnistui",
|
||||||
"query_log_updated": "Pyyntöhistoria päivitettiin",
|
"query_log_updated": "Pyyntöhistorian päivitys onnistui",
|
||||||
"query_log_clear": "Tyhjennä pyyntöhistoria",
|
"query_log_clear": "Tyhjennä pyyntöhistoria",
|
||||||
"query_log_retention": "Pyyntöhistorian säilytys",
|
"query_log_retention": "Kyselylokien kierto",
|
||||||
"query_log_enable": "Käytä historiaa",
|
"query_log_enable": "Käytä historiaa",
|
||||||
"query_log_configuration": "Historian määritys",
|
"query_log_configuration": "Historian määritys",
|
||||||
"query_log_disabled": "Pyyntöhistoria ei ole käytössä. Voit ottaa sen käyttöön <0>asetuksissa</0>",
|
"query_log_disabled": "Pyyntöhistoria ei ole käytössä. Voit ottaa sen käyttöön <0>asetuksissa</0>",
|
||||||
"query_log_strict_search": "Käytä tarkalle haulle lainausmerkkejä",
|
"query_log_strict_search": "Käytä tarkalle haulle lainausmerkkejä",
|
||||||
"query_log_retention_confirm": "Haluatko varmasti muuttaa pyyntöhistoriasi säilytysaikaa? Jos lyhennät aikaa, joitakin tietoja menetetään",
|
"query_log_retention_confirm": "Haluatko varmasti muuttaa kyselylokin kiertoa? Jos pienennät intervalliarvoa, osa tiedoista menetetään",
|
||||||
"anonymize_client_ip": "Piilota päätelaitteen IP-osoite",
|
"anonymize_client_ip": "Piilota päätelaitteen IP-osoite",
|
||||||
"anonymize_client_ip_desc": "Älä tallenna päätelaitteen täydellistä IP-osoitetta historiaan ja tilastoihin.",
|
"anonymize_client_ip_desc": "Älä tallenna päätelaitteen täydellistä IP-osoitetta historiaan ja tilastoihin.",
|
||||||
"dns_config": "DNS-palvelimen määritys",
|
"dns_config": "DNS-palvelimen määritys",
|
||||||
@@ -272,7 +273,7 @@
|
|||||||
"nxdomain": "NXDOMAIN",
|
"nxdomain": "NXDOMAIN",
|
||||||
"refused": "REFUSED",
|
"refused": "REFUSED",
|
||||||
"null_ip": "Tyhjä IP",
|
"null_ip": "Tyhjä IP",
|
||||||
"custom_ip": "Oma IP-osoite",
|
"custom_ip": "Mukautettu IP-osoite",
|
||||||
"blocking_ipv4": "IPv4-esto",
|
"blocking_ipv4": "IPv4-esto",
|
||||||
"blocking_ipv6": "IPv6-esto",
|
"blocking_ipv6": "IPv6-esto",
|
||||||
"dnscrypt": "DNSCrypt",
|
"dnscrypt": "DNSCrypt",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Pyyntöjen ajoitus",
|
"rate_limit": "Pyyntöjen ajoitus",
|
||||||
"edns_enable": "Käytä EDNS-päätelaitealivekkoa",
|
"edns_enable": "Käytä EDNS-päätelaitealivekkoa",
|
||||||
"edns_cs_desc": "Lähetä päätelaitteiden aliverkot DNS-palvelimille.",
|
"edns_cs_desc": "Lähetä päätelaitteiden aliverkot DNS-palvelimille.",
|
||||||
|
"edns_use_custom_ip": "Käytä omaa IP-osoitetta EDNS:lle",
|
||||||
|
"edns_use_custom_ip_desc": "Salli oman IP-osoitteen käyttö EDNS-mekanismille.",
|
||||||
"rate_limit_desc": "Päätelaitteelle sallittu pyyntöjen enimmäismäärä sekunnissa. Arvo 0 tarkoittaa rajatonta.",
|
"rate_limit_desc": "Päätelaitteelle sallittu pyyntöjen enimmäismäärä sekunnissa. Arvo 0 tarkoittaa rajatonta.",
|
||||||
"blocking_ipv4_desc": "Estettyyn A-pyyntöön palautettava IP-osoite",
|
"blocking_ipv4_desc": "Estettyyn A-pyyntöön palautettava IP-osoite",
|
||||||
"blocking_ipv6_desc": "Estettyyn AAAA-pyyntöön palautettava IP-osoite",
|
"blocking_ipv6_desc": "Estettyyn AAAA-pyyntöön palautettava IP-osoite",
|
||||||
@@ -297,7 +300,10 @@
|
|||||||
"blocking_mode_refused": "REFUSED: Vastaa REFUSED-koodilla",
|
"blocking_mode_refused": "REFUSED: Vastaa REFUSED-koodilla",
|
||||||
"blocking_mode_nxdomain": "NXDOMAIN: Vastaa NXDOMAIN-koodilla",
|
"blocking_mode_nxdomain": "NXDOMAIN: Vastaa NXDOMAIN-koodilla",
|
||||||
"blocking_mode_null_ip": "Tyhjä IP: Vastaa IP-nollaosoitteella (0.0.0.0 korvaa A; :: korvaa AAAA)",
|
"blocking_mode_null_ip": "Tyhjä IP: Vastaa IP-nollaosoitteella (0.0.0.0 korvaa A; :: korvaa AAAA)",
|
||||||
"blocking_mode_custom_ip": "Oma IP: Vastaa itse määritetyllä IP-osoitteella",
|
"blocking_mode_custom_ip": "Mukautettu IP: Vastaa manuaalisesti määritetyllä IP-osoitteella",
|
||||||
|
"theme_auto": "Automaattinen",
|
||||||
|
"theme_light": "Vaalea",
|
||||||
|
"theme_dark": "Tumma",
|
||||||
"upstream_dns_client_desc": "Jos tämä on tyhjä, käyttää AdGuard Home <0>DNS-asetuksissa</0> määritettyjä palvelimia.",
|
"upstream_dns_client_desc": "Jos tämä on tyhjä, käyttää AdGuard Home <0>DNS-asetuksissa</0> määritettyjä palvelimia.",
|
||||||
"tracker_source": "Seurannan lähde",
|
"tracker_source": "Seurannan lähde",
|
||||||
"source_label": "Lähde",
|
"source_label": "Lähde",
|
||||||
@@ -364,7 +370,7 @@
|
|||||||
"encryption_config_saved": "Salausasetukset tallennettiin",
|
"encryption_config_saved": "Salausasetukset tallennettiin",
|
||||||
"encryption_server": "Palvelimen nimi",
|
"encryption_server": "Palvelimen nimi",
|
||||||
"encryption_server_enter": "Syötä verkkotunnuksesi",
|
"encryption_server_enter": "Syötä verkkotunnuksesi",
|
||||||
"encryption_server_desc": "Jos määritetty, AdGuard Home tunnistaa ClientID-tunnisteet, vastaa DDR-kyselyihin ja suorittaa yhteyden lisätarkistuksia. Jos ei määritetty, nämä ominaisuudet eivät ole käytössä. On vastattava yhtä varmenteen DNS-nimistä.",
|
"encryption_server_desc": "Jos määritetty, AdGuard Home tunnistaa ClientID-tunnisteet, vastaa DDR-pyyntöihin ja suorittaa yhteyden lisätarkistuksia. Jos ei määritetty, nämä ominaisuudet eivät ole käytössä. On vastattava yhtä varmenteen DNS-nimistä.",
|
||||||
"encryption_redirect": "Automaattinen HTTPS-ohjaus",
|
"encryption_redirect": "Automaattinen HTTPS-ohjaus",
|
||||||
"encryption_redirect_desc": "Jos käytössä, AdGuard Home ohjaa HTTP-osoitteet automaattisesti HTTPS-osoitteisiin.",
|
"encryption_redirect_desc": "Jos käytössä, AdGuard Home ohjaa HTTP-osoitteet automaattisesti HTTPS-osoitteisiin.",
|
||||||
"encryption_https": "HTTPS-portti",
|
"encryption_https": "HTTPS-portti",
|
||||||
@@ -413,7 +419,7 @@
|
|||||||
"clients_title": "Pysyvät päätelaitteet",
|
"clients_title": "Pysyvät päätelaitteet",
|
||||||
"clients_desc": "Määritä pysyvät AdGuard Homeen yhdistetyt päätelaitetiedot.",
|
"clients_desc": "Määritä pysyvät AdGuard Homeen yhdistetyt päätelaitetiedot.",
|
||||||
"settings_global": "Yleinen",
|
"settings_global": "Yleinen",
|
||||||
"settings_custom": "Muut aiheet",
|
"settings_custom": "Mukautettu",
|
||||||
"table_client": "Asiakas",
|
"table_client": "Asiakas",
|
||||||
"table_name": "Nimi",
|
"table_name": "Nimi",
|
||||||
"save_btn": "Tallenna",
|
"save_btn": "Tallenna",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Uusi versio AdGuard Home -ohjelmasta on saatavana\n",
|
"updates_checked": "Uusi versio AdGuard Home -ohjelmasta on saatavana\n",
|
||||||
"updates_version_equal": "AdGuard Home on ajan tasalla",
|
"updates_version_equal": "AdGuard Home on ajan tasalla",
|
||||||
"check_updates_now": "Tarkista päivitykset nyt",
|
"check_updates_now": "Tarkista päivitykset nyt",
|
||||||
|
"version_request_error": "Päivitystarkistus epäonnistui. Tarkista Internet-yhteytesi.",
|
||||||
"dns_privacy": "DNS-tietosuoja",
|
"dns_privacy": "DNS-tietosuoja",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Käytä merkkijonoa <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Käytä merkkijonoa <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Käytä merkkijonoa <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Käytä merkkijonoa <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "<1>DNS-over-HTTPS</1> tai <1>DNS-over-TLS</1> -toteutuksia varten, on AdGuard Homen <0>Salausasetukset</0> määritettävä.",
|
"setup_dns_notice": "<1>DNS-over-HTTPS</1> tai <1>DNS-over-TLS</1> -toteutuksia varten, on AdGuard Homen <0>Salausasetukset</0> määritettävä.",
|
||||||
"rewrite_added": "Kohteen \"{{key}}\" DNS-uudelleenohjaus lisättiin",
|
"rewrite_added": "Kohteen \"{{key}}\" DNS-uudelleenohjaus lisättiin",
|
||||||
"rewrite_deleted": "Kohteen \"{{key}}\" DNS-uudelleenohjaus poistettiin",
|
"rewrite_deleted": "Kohteen \"{{key}}\" DNS-uudelleenohjaus poistettiin",
|
||||||
|
"rewrite_updated": "DNS-uudelleenohjaukset päivitettiin",
|
||||||
"rewrite_add": "Lisää DNS-uudelleenohjaus",
|
"rewrite_add": "Lisää DNS-uudelleenohjaus",
|
||||||
|
"rewrite_edit": "Muokkaa DNS-uudelleenohjausta",
|
||||||
"rewrite_not_found": "DNS-uudelleenohjauksia ei löytynyt",
|
"rewrite_not_found": "DNS-uudelleenohjauksia ei löytynyt",
|
||||||
"rewrite_confirm_delete": "Haluatko varmasti poistaa DNS-uudelleenohjauksen kohteelle \"{{key}}\"?",
|
"rewrite_confirm_delete": "Haluatko varmasti poistaa DNS-uudelleenohjauksen kohteelle \"{{key}}\"?",
|
||||||
"rewrite_desc": "Mahdollistaa oman DNS-vastauksen helpon määrityksen tietylle verkkotunnukselle.",
|
"rewrite_desc": "Mahdollistaa oman DNS-vastauksen helpon määrityksen tietylle verkkotunnukselle.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Haluatko varmasti muuttaa tilastojen säilytysaikaa? Jos aikaa lyhennetään, joitakin tietoja menetetään.",
|
"statistics_retention_confirm": "Haluatko varmasti muuttaa tilastojen säilytysaikaa? Jos aikaa lyhennetään, joitakin tietoja menetetään.",
|
||||||
"statistics_cleared": "Tilastot tyhjennettiin",
|
"statistics_cleared": "Tilastot tyhjennettiin",
|
||||||
"statistics_enable": "Ota tilastointi käyttöön",
|
"statistics_enable": "Ota tilastointi käyttöön",
|
||||||
|
"ignore_domains": "Ohitettavat verkkotunnukset (erotettu rivinvaihdolla)",
|
||||||
|
"ignore_domains_title": "Ohitettavat verkkotunnukset",
|
||||||
|
"ignore_domains_desc_stats": "Näihin verkkotunnuksiin lähetettyjä pyyntöjä ei tallenneta tilastoihin.",
|
||||||
|
"ignore_domains_desc_query": "Näihin verkkotunnuksiin lähetettyjä pyyntöjä ei tallenneta pyyntöhistoriaan.",
|
||||||
"interval_hours": "{{count}} tunti",
|
"interval_hours": "{{count}} tunti",
|
||||||
"interval_hours_plural": "{{count}} tuntia",
|
"interval_hours_plural": "{{count}} tuntia",
|
||||||
"filters_configuration": "Suodatinten määritys",
|
"filters_configuration": "Suodatinten määritys",
|
||||||
@@ -614,9 +627,9 @@
|
|||||||
"cache_ttl_max_override_desc": "Määritä DNS-välimuistin kohteiden enimmäiselinaika (sekunteina).",
|
"cache_ttl_max_override_desc": "Määritä DNS-välimuistin kohteiden enimmäiselinaika (sekunteina).",
|
||||||
"ttl_cache_validation": "Välimuistin vähimmäiselinajan on oltava pienempi tai sama kuin enimmäiselinajan",
|
"ttl_cache_validation": "Välimuistin vähimmäiselinajan on oltava pienempi tai sama kuin enimmäiselinajan",
|
||||||
"cache_optimistic": "Optimistinen välimuisti",
|
"cache_optimistic": "Optimistinen välimuisti",
|
||||||
"cache_optimistic_desc": "Pakota AdGuard Home vastaamaan välimuistista vaikka sen tiedot olisivat vanhentuneet. Pyri samalla myös päivittämään tiedot.",
|
"cache_optimistic_desc": "Pakota AdGuard Home vastaamaan välimuistista vaikka tiedot olisivat vanhentuneet. Pyri samalla myös päivittämään tiedot.",
|
||||||
"filter_category_general": "Yleiset",
|
"filter_category_general": "Yleiset",
|
||||||
"filter_category_security": "Turvallisuus",
|
"filter_category_security": "Tietoturva",
|
||||||
"filter_category_regional": "Alueelliset",
|
"filter_category_regional": "Alueelliset",
|
||||||
"filter_category_other": "Muut",
|
"filter_category_other": "Muut",
|
||||||
"filter_category_general_desc": "Listat, jotka estävät seurannan ja mainokset useimmilla laitteilla",
|
"filter_category_general_desc": "Listat, jotka estävät seurannan ja mainokset useimmilla laitteilla",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Huomioi:</0> IP-osoitteen anonymisointi on käytössä. Voit poistaa sen käytöstä <1>Yleisistä asetuksista</1>.",
|
"anonymizer_notification": "<0>Huomioi:</0> IP-osoitteen anonymisointi on käytössä. Voit poistaa sen käytöstä <1>Yleisistä asetuksista</1>.",
|
||||||
"confirm_dns_cache_clear": "Haluatko varmasti tyhjentää DNS-välimuistin?",
|
"confirm_dns_cache_clear": "Haluatko varmasti tyhjentää DNS-välimuistin?",
|
||||||
"cache_cleared": "DNS-välimuistin tyhjennys onnistui",
|
"cache_cleared": "DNS-välimuistin tyhjennys onnistui",
|
||||||
"clear_cache": "Tyhjennä välimuisti"
|
"clear_cache": "Tyhjennä välimuisti",
|
||||||
|
"make_static": "Tallenna kiinteäksi",
|
||||||
|
"theme_auto_desc": "Automaattinen (seuraa laitteen väriteemaa)",
|
||||||
|
"theme_dark_desc": "Tumma teema",
|
||||||
|
"theme_light_desc": "Vaalea teema",
|
||||||
|
"disable_for_seconds": "{{count}} sekunniksi",
|
||||||
|
"disable_for_seconds_plural": "{{count}} sekunniksi",
|
||||||
|
"disable_for_minutes": "{{count}} minuutiksi",
|
||||||
|
"disable_for_minutes_plural": "{{count}} minuutiksi",
|
||||||
|
"disable_for_hours": "{{count}} tunniksi",
|
||||||
|
"disable_for_hours_plural": "{{count}} tunniksi",
|
||||||
|
"disable_until_tomorrow": "Huomiseen asti",
|
||||||
|
"disable_notify_for_seconds": "Poista suojaus käytöstä {{count}} sekunniksi",
|
||||||
|
"disable_notify_for_seconds_plural": "Poista suojaus käytöstä {{count}} sekunniksi",
|
||||||
|
"disable_notify_for_minutes": "Poista suojaus käytöstä {{count}} minuutiksi",
|
||||||
|
"disable_notify_for_minutes_plural": "Poista suojaus käytöstä {{count}} minuutiksi",
|
||||||
|
"disable_notify_for_hours": "Poista suojaus käytöstä {{count}} tunniksi",
|
||||||
|
"disable_notify_for_hours_plural": "Poista suojaus käytöstä {{count}} tunniksi",
|
||||||
|
"disable_notify_until_tomorrow": "Poista suojaus käytöstä huomiseen asti",
|
||||||
|
"enable_protection_timer": "Suojaus otetaan käyttöön {{time}} kuluttua",
|
||||||
|
"custom_retention_input": "Syötä säilytysaika tunteina",
|
||||||
|
"custom_rotation_input": "Syötä uudistusaika tunteina",
|
||||||
|
"protection_section_label": "Suojaus",
|
||||||
|
"log_and_stats_section_label": "Kyselyhistoria ja tilastot",
|
||||||
|
"ignore_query_log": "Älä huomioi tätä päätettä kyselyhistoriassa",
|
||||||
|
"ignore_statistics": "Älä huomioi tätä päätettä tilastoissa"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Contrôle Parental activé",
|
"enabled_parental_toast": "Contrôle Parental activé",
|
||||||
"disabled_safe_search_toast": "Recherche Sécurisée désactivée",
|
"disabled_safe_search_toast": "Recherche Sécurisée désactivée",
|
||||||
"enabled_save_search_toast": "Recherche Sécurisée activée",
|
"enabled_save_search_toast": "Recherche Sécurisée activée",
|
||||||
|
"updated_save_search_toast": "Les paramètres de Recherche sécurisée sont mis à jour",
|
||||||
"enabled_table_header": "Activé",
|
"enabled_table_header": "Activé",
|
||||||
"name_table_header": "Nom",
|
"name_table_header": "Nom",
|
||||||
"list_url_table_header": "URL de la liste",
|
"list_url_table_header": "URL de la liste",
|
||||||
@@ -222,7 +223,7 @@
|
|||||||
"updated_upstream_dns_toast": "Serveurs en amont enregistrés",
|
"updated_upstream_dns_toast": "Serveurs en amont enregistrés",
|
||||||
"dns_test_ok_toast": "Les serveurs DNS spécifiés fonctionnent correctement",
|
"dns_test_ok_toast": "Les serveurs DNS spécifiés fonctionnent correctement",
|
||||||
"dns_test_not_ok_toast": "Impossible d'utiliser le serveur « {{key}} »: veuillez vérifier si le nom saisi est bien correct",
|
"dns_test_not_ok_toast": "Impossible d'utiliser le serveur « {{key}} »: veuillez vérifier si le nom saisi est bien correct",
|
||||||
"dns_test_warning_toast": "L'amont «{{key}}» ne répond pas aux demandes de test et peut ne pas fonctionner correctement",
|
"dns_test_warning_toast": "L'amont « {{key}} » ne répond pas aux demandes de test et peut ne pas fonctionner correctement",
|
||||||
"unblock": "Débloquer",
|
"unblock": "Débloquer",
|
||||||
"block": "Bloquer",
|
"block": "Bloquer",
|
||||||
"disallow_this_client": "Interdire ce client",
|
"disallow_this_client": "Interdire ce client",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Le journal des requêtes a été effacé",
|
"query_log_cleared": "Le journal des requêtes a été effacé",
|
||||||
"query_log_updated": "Le journal des requêtes a été mis à jour",
|
"query_log_updated": "Le journal des requêtes a été mis à jour",
|
||||||
"query_log_clear": "Effacer journal des requêtes",
|
"query_log_clear": "Effacer journal des requêtes",
|
||||||
"query_log_retention": "Rétention du journal des requêtes",
|
"query_log_retention": "Rotation des journaux de requêtes",
|
||||||
"query_log_enable": "Activer le journal",
|
"query_log_enable": "Activer le journal",
|
||||||
"query_log_configuration": "Configuration du journal",
|
"query_log_configuration": "Configuration du journal",
|
||||||
"query_log_disabled": "Le journal des requêtes est désactivé et peut être configuré dans les <0>paramètres</0>",
|
"query_log_disabled": "Le journal des requêtes est désactivé et peut être configuré dans les <0>paramètres</0>",
|
||||||
"query_log_strict_search": "Utilisez les doubles guillemets pour une recherche stricte",
|
"query_log_strict_search": "Utilisez les doubles guillemets pour une recherche stricte",
|
||||||
"query_log_retention_confirm": "Êtes-vous sûr de vouloir modifier la rétention des journaux de requêtes ? Si vous diminuez la valeur de l'intervalle, certaines données seront perdues",
|
"query_log_retention_confirm": "Êtes-vous sûr de souhaiter modifier la rotation des journaux de requêtes ? Si vous diminuez la valeur de l'intervalle, certaines données seront perdues",
|
||||||
"anonymize_client_ip": "Anonymiser l’IP du client",
|
"anonymize_client_ip": "Anonymiser l’IP du client",
|
||||||
"anonymize_client_ip_desc": "Ne pas enregistrer l’adresse IP complète du client dans les journaux et statistiques",
|
"anonymize_client_ip_desc": "Ne pas enregistrer l’adresse IP complète du client dans les journaux et statistiques",
|
||||||
"dns_config": "Configuration du serveur DNS",
|
"dns_config": "Configuration du serveur DNS",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Limite de taux",
|
"rate_limit": "Limite de taux",
|
||||||
"edns_enable": "Activer le sous-réseau du client EDNS",
|
"edns_enable": "Activer le sous-réseau du client EDNS",
|
||||||
"edns_cs_desc": "Ajouter l'option du sous-réseau Client EDNS (ECS) au requêtes en amont et enregistrer les valeurs envoyées par les clients dans le journal des requêtes.",
|
"edns_cs_desc": "Ajouter l'option du sous-réseau Client EDNS (ECS) au requêtes en amont et enregistrer les valeurs envoyées par les clients dans le journal des requêtes.",
|
||||||
|
"edns_use_custom_ip": "Utiliser une IP personnalisée pour EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Autoriser l'utilisation d'une adresse IP personnalisée pour EDNS",
|
||||||
"rate_limit_desc": "Le nombre de requêtes par seconde qu’un seul client est autorisé à faire. Le réglage 0 fait illimité.",
|
"rate_limit_desc": "Le nombre de requêtes par seconde qu’un seul client est autorisé à faire. Le réglage 0 fait illimité.",
|
||||||
"blocking_ipv4_desc": "Adresse IP à renvoyer pour une demande A bloquée",
|
"blocking_ipv4_desc": "Adresse IP à renvoyer pour une demande A bloquée",
|
||||||
"blocking_ipv6_desc": "Adresse IP à renvoyer pour une demande AAAA bloquée",
|
"blocking_ipv6_desc": "Adresse IP à renvoyer pour une demande AAAA bloquée",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN : Répondre avec le code NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN : Répondre avec le code NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "IP nulle : Répondre avec une adresse IP nulle (0.0.0.0 pour A ; :: pour AAAA)",
|
"blocking_mode_null_ip": "IP nulle : Répondre avec une adresse IP nulle (0.0.0.0 pour A ; :: pour AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP personnalisée : Répondre avec une adresse IP définie manuellement",
|
"blocking_mode_custom_ip": "IP personnalisée : Répondre avec une adresse IP définie manuellement",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Thème clair",
|
||||||
|
"theme_dark": "Thème sombre",
|
||||||
"upstream_dns_client_desc": "Si vous laissez ce champ vide, AdGuard Home utilisera les serveurs configurés dans les <0>paramètres DNS</0>.",
|
"upstream_dns_client_desc": "Si vous laissez ce champ vide, AdGuard Home utilisera les serveurs configurés dans les <0>paramètres DNS</0>.",
|
||||||
"tracker_source": "Source du traceur",
|
"tracker_source": "Source du traceur",
|
||||||
"source_label": "Source",
|
"source_label": "Source",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Une nouvelle version de AdGuard Home est disponible",
|
"updates_checked": "Une nouvelle version de AdGuard Home est disponible",
|
||||||
"updates_version_equal": "AdGuard Home est à jour",
|
"updates_version_equal": "AdGuard Home est à jour",
|
||||||
"check_updates_now": "Vérifier les mises à jour",
|
"check_updates_now": "Vérifier les mises à jour",
|
||||||
|
"version_request_error": "Impossible de vérifier les mises à jour. Veuillez vérifier votre connexion internet.",
|
||||||
"dns_privacy": "Confidentialité DNS",
|
"dns_privacy": "Confidentialité DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS :</0> Utiliser le string <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS :</0> Utiliser le string <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS :</0> Utiliser le string <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS :</0> Utiliser le string <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Pour utiliser le <1>DNS-over-HTTPS</1> ou le <1>DNS-over-TLS</1>, vous devez <0>configurer le Chiffrement</0> dans les paramètres de AdGuard Home.",
|
"setup_dns_notice": "Pour utiliser le <1>DNS-over-HTTPS</1> ou le <1>DNS-over-TLS</1>, vous devez <0>configurer le Chiffrement</0> dans les paramètres de AdGuard Home.",
|
||||||
"rewrite_added": "Réécriture DNS pour « {{key}} » ajoutée",
|
"rewrite_added": "Réécriture DNS pour « {{key}} » ajoutée",
|
||||||
"rewrite_deleted": "Réécriture DNS pour « {{key}} » supprimée",
|
"rewrite_deleted": "Réécriture DNS pour « {{key}} » supprimée",
|
||||||
|
"rewrite_updated": "Réécriture DNS mise à jour",
|
||||||
"rewrite_add": "Ajouter une réécriture DNS",
|
"rewrite_add": "Ajouter une réécriture DNS",
|
||||||
|
"rewrite_edit": "Modifier la réécriture DNS",
|
||||||
"rewrite_not_found": "Aucune réécriture DNS trouvée",
|
"rewrite_not_found": "Aucune réécriture DNS trouvée",
|
||||||
"rewrite_confirm_delete": "Voulez-vous vraiment supprimer la réécriture DNS pour « {{key}} » ?",
|
"rewrite_confirm_delete": "Voulez-vous vraiment supprimer la réécriture DNS pour « {{key}} » ?",
|
||||||
"rewrite_desc": "Permet de configurer facilement la réponse DNS personnalisée pour un nom de domaine spécifique.",
|
"rewrite_desc": "Permet de configurer facilement la réponse DNS personnalisée pour un nom de domaine spécifique.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Êtes-vous sûr de vouloir modifier le maintien des statistiques ? Si vous diminuez la valeur de l'intervalle, certaines données seront perdues",
|
"statistics_retention_confirm": "Êtes-vous sûr de vouloir modifier le maintien des statistiques ? Si vous diminuez la valeur de l'intervalle, certaines données seront perdues",
|
||||||
"statistics_cleared": "Statistiques effacées",
|
"statistics_cleared": "Statistiques effacées",
|
||||||
"statistics_enable": "Activer les statistiques",
|
"statistics_enable": "Activer les statistiques",
|
||||||
|
"ignore_domains": "Domaines ignorés (séparés par une nouvelle ligne)",
|
||||||
|
"ignore_domains_title": "Domaines ignorés",
|
||||||
|
"ignore_domains_desc_stats": "Les requêtes pour ces domaines ne sont pas écrites dans les statistiques",
|
||||||
|
"ignore_domains_desc_query": "Les requêtes pour ces domaines ne sont pas écrites dans le journal des requêtes",
|
||||||
"interval_hours": "{{count}} heure",
|
"interval_hours": "{{count}} heure",
|
||||||
"interval_hours_plural": "{{count}} heures",
|
"interval_hours_plural": "{{count}} heures",
|
||||||
"filters_configuration": "Configuration des filtres",
|
"filters_configuration": "Configuration des filtres",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Note :</0> L'anonymisation IP est activée. Vous pouvez la désactiver dans les <1>paramètres généraux</1>.",
|
"anonymizer_notification": "<0>Note :</0> L'anonymisation IP est activée. Vous pouvez la désactiver dans les <1>paramètres généraux</1>.",
|
||||||
"confirm_dns_cache_clear": "Voulez-vous vraiment vider le cache DNS ?",
|
"confirm_dns_cache_clear": "Voulez-vous vraiment vider le cache DNS ?",
|
||||||
"cache_cleared": "Le cache DNS a été vidé",
|
"cache_cleared": "Le cache DNS a été vidé",
|
||||||
"clear_cache": "Vider le cache"
|
"clear_cache": "Vider le cache",
|
||||||
|
"make_static": "Rendre statique",
|
||||||
|
"theme_auto_desc": "Auto (en fonction de la palette de couleurs de votre appareil)",
|
||||||
|
"theme_dark_desc": "Thème sombre",
|
||||||
|
"theme_light_desc": "Thème clair",
|
||||||
|
"disable_for_seconds": "Pendant {{count}} seconde",
|
||||||
|
"disable_for_seconds_plural": "Pendant {{count}} secondes",
|
||||||
|
"disable_for_minutes": "Pendant {{count}} minute",
|
||||||
|
"disable_for_minutes_plural": "Pendant {{count}} minutes",
|
||||||
|
"disable_for_hours": "Pendant {{count}} heure",
|
||||||
|
"disable_for_hours_plural": "Pendant {{count}} heures",
|
||||||
|
"disable_until_tomorrow": "Jusqu'à demain",
|
||||||
|
"disable_notify_for_seconds": "Désactiver la protection pendant {{count}} seconde",
|
||||||
|
"disable_notify_for_seconds_plural": "Désactiver la protection pendant {{count}} secondes",
|
||||||
|
"disable_notify_for_minutes": "Désactiver la protection pendant {{count}} minute",
|
||||||
|
"disable_notify_for_minutes_plural": "Désactiver la protection pendant {{count}} minutes",
|
||||||
|
"disable_notify_for_hours": "Désactiver la protection pendant {{count}} heure",
|
||||||
|
"disable_notify_for_hours_plural": "Désactiver la protection pendant {{count}} heures",
|
||||||
|
"disable_notify_until_tomorrow": "Désactiver la protection jusqu'à demain",
|
||||||
|
"enable_protection_timer": "La protection sera activée dans {{time}}",
|
||||||
|
"custom_retention_input": "Saisir la rétention en heures",
|
||||||
|
"custom_rotation_input": "Saisir la rotation en heures",
|
||||||
|
"protection_section_label": "Protection",
|
||||||
|
"log_and_stats_section_label": "Journal des requêtes et statistiques",
|
||||||
|
"ignore_query_log": "Ignorer ce client dans le journal des requêtes",
|
||||||
|
"ignore_statistics": "Ignorer ce client dans les statistiques"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Omogućen roditeljski nadzor",
|
"enabled_parental_toast": "Omogućen roditeljski nadzor",
|
||||||
"disabled_safe_search_toast": "Onemogućeno sigurno pretraživanje",
|
"disabled_safe_search_toast": "Onemogućeno sigurno pretraživanje",
|
||||||
"enabled_save_search_toast": "Omogućeno sigurno pretraživanje",
|
"enabled_save_search_toast": "Omogućeno sigurno pretraživanje",
|
||||||
|
"updated_save_search_toast": "Ažurirane postavke sigurnog pretraživanja",
|
||||||
"enabled_table_header": "Omogućeno",
|
"enabled_table_header": "Omogućeno",
|
||||||
"name_table_header": "Naziv",
|
"name_table_header": "Naziv",
|
||||||
"list_url_table_header": "URL popisa",
|
"list_url_table_header": "URL popisa",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Zapisnik upita je uspješno uklonjen",
|
"query_log_cleared": "Zapisnik upita je uspješno uklonjen",
|
||||||
"query_log_updated": "Zapisnik upita je uspješno ažuriran",
|
"query_log_updated": "Zapisnik upita je uspješno ažuriran",
|
||||||
"query_log_clear": "Očisti zapisnik upita",
|
"query_log_clear": "Očisti zapisnik upita",
|
||||||
"query_log_retention": "Spremanje zapisnika upita",
|
"query_log_retention": "Rotacija dnevnika upita",
|
||||||
"query_log_enable": "Omogući zapise",
|
"query_log_enable": "Omogući zapise",
|
||||||
"query_log_configuration": "Postavke zapisa",
|
"query_log_configuration": "Postavke zapisa",
|
||||||
"query_log_disabled": "Zapisnik upita je onemogućen i može se postaviti u <0>postavkama</0>",
|
"query_log_disabled": "Zapisnik upita je onemogućen i može se postaviti u <0>postavkama</0>",
|
||||||
"query_log_strict_search": "Koristite dvostruke navodnike za strogo pretraživanje",
|
"query_log_strict_search": "Koristite dvostruke navodnike za strogo pretraživanje",
|
||||||
"query_log_retention_confirm": "Jeste li sigurni da želite promijeniti zadržavanje zapisnika upita? Ako smanjite vrijednost intervala, neki će podaci biti izgubljeni",
|
"query_log_retention_confirm": "Jeste li sigurni da želite promijeniti rotaciju dnevnika upita? Ako smanjite vrijednost intervala, neki će se podaci izgubiti",
|
||||||
"anonymize_client_ip": "Anonimiraj IP klijenta",
|
"anonymize_client_ip": "Anonimiraj IP klijenta",
|
||||||
"anonymize_client_ip_desc": "Ne spremajte cijelu IP adresu klijenta u zapisnike i statistike",
|
"anonymize_client_ip_desc": "Ne spremajte cijelu IP adresu klijenta u zapisnike i statistike",
|
||||||
"dns_config": "DNS postavke poslužitelja",
|
"dns_config": "DNS postavke poslužitelja",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Ograničenje",
|
"rate_limit": "Ograničenje",
|
||||||
"edns_enable": "Omogući podmrežu klijenta EDNS-a",
|
"edns_enable": "Omogući podmrežu klijenta EDNS-a",
|
||||||
"edns_cs_desc": "Dodajte opciju EDNS klijentske podmreže (ECS) uzvodnim zahtjevima i zabilježite vrijednosti koje su klijenti poslali u dnevnik upita.",
|
"edns_cs_desc": "Dodajte opciju EDNS klijentske podmreže (ECS) uzvodnim zahtjevima i zabilježite vrijednosti koje su klijenti poslali u dnevnik upita.",
|
||||||
|
"edns_use_custom_ip": "Koristi prilagođeni IP za EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Dopusti korištenje prilagođenog IP-a za EDNS",
|
||||||
"rate_limit_desc": "Broj zahtjeva u sekundi koji su dopušteni po jednom klijentu. Postavljanje na 0 znači neograničeno.",
|
"rate_limit_desc": "Broj zahtjeva u sekundi koji su dopušteni po jednom klijentu. Postavljanje na 0 znači neograničeno.",
|
||||||
"blocking_ipv4_desc": "Povratna IP adresa za blokirane A zahtjeve",
|
"blocking_ipv4_desc": "Povratna IP adresa za blokirane A zahtjeve",
|
||||||
"blocking_ipv6_desc": "Povratna IP adresa za blokirane AAAA zahtjeve",
|
"blocking_ipv6_desc": "Povratna IP adresa za blokirane AAAA zahtjeve",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Odgovor s NXDOMAIN kôdom",
|
"blocking_mode_nxdomain": "NXDOMAIN: Odgovor s NXDOMAIN kôdom",
|
||||||
"blocking_mode_null_ip": "Nuliran IP: Odgovor s nuliranom IP adresom (0.0.0.0 za A; :: za AAAA)",
|
"blocking_mode_null_ip": "Nuliran IP: Odgovor s nuliranom IP adresom (0.0.0.0 za A; :: za AAAA)",
|
||||||
"blocking_mode_custom_ip": "Prilagođeni IP: Odgovor s ručno postavljenom IP adresom",
|
"blocking_mode_custom_ip": "Prilagođeni IP: Odgovor s ručno postavljenom IP adresom",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Svijetla",
|
||||||
|
"theme_dark": "Tamna",
|
||||||
"upstream_dns_client_desc": "Ako ovo polje ostane prazno, AdGuard Home će upotrijebiti poslužitelje postavljene u <0>DNS postavkama</0>.",
|
"upstream_dns_client_desc": "Ako ovo polje ostane prazno, AdGuard Home će upotrijebiti poslužitelje postavljene u <0>DNS postavkama</0>.",
|
||||||
"tracker_source": "Izvor pratitelja",
|
"tracker_source": "Izvor pratitelja",
|
||||||
"source_label": "Izvor",
|
"source_label": "Izvor",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Dostupna je nova verzija AdGuard Home-a",
|
"updates_checked": "Dostupna je nova verzija AdGuard Home-a",
|
||||||
"updates_version_equal": "AdGuard Home je ažuriran",
|
"updates_version_equal": "AdGuard Home je ažuriran",
|
||||||
"check_updates_now": "Provjeri ažuriranja sada",
|
"check_updates_now": "Provjeri ažuriranja sada",
|
||||||
|
"version_request_error": "Ne uspješna provjera ažuriranja. Provjerite vašu Internetsku vezu.",
|
||||||
"dns_privacy": "DNS privatnost",
|
"dns_privacy": "DNS privatnost",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Koristite <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Koristite <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Koristite <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Koristite <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Da biste koristili <1>DNS-over-HTTPS</1> ili <1>DNS-over-TLS</1>, morate <0>postaviti šifriranje</0> u AdGuard Home postavkama.",
|
"setup_dns_notice": "Da biste koristili <1>DNS-over-HTTPS</1> ili <1>DNS-over-TLS</1>, morate <0>postaviti šifriranje</0> u AdGuard Home postavkama.",
|
||||||
"rewrite_added": "DNS prijepis za \"{{key}}\" je uspješno dodan",
|
"rewrite_added": "DNS prijepis za \"{{key}}\" je uspješno dodan",
|
||||||
"rewrite_deleted": "DNS prijepis za \"{{key}}\" je uspješno uklonjen",
|
"rewrite_deleted": "DNS prijepis za \"{{key}}\" je uspješno uklonjen",
|
||||||
|
"rewrite_updated": "Prepisivanje DNS-a uspješno ažurirano",
|
||||||
"rewrite_add": "Dodaj DNS prijepis",
|
"rewrite_add": "Dodaj DNS prijepis",
|
||||||
|
"rewrite_edit": "Uredite prepisivanje DNS-a",
|
||||||
"rewrite_not_found": "Nema DNS prijepisa",
|
"rewrite_not_found": "Nema DNS prijepisa",
|
||||||
"rewrite_confirm_delete": "Jeste li sigurni da želite ukloniti DNS prijepis za \"{{key}}\" klijenta?",
|
"rewrite_confirm_delete": "Jeste li sigurni da želite ukloniti DNS prijepis za \"{{key}}\" klijenta?",
|
||||||
"rewrite_desc": "Omogućuje jednostavno postavljanje prilagođenog DNS odgovora za određenu domenu.",
|
"rewrite_desc": "Omogućuje jednostavno postavljanje prilagođenog DNS odgovora za određenu domenu.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Jeste li sigurni da želite promijeniti zadržavanje statistike? Ako smanjite vrijednost intervala, neki će podaci biti izgubljeni",
|
"statistics_retention_confirm": "Jeste li sigurni da želite promijeniti zadržavanje statistike? Ako smanjite vrijednost intervala, neki će podaci biti izgubljeni",
|
||||||
"statistics_cleared": "Statistika je uspješno uklonjenja",
|
"statistics_cleared": "Statistika je uspješno uklonjenja",
|
||||||
"statistics_enable": "Omogući statistiku",
|
"statistics_enable": "Omogući statistiku",
|
||||||
|
"ignore_domains": "Zanemarene domene (odvojene novim retkom)",
|
||||||
|
"ignore_domains_title": "Zanemarene domene",
|
||||||
|
"ignore_domains_desc_stats": "Upiti za ove domene ne upisuju se u statistiku",
|
||||||
|
"ignore_domains_desc_query": "Upiti za te domene nisu zapisani u zapisnik upita",
|
||||||
"interval_hours": "{{count}} sata/i",
|
"interval_hours": "{{count}} sata/i",
|
||||||
"interval_hours_plural": "{{count}} sata/i",
|
"interval_hours_plural": "{{count}} sata/i",
|
||||||
"filters_configuration": "Postavke filtara",
|
"filters_configuration": "Postavke filtara",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Napomena:</0>IP anonimizacija je omogućena. Možete ju onemogućiti u <1>općim postavkama</1>.",
|
"anonymizer_notification": "<0>Napomena:</0>IP anonimizacija je omogućena. Možete ju onemogućiti u <1>općim postavkama</1>.",
|
||||||
"confirm_dns_cache_clear": "Jeste li sigurni da želite očistiti DNS predmemoriju?",
|
"confirm_dns_cache_clear": "Jeste li sigurni da želite očistiti DNS predmemoriju?",
|
||||||
"cache_cleared": "DNS predmemorija je uspješno izbrisana",
|
"cache_cleared": "DNS predmemorija je uspješno izbrisana",
|
||||||
"clear_cache": "Očisti predmemoriju"
|
"clear_cache": "Očisti predmemoriju",
|
||||||
|
"make_static": "Učini statičnim",
|
||||||
|
"theme_auto_desc": "Automatski (na temelju sheme boja vašeg uređaja)",
|
||||||
|
"theme_dark_desc": "Tamna tema",
|
||||||
|
"theme_light_desc": "Svijetla tema",
|
||||||
|
"disable_for_seconds": "Za {{count}} sekundi",
|
||||||
|
"disable_for_seconds_plural": "Za {{count}} sekundi",
|
||||||
|
"disable_for_minutes": "Za {{count}} minuta",
|
||||||
|
"disable_for_minutes_plural": "Za {{count}} minuta",
|
||||||
|
"disable_for_hours": "Za {{count}} sati",
|
||||||
|
"disable_for_hours_plural": "Za {{count}} sati",
|
||||||
|
"disable_until_tomorrow": "Do sutra",
|
||||||
|
"disable_notify_for_seconds": "Isključi zaštitu na {{count}} sekundi",
|
||||||
|
"disable_notify_for_seconds_plural": "Onemogući zaštitu na {{count}} sekundi",
|
||||||
|
"disable_notify_for_minutes": "Isključi zaštitu na {{count}} minuta",
|
||||||
|
"disable_notify_for_minutes_plural": "Isključi zaštitu na {{count}} minuta",
|
||||||
|
"disable_notify_for_hours": "Isključi zaštitu na {{count}} sati",
|
||||||
|
"disable_notify_for_hours_plural": "Isključi zaštitu na {{count}} sati",
|
||||||
|
"disable_notify_until_tomorrow": "Isključi zaštitu do sutra",
|
||||||
|
"enable_protection_timer": "Zaštita će biti omogućena u {{time}}",
|
||||||
|
"custom_retention_input": "Unesite zadržavanje u satima",
|
||||||
|
"custom_rotation_input": "Unesite rotaciju u satima",
|
||||||
|
"protection_section_label": "Zaštita",
|
||||||
|
"log_and_stats_section_label": "Zapisnik upita i statistika",
|
||||||
|
"ignore_query_log": "Zanemari ovog klijenta u zapisniku upita",
|
||||||
|
"ignore_statistics": "Ignorirajte ovog klijenta u statistici"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Szülői felügyelet engedélyezve",
|
"enabled_parental_toast": "Szülői felügyelet engedélyezve",
|
||||||
"disabled_safe_search_toast": "Biztonságos keresés letiltva",
|
"disabled_safe_search_toast": "Biztonságos keresés letiltva",
|
||||||
"enabled_save_search_toast": "Biztonságos keresés engedélyezve",
|
"enabled_save_search_toast": "Biztonságos keresés engedélyezve",
|
||||||
|
"updated_save_search_toast": "A Biztonságos keresés beállításai frissítve",
|
||||||
"enabled_table_header": "Engedélyezve",
|
"enabled_table_header": "Engedélyezve",
|
||||||
"name_table_header": "Név",
|
"name_table_header": "Név",
|
||||||
"list_url_table_header": "Lista URL-je",
|
"list_url_table_header": "Lista URL-je",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Kérések korlátozása",
|
"rate_limit": "Kérések korlátozása",
|
||||||
"edns_enable": "EDNS kliens alhálózat engedélyezése",
|
"edns_enable": "EDNS kliens alhálózat engedélyezése",
|
||||||
"edns_cs_desc": "Adja hozzá az EDNS Client Subnet beállítást (ECS) a felfelé irányuló kérésekhez, és naplózza a kliensek által küldött értékeket a lekérdezési naplóban.",
|
"edns_cs_desc": "Adja hozzá az EDNS Client Subnet beállítást (ECS) a felfelé irányuló kérésekhez, és naplózza a kliensek által küldött értékeket a lekérdezési naplóban.",
|
||||||
|
"edns_use_custom_ip": "Használjon egyéni IP-címet az EDNS-hez",
|
||||||
|
"edns_use_custom_ip_desc": "Engedélyezze az egyéni IP-cím használatát az EDNS-hez",
|
||||||
"rate_limit_desc": "Maximálisan hány kérést küldhet egy kliens másodpercenkén. Ha 0-ra állítja, akkor nincs korlátozás.",
|
"rate_limit_desc": "Maximálisan hány kérést küldhet egy kliens másodpercenkén. Ha 0-ra állítja, akkor nincs korlátozás.",
|
||||||
"blocking_ipv4_desc": "A blokkolt A kéréshez visszaadandó IP-cím",
|
"blocking_ipv4_desc": "A blokkolt A kéréshez visszaadandó IP-cím",
|
||||||
"blocking_ipv6_desc": "A blokkolt AAAA kéréshez visszaadandó IP-cím",
|
"blocking_ipv6_desc": "A blokkolt AAAA kéréshez visszaadandó IP-cím",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Az NXDOMAIN kóddal fog válaszolni",
|
"blocking_mode_nxdomain": "NXDOMAIN: Az NXDOMAIN kóddal fog válaszolni",
|
||||||
"blocking_mode_null_ip": "Null IP: Nullákból álló IP-címmel válaszol (0.0.0.0 for A; :: for AAAA)",
|
"blocking_mode_null_ip": "Null IP: Nullákból álló IP-címmel válaszol (0.0.0.0 for A; :: for AAAA)",
|
||||||
"blocking_mode_custom_ip": "Egyedi IP: Válasz egy kézzel beállított IP címmel",
|
"blocking_mode_custom_ip": "Egyedi IP: Válasz egy kézzel beállított IP címmel",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Világos",
|
||||||
|
"theme_dark": "Sötét",
|
||||||
"upstream_dns_client_desc": "Ha üresen hagyja ezt a mezőt, az AdGuard Home azokat a szervereket fogja használni, amik a <0>DNS beállításokban</0> vannak beállítva.",
|
"upstream_dns_client_desc": "Ha üresen hagyja ezt a mezőt, az AdGuard Home azokat a szervereket fogja használni, amik a <0>DNS beállításokban</0> vannak beállítva.",
|
||||||
"tracker_source": "Követő forrása",
|
"tracker_source": "Követő forrása",
|
||||||
"source_label": "Forrás",
|
"source_label": "Forrás",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Elérhető az AdGuard Home új verziója",
|
"updates_checked": "Elérhető az AdGuard Home új verziója",
|
||||||
"updates_version_equal": "Az AdGuard Home naprakész",
|
"updates_version_equal": "Az AdGuard Home naprakész",
|
||||||
"check_updates_now": "Frissítések ellenőrzése most",
|
"check_updates_now": "Frissítések ellenőrzése most",
|
||||||
|
"version_request_error": "A frissítések ellenőrzése sikertelen. Ellenőrizze az internetkapcsolatot.",
|
||||||
"dns_privacy": "DNS Adatvédelem",
|
"dns_privacy": "DNS Adatvédelem",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Használja a(z) <1>{{address}}</1> szöveget.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Használja a(z) <1>{{address}}</1> szöveget.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Használja a(z) <1>{{address}}</1> szöveget.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Használja a(z) <1>{{address}}</1> szöveget.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Ahhoz, hogy a <1>DNS-over-HTTPS</1> vagy a <1>DNS-over-TLS</1> valamelyikét használja, muszáj <0>beállítania a titkosítást</0> az AdGuard Home beállításaiban.",
|
"setup_dns_notice": "Ahhoz, hogy a <1>DNS-over-HTTPS</1> vagy a <1>DNS-over-TLS</1> valamelyikét használja, muszáj <0>beállítania a titkosítást</0> az AdGuard Home beállításaiban.",
|
||||||
"rewrite_added": "DNS átírás a(z) \"{{key}}\" kulcshoz sikeresen hozzáadva",
|
"rewrite_added": "DNS átírás a(z) \"{{key}}\" kulcshoz sikeresen hozzáadva",
|
||||||
"rewrite_deleted": "DNS átírás a(z) \"{{key}}\" kulcshoz sikeresen törölve",
|
"rewrite_deleted": "DNS átírás a(z) \"{{key}}\" kulcshoz sikeresen törölve",
|
||||||
|
"rewrite_updated": "A DNS újraírása sikeresen frissítve",
|
||||||
"rewrite_add": "DNS átírás hozzáadása",
|
"rewrite_add": "DNS átírás hozzáadása",
|
||||||
|
"rewrite_edit": "DNS újraírás szerkesztése",
|
||||||
"rewrite_not_found": "Nem találhatók DNS átírások",
|
"rewrite_not_found": "Nem találhatók DNS átírások",
|
||||||
"rewrite_confirm_delete": "Biztosan törölni szeretné a DNS átírást ehhez: \"{{key}}\"?",
|
"rewrite_confirm_delete": "Biztosan törölni szeretné a DNS átírást ehhez: \"{{key}}\"?",
|
||||||
"rewrite_desc": "Lehetővé teszi, hogy egyszerűen beállítson egyéni DNS választ egy adott domain névhez.",
|
"rewrite_desc": "Lehetővé teszi, hogy egyszerűen beállítson egyéni DNS választ egy adott domain névhez.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Biztos benne, hogy megváltoztatja a statisztika megőrzési idejét? Ha csökkentette az értéket, a megadottnál korábbi adatok elvesznek",
|
"statistics_retention_confirm": "Biztos benne, hogy megváltoztatja a statisztika megőrzési idejét? Ha csökkentette az értéket, a megadottnál korábbi adatok elvesznek",
|
||||||
"statistics_cleared": "A statisztikák sikeresen vissza lettek állítva",
|
"statistics_cleared": "A statisztikák sikeresen vissza lettek állítva",
|
||||||
"statistics_enable": "Statisztikák engedélyezése",
|
"statistics_enable": "Statisztikák engedélyezése",
|
||||||
|
"ignore_domains": "Figyelmen kívül hagyott domainek (újsorral elválasztva)",
|
||||||
|
"ignore_domains_title": "Figyelmen kívül hagyott domainek",
|
||||||
|
"ignore_domains_desc_stats": "Az ezekre a tartományokra vonatkozó lekérdezések nem kerülnek a statisztikákba",
|
||||||
|
"ignore_domains_desc_query": "Az ezekhez a tartományokhoz tartozó lekérdezések nem kerülnek a lekérdezési naplóba",
|
||||||
"interval_hours": "{{count}} óra",
|
"interval_hours": "{{count}} óra",
|
||||||
"interval_hours_plural": "{{count}} óra",
|
"interval_hours_plural": "{{count}} óra",
|
||||||
"filters_configuration": "Szűrők beállításai",
|
"filters_configuration": "Szűrők beállításai",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Megjegyzés:</0> Az IP anonimizálás engedélyezve van. Az <1>Általános beállításoknál letilthatja</1> .",
|
"anonymizer_notification": "<0>Megjegyzés:</0> Az IP anonimizálás engedélyezve van. Az <1>Általános beállításoknál letilthatja</1> .",
|
||||||
"confirm_dns_cache_clear": "Biztos benne, hogy törölni szeretné a DNS-gyorsítótárat?",
|
"confirm_dns_cache_clear": "Biztos benne, hogy törölni szeretné a DNS-gyorsítótárat?",
|
||||||
"cache_cleared": "A DNS gyorsítótár sikeresen törlődött",
|
"cache_cleared": "A DNS gyorsítótár sikeresen törlődött",
|
||||||
"clear_cache": "Gyorsítótár törlése"
|
"clear_cache": "Gyorsítótár törlése",
|
||||||
|
"make_static": "Statikussá tétel",
|
||||||
|
"theme_auto_desc": "Automatikus (az eszköz színsémájától függően)",
|
||||||
|
"theme_dark_desc": "Sötét téma",
|
||||||
|
"theme_light_desc": "Világos téma",
|
||||||
|
"disable_for_seconds": "{{count}} másodpercig",
|
||||||
|
"disable_for_seconds_plural": "{{count}} másodpercig",
|
||||||
|
"disable_for_minutes": "{{count}} percig",
|
||||||
|
"disable_for_minutes_plural": "{{count}} percig",
|
||||||
|
"disable_for_hours": "{{count}} óráig",
|
||||||
|
"disable_for_hours_plural": "{{count}} óráig",
|
||||||
|
"disable_until_tomorrow": "Holnapig",
|
||||||
|
"disable_notify_for_seconds": "Kapcsolja ki a védelmet {{count}} másodpercre",
|
||||||
|
"disable_notify_for_seconds_plural": "Kapcsolja ki a védelmet {{count}} másodpercre",
|
||||||
|
"disable_notify_for_minutes": "Kapcsolja ki a védelmet {{count}} percre",
|
||||||
|
"disable_notify_for_minutes_plural": "Kapcsolja ki a védelmet {{count}} percre",
|
||||||
|
"disable_notify_for_hours": "Kapcsolja ki a védelmet {{count}} órára",
|
||||||
|
"disable_notify_for_hours_plural": "Kapcsolja ki a védelmet {{count}} órára",
|
||||||
|
"disable_notify_until_tomorrow": "Holnapig kapcsolja ki a védelmet",
|
||||||
|
"enable_protection_timer": "A védelem {{time}}-kor aktiválódik",
|
||||||
|
"custom_retention_input": "Adja meg a megőrzést órákban",
|
||||||
|
"custom_rotation_input": "Írja be a forgatást órákban",
|
||||||
|
"protection_section_label": "Védelem",
|
||||||
|
"log_and_stats_section_label": "Lekérdezési napló és statisztikák",
|
||||||
|
"ignore_query_log": "Figyelmen kívül hagyja ezt az ügyfelet a lekérdezési naplóban",
|
||||||
|
"ignore_statistics": "Hagyja figyelmen kívül ezt az ügyfelet a statisztikákban"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -298,6 +298,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Respon pakai kode NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Respon pakai kode NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "Null IP: Respon pakai alamat IP kosong (0.0.0.0 untuk A; :: untuk AAAA)",
|
"blocking_mode_null_ip": "Null IP: Respon pakai alamat IP kosong (0.0.0.0 untuk A; :: untuk AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP kustom: respon dengan alamat IP yang diset secara manual",
|
"blocking_mode_custom_ip": "IP kustom: respon dengan alamat IP yang diset secara manual",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Terang",
|
||||||
|
"theme_dark": "Gelap",
|
||||||
"upstream_dns_client_desc": "Jika Anda biarkan bidang ini kosong, AdGuard Home akan memakai server yang dikonfigurasi di<0>Pengaturan DNS</0>.",
|
"upstream_dns_client_desc": "Jika Anda biarkan bidang ini kosong, AdGuard Home akan memakai server yang dikonfigurasi di<0>Pengaturan DNS</0>.",
|
||||||
"tracker_source": "Sumber pelacak",
|
"tracker_source": "Sumber pelacak",
|
||||||
"source_label": "Sumber",
|
"source_label": "Sumber",
|
||||||
@@ -471,7 +474,9 @@
|
|||||||
"setup_dns_notice": "Jikalau ingin menggunakan <1>DNS-over-HTTPS</1> atau <1>DNS-over-TLS</1>, Anda perlu <0>mengatur Enkripsi</0> pada pengaturan AdGuard Home.",
|
"setup_dns_notice": "Jikalau ingin menggunakan <1>DNS-over-HTTPS</1> atau <1>DNS-over-TLS</1>, Anda perlu <0>mengatur Enkripsi</0> pada pengaturan AdGuard Home.",
|
||||||
"rewrite_added": "DNS rewrite untuk \"{{key}}\" berhasil ditambahkan",
|
"rewrite_added": "DNS rewrite untuk \"{{key}}\" berhasil ditambahkan",
|
||||||
"rewrite_deleted": "DNS rewrite untuk \"{{key}}\" berhasil dihapus",
|
"rewrite_deleted": "DNS rewrite untuk \"{{key}}\" berhasil dihapus",
|
||||||
|
"rewrite_updated": "Penulisan ulang DNS berhasil diperbarui",
|
||||||
"rewrite_add": "Tambah DNS rewrite",
|
"rewrite_add": "Tambah DNS rewrite",
|
||||||
|
"rewrite_edit": "Edit penulisan ulang DNS",
|
||||||
"rewrite_not_found": "Tidak ada DNS rewrite ditemukan",
|
"rewrite_not_found": "Tidak ada DNS rewrite ditemukan",
|
||||||
"rewrite_confirm_delete": "Apakah anda yakin ingin menghapus DNS rewrite untuk \"{{key}}\"?",
|
"rewrite_confirm_delete": "Apakah anda yakin ingin menghapus DNS rewrite untuk \"{{key}}\"?",
|
||||||
"rewrite_desc": "Memungkinkan untuk dengan mudah mengkonfigurasi respons DNS kustom untuk nama domain tertentu.",
|
"rewrite_desc": "Memungkinkan untuk dengan mudah mengkonfigurasi respons DNS kustom untuk nama domain tertentu.",
|
||||||
@@ -638,5 +643,6 @@
|
|||||||
"anonymizer_notification": "<0>Catatan:</0> Anonimisasi IP diaktifkan. Anda dapat menonaktifkannya di <1>Pengaturan umum</1> .",
|
"anonymizer_notification": "<0>Catatan:</0> Anonimisasi IP diaktifkan. Anda dapat menonaktifkannya di <1>Pengaturan umum</1> .",
|
||||||
"confirm_dns_cache_clear": "Apakah Anda yakin ingin menghapus cache DNS?",
|
"confirm_dns_cache_clear": "Apakah Anda yakin ingin menghapus cache DNS?",
|
||||||
"cache_cleared": "Cache DNS berhasil dibersihkan",
|
"cache_cleared": "Cache DNS berhasil dibersihkan",
|
||||||
"clear_cache": "Hapus cache"
|
"clear_cache": "Hapus cache",
|
||||||
|
"protection_section_label": "Perlindungan"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Il Controllo Parentale è attivo",
|
"enabled_parental_toast": "Il Controllo Parentale è attivo",
|
||||||
"disabled_safe_search_toast": "La Ricerca Sicura è disattivata",
|
"disabled_safe_search_toast": "La Ricerca Sicura è disattivata",
|
||||||
"enabled_save_search_toast": "La Ricerca Sicura è attiva",
|
"enabled_save_search_toast": "La Ricerca Sicura è attiva",
|
||||||
|
"updated_save_search_toast": "Impostazioni di Safe Search aggiornate",
|
||||||
"enabled_table_header": "Attivo",
|
"enabled_table_header": "Attivo",
|
||||||
"name_table_header": "Nome",
|
"name_table_header": "Nome",
|
||||||
"list_url_table_header": "Elenco URL",
|
"list_url_table_header": "Elenco URL",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Il registro richieste è stato correttamente cancellato",
|
"query_log_cleared": "Il registro richieste è stato correttamente cancellato",
|
||||||
"query_log_updated": "Il registro richieste è stato correttamente aggiornato",
|
"query_log_updated": "Il registro richieste è stato correttamente aggiornato",
|
||||||
"query_log_clear": "Cancella registri richieste",
|
"query_log_clear": "Cancella registri richieste",
|
||||||
"query_log_retention": "Conservazione dei registri richieste",
|
"query_log_retention": "Rotazione dei registri richieste",
|
||||||
"query_log_enable": "Attiva registro",
|
"query_log_enable": "Attiva registro",
|
||||||
"query_log_configuration": "Configurazione registri",
|
"query_log_configuration": "Configurazione registri",
|
||||||
"query_log_disabled": "Il registro richieste è stato disattivato e può essere configurata dalle <0>impostazioni</0>",
|
"query_log_disabled": "Il registro richieste è stato disattivato e può essere configurata dalle <0>impostazioni</0>",
|
||||||
"query_log_strict_search": "Utilizzare le doppie virgolette per una ricerca precisa",
|
"query_log_strict_search": "Utilizzare le doppie virgolette per una ricerca precisa",
|
||||||
"query_log_retention_confirm": "Sei sicuro di voler modificare il registro delle richieste? Se il valore di intervallo dovesse diminuire, alcuni dati andranno persi",
|
"query_log_retention_confirm": "Sei sicuro di voler modificare il registro delle richieste? Se si riduce il valore dell'intervallo, alcuni dati andranno persi",
|
||||||
"anonymize_client_ip": "Anonimizza client IP",
|
"anonymize_client_ip": "Anonimizza client IP",
|
||||||
"anonymize_client_ip_desc": "Non salvare l'indirizzo IP completo del client nel registro o nelle statistiche",
|
"anonymize_client_ip_desc": "Non salvare l'indirizzo IP completo del client nel registro o nelle statistiche",
|
||||||
"dns_config": "Configurazione server DNS",
|
"dns_config": "Configurazione server DNS",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Limite delle richieste",
|
"rate_limit": "Limite delle richieste",
|
||||||
"edns_enable": "Attiva client di sottorete EDNS",
|
"edns_enable": "Attiva client di sottorete EDNS",
|
||||||
"edns_cs_desc": "Aggiunge l'opzione EDNS Client Subnet (ECS) alle richieste upstream e registra i valori inviati dai client nel registro delle richieste.",
|
"edns_cs_desc": "Aggiunge l'opzione EDNS Client Subnet (ECS) alle richieste upstream e registra i valori inviati dai client nel registro delle richieste.",
|
||||||
|
"edns_use_custom_ip": "Usa IP personalizzato per EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Consentire l'uso di un IP personalizzato per EDNS",
|
||||||
"rate_limit_desc": "Il numero di richieste al secondo consentite da un singolo client. Impostare questo valore a 0 rimuove le limitazioni.",
|
"rate_limit_desc": "Il numero di richieste al secondo consentite da un singolo client. Impostare questo valore a 0 rimuove le limitazioni.",
|
||||||
"blocking_ipv4_desc": "Indirizzo IP per una richiesta DNS IPv4 bloccata",
|
"blocking_ipv4_desc": "Indirizzo IP per una richiesta DNS IPv4 bloccata",
|
||||||
"blocking_ipv6_desc": "Indirizzo IP restituito per una richiesta DNS IPv6 bloccata",
|
"blocking_ipv6_desc": "Indirizzo IP restituito per una richiesta DNS IPv6 bloccata",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Rispondi con il codice NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Rispondi con il codice NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "IP nullo: Rispondi con indirizzo IP zero (0.0.0.0 per A; :: per AAAA)",
|
"blocking_mode_null_ip": "IP nullo: Rispondi con indirizzo IP zero (0.0.0.0 per A; :: per AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP personalizzato: Rispondi con un indirizzo IP impostato manualmente",
|
"blocking_mode_custom_ip": "IP personalizzato: Rispondi con un indirizzo IP impostato manualmente",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Chiaro",
|
||||||
|
"theme_dark": "Scuro",
|
||||||
"upstream_dns_client_desc": "Se lasci questo spazio vuoto, AdGuard Home utilizzerà i server configurati nelle <0>impostazioni DNS</0>.",
|
"upstream_dns_client_desc": "Se lasci questo spazio vuoto, AdGuard Home utilizzerà i server configurati nelle <0>impostazioni DNS</0>.",
|
||||||
"tracker_source": "Origine del tracciatore",
|
"tracker_source": "Origine del tracciatore",
|
||||||
"source_label": "Fonte",
|
"source_label": "Fonte",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Nuova versione di AdGuard Home è disponibile",
|
"updates_checked": "Nuova versione di AdGuard Home è disponibile",
|
||||||
"updates_version_equal": "AdGuard Home è aggiornato",
|
"updates_version_equal": "AdGuard Home è aggiornato",
|
||||||
"check_updates_now": "Ricerca aggiornamenti ora",
|
"check_updates_now": "Ricerca aggiornamenti ora",
|
||||||
|
"version_request_error": "Ricerca aggiornamenti non riuscita. Per favore controlla la tua connessione internet.",
|
||||||
"dns_privacy": "Privacy DNS",
|
"dns_privacy": "Privacy DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS su TLS:</0> Utilizza la stringa <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS su TLS:</0> Utilizza la stringa <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS su HTTPS:</0> Utilizza la stringa <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS su HTTPS:</0> Utilizza la stringa <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Per utilizzare <1>DNS su HTTPS</1> o <1>DNS su TLS</1>, è necessario <0>configurare la crittografia</0> nelle impostazioni di AdGuard Home.",
|
"setup_dns_notice": "Per utilizzare <1>DNS su HTTPS</1> o <1>DNS su TLS</1>, è necessario <0>configurare la crittografia</0> nelle impostazioni di AdGuard Home.",
|
||||||
"rewrite_added": "Riscrittura DNS per \"{{key}}\" aggiunta correttamente",
|
"rewrite_added": "Riscrittura DNS per \"{{key}}\" aggiunta correttamente",
|
||||||
"rewrite_deleted": "La riscrittura DNS per \"{{key}}\" è stata eliminata correttamente",
|
"rewrite_deleted": "La riscrittura DNS per \"{{key}}\" è stata eliminata correttamente",
|
||||||
|
"rewrite_updated": "Riscrittura DNS aggiornata correttamente",
|
||||||
"rewrite_add": "Aggiungi la riscrittura DNS",
|
"rewrite_add": "Aggiungi la riscrittura DNS",
|
||||||
|
"rewrite_edit": "Modifica della riscrittura DNS",
|
||||||
"rewrite_not_found": "Nessuna riscrittura DNS trovata",
|
"rewrite_not_found": "Nessuna riscrittura DNS trovata",
|
||||||
"rewrite_confirm_delete": "Sei sicuro di voler cancellare la riscrittura DNS per \"{{key}}\"?",
|
"rewrite_confirm_delete": "Sei sicuro di voler cancellare la riscrittura DNS per \"{{key}}\"?",
|
||||||
"rewrite_desc": "Consente di configurare facilmente la risposta DNS personalizzata per un nome di dominio specifico.",
|
"rewrite_desc": "Consente di configurare facilmente la risposta DNS personalizzata per un nome di dominio specifico.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Sei sicuro di voler modificare la conservazione delle statistiche? Se il valore di intervallo dovesse diminuire, alcuni dati andranno persi",
|
"statistics_retention_confirm": "Sei sicuro di voler modificare la conservazione delle statistiche? Se il valore di intervallo dovesse diminuire, alcuni dati andranno persi",
|
||||||
"statistics_cleared": "Statistiche azzerate correttamente",
|
"statistics_cleared": "Statistiche azzerate correttamente",
|
||||||
"statistics_enable": "Attiva statistiche",
|
"statistics_enable": "Attiva statistiche",
|
||||||
|
"ignore_domains": "Domini ignorati (separati da nuova riga)",
|
||||||
|
"ignore_domains_title": "Domini ignorati",
|
||||||
|
"ignore_domains_desc_stats": "Le richieste per questi domini non vengono scritte nelle statistiche",
|
||||||
|
"ignore_domains_desc_query": "Le richieste per questi domini non vengono scritte nel registro delle richieste",
|
||||||
"interval_hours": "{{count}} ora",
|
"interval_hours": "{{count}} ora",
|
||||||
"interval_hours_plural": "{{count}} ore",
|
"interval_hours_plural": "{{count}} ore",
|
||||||
"filters_configuration": "Configurazione filtri",
|
"filters_configuration": "Configurazione filtri",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Attenzione:</0> L'anonimizzazione dell'IP è abilitata. Puoi disabilitarla in <1>Impostazioni generali</1>.",
|
"anonymizer_notification": "<0>Attenzione:</0> L'anonimizzazione dell'IP è abilitata. Puoi disabilitarla in <1>Impostazioni generali</1>.",
|
||||||
"confirm_dns_cache_clear": "Sei sicuro di voler cancellare la cache DNS?",
|
"confirm_dns_cache_clear": "Sei sicuro di voler cancellare la cache DNS?",
|
||||||
"cache_cleared": "Cache DNS è stata cancellata correttamente",
|
"cache_cleared": "Cache DNS è stata cancellata correttamente",
|
||||||
"clear_cache": "Cancella cache"
|
"clear_cache": "Cancella cache",
|
||||||
|
"make_static": "Rendere statico",
|
||||||
|
"theme_auto_desc": "Auto (in base alla combinazione di colori del tuo dispositivo)",
|
||||||
|
"theme_dark_desc": "Tema scuro",
|
||||||
|
"theme_light_desc": "Tema chiaro",
|
||||||
|
"disable_for_seconds": "Per {{count}} secondo",
|
||||||
|
"disable_for_seconds_plural": "Per {{count}} secondi",
|
||||||
|
"disable_for_minutes": "Per {{count}} minuto",
|
||||||
|
"disable_for_minutes_plural": "Per {{count}} minuti",
|
||||||
|
"disable_for_hours": "Per {{count}} ora",
|
||||||
|
"disable_for_hours_plural": "Per {{count}} ore",
|
||||||
|
"disable_until_tomorrow": "Fino a domani",
|
||||||
|
"disable_notify_for_seconds": "Disattiva la protezione per {{count}} secondo",
|
||||||
|
"disable_notify_for_seconds_plural": "Disattiva la protezione per {{count}} secondi",
|
||||||
|
"disable_notify_for_minutes": "Disattiva protezione per {{count}} minuto",
|
||||||
|
"disable_notify_for_minutes_plural": "Disattiva la protezione per {{count}} minuti",
|
||||||
|
"disable_notify_for_hours": "Disattiva la protezione per {{count}} ora",
|
||||||
|
"disable_notify_for_hours_plural": "Disattiva la protezione per {{count}} ore",
|
||||||
|
"disable_notify_until_tomorrow": "Disattiva la protezione fino a domani",
|
||||||
|
"enable_protection_timer": "La protezione verrà attivata in {{time}}",
|
||||||
|
"custom_retention_input": "Inserisci la conservazione in ore",
|
||||||
|
"custom_rotation_input": "Inserisci la rotazione in ore",
|
||||||
|
"protection_section_label": "Protezione",
|
||||||
|
"log_and_stats_section_label": "Registro richieste e statistiche",
|
||||||
|
"ignore_query_log": "Ignora questo client nel registro delle richieste",
|
||||||
|
"ignore_statistics": "Ignora questo cliente nelle statistiche"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "ペアレンタルコントロールが有効になりました",
|
"enabled_parental_toast": "ペアレンタルコントロールが有効になりました",
|
||||||
"disabled_safe_search_toast": "セーフサーチが無効になりました",
|
"disabled_safe_search_toast": "セーフサーチが無効になりました",
|
||||||
"enabled_save_search_toast": "セーフサーチが有効になりました",
|
"enabled_save_search_toast": "セーフサーチが有効になりました",
|
||||||
|
"updated_save_search_toast": "セーフ サーチの設定が更新されました。",
|
||||||
"enabled_table_header": "有効",
|
"enabled_table_header": "有効",
|
||||||
"name_table_header": "名称",
|
"name_table_header": "名称",
|
||||||
"list_url_table_header": "URLリスト",
|
"list_url_table_header": "URLリスト",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "クエリ・ログの消去に成功しました",
|
"query_log_cleared": "クエリ・ログの消去に成功しました",
|
||||||
"query_log_updated": "クエリ・ログの更新が成功しました",
|
"query_log_updated": "クエリ・ログの更新が成功しました",
|
||||||
"query_log_clear": "クエリ・ログを消去する",
|
"query_log_clear": "クエリ・ログを消去する",
|
||||||
"query_log_retention": "クエリ・ログの保持",
|
"query_log_retention": "クエリ・ログのローテーション",
|
||||||
"query_log_enable": "ログを有効にする",
|
"query_log_enable": "ログを有効にする",
|
||||||
"query_log_configuration": "ログ設定",
|
"query_log_configuration": "ログ設定",
|
||||||
"query_log_disabled": "クエリ・ログは無効になっており、<0>設定</0>で構成できます",
|
"query_log_disabled": "クエリ・ログは無効になっており、<0>設定</0>で構成できます",
|
||||||
"query_log_strict_search": "完全一致検索には二重引用符を使用します",
|
"query_log_strict_search": "完全一致検索には二重引用符を使用します",
|
||||||
"query_log_retention_confirm": "クエリ・ログの保持を変更してもよろしいですか? 期間を短くすると、一部のデータが失われます",
|
"query_log_retention_confirm": "クエリ・ログのローテーションを変更してもよろしいですか? 間隔の値を減らすと、一部のデータが失われます",
|
||||||
"anonymize_client_ip": "クライアントIPを匿名化する",
|
"anonymize_client_ip": "クライアントIPを匿名化する",
|
||||||
"anonymize_client_ip_desc": "ログと統計にクライアントのフルIPアドレスを保存しないようにします。",
|
"anonymize_client_ip_desc": "ログと統計にクライアントのフルIPアドレスを保存しないようにします。",
|
||||||
"dns_config": "DNSサーバ設定",
|
"dns_config": "DNSサーバ設定",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "頻度制限",
|
"rate_limit": "頻度制限",
|
||||||
"edns_enable": "EDNSクライアントサブネットを有効にする",
|
"edns_enable": "EDNSクライアントサブネットを有効にする",
|
||||||
"edns_cs_desc": "アップストリームリクエストにEDNSクライアントサブネットオプション(ECS)を追加し、クライアントから送信された値をクエリログに記録します。",
|
"edns_cs_desc": "アップストリームリクエストにEDNSクライアントサブネットオプション(ECS)を追加し、クライアントから送信された値をクエリログに記録します。",
|
||||||
|
"edns_use_custom_ip": "EDNSにカスタムIPを使用する",
|
||||||
|
"edns_use_custom_ip_desc": "EDNS に対してカスタム IP の使用を許可します。",
|
||||||
"rate_limit_desc": "一つのクライアントに対して許可される1秒あたりのリクエスト数(「0」に設定すると、制限なしになります)",
|
"rate_limit_desc": "一つのクライアントに対して許可される1秒あたりのリクエスト数(「0」に設定すると、制限なしになります)",
|
||||||
"blocking_ipv4_desc": "ブロックされたAリクエストに対して応答されるIPアドレス",
|
"blocking_ipv4_desc": "ブロックされたAリクエストに対して応答されるIPアドレス",
|
||||||
"blocking_ipv6_desc": "ブロックされたAAAAリクエストに対して応答されるIPアドレス",
|
"blocking_ipv6_desc": "ブロックされたAAAAリクエストに対して応答されるIPアドレス",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN:NXDOMAINコードで応答します",
|
"blocking_mode_nxdomain": "NXDOMAIN:NXDOMAINコードで応答します",
|
||||||
"blocking_mode_null_ip": "Null IP:ゼロのIPアドレスで応答します(Aの場合は0.0.0.0; AAAAの場合は::)",
|
"blocking_mode_null_ip": "Null IP:ゼロのIPアドレスで応答します(Aの場合は0.0.0.0; AAAAの場合は::)",
|
||||||
"blocking_mode_custom_ip": "カスタムIP:手動で設定されたIPアドレスで応答します",
|
"blocking_mode_custom_ip": "カスタムIP:手動で設定されたIPアドレスで応答します",
|
||||||
|
"theme_auto": "自動",
|
||||||
|
"theme_light": "ライト",
|
||||||
|
"theme_dark": "ダーク",
|
||||||
"upstream_dns_client_desc": "このフィールドを未入力のままにすると、AdGuard Homeは<0>DNS設定</0>で構成されたサーバを使用します。",
|
"upstream_dns_client_desc": "このフィールドを未入力のままにすると、AdGuard Homeは<0>DNS設定</0>で構成されたサーバを使用します。",
|
||||||
"tracker_source": "追跡元",
|
"tracker_source": "追跡元",
|
||||||
"source_label": "ソース",
|
"source_label": "ソース",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "AdGuard Homeの新バージョンが利用可能です。",
|
"updates_checked": "AdGuard Homeの新バージョンが利用可能です。",
|
||||||
"updates_version_equal": "AdGuard Homeは既に最新です",
|
"updates_version_equal": "AdGuard Homeは既に最新です",
|
||||||
"check_updates_now": "今すぐアップデートを確認する",
|
"check_updates_now": "今すぐアップデートを確認する",
|
||||||
|
"version_request_error": "アップデート確認に失敗しました。インターネット接続を確認してください。",
|
||||||
"dns_privacy": "DNSプライバシー",
|
"dns_privacy": "DNSプライバシー",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1>という文字列を使用してください。",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1>という文字列を使用してください。",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1>という文字列を使用してください。",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1>という文字列を使用してください。",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "<1>DNS-over-HTTPS</1>または<1>DNS-over-TLS</1>を使用するには、AdGuard Home 設定の<0>暗号化設定</0>が必要です。",
|
"setup_dns_notice": "<1>DNS-over-HTTPS</1>または<1>DNS-over-TLS</1>を使用するには、AdGuard Home 設定の<0>暗号化設定</0>が必要です。",
|
||||||
"rewrite_added": "\"{{key}}\" のDNS書き換え情報を追加完了しました",
|
"rewrite_added": "\"{{key}}\" のDNS書き換え情報を追加完了しました",
|
||||||
"rewrite_deleted": "\"{{key}}\" のDNS書き換え情報を削除完了しました",
|
"rewrite_deleted": "\"{{key}}\" のDNS書き換え情報を削除完了しました",
|
||||||
|
"rewrite_updated": "DNS rewrite を更新完了しました。",
|
||||||
"rewrite_add": "DNS書き換え情報を追加する",
|
"rewrite_add": "DNS書き換え情報を追加する",
|
||||||
|
"rewrite_edit": "DNS rewrite を編集する",
|
||||||
"rewrite_not_found": "DNS書き換え情報はありません",
|
"rewrite_not_found": "DNS書き換え情報はありません",
|
||||||
"rewrite_confirm_delete": "\"{{key}}\" のDNS書き換え情報を削除してもよろしいですか?",
|
"rewrite_confirm_delete": "\"{{key}}\" のDNS書き換え情報を削除してもよろしいですか?",
|
||||||
"rewrite_desc": "特定のドメイン名に対するDNS応答を簡単にカスタマイズすることを可能にします。",
|
"rewrite_desc": "特定のドメイン名に対するDNS応答を簡単にカスタマイズすることを可能にします。",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "統計の保持を変更してもよろしいですか? 期間を短くすると、一部のデータが失われます",
|
"statistics_retention_confirm": "統計の保持を変更してもよろしいですか? 期間を短くすると、一部のデータが失われます",
|
||||||
"statistics_cleared": "統計の消去に成功しました",
|
"statistics_cleared": "統計の消去に成功しました",
|
||||||
"statistics_enable": "統計を有効にする",
|
"statistics_enable": "統計を有効にする",
|
||||||
|
"ignore_domains": "無視するドメイン(それぞれ改行で区切ってください)",
|
||||||
|
"ignore_domains_title": "無視するドメイン",
|
||||||
|
"ignore_domains_desc_stats": "これらのドメインへのクエリは統計に書き込まれません。",
|
||||||
|
"ignore_domains_desc_query": "これらのドメインへのクエリはクエリログに書き込まれません。",
|
||||||
"interval_hours": "{{count}}時間",
|
"interval_hours": "{{count}}時間",
|
||||||
"interval_hours_plural": "{{count}}時間",
|
"interval_hours_plural": "{{count}}時間",
|
||||||
"filters_configuration": "フィルタ設定",
|
"filters_configuration": "フィルタ設定",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "【<0>注意</0>】IPの匿名化が有効になっています。 <1>一般設定</1>で無効にできます。",
|
"anonymizer_notification": "【<0>注意</0>】IPの匿名化が有効になっています。 <1>一般設定</1>で無効にできます。",
|
||||||
"confirm_dns_cache_clear": "DNS キャッシュをクリアしてもよろしいですか?",
|
"confirm_dns_cache_clear": "DNS キャッシュをクリアしてもよろしいですか?",
|
||||||
"cache_cleared": "DNSキャッシュのクリア完了です。",
|
"cache_cleared": "DNSキャッシュのクリア完了です。",
|
||||||
"clear_cache": "キャッシュをクリアする"
|
"clear_cache": "キャッシュをクリアする",
|
||||||
|
"make_static": "静的(static)にする",
|
||||||
|
"theme_auto_desc": "自動(デバイスの配色に合わせる)",
|
||||||
|
"theme_dark_desc": "ダークテーマ",
|
||||||
|
"theme_light_desc": "ライトテーマ",
|
||||||
|
"disable_for_seconds": "{{count}}秒間",
|
||||||
|
"disable_for_seconds_plural": "{{count}}秒間",
|
||||||
|
"disable_for_minutes": "{{count}}分間",
|
||||||
|
"disable_for_minutes_plural": "{{count}}分間",
|
||||||
|
"disable_for_hours": "{{count}}時間",
|
||||||
|
"disable_for_hours_plural": "{{count}}時間",
|
||||||
|
"disable_until_tomorrow": "明日まで",
|
||||||
|
"disable_notify_for_seconds": "保護を {{count}} 秒間無効にする",
|
||||||
|
"disable_notify_for_seconds_plural": "保護を {{count}} 秒間無効にする",
|
||||||
|
"disable_notify_for_minutes": "保護を {{count}} 分間無効にする",
|
||||||
|
"disable_notify_for_minutes_plural": "保護を {{count}} 分間無効にする",
|
||||||
|
"disable_notify_for_hours": "保護を {{count}} 時間無効にする",
|
||||||
|
"disable_notify_for_hours_plural": "保護を {{count}} 時間無効にする",
|
||||||
|
"disable_notify_until_tomorrow": "明日まで保護を無効にする",
|
||||||
|
"enable_protection_timer": "保護は後 {{time}} で有効になります",
|
||||||
|
"custom_retention_input": "保持期間を入力してください(時間単位)",
|
||||||
|
"custom_rotation_input": "ローテーションを入力してください(時間単位)",
|
||||||
|
"protection_section_label": "AdGuardによる保護",
|
||||||
|
"log_and_stats_section_label": "クエリ・ログと統計情報",
|
||||||
|
"ignore_query_log": "クエリ・ログでこのクライアントを無視する",
|
||||||
|
"ignore_statistics": "統計でこのクライアントを無視する"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "자녀 보호 활성화됨",
|
"enabled_parental_toast": "자녀 보호 활성화됨",
|
||||||
"disabled_safe_search_toast": "세이프서치 비활성화됨",
|
"disabled_safe_search_toast": "세이프서치 비활성화됨",
|
||||||
"enabled_save_search_toast": "세이프서치 활성화됨",
|
"enabled_save_search_toast": "세이프서치 활성화됨",
|
||||||
|
"updated_save_search_toast": "세이프서치 설정 업데이트됨",
|
||||||
"enabled_table_header": "활성화됨",
|
"enabled_table_header": "활성화됨",
|
||||||
"name_table_header": "이름",
|
"name_table_header": "이름",
|
||||||
"list_url_table_header": "리스트 URL",
|
"list_url_table_header": "리스트 URL",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "쿼리 로그를 성공적으로 초기화했습니다",
|
"query_log_cleared": "쿼리 로그를 성공적으로 초기화했습니다",
|
||||||
"query_log_updated": "질의 로그가 성공적으로 업데이트되었습니다",
|
"query_log_updated": "질의 로그가 성공적으로 업데이트되었습니다",
|
||||||
"query_log_clear": "쿼리 로그 비우기",
|
"query_log_clear": "쿼리 로그 비우기",
|
||||||
"query_log_retention": "쿼리 로그 저장 기간",
|
"query_log_retention": "쿼리 로그 로테이션",
|
||||||
"query_log_enable": "로그 활성화",
|
"query_log_enable": "로그 활성화",
|
||||||
"query_log_configuration": "로그 구성",
|
"query_log_configuration": "로그 구성",
|
||||||
"query_log_disabled": "쿼리 로그가 비활성화되어 있으며 <0>설정</0>에서 설정할 수 있습니다",
|
"query_log_disabled": "쿼리 로그가 비활성화되어 있으며 <0>설정</0>에서 설정할 수 있습니다",
|
||||||
"query_log_strict_search": "검색을 제한하려면 쌍따옴표를 사용해주세요",
|
"query_log_strict_search": "검색을 제한하려면 쌍따옴표를 사용해주세요",
|
||||||
"query_log_retention_confirm": "정말로 쿼리 로그 저장 기간을 변경하시겠습니까? 저장 주기를 낮출 경우, 일부 데이터가 손실됩니다",
|
"query_log_retention_confirm": "쿼리 로그 로테이션을 변경하시겠습니까? 간격 값을 줄이면 일부 데이터가 손실됩니다.",
|
||||||
"anonymize_client_ip": "클라이언트 IP 익명화",
|
"anonymize_client_ip": "클라이언트 IP 익명화",
|
||||||
"anonymize_client_ip_desc": "클라이언트의 전체 IP 주소를 로그와 통계에 저장하저장하지 마세요",
|
"anonymize_client_ip_desc": "클라이언트의 전체 IP 주소를 로그와 통계에 저장하저장하지 마세요",
|
||||||
"dns_config": "DNS 서버 설정",
|
"dns_config": "DNS 서버 설정",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "한도 제한",
|
"rate_limit": "한도 제한",
|
||||||
"edns_enable": "EDNS 클라이언트 서브넷 활성화",
|
"edns_enable": "EDNS 클라이언트 서브넷 활성화",
|
||||||
"edns_cs_desc": "업스트림 요청에 EDNS 클라이언트 서브넷 옵션(ECS)을 추가하고 쿼리 로그에 클라이언트가 보낸 값을 기록합니다.",
|
"edns_cs_desc": "업스트림 요청에 EDNS 클라이언트 서브넷 옵션(ECS)을 추가하고 쿼리 로그에 클라이언트가 보낸 값을 기록합니다.",
|
||||||
|
"edns_use_custom_ip": "EDNS에 사용자 지정 IP 사용",
|
||||||
|
"edns_use_custom_ip_desc": "EDNS에 사용자 지정 IP 사용하도록 허용합니다.",
|
||||||
"rate_limit_desc": "단일 클라이언트에서 허용 가능한 초 당 요청 생성 숫자 (0: 무제한)",
|
"rate_limit_desc": "단일 클라이언트에서 허용 가능한 초 당 요청 생성 숫자 (0: 무제한)",
|
||||||
"blocking_ipv4_desc": "차단된 A 요청에 대해서 반환할 IP 주소",
|
"blocking_ipv4_desc": "차단된 A 요청에 대해서 반환할 IP 주소",
|
||||||
"blocking_ipv6_desc": "차단된 AAAA 요청에 대해서 반환할 IP 주소",
|
"blocking_ipv6_desc": "차단된 AAAA 요청에 대해서 반환할 IP 주소",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: NXDOMAIN 코드로 응답",
|
"blocking_mode_nxdomain": "NXDOMAIN: NXDOMAIN 코드로 응답",
|
||||||
"blocking_mode_null_ip": "Null IP: 제로 IP 주소 (A는 0.0.0.0; AAAA는 ::) 로 응답합니다",
|
"blocking_mode_null_ip": "Null IP: 제로 IP 주소 (A는 0.0.0.0; AAAA는 ::) 로 응답합니다",
|
||||||
"blocking_mode_custom_ip": "커스텀 IP: 직접 설정한 IP 주소로 응답합니다",
|
"blocking_mode_custom_ip": "커스텀 IP: 직접 설정한 IP 주소로 응답합니다",
|
||||||
|
"theme_auto": "자동",
|
||||||
|
"theme_light": "라이트 테마",
|
||||||
|
"theme_dark": "다크 테마",
|
||||||
"upstream_dns_client_desc": "이 값을 비워둔다면 AdGuard Home은 <0>DNS 설정</0>에 설정되어 있는 값을 사용합니다.",
|
"upstream_dns_client_desc": "이 값을 비워둔다면 AdGuard Home은 <0>DNS 설정</0>에 설정되어 있는 값을 사용합니다.",
|
||||||
"tracker_source": "추적기 소스",
|
"tracker_source": "추적기 소스",
|
||||||
"source_label": "소스",
|
"source_label": "소스",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "AdGuard Home의 새 버전을 사용할 수 있습니다",
|
"updates_checked": "AdGuard Home의 새 버전을 사용할 수 있습니다",
|
||||||
"updates_version_equal": "AdGuard Home 최신 상태입니다.",
|
"updates_version_equal": "AdGuard Home 최신 상태입니다.",
|
||||||
"check_updates_now": "지금 업데이트 확인",
|
"check_updates_now": "지금 업데이트 확인",
|
||||||
|
"version_request_error": "업데이트 체크에 실패했습니다. 인터넷 연결 상태를 확인해주세요.",
|
||||||
"dns_privacy": "DNS 프라이버시",
|
"dns_privacy": "DNS 프라이버시",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> 사용하세요.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> 사용하세요.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> 사용하세요.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> 사용하세요.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "<1>DNS-over-HTTPS</1> 또는 <1>DNS-over-TLS를</1> 사용하려면 AdGuard Home 설정에서 <0>암호화를 구성해야 합니다.</0>",
|
"setup_dns_notice": "<1>DNS-over-HTTPS</1> 또는 <1>DNS-over-TLS를</1> 사용하려면 AdGuard Home 설정에서 <0>암호화를 구성해야 합니다.</0>",
|
||||||
"rewrite_added": "'{{key}}'에 대한 DNS 수정 정보를 성공적으로 추가 됩니다",
|
"rewrite_added": "'{{key}}'에 대한 DNS 수정 정보를 성공적으로 추가 됩니다",
|
||||||
"rewrite_deleted": "'{{key}}'에 대한 DNS 수정 정보를 성공적으로 삭제 됩니다",
|
"rewrite_deleted": "'{{key}}'에 대한 DNS 수정 정보를 성공적으로 삭제 됩니다",
|
||||||
|
"rewrite_updated": "DNS 다시 쓰기 업데이트 완료",
|
||||||
"rewrite_add": "DNS 변환 정보를 추가합니다",
|
"rewrite_add": "DNS 변환 정보를 추가합니다",
|
||||||
|
"rewrite_edit": "DNS 다시 쓰기 편집",
|
||||||
"rewrite_not_found": "DNS 변경 정보를 찾을 수 없습니다",
|
"rewrite_not_found": "DNS 변경 정보를 찾을 수 없습니다",
|
||||||
"rewrite_confirm_delete": "'{{key}}'에 대한 DNS 변경 정보를 삭제하시겠습니까?",
|
"rewrite_confirm_delete": "'{{key}}'에 대한 DNS 변경 정보를 삭제하시겠습니까?",
|
||||||
"rewrite_desc": "특정 도메인 이름에 대한 사용자 지정 DNS 응답을 쉽게 구성할 수 있습니다.",
|
"rewrite_desc": "특정 도메인 이름에 대한 사용자 지정 DNS 응답을 쉽게 구성할 수 있습니다.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "정말로 통계 저장 기간을 변경하시겠습니까? 저장 주기를 낮출 경우, 일부 데이터가 손실됩니다",
|
"statistics_retention_confirm": "정말로 통계 저장 기간을 변경하시겠습니까? 저장 주기를 낮출 경우, 일부 데이터가 손실됩니다",
|
||||||
"statistics_cleared": "통계를 성공적으로 초기화했습니다.",
|
"statistics_cleared": "통계를 성공적으로 초기화했습니다.",
|
||||||
"statistics_enable": "통계 활성화",
|
"statistics_enable": "통계 활성화",
|
||||||
|
"ignore_domains": "무시된 도메인(줄 바꿈으로 구분)",
|
||||||
|
"ignore_domains_title": "무시된 도메인",
|
||||||
|
"ignore_domains_desc_stats": "이러한 도메인에 대한 쿼리는 통계에 기록되지 않습니다.",
|
||||||
|
"ignore_domains_desc_query": "이러한 도메인에 대한 쿼리는 쿼리 로그에 기록되지 않습니다.",
|
||||||
"interval_hours": "{{count}} 시간",
|
"interval_hours": "{{count}} 시간",
|
||||||
"interval_hours_plural": "{{count}} 시간",
|
"interval_hours_plural": "{{count}} 시간",
|
||||||
"filters_configuration": "필터 구성",
|
"filters_configuration": "필터 구성",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>참고:</0> IP 익명화가 활성화되었습니다. <1>일반 설정</1>에서 비활성화할 수 있습니다.",
|
"anonymizer_notification": "<0>참고:</0> IP 익명화가 활성화되었습니다. <1>일반 설정</1>에서 비활성화할 수 있습니다.",
|
||||||
"confirm_dns_cache_clear": "정말로 DNS 캐시를 지우시겠습니까?",
|
"confirm_dns_cache_clear": "정말로 DNS 캐시를 지우시겠습니까?",
|
||||||
"cache_cleared": "DNS 캐시를 성공적으로 지웠습니다",
|
"cache_cleared": "DNS 캐시를 성공적으로 지웠습니다",
|
||||||
"clear_cache": "캐시 지우기"
|
"clear_cache": "캐시 지우기",
|
||||||
|
"make_static": "정적으로 만들기",
|
||||||
|
"theme_auto_desc": "자동(기기의 색 구성표에 따라 설정)",
|
||||||
|
"theme_dark_desc": "다크 테마",
|
||||||
|
"theme_light_desc": "라이트 테마",
|
||||||
|
"disable_for_seconds": "{{count}}초",
|
||||||
|
"disable_for_seconds_plural": "{{count}}초",
|
||||||
|
"disable_for_minutes": "{{count}}분",
|
||||||
|
"disable_for_minutes_plural": "{{count}}분간",
|
||||||
|
"disable_for_hours": "{{count}}시간",
|
||||||
|
"disable_for_hours_plural": "{{count}}시간",
|
||||||
|
"disable_until_tomorrow": "내일까지",
|
||||||
|
"disable_notify_for_seconds": "{{count}}초 동안 보호 기능 비활성화",
|
||||||
|
"disable_notify_for_seconds_plural": "{{count}}초 동안 보호 기능 비활성화",
|
||||||
|
"disable_notify_for_minutes": "{{count}}분 동안 보호 기능 비활성화",
|
||||||
|
"disable_notify_for_minutes_plural": "{{count}}분 동안 보호 기능 비활성화",
|
||||||
|
"disable_notify_for_hours": "{{count}}시간 동안 보호 기능 비활성화",
|
||||||
|
"disable_notify_for_hours_plural": "{{count}}시간 동안 보호 기능 비활성화",
|
||||||
|
"disable_notify_until_tomorrow": "내일까지 보호 기능 비활성화",
|
||||||
|
"enable_protection_timer": "{{time}}에 보호 기능이 활성화됩니다.",
|
||||||
|
"custom_retention_input": "시간 단위로 보존 기간 입력",
|
||||||
|
"custom_rotation_input": "시간 단위로 로테이션 입력",
|
||||||
|
"protection_section_label": "보호",
|
||||||
|
"log_and_stats_section_label": "쿼리 로그 및 통계",
|
||||||
|
"ignore_query_log": "쿼리 로그에서 이 클라이언트 무시",
|
||||||
|
"ignore_statistics": "통계에서 이 클라이언트 무시"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Ingeschakeld Ouderlijk toezicht",
|
"enabled_parental_toast": "Ingeschakeld Ouderlijk toezicht",
|
||||||
"disabled_safe_search_toast": "Uitgeschakeld Veilig zoeken",
|
"disabled_safe_search_toast": "Uitgeschakeld Veilig zoeken",
|
||||||
"enabled_save_search_toast": "Ingeschakeld Veilig zoeken",
|
"enabled_save_search_toast": "Ingeschakeld Veilig zoeken",
|
||||||
|
"updated_save_search_toast": "Safe Search-instellingen bijgewerkt",
|
||||||
"enabled_table_header": "Ingeschakeld",
|
"enabled_table_header": "Ingeschakeld",
|
||||||
"name_table_header": "Naam",
|
"name_table_header": "Naam",
|
||||||
"list_url_table_header": "URL lijst",
|
"list_url_table_header": "URL lijst",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Het query logboek is succesvol geleegd",
|
"query_log_cleared": "Het query logboek is succesvol geleegd",
|
||||||
"query_log_updated": "Het query logboek is succesvol bijgewerkt",
|
"query_log_updated": "Het query logboek is succesvol bijgewerkt",
|
||||||
"query_log_clear": "Leeg query logs",
|
"query_log_clear": "Leeg query logs",
|
||||||
"query_log_retention": "Query logs bewaartermijn",
|
"query_log_retention": "Query logs rotatie",
|
||||||
"query_log_enable": "Log bestanden inschakelen",
|
"query_log_enable": "Log bestanden inschakelen",
|
||||||
"query_log_configuration": "Logbestanden instellingen",
|
"query_log_configuration": "Logbestanden instellingen",
|
||||||
"query_log_disabled": "Het query logboek is uitgeschakeld en kan worden geconfigureerd in de <0>instellingen</0>",
|
"query_log_disabled": "Het query logboek is uitgeschakeld en kan worden geconfigureerd in de <0>instellingen</0>",
|
||||||
"query_log_strict_search": "Gebruik dubbele aanhalingstekens voor strikt zoeken",
|
"query_log_strict_search": "Gebruik dubbele aanhalingstekens voor strikt zoeken",
|
||||||
"query_log_retention_confirm": "Weet u zeker dat u de bewaartermijn van het query logboek wilt wijzigen? Als u de intervalwaarde verlaagt, gaan sommige gegevens verloren",
|
"query_log_retention_confirm": "Weet u zeker dat u de rotatie van het querylogboek wilt wijzigen? Als u de intervalwaarde verlaagt, gaan sommige gegevens verloren",
|
||||||
"anonymize_client_ip": "Cliënt IP anonimiseren",
|
"anonymize_client_ip": "Cliënt IP anonimiseren",
|
||||||
"anonymize_client_ip_desc": "Het volledige IP-adres van de cliënt niet opnemen in logboeken en statistiekbestanden",
|
"anonymize_client_ip_desc": "Het volledige IP-adres van de cliënt niet opnemen in logboeken en statistiekbestanden",
|
||||||
"dns_config": "DNS-server configuratie",
|
"dns_config": "DNS-server configuratie",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Ratio limiet",
|
"rate_limit": "Ratio limiet",
|
||||||
"edns_enable": "EDNS client subnet inschakelen",
|
"edns_enable": "EDNS client subnet inschakelen",
|
||||||
"edns_cs_desc": "De EDNS Client Subnet-optie (ECS) toevoegen aan upstream-verzoeken en de waarden die door de clients zijn verzonden registreren in het querylogboek.",
|
"edns_cs_desc": "De EDNS Client Subnet-optie (ECS) toevoegen aan upstream-verzoeken en de waarden die door de clients zijn verzonden registreren in het querylogboek.",
|
||||||
|
"edns_use_custom_ip": "Aangepast IP-adres gebruiken voor EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Toestaan om aangepast IP-adres voor EDNS te gebruiken",
|
||||||
"rate_limit_desc": "Het aantal verzoeken per seconde toegelaten per toestel. 0 betekent onbeperkt.",
|
"rate_limit_desc": "Het aantal verzoeken per seconde toegelaten per toestel. 0 betekent onbeperkt.",
|
||||||
"blocking_ipv4_desc": "IP-adres dat moet worden teruggegeven voor een geblokkeerd A-verzoek",
|
"blocking_ipv4_desc": "IP-adres dat moet worden teruggegeven voor een geblokkeerd A-verzoek",
|
||||||
"blocking_ipv6_desc": "IP-adres dat moet worden teruggegeven voor een geblokkeerd A-verzoek",
|
"blocking_ipv6_desc": "IP-adres dat moet worden teruggegeven voor een geblokkeerd A-verzoek",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Reageer met NXDOMAIN code",
|
"blocking_mode_nxdomain": "NXDOMAIN: Reageer met NXDOMAIN code",
|
||||||
"blocking_mode_null_ip": "Nul IP: Reageer met een nul IP address (0.0.0.0 voor A; :: voor AAAA)",
|
"blocking_mode_null_ip": "Nul IP: Reageer met een nul IP address (0.0.0.0 voor A; :: voor AAAA)",
|
||||||
"blocking_mode_custom_ip": "Aangepast IP: Reageer met een handmatige ingesteld IP adres",
|
"blocking_mode_custom_ip": "Aangepast IP: Reageer met een handmatige ingesteld IP adres",
|
||||||
|
"theme_auto": "Automatisch",
|
||||||
|
"theme_light": "Licht",
|
||||||
|
"theme_dark": "Donker",
|
||||||
"upstream_dns_client_desc": "Indien je dit veld leeglaat zal AdGuard Home de servers welke zijn ingesteld in de <0>DNS instellingen</0> gebruiken.",
|
"upstream_dns_client_desc": "Indien je dit veld leeglaat zal AdGuard Home de servers welke zijn ingesteld in de <0>DNS instellingen</0> gebruiken.",
|
||||||
"tracker_source": "Bron volger",
|
"tracker_source": "Bron volger",
|
||||||
"source_label": "Bron",
|
"source_label": "Bron",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Een nieuwe versie van AdGuard Home is beschikbaar\n",
|
"updates_checked": "Een nieuwe versie van AdGuard Home is beschikbaar\n",
|
||||||
"updates_version_equal": "AdGuard Home is actueel",
|
"updates_version_equal": "AdGuard Home is actueel",
|
||||||
"check_updates_now": "Controleer op updates",
|
"check_updates_now": "Controleer op updates",
|
||||||
|
"version_request_error": "Updatecontrole mislukt. Controleer je internetverbinding.",
|
||||||
"dns_privacy": "DNS Privacy",
|
"dns_privacy": "DNS Privacy",
|
||||||
"setup_dns_privacy_1": "<0>DNS-via-TLS:</0> Gebruik <1>{{address}}</1> string.",
|
"setup_dns_privacy_1": "<0>DNS-via-TLS:</0> Gebruik <1>{{address}}</1> string.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-via-HTTPS:</0> Gebruik <1>{{address}}</1> string.",
|
"setup_dns_privacy_2": "<0>DNS-via-HTTPS:</0> Gebruik <1>{{address}}</1> string.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Om <1>DNS-via-HTTPS</1> of <1>DNS-via-TLS</1> te gebruiken, moet je <0>Versleuteling configureren</0> in de AdGuard Home instellingen.",
|
"setup_dns_notice": "Om <1>DNS-via-HTTPS</1> of <1>DNS-via-TLS</1> te gebruiken, moet je <0>Versleuteling configureren</0> in de AdGuard Home instellingen.",
|
||||||
"rewrite_added": "DNS-herschrijving voor \"{{key}}\" met succes toegevoegd",
|
"rewrite_added": "DNS-herschrijving voor \"{{key}}\" met succes toegevoegd",
|
||||||
"rewrite_deleted": "DNS-herschrijving voor \"{{key}}\" met succes verwijderd",
|
"rewrite_deleted": "DNS-herschrijving voor \"{{key}}\" met succes verwijderd",
|
||||||
|
"rewrite_updated": "DNS-herschrijven succesvol bijgewerkt",
|
||||||
"rewrite_add": "DNS-herschrijving toevoegen",
|
"rewrite_add": "DNS-herschrijving toevoegen",
|
||||||
|
"rewrite_edit": "DNS-herschrijven bewerken",
|
||||||
"rewrite_not_found": "Geen DNS-herschrijving gevonden",
|
"rewrite_not_found": "Geen DNS-herschrijving gevonden",
|
||||||
"rewrite_confirm_delete": "Bent u zeker dat u DNS-herschrijving \"{{key}}\" wilt verwijderen?",
|
"rewrite_confirm_delete": "Bent u zeker dat u DNS-herschrijving \"{{key}}\" wilt verwijderen?",
|
||||||
"rewrite_desc": "Hiermee kunt u eenvoudig aangepaste DNS-antwoorden configureren voor een specifieke domeinnaam.",
|
"rewrite_desc": "Hiermee kunt u eenvoudig aangepaste DNS-antwoorden configureren voor een specifieke domeinnaam.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Weet u zeker dat u de bewaartermijn van de statistieken wilt wijzigen? Als u de intervalwaarde verlaagt, gaan sommige gegevens verloren",
|
"statistics_retention_confirm": "Weet u zeker dat u de bewaartermijn van de statistieken wilt wijzigen? Als u de intervalwaarde verlaagt, gaan sommige gegevens verloren",
|
||||||
"statistics_cleared": "Statistieken succesvol gewist",
|
"statistics_cleared": "Statistieken succesvol gewist",
|
||||||
"statistics_enable": "Statistieken inschakelen",
|
"statistics_enable": "Statistieken inschakelen",
|
||||||
|
"ignore_domains": "Genegeerde domeinen (gescheiden door nieuwe regel)",
|
||||||
|
"ignore_domains_title": "Genegeerde domeinen",
|
||||||
|
"ignore_domains_desc_stats": "Zoekopdrachten voor deze domeinen worden niet naar de statistieken geschreven",
|
||||||
|
"ignore_domains_desc_query": "Zoekopdrachten voor deze domeinen worden niet naar het zoeklogboek geschreven",
|
||||||
"interval_hours": "{{count}} uur",
|
"interval_hours": "{{count}} uur",
|
||||||
"interval_hours_plural": "{{count}} uren",
|
"interval_hours_plural": "{{count}} uren",
|
||||||
"filters_configuration": "Filters instellingen",
|
"filters_configuration": "Filters instellingen",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Opmerking:</0> IP-anonimisering is ingeschakeld. Je kunt het uitschakelen in <1>Algemene instellingen</1>.",
|
"anonymizer_notification": "<0>Opmerking:</0> IP-anonimisering is ingeschakeld. Je kunt het uitschakelen in <1>Algemene instellingen</1>.",
|
||||||
"confirm_dns_cache_clear": "Weet je zeker dat je de DNS-cache wilt wissen?",
|
"confirm_dns_cache_clear": "Weet je zeker dat je de DNS-cache wilt wissen?",
|
||||||
"cache_cleared": "DNS-cache succesvol gewist",
|
"cache_cleared": "DNS-cache succesvol gewist",
|
||||||
"clear_cache": "Cache wissen"
|
"clear_cache": "Cache wissen",
|
||||||
|
"make_static": "Statisch maken",
|
||||||
|
"theme_auto_desc": "Automatisch (op basis van het kleurenschema van jouw apparaat)",
|
||||||
|
"theme_dark_desc": "Donker thema",
|
||||||
|
"theme_light_desc": "Licht thema",
|
||||||
|
"disable_for_seconds": "Voor {{count}} seconde",
|
||||||
|
"disable_for_seconds_plural": "Voor {{count}} seconden",
|
||||||
|
"disable_for_minutes": "Voor {{count}} minuut",
|
||||||
|
"disable_for_minutes_plural": "Voor {{count}} minuten",
|
||||||
|
"disable_for_hours": "Voor {{count}} uur",
|
||||||
|
"disable_for_hours_plural": "Voor {{count}} uren",
|
||||||
|
"disable_until_tomorrow": "Tot morgen",
|
||||||
|
"disable_notify_for_seconds": "Beveiliging uitschakelen voor {{count}} seconde",
|
||||||
|
"disable_notify_for_seconds_plural": "Beveiliging uitschakelen voor {{count}} seconden",
|
||||||
|
"disable_notify_for_minutes": "Beveiliging uitschakelen voor {{count}} minuut",
|
||||||
|
"disable_notify_for_minutes_plural": "Beveiliging uitschakelen voor {{count}} minuten",
|
||||||
|
"disable_notify_for_hours": "Beveiliging uitschakelen voor {{count}} uur",
|
||||||
|
"disable_notify_for_hours_plural": "Beveiliging uitschakelen voor {{count}} uren",
|
||||||
|
"disable_notify_until_tomorrow": "Beveiliging uitschakelen tot morgen",
|
||||||
|
"enable_protection_timer": "Bescherming wordt ingeschakeld over {{time}}",
|
||||||
|
"custom_retention_input": "Voer retentie in uren in",
|
||||||
|
"custom_rotation_input": "Voer rotatie in uren in",
|
||||||
|
"protection_section_label": "Bescherming",
|
||||||
|
"log_and_stats_section_label": "Aanvragenlogboek en statistieken",
|
||||||
|
"ignore_query_log": "Deze client negeren in het aanvragenlogboek",
|
||||||
|
"ignore_statistics": "Deze client negeren in de statistieken"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -281,6 +281,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Svar med NXDOMAIN-koden",
|
"blocking_mode_nxdomain": "NXDOMAIN: Svar med NXDOMAIN-koden",
|
||||||
"blocking_mode_null_ip": "Null IP: Svar med en 0-IP-adresse (0.0.0.0 for A; :: for AAAA)",
|
"blocking_mode_null_ip": "Null IP: Svar med en 0-IP-adresse (0.0.0.0 for A; :: for AAAA)",
|
||||||
"blocking_mode_custom_ip": "Tilpasset IP: Svar med en manuelt valgt IP-adresse",
|
"blocking_mode_custom_ip": "Tilpasset IP: Svar med en manuelt valgt IP-adresse",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Lyst tema",
|
||||||
|
"theme_dark": "Mørkt tema",
|
||||||
"upstream_dns_client_desc": "Hvis dette feltet holdes tomt, vil AdGuard Home bruke tjenerne som er satt opp i <0>DNS-innstillingene</0>.",
|
"upstream_dns_client_desc": "Hvis dette feltet holdes tomt, vil AdGuard Home bruke tjenerne som er satt opp i <0>DNS-innstillingene</0>.",
|
||||||
"tracker_source": "Sporerkilde",
|
"tracker_source": "Sporerkilde",
|
||||||
"source_label": "Kilde",
|
"source_label": "Kilde",
|
||||||
@@ -433,6 +436,7 @@
|
|||||||
"updates_checked": "En ny versjon av AdGuard Home er tilgjengelig",
|
"updates_checked": "En ny versjon av AdGuard Home er tilgjengelig",
|
||||||
"updates_version_equal": "AdGuard Home er fullt oppdatert",
|
"updates_version_equal": "AdGuard Home er fullt oppdatert",
|
||||||
"check_updates_now": "Se etter oppdateringer nå",
|
"check_updates_now": "Se etter oppdateringer nå",
|
||||||
|
"version_request_error": "Oppdateringssjekken mislyktes. Vennligst sjekk internettforbindelsen din.",
|
||||||
"dns_privacy": "DNS-privatliv",
|
"dns_privacy": "DNS-privatliv",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Benytt <1>{{address}}</1>-strengen.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Benytt <1>{{address}}</1>-strengen.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Benytt <1>{{address}}</1>-strengen.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Benytt <1>{{address}}</1>-strengen.",
|
||||||
@@ -453,7 +457,9 @@
|
|||||||
"setup_dns_notice": "For å benytte <1>DNS-over-HTTPS</1> eller <1>DNS-over-TLS</1>, må du <0>sette opp Kryptering</0> i AdGuard Home-innstillingene.",
|
"setup_dns_notice": "For å benytte <1>DNS-over-HTTPS</1> eller <1>DNS-over-TLS</1>, må du <0>sette opp Kryptering</0> i AdGuard Home-innstillingene.",
|
||||||
"rewrite_added": "DNS-omdirigeringen for «{{key}}» ble vellykket lagt til",
|
"rewrite_added": "DNS-omdirigeringen for «{{key}}» ble vellykket lagt til",
|
||||||
"rewrite_deleted": "DNS-omdirigeringen for «{{key}}» ble vellykket slettet",
|
"rewrite_deleted": "DNS-omdirigeringen for «{{key}}» ble vellykket slettet",
|
||||||
|
"rewrite_updated": "DNS-omskriving ble oppdatert",
|
||||||
"rewrite_add": "Legg til DNS-omdirigering",
|
"rewrite_add": "Legg til DNS-omdirigering",
|
||||||
|
"rewrite_edit": "Rediger DNS-omskriving",
|
||||||
"rewrite_not_found": "Ingen DNS-omdirigeringer ble funnet",
|
"rewrite_not_found": "Ingen DNS-omdirigeringer ble funnet",
|
||||||
"rewrite_confirm_delete": "Er du sikker på at du vil slette DNS-omdirigeringen for «{{key}}»?",
|
"rewrite_confirm_delete": "Er du sikker på at du vil slette DNS-omdirigeringen for «{{key}}»?",
|
||||||
"rewrite_desc": "Lar deg enkelt konfigurere selvvalgte DNS-tilbakemeldinger for et spesifikt domenenavn.",
|
"rewrite_desc": "Lar deg enkelt konfigurere selvvalgte DNS-tilbakemeldinger for et spesifikt domenenavn.",
|
||||||
@@ -612,5 +618,6 @@
|
|||||||
"use_saved_key": "Bruk den tidligere lagrede nøkkelen",
|
"use_saved_key": "Bruk den tidligere lagrede nøkkelen",
|
||||||
"parental_control": "Foreldrekontroll",
|
"parental_control": "Foreldrekontroll",
|
||||||
"safe_browsing": "Sikker surfing",
|
"safe_browsing": "Sikker surfing",
|
||||||
"served_from_cache": "{{value}} <i>(formidlet fra mellomlageret)</i>"
|
"served_from_cache": "{{value}} <i>(formidlet fra mellomlageret)</i>",
|
||||||
|
"protection_section_label": "Beskyttelse"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Włączona Kontrola Rodzicielska",
|
"enabled_parental_toast": "Włączona Kontrola Rodzicielska",
|
||||||
"disabled_safe_search_toast": "Wyłączone bezpieczne wyszukiwanie",
|
"disabled_safe_search_toast": "Wyłączone bezpieczne wyszukiwanie",
|
||||||
"enabled_save_search_toast": "Włączone bezpieczne wyszukiwanie",
|
"enabled_save_search_toast": "Włączone bezpieczne wyszukiwanie",
|
||||||
|
"updated_save_search_toast": "Zaktualizowano ustawienia bezpiecznego wyszukiwania",
|
||||||
"enabled_table_header": "Włączone",
|
"enabled_table_header": "Włączone",
|
||||||
"name_table_header": "Nazwa",
|
"name_table_header": "Nazwa",
|
||||||
"list_url_table_header": "Adres URL listy",
|
"list_url_table_header": "Adres URL listy",
|
||||||
@@ -221,7 +222,7 @@
|
|||||||
"all_lists_up_to_date_toast": "Wszystkie listy są już aktualne",
|
"all_lists_up_to_date_toast": "Wszystkie listy są już aktualne",
|
||||||
"updated_upstream_dns_toast": "Serwery nadrzędne zostały pomyślnie zapisane",
|
"updated_upstream_dns_toast": "Serwery nadrzędne zostały pomyślnie zapisane",
|
||||||
"dns_test_ok_toast": "Określone serwery DNS działają poprawnie",
|
"dns_test_ok_toast": "Określone serwery DNS działają poprawnie",
|
||||||
"dns_test_not_ok_toast": "Serwer \"{{key}}\": nie można go użyć, sprawdź, czy napisałeś go poprawnie",
|
"dns_test_not_ok_toast": "Serwer \"{{key}}\": nie może być użyte, sprawdź, czy zapisano go poprawnie",
|
||||||
"dns_test_warning_toast": "Upstream \"{{key}}\" nie odpowiada na zapytania testowe i może nie działać prawidłowo",
|
"dns_test_warning_toast": "Upstream \"{{key}}\" nie odpowiada na zapytania testowe i może nie działać prawidłowo",
|
||||||
"unblock": "Odblokuj",
|
"unblock": "Odblokuj",
|
||||||
"block": "Zablokuj",
|
"block": "Zablokuj",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Dziennik zapytań został pomyślnie wyczyszczony",
|
"query_log_cleared": "Dziennik zapytań został pomyślnie wyczyszczony",
|
||||||
"query_log_updated": "Dziennik zapytań został zaktualizowany",
|
"query_log_updated": "Dziennik zapytań został zaktualizowany",
|
||||||
"query_log_clear": "Wyczyść dzienniki zapytań",
|
"query_log_clear": "Wyczyść dzienniki zapytań",
|
||||||
"query_log_retention": "Przechowywanie dzienników zapytań",
|
"query_log_retention": "Rotacja dzienników zapytań",
|
||||||
"query_log_enable": "Włącz dziennik",
|
"query_log_enable": "Włącz dziennik",
|
||||||
"query_log_configuration": "Konfiguracja dzienników",
|
"query_log_configuration": "Konfiguracja dzienników",
|
||||||
"query_log_disabled": "Dziennik zapytań jest wyłączony i można go skonfigurować w <0>ustawieniach</0>",
|
"query_log_disabled": "Dziennik zapytań jest wyłączony i można go skonfigurować w <0>ustawieniach</0>",
|
||||||
"query_log_strict_search": "Używaj podwójnych cudzysłowów do ścisłego wyszukiwania",
|
"query_log_strict_search": "Używaj podwójnych cudzysłowów do ścisłego wyszukiwania",
|
||||||
"query_log_retention_confirm": "Czy na pewno chcesz zmienić sposób przechowywania dziennika zapytań? Jeśli zmniejszysz wartość interwału, niektóre dane zostaną utracone",
|
"query_log_retention_confirm": "Czy na pewno chcesz zmienić rotację dziennika zapytań? Jeśli zmniejszysz wartość interwału, niektóre dane zostaną utracone",
|
||||||
"anonymize_client_ip": "Anonimizuj adres IP klienta",
|
"anonymize_client_ip": "Anonimizuj adres IP klienta",
|
||||||
"anonymize_client_ip_desc": "Nie zapisuj pełnego adresu IP w dziennikach i statystykach",
|
"anonymize_client_ip_desc": "Nie zapisuj pełnego adresu IP w dziennikach i statystykach",
|
||||||
"dns_config": "Konfiguracja serwera DNS",
|
"dns_config": "Konfiguracja serwera DNS",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Limit ilościowy",
|
"rate_limit": "Limit ilościowy",
|
||||||
"edns_enable": "Włącz podsieć klienta EDNS",
|
"edns_enable": "Włącz podsieć klienta EDNS",
|
||||||
"edns_cs_desc": "Dodaj opcję podsieci klienta EDNS (ECS) do żądań nadrzędnych i rejestruj wartości wysyłane przez klientów w dzienniku zapytań.",
|
"edns_cs_desc": "Dodaj opcję podsieci klienta EDNS (ECS) do żądań nadrzędnych i rejestruj wartości wysyłane przez klientów w dzienniku zapytań.",
|
||||||
|
"edns_use_custom_ip": "Użyj niestandardowego adresu IP dla EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Zezwól na użycie niestandardowego adresu IP dla EDNS",
|
||||||
"rate_limit_desc": "Liczba żądań na sekundę dozwolona na klienta. Ustawienie wartości 0 oznacza brak ograniczeń.",
|
"rate_limit_desc": "Liczba żądań na sekundę dozwolona na klienta. Ustawienie wartości 0 oznacza brak ograniczeń.",
|
||||||
"blocking_ipv4_desc": "Adres IP, który ma zostać zwrócony w przypadku zablokowanego żądania A",
|
"blocking_ipv4_desc": "Adres IP, który ma zostać zwrócony w przypadku zablokowanego żądania A",
|
||||||
"blocking_ipv6_desc": "Adres IP, który ma zostać zwrócony w przypadku zablokowanego żądania AAAA",
|
"blocking_ipv6_desc": "Adres IP, który ma zostać zwrócony w przypadku zablokowanego żądania AAAA",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Odpowiedz kodem NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Odpowiedz kodem NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "Null IP: Odpowiedz z zerowym adresem IP (0.0.0.0 dla A; :: dla AAAA)",
|
"blocking_mode_null_ip": "Null IP: Odpowiedz z zerowym adresem IP (0.0.0.0 dla A; :: dla AAAA)",
|
||||||
"blocking_mode_custom_ip": "Niestandardowy adres IP: Odpowiedz ręcznie ustawionym adresem IP",
|
"blocking_mode_custom_ip": "Niestandardowy adres IP: Odpowiedz ręcznie ustawionym adresem IP",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Jasny",
|
||||||
|
"theme_dark": "Ciemny",
|
||||||
"upstream_dns_client_desc": "Jeśli to pole pozostanie puste, AdGuard Home użyje serwerów skonfigurowanych w <0>Ustawieniach DNS</0>.",
|
"upstream_dns_client_desc": "Jeśli to pole pozostanie puste, AdGuard Home użyje serwerów skonfigurowanych w <0>Ustawieniach DNS</0>.",
|
||||||
"tracker_source": "Źródło skryptu śledzącego",
|
"tracker_source": "Źródło skryptu śledzącego",
|
||||||
"source_label": "Źródło",
|
"source_label": "Źródło",
|
||||||
@@ -340,7 +346,7 @@
|
|||||||
"install_devices_windows_list_2": "Przejdź do kategorii Sieć i Internet, a następnie do Centrum sieci i udostępniania.",
|
"install_devices_windows_list_2": "Przejdź do kategorii Sieć i Internet, a następnie do Centrum sieci i udostępniania.",
|
||||||
"install_devices_windows_list_3": "W lewym panelu kliknij \"Zmień ustawienia adaptera\".",
|
"install_devices_windows_list_3": "W lewym panelu kliknij \"Zmień ustawienia adaptera\".",
|
||||||
"install_devices_windows_list_4": "Kliknij prawym przyciskiem myszy aktywne połączenie i wybierz Właściwości.",
|
"install_devices_windows_list_4": "Kliknij prawym przyciskiem myszy aktywne połączenie i wybierz Właściwości.",
|
||||||
"install_devices_windows_list_5": "Znajdź na liście \"Protokół internetowy w wersji 4 (TCP/IPv4)\" (lub w przypadku IPv6 \"Protokół internetowy w wersji 6 (TCP/IPv6)\"), zaznacz go i ponownie kliknij na Właściwości.",
|
"install_devices_windows_list_5": "Znajdź na liście \"Protokół internetowy w wersji 4 (TCP/IPv4)\" (lub w przypadku IPv6 \"Protokół internetowy w wersji 6 (TCP/IPv6)\"), zaznacz go i ponownie kliknij Właściwości.",
|
||||||
"install_devices_windows_list_6": "Wybierz opcję \"Użyj następujących adresów serwerów DNS\" i wprowadź adresy serwerów AdGuard Home.",
|
"install_devices_windows_list_6": "Wybierz opcję \"Użyj następujących adresów serwerów DNS\" i wprowadź adresy serwerów AdGuard Home.",
|
||||||
"install_devices_macos_list_1": "Kliknij ikonę Apple i przejdź do Preferencje systemowe.",
|
"install_devices_macos_list_1": "Kliknij ikonę Apple i przejdź do Preferencje systemowe.",
|
||||||
"install_devices_macos_list_2": "Kliknij Sieć.",
|
"install_devices_macos_list_2": "Kliknij Sieć.",
|
||||||
@@ -390,7 +396,7 @@
|
|||||||
"encryption_issuer": "Zgłaszający",
|
"encryption_issuer": "Zgłaszający",
|
||||||
"encryption_hostnames": "Nazwy hostów",
|
"encryption_hostnames": "Nazwy hostów",
|
||||||
"encryption_reset": "Czy na pewno chcesz zresetować ustawienia szyfrowania?",
|
"encryption_reset": "Czy na pewno chcesz zresetować ustawienia szyfrowania?",
|
||||||
"encryption_warning": "Uwaga!",
|
"encryption_warning": "Uwaga",
|
||||||
"topline_expiring_certificate": "Twój certyfikat SSL wkrótce wygaśnie. Zaktualizuj <0>Ustawienia szyfrowania</0>.",
|
"topline_expiring_certificate": "Twój certyfikat SSL wkrótce wygaśnie. Zaktualizuj <0>Ustawienia szyfrowania</0>.",
|
||||||
"topline_expired_certificate": "Twój certyfikat SSL wygasł. Zaktualizuj <0>Ustawienia szyfrowania</0>.",
|
"topline_expired_certificate": "Twój certyfikat SSL wygasł. Zaktualizuj <0>Ustawienia szyfrowania</0>.",
|
||||||
"form_error_port_range": "Wpisz numer portu z zakresu 80-65535",
|
"form_error_port_range": "Wpisz numer portu z zakresu 80-65535",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Dostępna jest nowa wersja programu AdGuard Home\n",
|
"updates_checked": "Dostępna jest nowa wersja programu AdGuard Home\n",
|
||||||
"updates_version_equal": "AdGuard Home jest aktualny",
|
"updates_version_equal": "AdGuard Home jest aktualny",
|
||||||
"check_updates_now": "Sprawdź aktualizacje teraz",
|
"check_updates_now": "Sprawdź aktualizacje teraz",
|
||||||
|
"version_request_error": "Sprawdzanie aktualizacji zakończone niepowodzeniem. Sprawdź swoje połączenie z internetem.",
|
||||||
"dns_privacy": "Prywatny DNS",
|
"dns_privacy": "Prywatny DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Skorzystaj z adresu <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Skorzystaj z adresu <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Skorzystaj z adresu <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Skorzystaj z adresu <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Aby skorzystać z <1>DNS-over-HTTPS</1> lub <1>DNS-over-TLS</1>, musisz w ustawieniach AdGuard Home <0>skonfigurować szyfrowanie</0>.",
|
"setup_dns_notice": "Aby skorzystać z <1>DNS-over-HTTPS</1> lub <1>DNS-over-TLS</1>, musisz w ustawieniach AdGuard Home <0>skonfigurować szyfrowanie</0>.",
|
||||||
"rewrite_added": "Pomyślnie dodano przepisanie DNS dla „{{key}}”",
|
"rewrite_added": "Pomyślnie dodano przepisanie DNS dla „{{key}}”",
|
||||||
"rewrite_deleted": "Przepisanie DNS dla „{{key}}” zostało pomyślnie usunięte",
|
"rewrite_deleted": "Przepisanie DNS dla „{{key}}” zostało pomyślnie usunięte",
|
||||||
|
"rewrite_updated": "Pomyślnie zaktualizowano przepisywanie DNS",
|
||||||
"rewrite_add": "Dodaj przepisywanie DNS",
|
"rewrite_add": "Dodaj przepisywanie DNS",
|
||||||
|
"rewrite_edit": "Edytuj przepisywanie DNS",
|
||||||
"rewrite_not_found": "Nie znaleziono przepisywania DNS",
|
"rewrite_not_found": "Nie znaleziono przepisywania DNS",
|
||||||
"rewrite_confirm_delete": "Czy na pewno chcesz usunąć przepisywanie DNS dla „{{key}}”?",
|
"rewrite_confirm_delete": "Czy na pewno chcesz usunąć przepisywanie DNS dla „{{key}}”?",
|
||||||
"rewrite_desc": "Pozwala łatwo skonfigurować niestandardową odpowiedź DNS dla określonej nazwy domeny.",
|
"rewrite_desc": "Pozwala łatwo skonfigurować niestandardową odpowiedź DNS dla określonej nazwy domeny.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Czy chcesz zmienić sposób przechowania statystyk? Jeżeli obniżysz wartość interwału, niektóre dane będą utracone",
|
"statistics_retention_confirm": "Czy chcesz zmienić sposób przechowania statystyk? Jeżeli obniżysz wartość interwału, niektóre dane będą utracone",
|
||||||
"statistics_cleared": "Statystyki zostały pomyślnie wyczyszczone",
|
"statistics_cleared": "Statystyki zostały pomyślnie wyczyszczone",
|
||||||
"statistics_enable": "Włącz statystyki",
|
"statistics_enable": "Włącz statystyki",
|
||||||
|
"ignore_domains": "Ignorowane domeny (każda w nowym wierszu)",
|
||||||
|
"ignore_domains_title": "Ignorowane domeny",
|
||||||
|
"ignore_domains_desc_stats": "Zapytania dla tych domen nie są zapisywane do statystyk",
|
||||||
|
"ignore_domains_desc_query": "Zapytania dla tych domen nie są zapisywane do dziennika",
|
||||||
"interval_hours": "{{count}} godzina",
|
"interval_hours": "{{count}} godzina",
|
||||||
"interval_hours_plural": "{{count}} godziny",
|
"interval_hours_plural": "{{count}} godziny",
|
||||||
"filters_configuration": "Konfiguracja filtrów",
|
"filters_configuration": "Konfiguracja filtrów",
|
||||||
@@ -531,7 +544,7 @@
|
|||||||
"password_placeholder": "Wpisz hasło",
|
"password_placeholder": "Wpisz hasło",
|
||||||
"sign_in": "Zaloguj się",
|
"sign_in": "Zaloguj się",
|
||||||
"sign_out": "Wyloguj się",
|
"sign_out": "Wyloguj się",
|
||||||
"forgot_password": "Zapomniałeś hasła?",
|
"forgot_password": "Zapomniano hasła?",
|
||||||
"forgot_password_desc": "Wykonaj <0>te kroki</0>, aby utworzyć nowe hasło do konta użytkownika.",
|
"forgot_password_desc": "Wykonaj <0>te kroki</0>, aby utworzyć nowe hasło do konta użytkownika.",
|
||||||
"location": "Lokalizacja",
|
"location": "Lokalizacja",
|
||||||
"orgname": "Nazwa firmy",
|
"orgname": "Nazwa firmy",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Uwaga:</0> Anonimizacja IP jest włączona. Możesz ją wyłączyć w <1>Ustawieniach ogólnych</1>.",
|
"anonymizer_notification": "<0>Uwaga:</0> Anonimizacja IP jest włączona. Możesz ją wyłączyć w <1>Ustawieniach ogólnych</1>.",
|
||||||
"confirm_dns_cache_clear": "Czy na pewno chcesz wyczyścić pamięć podręczną DNS?",
|
"confirm_dns_cache_clear": "Czy na pewno chcesz wyczyścić pamięć podręczną DNS?",
|
||||||
"cache_cleared": "Pamięć podręczna DNS została pomyślnie wyczyszczona",
|
"cache_cleared": "Pamięć podręczna DNS została pomyślnie wyczyszczona",
|
||||||
"clear_cache": "Wyczyść pamięć podręczną"
|
"clear_cache": "Wyczyść pamięć podręczną",
|
||||||
|
"make_static": "Ustaw adres statyczny",
|
||||||
|
"theme_auto_desc": "Automatycznie (na podstawie schematu kolorów Twojego urządzenia)",
|
||||||
|
"theme_dark_desc": "Ciemny motyw",
|
||||||
|
"theme_light_desc": "Jasny motyw",
|
||||||
|
"disable_for_seconds": "Na {{count}} sekundę",
|
||||||
|
"disable_for_seconds_plural": "Na {{count}} sekund",
|
||||||
|
"disable_for_minutes": "Na {{count}} minutę",
|
||||||
|
"disable_for_minutes_plural": "Na {{count}} minut",
|
||||||
|
"disable_for_hours": "Na {{count}} godzinę",
|
||||||
|
"disable_for_hours_plural": "Na {{count}} godziny",
|
||||||
|
"disable_until_tomorrow": "Do jutra",
|
||||||
|
"disable_notify_for_seconds": "Wyłącz ochronę na {{count}} sekundę",
|
||||||
|
"disable_notify_for_seconds_plural": "Wyłącz ochronę na {{count}} sekund",
|
||||||
|
"disable_notify_for_minutes": "Wyłącz ochronę na {{count}} minutę",
|
||||||
|
"disable_notify_for_minutes_plural": "Wyłącz ochronę na {{count}} minut",
|
||||||
|
"disable_notify_for_hours": "Wyłącz ochronę na {{count}} godzinę",
|
||||||
|
"disable_notify_for_hours_plural": "Wyłącz ochronę na {{count}} godziny",
|
||||||
|
"disable_notify_until_tomorrow": "Wyłącz ochronę do jutra",
|
||||||
|
"enable_protection_timer": "Ochrona zostanie włączona za {{time}}",
|
||||||
|
"custom_retention_input": "Wprowadź retencję w godzinach",
|
||||||
|
"custom_rotation_input": "Wprowadź rotację w godzinach",
|
||||||
|
"protection_section_label": "Ochrona",
|
||||||
|
"log_and_stats_section_label": "Dziennik zapytań i statystyki",
|
||||||
|
"ignore_query_log": "Zignoruj tego klienta w dzienniku zapytań",
|
||||||
|
"ignore_statistics": "Ignoruj tego klienta w statystykach"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Controle parental ativado",
|
"enabled_parental_toast": "Controle parental ativado",
|
||||||
"disabled_safe_search_toast": "Pesquisa segura desativada",
|
"disabled_safe_search_toast": "Pesquisa segura desativada",
|
||||||
"enabled_save_search_toast": "Pesquisa segura ativada",
|
"enabled_save_search_toast": "Pesquisa segura ativada",
|
||||||
|
"updated_save_search_toast": "Configurações de Pesquisa Segura atualizadas",
|
||||||
"enabled_table_header": "Ativado",
|
"enabled_table_header": "Ativado",
|
||||||
"name_table_header": "Nome",
|
"name_table_header": "Nome",
|
||||||
"list_url_table_header": "URL da lista",
|
"list_url_table_header": "URL da lista",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "O registro de consulta foi limpo com sucesso",
|
"query_log_cleared": "O registro de consulta foi limpo com sucesso",
|
||||||
"query_log_updated": "O registro da consulta foi atualizado com sucesso",
|
"query_log_updated": "O registro da consulta foi atualizado com sucesso",
|
||||||
"query_log_clear": "Limpar registros de consulta",
|
"query_log_clear": "Limpar registros de consulta",
|
||||||
"query_log_retention": "Arquivamento de registros de consultas",
|
"query_log_retention": "Rotação de registros de consulta",
|
||||||
"query_log_enable": "Ativar registro",
|
"query_log_enable": "Ativar registro",
|
||||||
"query_log_configuration": "Configuração de registros",
|
"query_log_configuration": "Configuração de registros",
|
||||||
"query_log_disabled": "O registro de consulta está desativado e pode ser configurado em <0>configurações</0>",
|
"query_log_disabled": "O registro de consulta está desativado e pode ser configurado em <0>configurações</0>",
|
||||||
"query_log_strict_search": "Use aspas duplas para uma pesquisa mais criteriosa",
|
"query_log_strict_search": "Use aspas duplas para uma pesquisa mais criteriosa",
|
||||||
"query_log_retention_confirm": "Você tem certeza de que deseja alterar o arquivamento do registro de consulta? Se diminuir o valor de intervalo, alguns dados serão perdidos",
|
"query_log_retention_confirm": "Tem a certeza de que quer alterar a rotação do registo de consulta? Se diminuir o valor do intervalo, alguns dados serão perdidos",
|
||||||
"anonymize_client_ip": "Tornar anônimo o IP do cliente",
|
"anonymize_client_ip": "Tornar anônimo o IP do cliente",
|
||||||
"anonymize_client_ip_desc": "Não salva o endereço de IP completo do cliente em registros ou estatísticas",
|
"anonymize_client_ip_desc": "Não salva o endereço de IP completo do cliente em registros ou estatísticas",
|
||||||
"dns_config": "Configuração do servidor DNS",
|
"dns_config": "Configuração do servidor DNS",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Taxa limite",
|
"rate_limit": "Taxa limite",
|
||||||
"edns_enable": "Ativar a sub-rede do cliente EDNS",
|
"edns_enable": "Ativar a sub-rede do cliente EDNS",
|
||||||
"edns_cs_desc": "Adicione a opção de sub-rede de cliente EDNS (ECS) às solicitações de servidor DNS primário e registre os valores enviados pelos clientes no registro de consulta.",
|
"edns_cs_desc": "Adicione a opção de sub-rede de cliente EDNS (ECS) às solicitações de servidor DNS primário e registre os valores enviados pelos clientes no registro de consulta.",
|
||||||
|
"edns_use_custom_ip": "Usar IP personalizado para EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Permitir o uso de IP personalizado para EDNS",
|
||||||
"rate_limit_desc": "O número de solicitações por segundo permitidas por cliente. Definir como 0 significa que não há limite.",
|
"rate_limit_desc": "O número de solicitações por segundo permitidas por cliente. Definir como 0 significa que não há limite.",
|
||||||
"blocking_ipv4_desc": "Endereço de IP a ser retornado para uma solicitação bloqueada",
|
"blocking_ipv4_desc": "Endereço de IP a ser retornado para uma solicitação bloqueada",
|
||||||
"blocking_ipv6_desc": "Endereço de IP a ser retornado para uma solicitação AAAA bloqueada",
|
"blocking_ipv6_desc": "Endereço de IP a ser retornado para uma solicitação AAAA bloqueada",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Responder com o código NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Responder com o código NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "IP nulo: Responder com endereço IP zero (0.0.0.0 para A; :: para AAAA)",
|
"blocking_mode_null_ip": "IP nulo: Responder com endereço IP zero (0.0.0.0 para A; :: para AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP personalizado: Responder com um endereço IP definido manualmente",
|
"blocking_mode_custom_ip": "IP personalizado: Responder com um endereço IP definido manualmente",
|
||||||
|
"theme_auto": "Automático",
|
||||||
|
"theme_light": "Claro",
|
||||||
|
"theme_dark": "Escuro",
|
||||||
"upstream_dns_client_desc": "Se você mantiver este campo vazio, o AdGuard Home usará os servidores configurados nas configurações <0>DNS</0>.",
|
"upstream_dns_client_desc": "Se você mantiver este campo vazio, o AdGuard Home usará os servidores configurados nas configurações <0>DNS</0>.",
|
||||||
"tracker_source": "Fonte do rastreador",
|
"tracker_source": "Fonte do rastreador",
|
||||||
"source_label": "Fonte",
|
"source_label": "Fonte",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Uma nova versão do AdGuard Home está disponível\n",
|
"updates_checked": "Uma nova versão do AdGuard Home está disponível\n",
|
||||||
"updates_version_equal": "O AdGuard Home está atualizado.",
|
"updates_version_equal": "O AdGuard Home está atualizado.",
|
||||||
"check_updates_now": "Verificar atualizações",
|
"check_updates_now": "Verificar atualizações",
|
||||||
|
"version_request_error": "A verificação de atualização falhou. Por favor, verifique sua conexão com a internet.",
|
||||||
"dns_privacy": "Privacidade de DNS",
|
"dns_privacy": "Privacidade de DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-sobre-TLS:</0> Use <1>{{address}}</1> string.",
|
"setup_dns_privacy_1": "<0>DNS-sobre-TLS:</0> Use <1>{{address}}</1> string.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-sobre-HTTPS:</0> Use <1>{{address}}</1> string.",
|
"setup_dns_privacy_2": "<0>DNS-sobre-HTTPS:</0> Use <1>{{address}}</1> string.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Para usar o <1>DNS-sobre-HTTPS</1> ou <1>DNS-sobre-TLS</1>, você precisa <0>configurar a criptografia</0> nas configurações do AdGuard Home.",
|
"setup_dns_notice": "Para usar o <1>DNS-sobre-HTTPS</1> ou <1>DNS-sobre-TLS</1>, você precisa <0>configurar a criptografia</0> nas configurações do AdGuard Home.",
|
||||||
"rewrite_added": "Reescrita de DNS para \"{{key}}\" adicionada com sucesso",
|
"rewrite_added": "Reescrita de DNS para \"{{key}}\" adicionada com sucesso",
|
||||||
"rewrite_deleted": "Reescrita de DNS para \"{{key}}\" excluída com sucesso",
|
"rewrite_deleted": "Reescrita de DNS para \"{{key}}\" excluída com sucesso",
|
||||||
|
"rewrite_updated": "Reconfiguração de DNS atualizada com êxito",
|
||||||
"rewrite_add": "Adicionar reescrita de DNS",
|
"rewrite_add": "Adicionar reescrita de DNS",
|
||||||
|
"rewrite_edit": "Editar reconfiguração de DNS",
|
||||||
"rewrite_not_found": "Nenhuma reescrita de DNS foi encontrada",
|
"rewrite_not_found": "Nenhuma reescrita de DNS foi encontrada",
|
||||||
"rewrite_confirm_delete": "Você tem certeza de que deseja excluir a reescrita de DNS para \"{{key}}\"?",
|
"rewrite_confirm_delete": "Você tem certeza de que deseja excluir a reescrita de DNS para \"{{key}}\"?",
|
||||||
"rewrite_desc": "Permite configurar uma resposta personalizada do DNS para um nome de domínio específico.",
|
"rewrite_desc": "Permite configurar uma resposta personalizada do DNS para um nome de domínio específico.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Você tem certeza que quer alterar o arquivamento das estatísticas? Se diminuir o valor do intervalo, alguns dados serão perdidos",
|
"statistics_retention_confirm": "Você tem certeza que quer alterar o arquivamento das estatísticas? Se diminuir o valor do intervalo, alguns dados serão perdidos",
|
||||||
"statistics_cleared": "As estatísticas foram limpas com sucesso",
|
"statistics_cleared": "As estatísticas foram limpas com sucesso",
|
||||||
"statistics_enable": "Ativar estatísticas",
|
"statistics_enable": "Ativar estatísticas",
|
||||||
|
"ignore_domains": "Domínios ignorados (separados por nova linha)",
|
||||||
|
"ignore_domains_title": "Domínios ignorados",
|
||||||
|
"ignore_domains_desc_stats": "As consultas para esses domínios não são gravadas nas estatísticas",
|
||||||
|
"ignore_domains_desc_query": "As consultas para esses domínios não são gravadas no registro de consulta",
|
||||||
"interval_hours": "{{count}} hora",
|
"interval_hours": "{{count}} hora",
|
||||||
"interval_hours_plural": "{{count}} horas",
|
"interval_hours_plural": "{{count}} horas",
|
||||||
"filters_configuration": "Configuração de filtros",
|
"filters_configuration": "Configuração de filtros",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Observação:</0> A anonimização de IP está ativada. Você pode desativá-lo em <1>Configurações gerais</1>.",
|
"anonymizer_notification": "<0>Observação:</0> A anonimização de IP está ativada. Você pode desativá-lo em <1>Configurações gerais</1>.",
|
||||||
"confirm_dns_cache_clear": "Tem certeza de que deseja limpar o cache DNS?",
|
"confirm_dns_cache_clear": "Tem certeza de que deseja limpar o cache DNS?",
|
||||||
"cache_cleared": "Cache DNS limpo com sucesso",
|
"cache_cleared": "Cache DNS limpo com sucesso",
|
||||||
"clear_cache": "Limpar cache"
|
"clear_cache": "Limpar cache",
|
||||||
|
"make_static": "Tornar estático",
|
||||||
|
"theme_auto_desc": "Automático (com base no esquema de cores do seu dispositivo)",
|
||||||
|
"theme_dark_desc": "Tema escuro",
|
||||||
|
"theme_light_desc": "Tema claro",
|
||||||
|
"disable_for_seconds": "Por {{count}} segundo",
|
||||||
|
"disable_for_seconds_plural": "Por {{count}} segundos",
|
||||||
|
"disable_for_minutes": "Por {{count}} minuto",
|
||||||
|
"disable_for_minutes_plural": "Por {{count}} minutos",
|
||||||
|
"disable_for_hours": "Por {{count}} hora",
|
||||||
|
"disable_for_hours_plural": "Por {{count}} horas",
|
||||||
|
"disable_until_tomorrow": "Até amanhã",
|
||||||
|
"disable_notify_for_seconds": "Desativar proteção por {{count}} segundo",
|
||||||
|
"disable_notify_for_seconds_plural": "Desativar proteção por {{count}} segundos",
|
||||||
|
"disable_notify_for_minutes": "Desativar proteção por {{count}} minuto",
|
||||||
|
"disable_notify_for_minutes_plural": "Desativar proteção por {{count}} minutos",
|
||||||
|
"disable_notify_for_hours": "Desativar proteção por {{count}} hora",
|
||||||
|
"disable_notify_for_hours_plural": "Desativar proteção por {{count}} horas",
|
||||||
|
"disable_notify_until_tomorrow": "Desativar a proteção até amanhã",
|
||||||
|
"enable_protection_timer": "A proteção será ativada em {{time}}",
|
||||||
|
"custom_retention_input": "Insira a retenção em horas",
|
||||||
|
"custom_rotation_input": "Insira a rotação em horas",
|
||||||
|
"protection_section_label": "Proteção",
|
||||||
|
"log_and_stats_section_label": "Registro de consultas e estatísticas",
|
||||||
|
"ignore_query_log": "Ignorar este cliente no registo de consultas",
|
||||||
|
"ignore_statistics": "Ignorar este cliente nas estatísticas"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
"out_of_range_error": "Deve estar fora do intervalo \"{{start}}\"-\"{{end}}\"",
|
"out_of_range_error": "Deve estar fora do intervalo \"{{start}}\"-\"{{end}}\"",
|
||||||
"lower_range_start_error": "Deve ser inferior ao início do intervalo",
|
"lower_range_start_error": "Deve ser inferior ao início do intervalo",
|
||||||
"greater_range_start_error": "Deve ser maior que o início do intervalo",
|
"greater_range_start_error": "Deve ser maior que o início do intervalo",
|
||||||
"subnet_error": "Os endereços devem estar em uma sub-rede",
|
"subnet_error": "Os endereços devem estar numa sub-rede",
|
||||||
"gateway_or_subnet_invalid": "Máscara de sub-rede inválida",
|
"gateway_or_subnet_invalid": "Máscara de sub-rede inválida",
|
||||||
"dhcp_form_gateway_input": "IP do gateway",
|
"dhcp_form_gateway_input": "IP do gateway",
|
||||||
"dhcp_form_subnet_input": "Máscara de sub-rede",
|
"dhcp_form_subnet_input": "Máscara de sub-rede",
|
||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Controlo parental ativado",
|
"enabled_parental_toast": "Controlo parental ativado",
|
||||||
"disabled_safe_search_toast": "Pesquisa segura desativada",
|
"disabled_safe_search_toast": "Pesquisa segura desativada",
|
||||||
"enabled_save_search_toast": "Pesquisa segura ativada",
|
"enabled_save_search_toast": "Pesquisa segura ativada",
|
||||||
|
"updated_save_search_toast": "Configurações de pesquisa segura actualizadas",
|
||||||
"enabled_table_header": "Ativado",
|
"enabled_table_header": "Ativado",
|
||||||
"name_table_header": "Nome",
|
"name_table_header": "Nome",
|
||||||
"list_url_table_header": "URL da lista",
|
"list_url_table_header": "URL da lista",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "O registo de consulta foi limpo com sucesso",
|
"query_log_cleared": "O registo de consulta foi limpo com sucesso",
|
||||||
"query_log_updated": "O registo da consulta foi atualizado com sucesso",
|
"query_log_updated": "O registo da consulta foi atualizado com sucesso",
|
||||||
"query_log_clear": "Limpar registos de consulta",
|
"query_log_clear": "Limpar registos de consulta",
|
||||||
"query_log_retention": "Retenção de registos de consulta",
|
"query_log_retention": "Rotação de registros de consulta",
|
||||||
"query_log_enable": "Ativar registo",
|
"query_log_enable": "Ativar registo",
|
||||||
"query_log_configuration": "Definições do registo",
|
"query_log_configuration": "Definições do registo",
|
||||||
"query_log_disabled": "O registo de consulta está desativado e pode ser configurado em <0>definições</0>",
|
"query_log_disabled": "O registo de consulta está desativado e pode ser configurado em <0>definições</0>",
|
||||||
"query_log_strict_search": "Usar aspas duplas para uma pesquisa rigorosa",
|
"query_log_strict_search": "Usar aspas duplas para uma pesquisa rigorosa",
|
||||||
"query_log_retention_confirm": "Tem a certeza de que deseja alterar a retenção do registo de consulta? Se diminuir o valor do intervalo, alguns dados serão perdidos",
|
"query_log_retention_confirm": "Tem a certeza de que quer alterar a rotação do registo de consulta? Se diminuir o valor do intervalo, alguns dados serão perdidos",
|
||||||
"anonymize_client_ip": "Tornar anónimo o IP do cliente",
|
"anonymize_client_ip": "Tornar anónimo o IP do cliente",
|
||||||
"anonymize_client_ip_desc": "Não gurda o endereço de IP completo do cliente em registo ou estatísticas",
|
"anonymize_client_ip_desc": "Não gurda o endereço de IP completo do cliente em registo ou estatísticas",
|
||||||
"dns_config": "Definição do servidor DNS",
|
"dns_config": "Definição do servidor DNS",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Limite de taxa",
|
"rate_limit": "Limite de taxa",
|
||||||
"edns_enable": "Ativar a sub-rede do cliente EDNS",
|
"edns_enable": "Ativar a sub-rede do cliente EDNS",
|
||||||
"edns_cs_desc": "Adicione a opção de sub-rede de cliente EDNS (ECS) às solicitações de servidor DNS primário e registre os valores enviados pelos clientes no registo de consulta.",
|
"edns_cs_desc": "Adicione a opção de sub-rede de cliente EDNS (ECS) às solicitações de servidor DNS primário e registre os valores enviados pelos clientes no registo de consulta.",
|
||||||
|
"edns_use_custom_ip": "Usar IP personalizado para EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Permitir a utilização de IP personalizado para EDNS",
|
||||||
"rate_limit_desc": "O número de solicitações por segundo permitido por cliente. Configurando para 0 significa sem limite.",
|
"rate_limit_desc": "O número de solicitações por segundo permitido por cliente. Configurando para 0 significa sem limite.",
|
||||||
"blocking_ipv4_desc": "Endereço IP a ser devolvido para uma solicitação A bloqueada",
|
"blocking_ipv4_desc": "Endereço IP a ser devolvido para uma solicitação A bloqueada",
|
||||||
"blocking_ipv6_desc": "Endereço IP a ser devolvido para uma solicitação AAAA bloqueada",
|
"blocking_ipv6_desc": "Endereço IP a ser devolvido para uma solicitação AAAA bloqueada",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Responder com o código NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Responder com o código NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "IP nulo: Responder com endereço IP zero (0.0.0.0 para A; :: para AAAA)",
|
"blocking_mode_null_ip": "IP nulo: Responder com endereço IP zero (0.0.0.0 para A; :: para AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP personalizado: Responder com um endereço IP definido manualmente",
|
"blocking_mode_custom_ip": "IP personalizado: Responder com um endereço IP definido manualmente",
|
||||||
|
"theme_auto": "Automático",
|
||||||
|
"theme_light": "Claro",
|
||||||
|
"theme_dark": "Escuro",
|
||||||
"upstream_dns_client_desc": "Se mantiver esse campo vazio, o AdGuard Home usará os servidores configurados nas <0>Definições de DNS</0>.",
|
"upstream_dns_client_desc": "Se mantiver esse campo vazio, o AdGuard Home usará os servidores configurados nas <0>Definições de DNS</0>.",
|
||||||
"tracker_source": "Fonte do rastreador",
|
"tracker_source": "Fonte do rastreador",
|
||||||
"source_label": "Fonte",
|
"source_label": "Fonte",
|
||||||
@@ -332,10 +338,10 @@
|
|||||||
"install_devices_router": "Router",
|
"install_devices_router": "Router",
|
||||||
"install_devices_router_desc": "Esta configuração cobre automaticamente todos os dispositivos conectados ao seu router doméstico, sem a necessidade de configurar cada um deles manualmente.",
|
"install_devices_router_desc": "Esta configuração cobre automaticamente todos os dispositivos conectados ao seu router doméstico, sem a necessidade de configurar cada um deles manualmente.",
|
||||||
"install_devices_address": "O servidor de DNS do AdGuard Home está a capturar os seguintes endereços",
|
"install_devices_address": "O servidor de DNS do AdGuard Home está a capturar os seguintes endereços",
|
||||||
"install_devices_router_list_1": "Abra as preferências do seu roteador. Normalmente, tu podes acessá-lo de teu navegador por meio de um URL, como http://192.168.0.1/ ou http://192.168.1.1/. Tu podes ser solicitado a inserir uma palavra-passe. Se tu não se lembrar, muitas vezes tu podes repor a palavra-passe pressionando um botão no próprio roteador, mas esteja ciente de que se esse procedimento for escolhido, tu provavelmente perderás toda a definição do roteador. Se o teu roteador requer uma aplicação para configurá-lo, instale a aplicação no seu telefone ou PC e use-o para acessar as definições do roteador.",
|
"install_devices_router_list_1": "Abra as preferências do seu router. Normalmente, tu podes acessá-lo de teu navegador por meio de um URL, como http://192.168.0.1/ ou http://192.168.1.1/. Tu podes ser solicitado a inserir uma palavra-passe. Se tu não se lembrar, muitas vezes tu podes repor a palavra-passe pressionando um botão no próprio roteador, mas esteja ciente de que se esse procedimento for escolhido, tu provavelmente perderás toda a definição do router. Se o teu router requer uma aplicação para configurá-lo, instale a aplicação no seu telefone ou PC e use-o para acessar as definições do router.",
|
||||||
"install_devices_router_list_2": "Encontre as configurações de DNS. Procure as letras DNS ao lado de um campo que permite dois ou três conjuntos de números, cada um dividido em quatro grupos de um a três números.",
|
"install_devices_router_list_2": "Encontre as configurações de DNS. Procure as letras DNS ao lado de um campo que permite dois ou três conjuntos de números, cada um dividido em quatro grupos de um a três números.",
|
||||||
"install_devices_router_list_3": "Insira aqui seu servidor do AdGuard Home.",
|
"install_devices_router_list_3": "Insira aqui seu servidor do AdGuard Home.",
|
||||||
"install_devices_router_list_4": "Em alguns tipos de roteador, um servidor DNS personalizado não pode ser configurado. Nesse caso, configurar o AdGuard Home como um <0>Servidor DHCP</0> pode ajudar. Caso contrário, tu deve verificar o manual do router sobre como personalizar os servidores DNS em seu modelo de router específico.",
|
"install_devices_router_list_4": "Em alguns tipos de router, um servidor DNS personalizado não pode ser configurado. Nesse caso, configurar o AdGuard Home como um <0>Servidor DHCP</0> pode ajudar. Caso contrário, tu deves verificar o manual do router sobre como personalizar os servidores DNS no seu modelo de router específico.",
|
||||||
"install_devices_windows_list_1": "Abra o Painel de Controlo através do Menu Iniciar ou pela Pesquisa do Windows.",
|
"install_devices_windows_list_1": "Abra o Painel de Controlo através do Menu Iniciar ou pela Pesquisa do Windows.",
|
||||||
"install_devices_windows_list_2": "Entre na categoria Rede e Internet e depois clique em Central de Rede e Partilha.",
|
"install_devices_windows_list_2": "Entre na categoria Rede e Internet e depois clique em Central de Rede e Partilha.",
|
||||||
"install_devices_windows_list_3": "No painel esquerdo, clique em \"Alterar configurações do adaptador\".",
|
"install_devices_windows_list_3": "No painel esquerdo, clique em \"Alterar configurações do adaptador\".",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Uma nova versão do AdGuard Home está disponível\n",
|
"updates_checked": "Uma nova versão do AdGuard Home está disponível\n",
|
||||||
"updates_version_equal": "O AdGuard Home está atualizado",
|
"updates_version_equal": "O AdGuard Home está atualizado",
|
||||||
"check_updates_now": "Verificar atualizações",
|
"check_updates_now": "Verificar atualizações",
|
||||||
|
"version_request_error": "A verificação de atualização falhou. Verifique a sua ligação à internet.",
|
||||||
"dns_privacy": "Privacidade de DNS",
|
"dns_privacy": "Privacidade de DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-sobre-TLS:</0> Use <1>{{address}}</1> string.",
|
"setup_dns_privacy_1": "<0>DNS-sobre-TLS:</0> Use <1>{{address}}</1> string.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-sobre-HTTPS:</0> Use <1>{{address}}</1> string.",
|
"setup_dns_privacy_2": "<0>DNS-sobre-HTTPS:</0> Use <1>{{address}}</1> string.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Para usar o <1>DNS-sobre-HTTPS</1> ou <1>DNS-sobre-TLS</1>, precisa de <0>configurar a criptografia</0> nas configurações do AdGuard Home.",
|
"setup_dns_notice": "Para usar o <1>DNS-sobre-HTTPS</1> ou <1>DNS-sobre-TLS</1>, precisa de <0>configurar a criptografia</0> nas configurações do AdGuard Home.",
|
||||||
"rewrite_added": "Reescrita de DNS para \"{{key}}\" adicionada com sucesso",
|
"rewrite_added": "Reescrita de DNS para \"{{key}}\" adicionada com sucesso",
|
||||||
"rewrite_deleted": "Reescrita de DNS para \"{{key}}\" excluída com sucesso",
|
"rewrite_deleted": "Reescrita de DNS para \"{{key}}\" excluída com sucesso",
|
||||||
|
"rewrite_updated": "Reedição de DNS atualizada com sucesso",
|
||||||
"rewrite_add": "Adicionar reescrita de DNS",
|
"rewrite_add": "Adicionar reescrita de DNS",
|
||||||
|
"rewrite_edit": "Editar reedição de DNS",
|
||||||
"rewrite_not_found": "Nenhuma reescrita de DNS foi encontrada",
|
"rewrite_not_found": "Nenhuma reescrita de DNS foi encontrada",
|
||||||
"rewrite_confirm_delete": "Tem a certeza de que deseja excluir a reescrita de DNS para \"{{key}}\"?",
|
"rewrite_confirm_delete": "Tem a certeza de que deseja excluir a reescrita de DNS para \"{{key}}\"?",
|
||||||
"rewrite_desc": "Permite configurar uma resposta personalizada do DNS para um nome de domínio específico.",
|
"rewrite_desc": "Permite configurar uma resposta personalizada do DNS para um nome de domínio específico.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Tem a certeza que quer alterar a retenção de estatísticas? Se diminuir o valor do intervalo, alguns dados serão perdidos",
|
"statistics_retention_confirm": "Tem a certeza que quer alterar a retenção de estatísticas? Se diminuir o valor do intervalo, alguns dados serão perdidos",
|
||||||
"statistics_cleared": "As estatísticas foram apagadas com sucesso",
|
"statistics_cleared": "As estatísticas foram apagadas com sucesso",
|
||||||
"statistics_enable": "Ativar estatísticas",
|
"statistics_enable": "Ativar estatísticas",
|
||||||
|
"ignore_domains": "Domínios ignorados (separados por nova linha)",
|
||||||
|
"ignore_domains_title": "Domínios ignorados",
|
||||||
|
"ignore_domains_desc_stats": "As consultas para estes domínios não aparecem nas estatísticas",
|
||||||
|
"ignore_domains_desc_query": "As consultas para estes domínios não aparecem no registo de consultas",
|
||||||
"interval_hours": "{{count}} hora",
|
"interval_hours": "{{count}} hora",
|
||||||
"interval_hours_plural": "{{count}} horas",
|
"interval_hours_plural": "{{count}} horas",
|
||||||
"filters_configuration": "Definição dos filtros",
|
"filters_configuration": "Definição dos filtros",
|
||||||
@@ -579,7 +592,7 @@
|
|||||||
"client_blocked": "Cliente \"{{ip}}\" foi bloqueado com sucesso",
|
"client_blocked": "Cliente \"{{ip}}\" foi bloqueado com sucesso",
|
||||||
"client_unblocked": "Cliente \"{{ip}}\" foi desbloqueado com sucesso",
|
"client_unblocked": "Cliente \"{{ip}}\" foi desbloqueado com sucesso",
|
||||||
"static_ip": "Endereço de IP estático",
|
"static_ip": "Endereço de IP estático",
|
||||||
"static_ip_desc": "O AdGuard Home é um servidor, portanto, ele precisa de um endereço de IP estático para funcionar corretamente. Caso contrário, em algum momento, seu roteador poderá atribuir um novo endereço de IP neste dispositivo.",
|
"static_ip_desc": "O AdGuard Home é um servidor, portanto, ele precisa de um endereço de IP estático para funcionar corretamente. Caso contrário, em algum momento, seu router poderá atribuir um novo endereço de IP neste dispositivo.",
|
||||||
"set_static_ip": "Definir um endereço de IP estático",
|
"set_static_ip": "Definir um endereço de IP estático",
|
||||||
"install_static_ok": "Boas notícias! O endereço de IP estático já está configurado",
|
"install_static_ok": "Boas notícias! O endereço de IP estático já está configurado",
|
||||||
"install_static_error": "O AdGuard Home não pode configurar automaticamente para esta interface de rede. Por favor, procure uma instrução sobre como fazer isso manualmente.",
|
"install_static_error": "O AdGuard Home não pode configurar automaticamente para esta interface de rede. Por favor, procure uma instrução sobre como fazer isso manualmente.",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Observação:</0> A anonimização de IP está ativada. Você pode desativá-la em <1>Definições gerais</1>.",
|
"anonymizer_notification": "<0>Observação:</0> A anonimização de IP está ativada. Você pode desativá-la em <1>Definições gerais</1>.",
|
||||||
"confirm_dns_cache_clear": "Tem certeza de que quer limpar a cache DNS?",
|
"confirm_dns_cache_clear": "Tem certeza de que quer limpar a cache DNS?",
|
||||||
"cache_cleared": "O cache DNS foi apagado com sucesso",
|
"cache_cleared": "O cache DNS foi apagado com sucesso",
|
||||||
"clear_cache": "Limpar cache"
|
"clear_cache": "Limpar cache",
|
||||||
|
"make_static": "Tornar estático",
|
||||||
|
"theme_auto_desc": "Automático (com base no esquema de cores do seu dispositivo)",
|
||||||
|
"theme_dark_desc": "Tema escuro",
|
||||||
|
"theme_light_desc": "Tema claro",
|
||||||
|
"disable_for_seconds": "Por {{count}} segundo",
|
||||||
|
"disable_for_seconds_plural": "Por {{count}} segundos",
|
||||||
|
"disable_for_minutes": "Por {{count}} minuto",
|
||||||
|
"disable_for_minutes_plural": "Por {{count}} minutos",
|
||||||
|
"disable_for_hours": "Por {{count}} hora",
|
||||||
|
"disable_for_hours_plural": "Por {{count}} horas",
|
||||||
|
"disable_until_tomorrow": "Até amanhã",
|
||||||
|
"disable_notify_for_seconds": "Desativar proteção por {{count}} segundo",
|
||||||
|
"disable_notify_for_seconds_plural": "Desativar proteção por {{count}} segundos",
|
||||||
|
"disable_notify_for_minutes": "Desativar proteção por {{count}} minuto",
|
||||||
|
"disable_notify_for_minutes_plural": "Desativar proteção por {{count}} minutos",
|
||||||
|
"disable_notify_for_hours": "Desativar proteção por {{count}} hora",
|
||||||
|
"disable_notify_for_hours_plural": "Desativar proteção por {{count}} horas",
|
||||||
|
"disable_notify_until_tomorrow": "Desativar a proteção até amanhã",
|
||||||
|
"enable_protection_timer": "A proteção será habilitada em {{time}}",
|
||||||
|
"custom_retention_input": "Insira a retenção em horas",
|
||||||
|
"custom_rotation_input": "Insira a rotação em horas",
|
||||||
|
"protection_section_label": "Proteção",
|
||||||
|
"log_and_stats_section_label": "Log de consulta e estatísticas",
|
||||||
|
"ignore_query_log": "Ignorar este cliente no log de consulta",
|
||||||
|
"ignore_statistics": "Ignorar este cliente nas estatísticas"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Control Parental activat",
|
"enabled_parental_toast": "Control Parental activat",
|
||||||
"disabled_safe_search_toast": "Căutare protejată dezactivată",
|
"disabled_safe_search_toast": "Căutare protejată dezactivată",
|
||||||
"enabled_save_search_toast": "Căutare protejată activată",
|
"enabled_save_search_toast": "Căutare protejată activată",
|
||||||
|
"updated_save_search_toast": "Setări Căutare sigură actualizate",
|
||||||
"enabled_table_header": "Activat",
|
"enabled_table_header": "Activat",
|
||||||
"name_table_header": "Nume",
|
"name_table_header": "Nume",
|
||||||
"list_url_table_header": "Lista URL",
|
"list_url_table_header": "Lista URL",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Jurnalul de interogare a fost șters cu succes",
|
"query_log_cleared": "Jurnalul de interogare a fost șters cu succes",
|
||||||
"query_log_updated": "Jurnalul de solicitări a fost actualizat cu succes",
|
"query_log_updated": "Jurnalul de solicitări a fost actualizat cu succes",
|
||||||
"query_log_clear": "Curăță jurnalele",
|
"query_log_clear": "Curăță jurnalele",
|
||||||
"query_log_retention": "Retenție jurnale interogare",
|
"query_log_retention": "Interogarea jurnalelor de rotație",
|
||||||
"query_log_enable": "Activați jurnal",
|
"query_log_enable": "Activați jurnal",
|
||||||
"query_log_configuration": "Configurația jurnalelor",
|
"query_log_configuration": "Configurația jurnalelor",
|
||||||
"query_log_disabled": "Jurnalul de interogare este dezactivat și poate fi configurat în <0>setări</0>",
|
"query_log_disabled": "Jurnalul de interogare este dezactivat și poate fi configurat în <0>setări</0>",
|
||||||
"query_log_strict_search": "Utilizați ghilimele duble pentru căutare strictă",
|
"query_log_strict_search": "Utilizați ghilimele duble pentru căutare strictă",
|
||||||
"query_log_retention_confirm": "Sunteți sigur că doriți să schimbați retenția jurnalului de interogare? Reducând valoarea intervalului, unele date vor fi pierdute",
|
"query_log_retention_confirm": "Sigur doriți să modificați rotația jurnalului de interogări? Dacă micșorați valoarea intervalului, unele date se vor pierde",
|
||||||
"anonymize_client_ip": "Anonimizare client IP",
|
"anonymize_client_ip": "Anonimizare client IP",
|
||||||
"anonymize_client_ip_desc": "Nu salvați adresa IP completă a clientului în jurnale și statistici",
|
"anonymize_client_ip_desc": "Nu salvați adresa IP completă a clientului în jurnale și statistici",
|
||||||
"dns_config": "Configurația serverului DNS",
|
"dns_config": "Configurația serverului DNS",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Limita ratei",
|
"rate_limit": "Limita ratei",
|
||||||
"edns_enable": "Activați subrețeaua de clienți EDNS",
|
"edns_enable": "Activați subrețeaua de clienți EDNS",
|
||||||
"edns_cs_desc": "Adaugă opțiunea EDNS Client Subnet (ECS) la solicitările în amonte și înregistrează valorile trimise de clienți în jurnalul de interogare.",
|
"edns_cs_desc": "Adaugă opțiunea EDNS Client Subnet (ECS) la solicitările în amonte și înregistrează valorile trimise de clienți în jurnalul de interogare.",
|
||||||
|
"edns_use_custom_ip": "Utilizați IP personalizat pentru EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Permiteți utilizarea IP-ului personalizat pentru EDNS",
|
||||||
"rate_limit_desc": "Numărul de interogări pe secundă permise pe client. Setarea la 0 înseamnă că nu există limită.",
|
"rate_limit_desc": "Numărul de interogări pe secundă permise pe client. Setarea la 0 înseamnă că nu există limită.",
|
||||||
"blocking_ipv4_desc": "Adresa IP de returnat pentru o cerere A de blocare",
|
"blocking_ipv4_desc": "Adresa IP de returnat pentru o cerere A de blocare",
|
||||||
"blocking_ipv6_desc": "Adresa IP de returnat pentru o cerere AAAA de blocare",
|
"blocking_ipv6_desc": "Adresa IP de returnat pentru o cerere AAAA de blocare",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Răspunde cu codul NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Răspunde cu codul NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "IP nul: răspunde cu o adresă IP zero (0.0.0.0 pentru A; :: pentru AAAA)",
|
"blocking_mode_null_ip": "IP nul: răspunde cu o adresă IP zero (0.0.0.0 pentru A; :: pentru AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP personalizat: răspunde cu o adresă IP setată manual",
|
"blocking_mode_custom_ip": "IP personalizat: răspunde cu o adresă IP setată manual",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Luminoasă",
|
||||||
|
"theme_dark": "Sombră",
|
||||||
"upstream_dns_client_desc": "Dacă mențineți acest câmp gol, AdGuard Home va folosi serverele configurate în <0>setările DNS</0>.",
|
"upstream_dns_client_desc": "Dacă mențineți acest câmp gol, AdGuard Home va folosi serverele configurate în <0>setările DNS</0>.",
|
||||||
"tracker_source": "Sursă tracker",
|
"tracker_source": "Sursă tracker",
|
||||||
"source_label": "Sursă",
|
"source_label": "Sursă",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Este disponibilă o nouă versiune de AdGuard Home\n",
|
"updates_checked": "Este disponibilă o nouă versiune de AdGuard Home\n",
|
||||||
"updates_version_equal": "AdGuard Home este la zi",
|
"updates_version_equal": "AdGuard Home este la zi",
|
||||||
"check_updates_now": "Verificați actualizările acum",
|
"check_updates_now": "Verificați actualizările acum",
|
||||||
|
"version_request_error": "Verificarea actualizării nu a reușit. Verificați conexiunea internet.",
|
||||||
"dns_privacy": "Confidențialitate DNS",
|
"dns_privacy": "Confidențialitate DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Folosiți stringul <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Folosiți stringul <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Folosiți stringul <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Folosiți stringul <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Pentru a utiliza <1>DNS-over-HTTPS</1> sau <1>DNS-over-TLS</1>, trebuie să <0>configurați Criptarea</0> în setările AdGuard Home.",
|
"setup_dns_notice": "Pentru a utiliza <1>DNS-over-HTTPS</1> sau <1>DNS-over-TLS</1>, trebuie să <0>configurați Criptarea</0> în setările AdGuard Home.",
|
||||||
"rewrite_added": "Rescriere DNS pentru \"{{key}}\" adăugată cu succes",
|
"rewrite_added": "Rescriere DNS pentru \"{{key}}\" adăugată cu succes",
|
||||||
"rewrite_deleted": "Rescriere DNS pentru \"{{key}}\" ștearsă cu succes",
|
"rewrite_deleted": "Rescriere DNS pentru \"{{key}}\" ștearsă cu succes",
|
||||||
|
"rewrite_updated": "DNS rescrie actualizat cu succes",
|
||||||
"rewrite_add": "Adăugați rescriere DNS",
|
"rewrite_add": "Adăugați rescriere DNS",
|
||||||
|
"rewrite_edit": "Editați rescrierea DNS",
|
||||||
"rewrite_not_found": "Nu s-au găsit rescrieri DNS",
|
"rewrite_not_found": "Nu s-au găsit rescrieri DNS",
|
||||||
"rewrite_confirm_delete": "Sunteți sigur că doriți să ștergeți rescrierea DNS pentru \"{{key}}\"?",
|
"rewrite_confirm_delete": "Sunteți sigur că doriți să ștergeți rescrierea DNS pentru \"{{key}}\"?",
|
||||||
"rewrite_desc": "Permite configurarea cu ușurință a răspunsului personalizat DNS pentru un nume de domeniu specific.",
|
"rewrite_desc": "Permite configurarea cu ușurință a răspunsului personalizat DNS pentru un nume de domeniu specific.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Sunteți sigur că doriți să schimbați păstrarea statisticilor? Dacă reduceți valoarea intervalului, unele date vor fi pierdute",
|
"statistics_retention_confirm": "Sunteți sigur că doriți să schimbați păstrarea statisticilor? Dacă reduceți valoarea intervalului, unele date vor fi pierdute",
|
||||||
"statistics_cleared": "Statisticile au fost șterse cu succes",
|
"statistics_cleared": "Statisticile au fost șterse cu succes",
|
||||||
"statistics_enable": "Activați statisticile",
|
"statistics_enable": "Activați statisticile",
|
||||||
|
"ignore_domains": "Domenii ignorate (separate prin linie nouă)",
|
||||||
|
"ignore_domains_title": "Domenii ignorate",
|
||||||
|
"ignore_domains_desc_stats": "Interogările pentru aceste domenii nu sunt scrise în statistici",
|
||||||
|
"ignore_domains_desc_query": "Interogările pentru aceste domenii nu sunt scrise în jurnalul de interogări",
|
||||||
"interval_hours": "{{count}} oră",
|
"interval_hours": "{{count}} oră",
|
||||||
"interval_hours_plural": "{{count}} ore",
|
"interval_hours_plural": "{{count}} ore",
|
||||||
"filters_configuration": "Configurația filtrelor",
|
"filters_configuration": "Configurația filtrelor",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Nota:</0> Anonimizarea IP este activată. Puteți să o dezactivați în <1>Setări generale</1>.",
|
"anonymizer_notification": "<0>Nota:</0> Anonimizarea IP este activată. Puteți să o dezactivați în <1>Setări generale</1>.",
|
||||||
"confirm_dns_cache_clear": "Sunteți sigur că doriți să ștergeți memoria cache DNS?",
|
"confirm_dns_cache_clear": "Sunteți sigur că doriți să ștergeți memoria cache DNS?",
|
||||||
"cache_cleared": "Cache-ul DNS a fost golit cu succes",
|
"cache_cleared": "Cache-ul DNS a fost golit cu succes",
|
||||||
"clear_cache": "Goliți memoria cache"
|
"clear_cache": "Goliți memoria cache",
|
||||||
|
"make_static": "Faceți static",
|
||||||
|
"theme_auto_desc": "Auto (pe baza schemei de culori a dispozitivului dvs.)",
|
||||||
|
"theme_dark_desc": "Temă întunecată",
|
||||||
|
"theme_light_desc": "Temă luminoasă",
|
||||||
|
"disable_for_seconds": "Timp de {{count}} secundă",
|
||||||
|
"disable_for_seconds_plural": "Timp de {{count}} secunde",
|
||||||
|
"disable_for_minutes": "Timp de {{count}} minut",
|
||||||
|
"disable_for_minutes_plural": "Timp de {{count}} minute",
|
||||||
|
"disable_for_hours": "Timp de {{count}} oră",
|
||||||
|
"disable_for_hours_plural": "Timp de {{count}} ore",
|
||||||
|
"disable_until_tomorrow": "Până mâine",
|
||||||
|
"disable_notify_for_seconds": "Dezactivați protecția timp de {{count}} secundă",
|
||||||
|
"disable_notify_for_seconds_plural": "Dezactivați protecția timp de {{count}} secunde",
|
||||||
|
"disable_notify_for_minutes": "Dezactivați protecția timp de {{count}} minut",
|
||||||
|
"disable_notify_for_minutes_plural": "Dezactivați protecția timp de {{count}} minute",
|
||||||
|
"disable_notify_for_hours": "Dezactivează protecția timp de {{count}} oră",
|
||||||
|
"disable_notify_for_hours_plural": "Dezactivați protecția timp de {{count}} ore",
|
||||||
|
"disable_notify_until_tomorrow": "Dezactivează protecția până mâine",
|
||||||
|
"enable_protection_timer": "Protecția va fi activată în {{time}}",
|
||||||
|
"custom_retention_input": "Introduceți reținerea în ore",
|
||||||
|
"custom_rotation_input": "Introduceți rotația în ore",
|
||||||
|
"protection_section_label": "Protecție",
|
||||||
|
"log_and_stats_section_label": "Jurnal de interogări și statistici",
|
||||||
|
"ignore_query_log": "Ignorați acest client în jurnalul de interogări",
|
||||||
|
"ignore_statistics": "Ignorați acest client în statistici"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Родительский контроль вкл.",
|
"enabled_parental_toast": "Родительский контроль вкл.",
|
||||||
"disabled_safe_search_toast": "Безопасный поиск выкл.",
|
"disabled_safe_search_toast": "Безопасный поиск выкл.",
|
||||||
"enabled_save_search_toast": "Безопасный поиск вкл.",
|
"enabled_save_search_toast": "Безопасный поиск вкл.",
|
||||||
|
"updated_save_search_toast": "Настройки безопасного поиска обновлены",
|
||||||
"enabled_table_header": "Вкл.",
|
"enabled_table_header": "Вкл.",
|
||||||
"name_table_header": "Имя",
|
"name_table_header": "Имя",
|
||||||
"list_url_table_header": "URL-адрес списка",
|
"list_url_table_header": "URL-адрес списка",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Журнал запросов успешно очищен",
|
"query_log_cleared": "Журнал запросов успешно очищен",
|
||||||
"query_log_updated": "Журнал запросов успешно обновлён",
|
"query_log_updated": "Журнал запросов успешно обновлён",
|
||||||
"query_log_clear": "Очистить журнал запросов",
|
"query_log_clear": "Очистить журнал запросов",
|
||||||
"query_log_retention": "Сохранение журнала запросов",
|
"query_log_retention": "Частота ротации журнала запросов",
|
||||||
"query_log_enable": "Включить журнал",
|
"query_log_enable": "Включить журнал",
|
||||||
"query_log_configuration": "Настройка журнала",
|
"query_log_configuration": "Настройка журнала",
|
||||||
"query_log_disabled": "Журнал запросов выключен, его можно включить в <0>настройках</0>",
|
"query_log_disabled": "Журнал запросов выключен, его можно включить в <0>настройках</0>",
|
||||||
"query_log_strict_search": "Используйте двойные кавычки для строгого поиска",
|
"query_log_strict_search": "Используйте двойные кавычки для строгого поиска",
|
||||||
"query_log_retention_confirm": "Вы уверены, что хотите изменить срок хранения запросов? При сокращении интервала данные могут быть утеряны",
|
"query_log_retention_confirm": "Вы уверены, что хотите изменить частоту ротации журнала запросов? При сокращении срока данные могут быть утеряны",
|
||||||
"anonymize_client_ip": "Анонимизировать IP-адрес клиента",
|
"anonymize_client_ip": "Анонимизировать IP-адрес клиента",
|
||||||
"anonymize_client_ip_desc": "Не сохранять полный IP-адрес клиента в журналах и статистике",
|
"anonymize_client_ip_desc": "Не сохранять полный IP-адрес клиента в журналах и статистике",
|
||||||
"dns_config": "Настройки DNS-сервера",
|
"dns_config": "Настройки DNS-сервера",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Rate limit",
|
"rate_limit": "Rate limit",
|
||||||
"edns_enable": "Включить отправку EDNS Client Subnet",
|
"edns_enable": "Включить отправку EDNS Client Subnet",
|
||||||
"edns_cs_desc": "Добавлять опцию EDNS Client Subnet (ECS) к запросам к upstream-серверам, а также записывать присланные клиентами значения в журнал.",
|
"edns_cs_desc": "Добавлять опцию EDNS Client Subnet (ECS) к запросам к upstream-серверам, а также записывать присланные клиентами значения в журнал.",
|
||||||
|
"edns_use_custom_ip": "Использовать указанный IP для EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Разрешить использовать собственный IP для EDNS",
|
||||||
"rate_limit_desc": "Ограничение на количество запросов в секунду для каждого клиента (0 — неограниченно).",
|
"rate_limit_desc": "Ограничение на количество запросов в секунду для каждого клиента (0 — неограниченно).",
|
||||||
"blocking_ipv4_desc": "IP-адрес, возвращаемый при блокировке A-запроса",
|
"blocking_ipv4_desc": "IP-адрес, возвращаемый при блокировке A-запроса",
|
||||||
"blocking_ipv6_desc": "IP-адрес, возвращаемый при блокировке AAAA-запроса",
|
"blocking_ipv6_desc": "IP-адрес, возвращаемый при блокировке AAAA-запроса",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Отвечает с кодом NXDOMAIN\n",
|
"blocking_mode_nxdomain": "NXDOMAIN: Отвечает с кодом NXDOMAIN\n",
|
||||||
"blocking_mode_null_ip": "Нулевой IP: Отвечает с нулевым IP-адресом (0.0.0.0 для A; :: для AAAA)",
|
"blocking_mode_null_ip": "Нулевой IP: Отвечает с нулевым IP-адресом (0.0.0.0 для A; :: для AAAA)",
|
||||||
"blocking_mode_custom_ip": "Пользовательский IP: Отвечает с вручную настроенным IP-адресом",
|
"blocking_mode_custom_ip": "Пользовательский IP: Отвечает с вручную настроенным IP-адресом",
|
||||||
|
"theme_auto": "Авто",
|
||||||
|
"theme_light": "Светлая",
|
||||||
|
"theme_dark": "Тёмная",
|
||||||
"upstream_dns_client_desc": "Если оставить поле пустым, AdGuard Home будет обращаться к серверам, указанным в <0>настройках DNS</0>.",
|
"upstream_dns_client_desc": "Если оставить поле пустым, AdGuard Home будет обращаться к серверам, указанным в <0>настройках DNS</0>.",
|
||||||
"tracker_source": "Источник трекинга",
|
"tracker_source": "Источник трекинга",
|
||||||
"source_label": "Источник",
|
"source_label": "Источник",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Доступна новая версия AdGuard Home",
|
"updates_checked": "Доступна новая версия AdGuard Home",
|
||||||
"updates_version_equal": "Версия AdGuard Home актуальна",
|
"updates_version_equal": "Версия AdGuard Home актуальна",
|
||||||
"check_updates_now": "Проверить обновления",
|
"check_updates_now": "Проверить обновления",
|
||||||
|
"version_request_error": "Ошибка при проверке наличия обновлений. Проверьте ваше интернет-соединение.",
|
||||||
"dns_privacy": "Зашифрованный DNS",
|
"dns_privacy": "Зашифрованный DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Используйте строку <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Используйте строку <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Используйте строку <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Используйте строку <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Чтобы использовать <1>DNS-over-HTTPS</1> или <1>DNS-over-TLS</1>, вам нужно <0>настроить шифрование</0> в настройках AdGuard Home.",
|
"setup_dns_notice": "Чтобы использовать <1>DNS-over-HTTPS</1> или <1>DNS-over-TLS</1>, вам нужно <0>настроить шифрование</0> в настройках AdGuard Home.",
|
||||||
"rewrite_added": "Правило перезаписи DNS-запросов для «{{key}}» успешно добавлено",
|
"rewrite_added": "Правило перезаписи DNS-запросов для «{{key}}» успешно добавлено",
|
||||||
"rewrite_deleted": "Правило перезаписи DNS-запросов для «{{key}}» успешно удалено",
|
"rewrite_deleted": "Правило перезаписи DNS-запросов для «{{key}}» успешно удалено",
|
||||||
|
"rewrite_updated": "Правило перезаписи DNS-запросов успешно обновлено",
|
||||||
"rewrite_add": "Добавить правило перезаписи DNS-запросов",
|
"rewrite_add": "Добавить правило перезаписи DNS-запросов",
|
||||||
|
"rewrite_edit": "Редактировать правило перезаписи DNS-запросов",
|
||||||
"rewrite_not_found": "Не найдено правил перезаписи DNS-запросов",
|
"rewrite_not_found": "Не найдено правил перезаписи DNS-запросов",
|
||||||
"rewrite_confirm_delete": "Вы уверены, что хотите удалить правило перезаписи DNS-запросов для «{{key}}»?",
|
"rewrite_confirm_delete": "Вы уверены, что хотите удалить правило перезаписи DNS-запросов для «{{key}}»?",
|
||||||
"rewrite_desc": "Позволяет легко настроить пользовательский DNS-ответ для определеннного домена.",
|
"rewrite_desc": "Позволяет легко настроить пользовательский DNS-ответ для определеннного домена.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Вы уверены, что хотите изменить срок хранения статистики? При сокращении интервала данные могут быть утеряны",
|
"statistics_retention_confirm": "Вы уверены, что хотите изменить срок хранения статистики? При сокращении интервала данные могут быть утеряны",
|
||||||
"statistics_cleared": "Статистика успешно очищена",
|
"statistics_cleared": "Статистика успешно очищена",
|
||||||
"statistics_enable": "Включить статистику",
|
"statistics_enable": "Включить статистику",
|
||||||
|
"ignore_domains": "Игнорируемые домены (построчно)",
|
||||||
|
"ignore_domains_title": "Игнорируемые домены",
|
||||||
|
"ignore_domains_desc_stats": "Запросы для этих доменов не записываются в статистику",
|
||||||
|
"ignore_domains_desc_query": "Запросы для этих доменов не записываются в журнал запросов",
|
||||||
"interval_hours": "{{count}} час",
|
"interval_hours": "{{count}} час",
|
||||||
"interval_hours_plural": "{{count}} часов",
|
"interval_hours_plural": "{{count}} часов",
|
||||||
"filters_configuration": "Настройка фильтров",
|
"filters_configuration": "Настройка фильтров",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Внимание:</0> включена анонимизация IP-адресов. Вы можете отключить её в разделе <1>Основные настройки</1>.",
|
"anonymizer_notification": "<0>Внимание:</0> включена анонимизация IP-адресов. Вы можете отключить её в разделе <1>Основные настройки</1>.",
|
||||||
"confirm_dns_cache_clear": "Вы уверены, что хотите очистить кеш DNS?",
|
"confirm_dns_cache_clear": "Вы уверены, что хотите очистить кеш DNS?",
|
||||||
"cache_cleared": "Кеш DNS успешно очищен",
|
"cache_cleared": "Кеш DNS успешно очищен",
|
||||||
"clear_cache": "Очистить кеш"
|
"clear_cache": "Очистить кеш",
|
||||||
|
"make_static": "Сделать статической",
|
||||||
|
"theme_auto_desc": "Авто (на основе цветовой схемы вашего устройства)",
|
||||||
|
"theme_dark_desc": "Тёмная тема",
|
||||||
|
"theme_light_desc": "Светлая тема",
|
||||||
|
"disable_for_seconds": "На {{count}} секунд",
|
||||||
|
"disable_for_seconds_plural": "На {{count}} секунд",
|
||||||
|
"disable_for_minutes": "На {{count}} минуту",
|
||||||
|
"disable_for_minutes_plural": "На {{count}} минут",
|
||||||
|
"disable_for_hours": "На {{count}} час",
|
||||||
|
"disable_for_hours_plural": "На {{count}} часов",
|
||||||
|
"disable_until_tomorrow": "До завтра",
|
||||||
|
"disable_notify_for_seconds": "Отключить защиту на {{count}} секунд",
|
||||||
|
"disable_notify_for_seconds_plural": "Отключить защиту на {{count}} секунд",
|
||||||
|
"disable_notify_for_minutes": "Отключить защиту на {{count}} минуту",
|
||||||
|
"disable_notify_for_minutes_plural": "Отключить защиту на {{count}} минут",
|
||||||
|
"disable_notify_for_hours": "Отключить защиту на {{count}} час",
|
||||||
|
"disable_notify_for_hours_plural": "Отключить защиту на {{count}} часов",
|
||||||
|
"disable_notify_until_tomorrow": "Отключить защиту до завтра",
|
||||||
|
"enable_protection_timer": "Защита будет включена в {{time}}",
|
||||||
|
"custom_retention_input": "Введите срок хранения в часах",
|
||||||
|
"custom_rotation_input": "Введите частоту ротации в часах",
|
||||||
|
"protection_section_label": "Защита",
|
||||||
|
"log_and_stats_section_label": "Журнал запросов и статистика",
|
||||||
|
"ignore_query_log": "Игнорировать этого клиента в журнале запросов",
|
||||||
|
"ignore_statistics": "Игнорировать этого клиента в статистике"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,8 +30,6 @@
|
|||||||
"dhcp_ipv6_settings": "ග.ධා.වි.කෙ. අ.ජා.කෙ. 6 සැකසුම්",
|
"dhcp_ipv6_settings": "ග.ධා.වි.කෙ. අ.ජා.කෙ. 6 සැකසුම්",
|
||||||
"form_error_required": "ඇවැසි ක්ෂේත්රයකි",
|
"form_error_required": "ඇවැසි ක්ෂේත්රයකි",
|
||||||
"form_error_ip4_format": "IPv4 ලිපිනය වලංගු නොවේ",
|
"form_error_ip4_format": "IPv4 ලිපිනය වලංගු නොවේ",
|
||||||
"form_error_ip4_range_start_format": "පරාසය ආරම්භයේ වලංගු නොවන අ.ජා.කෙ.4 ලිපිනයකි",
|
|
||||||
"form_error_ip4_range_end_format": "පරාසය අවසානයේ වලංගු නොවන අ.ජා.කෙ.4 ලිපිනයකි",
|
|
||||||
"form_error_ip6_format": "වලංගු නොවන අ.ජා.කෙ.6 ලිපිනයකි",
|
"form_error_ip6_format": "වලංගු නොවන අ.ජා.කෙ.6 ලිපිනයකි",
|
||||||
"form_error_ip_format": "අ.ජා.කෙ. (IP) ලිපිනය වලංගු නොවේ",
|
"form_error_ip_format": "අ.ජා.කෙ. (IP) ලිපිනය වලංගු නොවේ",
|
||||||
"form_error_mac_format": "මා.ප්ර.පා. ලිපිනය වලංගු නොවේ",
|
"form_error_mac_format": "මා.ප්ර.පා. ලිපිනය වලංගු නොවේ",
|
||||||
@@ -42,7 +40,6 @@
|
|||||||
"out_of_range_error": "\"{{start}}\"-\"{{end}}\" පරාසයෙන් පිට විය යුතුය",
|
"out_of_range_error": "\"{{start}}\"-\"{{end}}\" පරාසයෙන් පිට විය යුතුය",
|
||||||
"lower_range_start_error": "පරාසය ආරම්භයට වඩා අඩු විය යුතුය",
|
"lower_range_start_error": "පරාසය ආරම්භයට වඩා අඩු විය යුතුය",
|
||||||
"greater_range_start_error": "පරාසය ආරම්භයට වඩා වැඩි විය යුතුය",
|
"greater_range_start_error": "පරාසය ආරම්භයට වඩා වැඩි විය යුතුය",
|
||||||
"greater_range_end_error": "පරාසය අවසානයට වඩා වැඩි විය යුතුය",
|
|
||||||
"subnet_error": "ලිපින එක් අනුජාලයක තිබිය යුතුය",
|
"subnet_error": "ලිපින එක් අනුජාලයක තිබිය යුතුය",
|
||||||
"dhcp_form_range_title": "අ.ජා. කෙ. (IP) ලිපින පරාසය",
|
"dhcp_form_range_title": "අ.ජා. කෙ. (IP) ලිපින පරාසය",
|
||||||
"dhcp_form_range_start": "පරාසය ආරම්භය",
|
"dhcp_form_range_start": "පරාසය ආරම්භය",
|
||||||
@@ -156,6 +153,7 @@
|
|||||||
"enabled_parental_toast": "දෙමාපිය පාලනය සබල කෙරිණි",
|
"enabled_parental_toast": "දෙමාපිය පාලනය සබල කෙරිණි",
|
||||||
"disabled_safe_search_toast": "ආරක්ෂිත සෙවුම අබල කෙරිණි",
|
"disabled_safe_search_toast": "ආරක්ෂිත සෙවුම අබල කෙරිණි",
|
||||||
"enabled_save_search_toast": "ආරක්ෂිත සෙවුම සබල කෙරිණි",
|
"enabled_save_search_toast": "ආරක්ෂිත සෙවුම සබල කෙරිණි",
|
||||||
|
"updated_save_search_toast": "ආරක්ෂිත සෙවුමේ සැකසුම් යාවත්කාල විය",
|
||||||
"enabled_table_header": "සබලයි",
|
"enabled_table_header": "සබලයි",
|
||||||
"name_table_header": "නම",
|
"name_table_header": "නම",
|
||||||
"list_url_table_header": "ඒ.ස.නි.(URL) ලැයිස්තුව",
|
"list_url_table_header": "ඒ.ස.නි.(URL) ලැයිස්තුව",
|
||||||
@@ -240,12 +238,12 @@
|
|||||||
"query_log_cleared": "විමසුම් සටහන සාර්ථකව හිස් කර ඇත",
|
"query_log_cleared": "විමසුම් සටහන සාර්ථකව හිස් කර ඇත",
|
||||||
"query_log_updated": "විමසුම් සටහන සාර්ථකව යාවත්කාල කෙරිණි",
|
"query_log_updated": "විමසුම් සටහන සාර්ථකව යාවත්කාල කෙරිණි",
|
||||||
"query_log_clear": "විමසුම් සටහන් හිස් කරන්න",
|
"query_log_clear": "විමසුම් සටහන් හිස් කරන්න",
|
||||||
"query_log_retention": "විමසුම් සටහන් රඳවා තබා ගැනීම",
|
"query_log_retention": "විමසුම් සටහන් රැඳවීම",
|
||||||
"query_log_enable": "සටහන සබල කරන්න",
|
"query_log_enable": "සටහන සබල කරන්න",
|
||||||
"query_log_configuration": "සටහන් වින්යාසය",
|
"query_log_configuration": "සටහන් වින්යාසය",
|
||||||
"query_log_disabled": "විමසුම් සටහන අබල කර ඇති අතර එය <0>සැකසුම්</0> තුළ වින්යාසගත කළ හැකිය",
|
"query_log_disabled": "විමසුම් සටහන අබල කර ඇති අතර එය <0>සැකසුම්</0> තුළ වින්යාසගත කළ හැකිය",
|
||||||
"query_log_strict_search": "ඉතා නිවැරදිව සෙවීමට ද්විත්ව උද්ධෘතය භාවිතා කරන්න",
|
"query_log_strict_search": "ඉතා නිවැරදිව සෙවීමට ද්විත්ව උද්ධෘතය භාවිතා කරන්න",
|
||||||
"query_log_retention_confirm": "විමසුම් සටහන රඳවා තබා ගැනීම වෙනස් කිරීමට ඇවැසි බව ඔබට විශ්වාසද? ඔබ කාල පරතරයෙහි අගය අඩු කළහොත් සමහර දත්ත නැති වී යනු ඇත",
|
"query_log_retention_confirm": "විමසුම් සටහන රඳවා තබා ගැනීම වෙනස් කිරීමට වුවමනා ද? ඔබ කාල පරතරයෙහි අගය අඩු කළහොත් සමහර දත්ත නැති වී යනු ඇත",
|
||||||
"anonymize_client_ip": "අනුග්රාහකයෙහි අ.ජා.කෙ. (IP) නිර්නාමික කරන්න",
|
"anonymize_client_ip": "අනුග්රාහකයෙහි අ.ජා.කෙ. (IP) නිර්නාමික කරන්න",
|
||||||
"anonymize_client_ip_desc": "සටහන් සහ සංඛ්යාලේඛන තුළ අනුග්රාහකයේ පූර්ණ අ.ජා.කෙ. ලිපිනය සුරකින්න එපා",
|
"anonymize_client_ip_desc": "සටහන් සහ සංඛ්යාලේඛන තුළ අනුග්රාහකයේ පූර්ණ අ.ජා.කෙ. ලිපිනය සුරකින්න එපා",
|
||||||
"dns_config": "ව.නා.ප. සේවාදායක වින්යාසය",
|
"dns_config": "ව.නා.ප. සේවාදායක වින්යාසය",
|
||||||
@@ -273,6 +271,8 @@
|
|||||||
"form_enter_rate_limit": "අනුපාත සීමාව ඇතුල් කරන්න",
|
"form_enter_rate_limit": "අනුපාත සීමාව ඇතුල් කරන්න",
|
||||||
"rate_limit": "අනුපාත සීමාව",
|
"rate_limit": "අනුපාත සීමාව",
|
||||||
"edns_enable": "EDNS අනුග්රාහක අනුජාලය සබල කරන්න",
|
"edns_enable": "EDNS අනුග්රාහක අනුජාලය සබල කරන්න",
|
||||||
|
"edns_use_custom_ip": "EDNS සඳහා අභිරුචි අ.ජා.කෙ. යොදාගන්න",
|
||||||
|
"edns_use_custom_ip_desc": "EDNS සඳහා අභිරුචි අ.ජා.කෙ. භාවිතයට ඉඩදෙන්න",
|
||||||
"rate_limit_desc": "එක් අනුග්රාහකයකට ඉඩ දී ඇති තත්පරයට ඉල්ලීම් ගණන. එය 0 ලෙස සැකසීම යනුවෙන් අදහස් කරන්නේ සීමාවක් නැති බවයි.",
|
"rate_limit_desc": "එක් අනුග්රාහකයකට ඉඩ දී ඇති තත්පරයට ඉල්ලීම් ගණන. එය 0 ලෙස සැකසීම යනුවෙන් අදහස් කරන්නේ සීමාවක් නැති බවයි.",
|
||||||
"blocking_ipv4_desc": "අවහිර කළ A ඉල්ලීමක් සඳහා ආපසු එවිය යුතු අ.ජා.කෙ. (IP) ලිපිනය",
|
"blocking_ipv4_desc": "අවහිර කළ A ඉල්ලීමක් සඳහා ආපසු එවිය යුතු අ.ජා.කෙ. (IP) ලිපිනය",
|
||||||
"blocking_ipv6_desc": "අවහිර කළ AAAA ඉල්ලීමක් සඳහා ආපසු එවිය යුතු අ.ජා.කෙ. (IP) ලිපිනය",
|
"blocking_ipv6_desc": "අවහිර කළ AAAA ඉල්ලීමක් සඳහා ආපසු එවිය යුතු අ.ජා.කෙ. (IP) ලිපිනය",
|
||||||
@@ -281,6 +281,9 @@
|
|||||||
"blocking_mode_nxdomain": "නොපවතින වසම: NXDOMAIN කේතය සමඟ ප්රතිචාර දක්වයි",
|
"blocking_mode_nxdomain": "නොපවතින වසම: NXDOMAIN කේතය සමඟ ප්රතිචාර දක්වයි",
|
||||||
"blocking_mode_null_ip": "අභිශූන්යය අ.ජා.කෙ.: ශුන්ය අ.ජා.කෙ. ලිපිනය සමඟ ප්රතිචාර දක්වයි (A සඳහා 0.0.0.0; AAAA සඳහා ::)",
|
"blocking_mode_null_ip": "අභිශූන්යය අ.ජා.කෙ.: ශුන්ය අ.ජා.කෙ. ලිපිනය සමඟ ප්රතිචාර දක්වයි (A සඳහා 0.0.0.0; AAAA සඳහා ::)",
|
||||||
"blocking_mode_custom_ip": "අභිරුචි අන්තර්ජාල කෙටුම්පත: අතින් සැකසූ අ.ජා. කෙ. ලිපිනයක් සමඟ ප්රතිචාර දක්වයි",
|
"blocking_mode_custom_ip": "අභිරුචි අන්තර්ජාල කෙටුම්පත: අතින් සැකසූ අ.ජා. කෙ. ලිපිනයක් සමඟ ප්රතිචාර දක්වයි",
|
||||||
|
"theme_auto": "ස්වයං",
|
||||||
|
"theme_light": "දීප්ත",
|
||||||
|
"theme_dark": "අඳුරු",
|
||||||
"upstream_dns_client_desc": "ඔබ මෙම ක්ෂේත්රය හිස්ව තබා ගන්නේ නම්, ඇඩ්ගාර්ඩ් හෝම් විසින් <0>ව.නා.ප. සැකසුම්</0> හි වින්යාසගත කර ඇති සේවාදායක භාවිතා කරනු ඇත.",
|
"upstream_dns_client_desc": "ඔබ මෙම ක්ෂේත්රය හිස්ව තබා ගන්නේ නම්, ඇඩ්ගාර්ඩ් හෝම් විසින් <0>ව.නා.ප. සැකසුම්</0> හි වින්යාසගත කර ඇති සේවාදායක භාවිතා කරනු ඇත.",
|
||||||
"tracker_source": "ලුහුබැඳීම් මූලාශ්රය",
|
"tracker_source": "ලුහුබැඳීම් මූලාශ්රය",
|
||||||
"source_label": "මූලාශ්රය",
|
"source_label": "මූලාශ්රය",
|
||||||
@@ -373,6 +376,7 @@
|
|||||||
"encryption_issuer": "නිකුත් කරන්නා",
|
"encryption_issuer": "නිකුත් කරන්නා",
|
||||||
"encryption_hostnames": "ධාරක නාම",
|
"encryption_hostnames": "ධාරක නාම",
|
||||||
"encryption_reset": "සංකේතාංකන සැකසුම් යළි පිහිටුවීමට අවශ්ය බව ඔබට විශ්වාස ද?",
|
"encryption_reset": "සංකේතාංකන සැකසුම් යළි පිහිටුවීමට අවශ්ය බව ඔබට විශ්වාස ද?",
|
||||||
|
"encryption_warning": "අවවාදයයි",
|
||||||
"topline_expiring_certificate": "ඔබගේ SSL සහතිකය කල් ඉකුත්වීමට ආසන්න වී ඇත. <0>සංකේතන සැකසුම්</0> යාවත්කාල කරන්න.",
|
"topline_expiring_certificate": "ඔබගේ SSL සහතිකය කල් ඉකුත්වීමට ආසන්න වී ඇත. <0>සංකේතන සැකසුම්</0> යාවත්කාල කරන්න.",
|
||||||
"topline_expired_certificate": "ඔබගේ SSL සහතිකය කල් ඉකුත් වී ඇත. <0>සංකේතන සැකසුම්</0> යාවත්කාල කරන්න.",
|
"topline_expired_certificate": "ඔබගේ SSL සහතිකය කල් ඉකුත් වී ඇත. <0>සංකේතන සැකසුම්</0> යාවත්කාල කරන්න.",
|
||||||
"form_error_port_range": "80-65535 පරාසය හි තොටක අගයක් ඇතුල් කරන්න",
|
"form_error_port_range": "80-65535 පරාසය හි තොටක අගයක් ඇතුල් කරන්න",
|
||||||
@@ -493,8 +497,10 @@
|
|||||||
"statistics_clear": "සංඛ්යාලේඛන හිස් කරන්න",
|
"statistics_clear": "සංඛ්යාලේඛන හිස් කරන්න",
|
||||||
"statistics_clear_confirm": "සංඛ්යාලේඛන ඉවත් කිරීමට වුවමනා ද?",
|
"statistics_clear_confirm": "සංඛ්යාලේඛන ඉවත් කිරීමට වුවමනා ද?",
|
||||||
"statistics_retention_confirm": "සංඛ්යාලේඛන රඳවා තබා ගැනීම වෙනස් කිරීමට අවශ්ය බව ඔබට විශ්වාසද? ඔබ කාල පරතරයෙහි අගය අඩු කළහොත් සමහර දත්ත නැති වී යනු ඇත",
|
"statistics_retention_confirm": "සංඛ්යාලේඛන රඳවා තබා ගැනීම වෙනස් කිරීමට අවශ්ය බව ඔබට විශ්වාසද? ඔබ කාල පරතරයෙහි අගය අඩු කළහොත් සමහර දත්ත නැති වී යනු ඇත",
|
||||||
"statistics_cleared": "සංඛ්යාලේඛන සාර්ථකව ඉවත් කෙරිණි",
|
"statistics_cleared": "සංඛ්යාලේඛන සාර්ථකව හිස් කෙරිණි",
|
||||||
"statistics_enable": "සංඛ්යාලේඛන සබල කරන්න",
|
"statistics_enable": "සංඛ්යාලේඛන සබල කරන්න",
|
||||||
|
"ignore_domains": "නොසලකන වසම් (පේළියකට එක බැගින්)",
|
||||||
|
"ignore_domains_title": "නොසලකන වසම්",
|
||||||
"interval_hours": "පැය {{count}}",
|
"interval_hours": "පැය {{count}}",
|
||||||
"interval_hours_plural": "පැය {{count}}",
|
"interval_hours_plural": "පැය {{count}}",
|
||||||
"filters_configuration": "පෙරහන් වින්යාසය",
|
"filters_configuration": "පෙරහන් වින්යාසය",
|
||||||
@@ -604,5 +610,31 @@
|
|||||||
"parental_control": "දෙමාපිය පාලනය",
|
"parental_control": "දෙමාපිය පාලනය",
|
||||||
"safe_browsing": "ආරක්ෂිත පිරික්සුම",
|
"safe_browsing": "ආරක්ෂිත පිරික්සුම",
|
||||||
"served_from_cache": "{{value}} <i>(නිහිතයෙන් ගැනිණි)</i>",
|
"served_from_cache": "{{value}} <i>(නිහිතයෙන් ගැනිණි)</i>",
|
||||||
"form_error_password_length": "මුරපදය අවම වශයෙන් අකුරු {{value}} ක් දිගු විය යුතුමයි"
|
"form_error_password_length": "මුරපදය අවම වශයෙන් අකුරු {{value}} ක් දිගු විය යුතුමයි",
|
||||||
|
"cache_cleared": "ව.නා.ප. නිහිතය හිස් කෙරිණි",
|
||||||
|
"clear_cache": "නිහිතය මකන්න",
|
||||||
|
"make_static": "ස්ථිතික කරන්න",
|
||||||
|
"theme_dark_desc": "අඳුරු තේමාව",
|
||||||
|
"theme_light_desc": "දීප්ත තේමාව",
|
||||||
|
"disable_for_seconds": "තත්පර {{count}} ක්",
|
||||||
|
"disable_for_seconds_plural": "තත්පර {{count}} ක්",
|
||||||
|
"disable_for_minutes": "විනාඩි {{count}} ක්",
|
||||||
|
"disable_for_minutes_plural": "විනාඩි {{count}} ක්",
|
||||||
|
"disable_for_hours": "පැය {{count}} ක්",
|
||||||
|
"disable_for_hours_plural": "පැය {{count}} ක්",
|
||||||
|
"disable_until_tomorrow": "හෙට වනතුරු",
|
||||||
|
"disable_notify_for_seconds": "තත්. {{count}} කට රැකවරණය අබල කරන්න",
|
||||||
|
"disable_notify_for_seconds_plural": "තත්. {{count}} කට රැකවරණය අබල කරන්න",
|
||||||
|
"disable_notify_for_minutes": "විනාඩි {{count}} කට රැකවරණය අබල කරන්න",
|
||||||
|
"disable_notify_for_minutes_plural": "විනාඩි {{count}} කට රැකවරණය අබල කරන්න",
|
||||||
|
"disable_notify_for_hours": "පැය {{count}} කට රැකවරණය අබල කරන්න",
|
||||||
|
"disable_notify_for_hours_plural": "පැය {{count}} කට රැකවරණය අබල කරන්න",
|
||||||
|
"disable_notify_until_tomorrow": "හෙට වනතුරු රැකවරණය අබල කරන්න",
|
||||||
|
"enable_protection_timer": "{{time}} න් රැකවරණය සබල කෙරේ",
|
||||||
|
"custom_retention_input": "රඳවා ගැනීම පැය වලින්",
|
||||||
|
"custom_rotation_input": "රඳවා ගැනීම පැය වලින්",
|
||||||
|
"protection_section_label": "රැකවරණය",
|
||||||
|
"log_and_stats_section_label": "විමසුම් සටහන හා සංඛ්යාලේඛන",
|
||||||
|
"ignore_query_log": "සටහනෙහි අනුග්රාහකය නොසලකන්න",
|
||||||
|
"ignore_statistics": "සංඛ්යාලේඛනයට අනුග්රාහකය නොසලකන්න"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Zapnutá Rodičovská kontrola",
|
"enabled_parental_toast": "Zapnutá Rodičovská kontrola",
|
||||||
"disabled_safe_search_toast": "Vypnuté Bezpečné vyhľadávanie",
|
"disabled_safe_search_toast": "Vypnuté Bezpečné vyhľadávanie",
|
||||||
"enabled_save_search_toast": "Zapnuté Bezpečné vyhľadávanie",
|
"enabled_save_search_toast": "Zapnuté Bezpečné vyhľadávanie",
|
||||||
|
"updated_save_search_toast": "Nastavenia Bezpečného vyhľadávania boli aktualizované",
|
||||||
"enabled_table_header": "Zapnuté",
|
"enabled_table_header": "Zapnuté",
|
||||||
"name_table_header": "Meno",
|
"name_table_header": "Meno",
|
||||||
"list_url_table_header": "Zoznam URL adries",
|
"list_url_table_header": "Zoznam URL adries",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Denník dopytov bol úspešne vymazaný",
|
"query_log_cleared": "Denník dopytov bol úspešne vymazaný",
|
||||||
"query_log_updated": "Denník dopytov bol úspešne aktualizovaný",
|
"query_log_updated": "Denník dopytov bol úspešne aktualizovaný",
|
||||||
"query_log_clear": "Vymazať denníky dopytov",
|
"query_log_clear": "Vymazať denníky dopytov",
|
||||||
"query_log_retention": "Obdobie záznamu denníka dopytov",
|
"query_log_retention": "Rotácia denníkov dopytov",
|
||||||
"query_log_enable": "Zapnúť denník",
|
"query_log_enable": "Zapnúť denník",
|
||||||
"query_log_configuration": "Konfigurácia denníka",
|
"query_log_configuration": "Konfigurácia denníka",
|
||||||
"query_log_disabled": "Protokol dopytov je vypnutý a možno ho nakonfigurovať v <0>nastaveniach</0>",
|
"query_log_disabled": "Protokol dopytov je vypnutý a možno ho nakonfigurovať v <0>nastaveniach</0>",
|
||||||
"query_log_strict_search": "Na prísne vyhľadávanie použite dvojité úvodzovky",
|
"query_log_strict_search": "Na prísne vyhľadávanie použite dvojité úvodzovky",
|
||||||
"query_log_retention_confirm": "Naozaj chcete zmeniť uchovávanie denníku dopytov? Ak znížite hodnotu intervalu, niektoré údaje sa stratia",
|
"query_log_retention_confirm": "Naozaj chcete zmeniť rotáciu denníka dopytov? Ak znížite hodnotu intervalu, niektoré údaje sa stratia",
|
||||||
"anonymize_client_ip": "Anonymizujte IP klienta",
|
"anonymize_client_ip": "Anonymizujte IP klienta",
|
||||||
"anonymize_client_ip_desc": "Neukladať úplnú IP adresu klienta do protokolov a štatistík",
|
"anonymize_client_ip_desc": "Neukladať úplnú IP adresu klienta do protokolov a štatistík",
|
||||||
"dns_config": "Konfigurácia DNS servera",
|
"dns_config": "Konfigurácia DNS servera",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Rýchlostný limit",
|
"rate_limit": "Rýchlostný limit",
|
||||||
"edns_enable": "Povoliť klientsku podsiete EDNS",
|
"edns_enable": "Povoliť klientsku podsiete EDNS",
|
||||||
"edns_cs_desc": "Pridáva možnosť EDNS Client Subnet (ECS) do upstream požiadaviek a zapíše hodnoty odoslané klientmi do denníka dopytov.",
|
"edns_cs_desc": "Pridáva možnosť EDNS Client Subnet (ECS) do upstream požiadaviek a zapíše hodnoty odoslané klientmi do denníka dopytov.",
|
||||||
|
"edns_use_custom_ip": "Použiť vlastnú IP adresu pre EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Povoliť používanie vlastnej IP adresy pre EDNS",
|
||||||
"rate_limit_desc": "Počet požiadaviek za sekundu, ktoré môže jeden klient vykonať. Nastavenie na hodnotu 0 znamená neobmedzene.",
|
"rate_limit_desc": "Počet požiadaviek za sekundu, ktoré môže jeden klient vykonať. Nastavenie na hodnotu 0 znamená neobmedzene.",
|
||||||
"blocking_ipv4_desc": "IP adresa, ktorá sa má vrátiť v prípade blokovanej žiadosti A",
|
"blocking_ipv4_desc": "IP adresa, ktorá sa má vrátiť v prípade blokovanej žiadosti A",
|
||||||
"blocking_ipv6_desc": "IP adresa, ktorá sa má vrátiť v prípade blokovanej žiadosti AAAA",
|
"blocking_ipv6_desc": "IP adresa, ktorá sa má vrátiť v prípade blokovanej žiadosti AAAA",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Odpovedať kódom NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Odpovedať kódom NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "Null IP: Odpoveď s nulovou IP adresou (0.0.0.0 pre A; :: pre AAAA)",
|
"blocking_mode_null_ip": "Null IP: Odpoveď s nulovou IP adresou (0.0.0.0 pre A; :: pre AAAA)",
|
||||||
"blocking_mode_custom_ip": "Vlastná IP adresa: Odpovedzte s manuálne nastavenou IP adresou",
|
"blocking_mode_custom_ip": "Vlastná IP adresa: Odpovedzte s manuálne nastavenou IP adresou",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Svetlá",
|
||||||
|
"theme_dark": "Tmavá",
|
||||||
"upstream_dns_client_desc": "Ak ponecháte toto pole prázdne, AdGuard Home použije servery nakonfigurované v <0>nastaveniach DNS</0>.",
|
"upstream_dns_client_desc": "Ak ponecháte toto pole prázdne, AdGuard Home použije servery nakonfigurované v <0>nastaveniach DNS</0>.",
|
||||||
"tracker_source": "Zdroj sledovania",
|
"tracker_source": "Zdroj sledovania",
|
||||||
"source_label": "Zdroj",
|
"source_label": "Zdroj",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "K dispozícii je nová verzia aplikácie AdGuard Home\n",
|
"updates_checked": "K dispozícii je nová verzia aplikácie AdGuard Home\n",
|
||||||
"updates_version_equal": "AdGuard Home je aktuálny",
|
"updates_version_equal": "AdGuard Home je aktuálny",
|
||||||
"check_updates_now": "Skontrolovať aktualizácie teraz",
|
"check_updates_now": "Skontrolovať aktualizácie teraz",
|
||||||
|
"version_request_error": "Kontrola aktualizácie zlyhala. Skontrolujte svoje internetové pripojenie.",
|
||||||
"dns_privacy": "DNS súkromie",
|
"dns_privacy": "DNS súkromie",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Použiť <1>{{address}}</1> reťazec.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Použiť <1>{{address}}</1> reťazec.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Použiť <1>{{address}}</1> reťazec.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Použiť <1>{{address}}</1> reťazec.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Pre použitie <1>DNS-over-HTTPS</1> alebo <1>DNS-over-TLS</1>, potrebujete v nastaveniach AdGuard Home <0>nakonfigurovať šifrovanie</0>.",
|
"setup_dns_notice": "Pre použitie <1>DNS-over-HTTPS</1> alebo <1>DNS-over-TLS</1>, potrebujete v nastaveniach AdGuard Home <0>nakonfigurovať šifrovanie</0>.",
|
||||||
"rewrite_added": "DNS prepísanie pre \"{{key}}\" bolo úspešne pridané",
|
"rewrite_added": "DNS prepísanie pre \"{{key}}\" bolo úspešne pridané",
|
||||||
"rewrite_deleted": "DNS prepísanie pre \"{{key}}\" bolo úspešne vymazané",
|
"rewrite_deleted": "DNS prepísanie pre \"{{key}}\" bolo úspešne vymazané",
|
||||||
|
"rewrite_updated": "Prepísanie DNS bolo úspešne aktualizované",
|
||||||
"rewrite_add": "Pridať DNS prepísanie",
|
"rewrite_add": "Pridať DNS prepísanie",
|
||||||
|
"rewrite_edit": "Upraviť prepísanie DNS",
|
||||||
"rewrite_not_found": "Neboli nájdené žiadne DNS prepísania",
|
"rewrite_not_found": "Neboli nájdené žiadne DNS prepísania",
|
||||||
"rewrite_confirm_delete": "Naozaj chcete odstrániť prepísanie DNS pre \"{{key}}\"?",
|
"rewrite_confirm_delete": "Naozaj chcete odstrániť prepísanie DNS pre \"{{key}}\"?",
|
||||||
"rewrite_desc": "Umožňuje ľahko nakonfigurovať vlastnú odpoveď DNS pre konkrétne meno domény.",
|
"rewrite_desc": "Umožňuje ľahko nakonfigurovať vlastnú odpoveď DNS pre konkrétne meno domény.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Naozaj chcete zmeniť uchovávanie štatistík? Ak znížite hodnotu intervalu, niektoré údaje sa stratia",
|
"statistics_retention_confirm": "Naozaj chcete zmeniť uchovávanie štatistík? Ak znížite hodnotu intervalu, niektoré údaje sa stratia",
|
||||||
"statistics_cleared": "Štatistika bola úspešne vynulovaná",
|
"statistics_cleared": "Štatistika bola úspešne vynulovaná",
|
||||||
"statistics_enable": "Zapnúť štatistiku",
|
"statistics_enable": "Zapnúť štatistiku",
|
||||||
|
"ignore_domains": "Ignorované domény (oddelené novým riadkom)",
|
||||||
|
"ignore_domains_title": "Ignorované domény",
|
||||||
|
"ignore_domains_desc_stats": "Dopyty pre tieto domény sa nezapisujú do štatistík",
|
||||||
|
"ignore_domains_desc_query": "Dopyty pre tieto domény sa nezapisujú do denníka dopytov",
|
||||||
"interval_hours": "{{count}} hodina",
|
"interval_hours": "{{count}} hodina",
|
||||||
"interval_hours_plural": "{{count}} hodín",
|
"interval_hours_plural": "{{count}} hodín",
|
||||||
"filters_configuration": "Konfigurácia filtrov",
|
"filters_configuration": "Konfigurácia filtrov",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Poznámka:</0> Anonymizácia IP je zapnutá. Môžete ju vypnúť vo <1>Všeobecných nastaveniach</1>.",
|
"anonymizer_notification": "<0>Poznámka:</0> Anonymizácia IP je zapnutá. Môžete ju vypnúť vo <1>Všeobecných nastaveniach</1>.",
|
||||||
"confirm_dns_cache_clear": "Naozaj chcete vymazať vyrovnávaciu pamäť DNS?",
|
"confirm_dns_cache_clear": "Naozaj chcete vymazať vyrovnávaciu pamäť DNS?",
|
||||||
"cache_cleared": "Vyrovnávacia pamäť DNS bola úspešne vymazaná",
|
"cache_cleared": "Vyrovnávacia pamäť DNS bola úspešne vymazaná",
|
||||||
"clear_cache": "Vymazať vyrovnávaciu pamäť"
|
"clear_cache": "Vymazať vyrovnávaciu pamäť",
|
||||||
|
"make_static": "Vytvárať štatistiku",
|
||||||
|
"theme_auto_desc": "Automaticky (na základe farebnej schémy Vášho zariadenia)",
|
||||||
|
"theme_dark_desc": "Tmavá téma",
|
||||||
|
"theme_light_desc": "Svetlá téma",
|
||||||
|
"disable_for_seconds": "Na {{count}} sekundu",
|
||||||
|
"disable_for_seconds_plural": "Na {{count}} sekúnd",
|
||||||
|
"disable_for_minutes": "Na {{count}} minútu",
|
||||||
|
"disable_for_minutes_plural": "Na {{count}} minút",
|
||||||
|
"disable_for_hours": "Na {{count}} hodinu",
|
||||||
|
"disable_for_hours_plural": "Na {{count}} hodín",
|
||||||
|
"disable_until_tomorrow": "Do zajtra",
|
||||||
|
"disable_notify_for_seconds": "Vypnite ochranu na {{count}} sekundu",
|
||||||
|
"disable_notify_for_seconds_plural": "Vypnite ochranu na {{count}} sekúnd",
|
||||||
|
"disable_notify_for_minutes": "Vypnite ochranu na {{count}} minútu",
|
||||||
|
"disable_notify_for_minutes_plural": "Vypnite ochranu na {{count}} minút",
|
||||||
|
"disable_notify_for_hours": "Vypnite ochranu na {{count}} hodinu",
|
||||||
|
"disable_notify_for_hours_plural": "Vypnite ochranu na {{count}} hodín",
|
||||||
|
"disable_notify_until_tomorrow": "Vypnúť ochranu do zajtra",
|
||||||
|
"enable_protection_timer": "Ochrana bude zapnutá o {{time}}",
|
||||||
|
"custom_retention_input": "Zadajte retenciu v hodinách",
|
||||||
|
"custom_rotation_input": "Zadajte rotáciu v hodinách",
|
||||||
|
"protection_section_label": "Ochrana",
|
||||||
|
"log_and_stats_section_label": "Protokol dopytov a štatistiky",
|
||||||
|
"ignore_query_log": "Ignorovať tohto klienta v denníku dopytov",
|
||||||
|
"ignore_statistics": "Ignorovanie tohto klienta v štatistikách"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Omogočen starševski nadzor",
|
"enabled_parental_toast": "Omogočen starševski nadzor",
|
||||||
"disabled_safe_search_toast": "Onemogočeno Varno iskanje",
|
"disabled_safe_search_toast": "Onemogočeno Varno iskanje",
|
||||||
"enabled_save_search_toast": "Omogočeno Varno iskanje",
|
"enabled_save_search_toast": "Omogočeno Varno iskanje",
|
||||||
|
"updated_save_search_toast": "Nastavitve varnega iskanja so posodobljene",
|
||||||
"enabled_table_header": "Omogočeno",
|
"enabled_table_header": "Omogočeno",
|
||||||
"name_table_header": "Ime",
|
"name_table_header": "Ime",
|
||||||
"list_url_table_header": "Seznam URL naslovov",
|
"list_url_table_header": "Seznam URL naslovov",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Dnevnik poizvedb je uspešno izbrisan",
|
"query_log_cleared": "Dnevnik poizvedb je uspešno izbrisan",
|
||||||
"query_log_updated": "Dnevnik poizvedb je bil uspešno posodobljen",
|
"query_log_updated": "Dnevnik poizvedb je bil uspešno posodobljen",
|
||||||
"query_log_clear": "Počisti dnevnike poizvedb",
|
"query_log_clear": "Počisti dnevnike poizvedb",
|
||||||
"query_log_retention": "Zadrževanje dnevnikov poizvedb",
|
"query_log_retention": "Rotacija dnevnikov poizvedb",
|
||||||
"query_log_enable": "Omogoči dnevni",
|
"query_log_enable": "Omogoči dnevni",
|
||||||
"query_log_configuration": "Konfiguracija dnevnikov",
|
"query_log_configuration": "Konfiguracija dnevnikov",
|
||||||
"query_log_disabled": "Dnevnik poizvedb je onemogočen in ga je mogoče konfigurirati v <0>nastavitvah</0>",
|
"query_log_disabled": "Dnevnik poizvedb je onemogočen in ga je mogoče konfigurirati v <0>nastavitvah</0>",
|
||||||
"query_log_strict_search": "Za strogo iskanje uporabite dvojne narekovaje",
|
"query_log_strict_search": "Za strogo iskanje uporabite dvojne narekovaje",
|
||||||
"query_log_retention_confirm": "Ali ste prepričani, da želite spremeniti zadrževanje dnevnika poizvedb? Če zmanjšate vrednost intervala, bodo nekateri podatki izgubljeni",
|
"query_log_retention_confirm": "Ali ste prepričani, da želite spremeniti rotacijo dnevnika poizvedb? Če zmanjšate vrednost intervala, bodo nekateri podatki izgubljeni",
|
||||||
"anonymize_client_ip": "Anonimiziraj odjemalca IP",
|
"anonymize_client_ip": "Anonimiziraj odjemalca IP",
|
||||||
"anonymize_client_ip_desc": "Ne shrani celotnega naslova IP odjemalca v dnevnikih ali statistiki",
|
"anonymize_client_ip_desc": "Ne shrani celotnega naslova IP odjemalca v dnevnikih ali statistiki",
|
||||||
"dns_config": "Konfiguracija strežnika DNS",
|
"dns_config": "Konfiguracija strežnika DNS",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Omejitev hitrosti",
|
"rate_limit": "Omejitev hitrosti",
|
||||||
"edns_enable": "Omogoči odjemalsko podomrežje EDNS",
|
"edns_enable": "Omogoči odjemalsko podomrežje EDNS",
|
||||||
"edns_cs_desc": "Dodaj možnost podomrežja odjemalca EDNS (ECS) zahtevam v gorvodnem toku in zabeleži vrednosti, ki jih pošljejo odjemalci, v dnevnik poizvedb.",
|
"edns_cs_desc": "Dodaj možnost podomrežja odjemalca EDNS (ECS) zahtevam v gorvodnem toku in zabeleži vrednosti, ki jih pošljejo odjemalci, v dnevnik poizvedb.",
|
||||||
|
"edns_use_custom_ip": "Uporabi IP po meri za EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Dovoli uporabo naslova IP po meri za EDNS",
|
||||||
"rate_limit_desc": "Dovoljeno število zahtev na sekundo na odjemalca. Nastavitev na 0 pomeni brez omejitve.",
|
"rate_limit_desc": "Dovoljeno število zahtev na sekundo na odjemalca. Nastavitev na 0 pomeni brez omejitve.",
|
||||||
"blocking_ipv4_desc": "IP naslov, ki mora biti vrnjen za onemogočeno zahtevo A",
|
"blocking_ipv4_desc": "IP naslov, ki mora biti vrnjen za onemogočeno zahtevo A",
|
||||||
"blocking_ipv6_desc": "IP naslov, ki mora biti vrnjen za onemogočeno zahtevo AAAA",
|
"blocking_ipv6_desc": "IP naslov, ki mora biti vrnjen za onemogočeno zahtevo AAAA",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Odziv s kodo NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Odziv s kodo NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "Prazen IP: Odziv z ničelnim naslovom IP (0.0.0.0 za A; :: za AAAA)",
|
"blocking_mode_null_ip": "Prazen IP: Odziv z ničelnim naslovom IP (0.0.0.0 za A; :: za AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP po meri: Odziv z ročno nastavljenim naslovom IP",
|
"blocking_mode_custom_ip": "IP po meri: Odziv z ročno nastavljenim naslovom IP",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Svetla tema",
|
||||||
|
"theme_dark": "Temna tema",
|
||||||
"upstream_dns_client_desc": "Če pustite to polje prazno, bo AdGuard Home uporabil strežnike, konfigurirane v <0>nastavitvah DNS</0>.",
|
"upstream_dns_client_desc": "Če pustite to polje prazno, bo AdGuard Home uporabil strežnike, konfigurirane v <0>nastavitvah DNS</0>.",
|
||||||
"tracker_source": "Vir sledilca",
|
"tracker_source": "Vir sledilca",
|
||||||
"source_label": "Vir",
|
"source_label": "Vir",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Na voljo je nova različica programa AdGuard Home\n",
|
"updates_checked": "Na voljo je nova različica programa AdGuard Home\n",
|
||||||
"updates_version_equal": "AdGuard Home je posodobljen",
|
"updates_version_equal": "AdGuard Home je posodobljen",
|
||||||
"check_updates_now": "Preveri obstoj posodobitev zdaj",
|
"check_updates_now": "Preveri obstoj posodobitev zdaj",
|
||||||
|
"version_request_error": "Posodobitev ni uspela. Preverite vašo internetno povezavo.",
|
||||||
"dns_privacy": "Zasebnost DNS",
|
"dns_privacy": "Zasebnost DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-prek-TLS:</0> Uporabite niz <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-prek-TLS:</0> Uporabite niz <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-prek-HTTPS:</0> Uporabite niz <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-prek-HTTPS:</0> Uporabite niz <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Za uporabo <1>DNS-prek-HTTPS</1> ali <1>DNS-prek-TLS</1>, morate <0>konfigurirati šifriranje</0> v nastavitvah AdGuard Home.",
|
"setup_dns_notice": "Za uporabo <1>DNS-prek-HTTPS</1> ali <1>DNS-prek-TLS</1>, morate <0>konfigurirati šifriranje</0> v nastavitvah AdGuard Home.",
|
||||||
"rewrite_added": "Uspešno je dodano DNS prepisovanje za \"{{key}}\"",
|
"rewrite_added": "Uspešno je dodano DNS prepisovanje za \"{{key}}\"",
|
||||||
"rewrite_deleted": "Uspešno je izbrisano DNS prepisovanje za \"{{key}}\"",
|
"rewrite_deleted": "Uspešno je izbrisano DNS prepisovanje za \"{{key}}\"",
|
||||||
|
"rewrite_updated": "DNS prepisovanje uspešno posodobljen",
|
||||||
"rewrite_add": "Dodaj prepisovanje DNS",
|
"rewrite_add": "Dodaj prepisovanje DNS",
|
||||||
|
"rewrite_edit": "Urejanje prepisa DNS",
|
||||||
"rewrite_not_found": "Ni bilo najdenih prepisovanj DNS",
|
"rewrite_not_found": "Ni bilo najdenih prepisovanj DNS",
|
||||||
"rewrite_confirm_delete": "Ali ste prepričani, da želite izbrisati prepisovanje DNS za \"{{key}}\"?",
|
"rewrite_confirm_delete": "Ali ste prepričani, da želite izbrisati prepisovanje DNS za \"{{key}}\"?",
|
||||||
"rewrite_desc": "Omogoča enostavno konfiguriranje odgovora DNS po meri za določeno ime domene.",
|
"rewrite_desc": "Omogoča enostavno konfiguriranje odgovora DNS po meri za določeno ime domene.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Ali ste prepričani, da želite spremeniti zadrževanje statistike? Če zmanjšate vrednost intervala, bodo nekateri podatki izgubljeni",
|
"statistics_retention_confirm": "Ali ste prepričani, da želite spremeniti zadrževanje statistike? Če zmanjšate vrednost intervala, bodo nekateri podatki izgubljeni",
|
||||||
"statistics_cleared": "Statistika je bila uspešno počiščena",
|
"statistics_cleared": "Statistika je bila uspešno počiščena",
|
||||||
"statistics_enable": "Omogoči statistiko",
|
"statistics_enable": "Omogoči statistiko",
|
||||||
|
"ignore_domains": "Prezrte domene (ločene z novo vrstico)",
|
||||||
|
"ignore_domains_title": "Prezrte domene",
|
||||||
|
"ignore_domains_desc_stats": "Poizvedbe za te domene niso zapisane v statistiko",
|
||||||
|
"ignore_domains_desc_query": "Poizvedbe za te domene niso zapisane v dnevnik poizvedb",
|
||||||
"interval_hours": "{{count}} ur",
|
"interval_hours": "{{count}} ur",
|
||||||
"interval_hours_plural": "{{count}} ur",
|
"interval_hours_plural": "{{count}} ur",
|
||||||
"filters_configuration": "Nastavitve filtrov",
|
"filters_configuration": "Nastavitve filtrov",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Opomba:</0> Anonimizacija IP je omogočena. Onemogočite ga lahko v <1>Splošnih nastavitvah</1>.",
|
"anonymizer_notification": "<0>Opomba:</0> Anonimizacija IP je omogočena. Onemogočite ga lahko v <1>Splošnih nastavitvah</1>.",
|
||||||
"confirm_dns_cache_clear": "Ali ste prepričani, da želite počistiti predpomnilnik DNS?",
|
"confirm_dns_cache_clear": "Ali ste prepričani, da želite počistiti predpomnilnik DNS?",
|
||||||
"cache_cleared": "Predpomnilnik DNS je bil uspešno počiščen",
|
"cache_cleared": "Predpomnilnik DNS je bil uspešno počiščen",
|
||||||
"clear_cache": "Počisti predpomnilnik"
|
"clear_cache": "Počisti predpomnilnik",
|
||||||
|
"make_static": "Naredi statično",
|
||||||
|
"theme_auto_desc": "Samodejno (glede na barvno shemo vaše naprave)",
|
||||||
|
"theme_dark_desc": "Temna tema",
|
||||||
|
"theme_light_desc": "Svetla tema",
|
||||||
|
"disable_for_seconds": "Za {{count}} sekundo",
|
||||||
|
"disable_for_seconds_plural": "Za {{count}} sekund",
|
||||||
|
"disable_for_minutes": "Za {{count}} minuto",
|
||||||
|
"disable_for_minutes_plural": "Za {{count}} minut",
|
||||||
|
"disable_for_hours": "Za {{count}} uro",
|
||||||
|
"disable_for_hours_plural": "Za {{count}} ur",
|
||||||
|
"disable_until_tomorrow": "Do jutri",
|
||||||
|
"disable_notify_for_seconds": "Onemogoči zaščito za {{count}} sekundo",
|
||||||
|
"disable_notify_for_seconds_plural": "Onemogoči zaščito za {{count}} sekund",
|
||||||
|
"disable_notify_for_minutes": "Onemogoči zaščito za {{count}} minuto",
|
||||||
|
"disable_notify_for_minutes_plural": "Onemogoči zaščito za {{count}} minut",
|
||||||
|
"disable_notify_for_hours": "Onemogoči zaščito za {{count}} uro",
|
||||||
|
"disable_notify_for_hours_plural": "Onemogoči zaščito za {{count}} ur",
|
||||||
|
"disable_notify_until_tomorrow": "Onemogoči zaščito do jutri",
|
||||||
|
"enable_protection_timer": "Zaščita bo omogočena ob {{time}}",
|
||||||
|
"custom_retention_input": "Vnesite zadrževanje v urah",
|
||||||
|
"custom_rotation_input": "Vnesite rotacijo v urah",
|
||||||
|
"protection_section_label": "Zaščita",
|
||||||
|
"log_and_stats_section_label": "Dnevnik poizvedb in statistika",
|
||||||
|
"ignore_query_log": "Ignorirajte tega odjemalca v dnevniku poizvedb",
|
||||||
|
"ignore_statistics": "Ignoriranje tega odjemalca v statistiki"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -298,6 +298,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Odgovara sa NXDOMAIN kodom",
|
"blocking_mode_nxdomain": "NXDOMAIN: Odgovara sa NXDOMAIN kodom",
|
||||||
"blocking_mode_null_ip": "Null IP: Odgovara sa zero IP adresom (0.0.0.0 za A; :: za AAAA)",
|
"blocking_mode_null_ip": "Null IP: Odgovara sa zero IP adresom (0.0.0.0 za A; :: za AAAA)",
|
||||||
"blocking_mode_custom_ip": "Prilagođeni IP: Odgovara sa ručno podešenom IP adresom",
|
"blocking_mode_custom_ip": "Prilagođeni IP: Odgovara sa ručno podešenom IP adresom",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Svetla tema",
|
||||||
|
"theme_dark": "Tamna tema",
|
||||||
"upstream_dns_client_desc": "AKo ovo polje ostavite prazno, AdGuard Home će koristiti servere konfigurisane u <0>DNS postavkama</0>.",
|
"upstream_dns_client_desc": "AKo ovo polje ostavite prazno, AdGuard Home će koristiti servere konfigurisane u <0>DNS postavkama</0>.",
|
||||||
"tracker_source": "Izvor praćenja",
|
"tracker_source": "Izvor praćenja",
|
||||||
"source_label": "Izvor",
|
"source_label": "Izvor",
|
||||||
@@ -451,6 +454,7 @@
|
|||||||
"updates_checked": "Dostupna je nova verzija AdGuard Home-a",
|
"updates_checked": "Dostupna je nova verzija AdGuard Home-a",
|
||||||
"updates_version_equal": "AdGuard Home je ažuriran na najnoviju verziju",
|
"updates_version_equal": "AdGuard Home je ažuriran na najnoviju verziju",
|
||||||
"check_updates_now": "Proveri da li postoje ispravke",
|
"check_updates_now": "Proveri da li postoje ispravke",
|
||||||
|
"version_request_error": "Provera ažuriranja nije uspela. Proverite svoju vezu sa internetom.",
|
||||||
"dns_privacy": "DNS privatnost",
|
"dns_privacy": "DNS privatnost",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> koristi <1>{{address}}</1> string.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> koristi <1>{{address}}</1> string.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> koristi <1>{{address}}</1> string.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> koristi <1>{{address}}</1> string.",
|
||||||
@@ -471,7 +475,9 @@
|
|||||||
"setup_dns_notice": "Kako biste koristili <1>DNS-over-HTTPS</1> ili <1>DNS-over-TLS</1>, potrebno je da <0>konfigurišete šifrovanje</0> u AdGuard Home postavkama.",
|
"setup_dns_notice": "Kako biste koristili <1>DNS-over-HTTPS</1> ili <1>DNS-over-TLS</1>, potrebno je da <0>konfigurišete šifrovanje</0> u AdGuard Home postavkama.",
|
||||||
"rewrite_added": "DNS prepisivanje za \"{{key}}\" je uspešno dodato",
|
"rewrite_added": "DNS prepisivanje za \"{{key}}\" je uspešno dodato",
|
||||||
"rewrite_deleted": "DNS prepisivanje za \"{{key}}\" uspešno izbrisano",
|
"rewrite_deleted": "DNS prepisivanje za \"{{key}}\" uspešno izbrisano",
|
||||||
|
"rewrite_updated": "DNS ponovo napisao uspešno ažuriran",
|
||||||
"rewrite_add": "Dodaj DNS prepisivanje",
|
"rewrite_add": "Dodaj DNS prepisivanje",
|
||||||
|
"rewrite_edit": "Uređivanje DNS prepravke",
|
||||||
"rewrite_not_found": "DNS prepisivanja nisu pronađena",
|
"rewrite_not_found": "DNS prepisivanja nisu pronađena",
|
||||||
"rewrite_confirm_delete": "Jeste li sigurni da želite da izbrišete DNS prepisivanje za \"{{key}}\"?",
|
"rewrite_confirm_delete": "Jeste li sigurni da želite da izbrišete DNS prepisivanje za \"{{key}}\"?",
|
||||||
"rewrite_desc": "Dozvoljava da jednostavno konfigurišete prilagođeni DNS odgovor za određeni domen.",
|
"rewrite_desc": "Dozvoljava da jednostavno konfigurišete prilagođeni DNS odgovor za određeni domen.",
|
||||||
@@ -638,5 +644,6 @@
|
|||||||
"anonymizer_notification": "<0>Nota:</0> IP prepoznavanje je omogućeno. Možete ga onemogućiti u opštim <1>postavkama</1>.",
|
"anonymizer_notification": "<0>Nota:</0> IP prepoznavanje je omogućeno. Možete ga onemogućiti u opštim <1>postavkama</1>.",
|
||||||
"confirm_dns_cache_clear": "Želite li zaista da obrišite DNS keš?",
|
"confirm_dns_cache_clear": "Želite li zaista da obrišite DNS keš?",
|
||||||
"cache_cleared": "DNS keš je uspešno očišćen",
|
"cache_cleared": "DNS keš je uspešno očišćen",
|
||||||
"clear_cache": "Obriši keš memoriju"
|
"clear_cache": "Obriši keš memoriju",
|
||||||
|
"protection_section_label": "Zaštita"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -298,6 +298,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Svara med NXDOMAIN kod",
|
"blocking_mode_nxdomain": "NXDOMAIN: Svara med NXDOMAIN kod",
|
||||||
"blocking_mode_null_ip": "Null IP: Svara med noll IP adress (0.0.0.0 för A; :: för AAAA)",
|
"blocking_mode_null_ip": "Null IP: Svara med noll IP adress (0.0.0.0 för A; :: för AAAA)",
|
||||||
"blocking_mode_custom_ip": "Anpassad IP: Svara med en manuellt inställd IP adress",
|
"blocking_mode_custom_ip": "Anpassad IP: Svara med en manuellt inställd IP adress",
|
||||||
|
"theme_auto": "Auto",
|
||||||
|
"theme_light": "Ljust",
|
||||||
|
"theme_dark": "Mörkt",
|
||||||
"upstream_dns_client_desc": "Om detta fält är tomt kommer AdGuard Home att använda de servrar som konfigurerats i <0>DNS inställningarna</0>.",
|
"upstream_dns_client_desc": "Om detta fält är tomt kommer AdGuard Home att använda de servrar som konfigurerats i <0>DNS inställningarna</0>.",
|
||||||
"tracker_source": "Spårningskälla",
|
"tracker_source": "Spårningskälla",
|
||||||
"source_label": "Källa",
|
"source_label": "Källa",
|
||||||
@@ -451,6 +454,7 @@
|
|||||||
"updates_checked": "En ny version av AdGuard Home är tillgänglig\n",
|
"updates_checked": "En ny version av AdGuard Home är tillgänglig\n",
|
||||||
"updates_version_equal": "AdGuard Home är uppdaterat",
|
"updates_version_equal": "AdGuard Home är uppdaterat",
|
||||||
"check_updates_now": "Sök efter uppdateringar nu",
|
"check_updates_now": "Sök efter uppdateringar nu",
|
||||||
|
"version_request_error": "Uppdateringskontroll misslyckades. Kontrollera din internetanslutning.",
|
||||||
"dns_privacy": "DNS-Integritet",
|
"dns_privacy": "DNS-Integritet",
|
||||||
"setup_dns_privacy_1": "<0>DNS-över-TLS:</0> Använd: <1>{{address}}</1>",
|
"setup_dns_privacy_1": "<0>DNS-över-TLS:</0> Använd: <1>{{address}}</1>",
|
||||||
"setup_dns_privacy_2": "<0>DNS-över-HTTPS:</0> Använd: <1>{{address}}</1>",
|
"setup_dns_privacy_2": "<0>DNS-över-HTTPS:</0> Använd: <1>{{address}}</1>",
|
||||||
@@ -471,7 +475,9 @@
|
|||||||
"setup_dns_notice": "För att kunna använda <1>DNS-över-HTTPS</1> eller <1>DNS-över-TLS</1>, behöver du <0>konfigurera Kryptering</0> i AdGuard Home-inställningar.",
|
"setup_dns_notice": "För att kunna använda <1>DNS-över-HTTPS</1> eller <1>DNS-över-TLS</1>, behöver du <0>konfigurera Kryptering</0> i AdGuard Home-inställningar.",
|
||||||
"rewrite_added": "DNS-omskrivning för \"{{key}}\" lyckad",
|
"rewrite_added": "DNS-omskrivning för \"{{key}}\" lyckad",
|
||||||
"rewrite_deleted": "DNS-omskrivning för \"{{key}}\" har tagits bort",
|
"rewrite_deleted": "DNS-omskrivning för \"{{key}}\" har tagits bort",
|
||||||
|
"rewrite_updated": "DNS-omskrivning har uppdaterats",
|
||||||
"rewrite_add": "Lägg till DNS omskrivning",
|
"rewrite_add": "Lägg till DNS omskrivning",
|
||||||
|
"rewrite_edit": "Redigera DNS-omskrivning",
|
||||||
"rewrite_not_found": "Inga DNS omskrivningar hittades",
|
"rewrite_not_found": "Inga DNS omskrivningar hittades",
|
||||||
"rewrite_confirm_delete": "Är du säker på att du vill ta bort DNS-omskrivningen för \"{{key}}\"?",
|
"rewrite_confirm_delete": "Är du säker på att du vill ta bort DNS-omskrivningen för \"{{key}}\"?",
|
||||||
"rewrite_desc": "Gör det enkelt att konfigurera anpassat DNS svar för ett specifikt domännamn.",
|
"rewrite_desc": "Gör det enkelt att konfigurera anpassat DNS svar för ett specifikt domännamn.",
|
||||||
@@ -519,6 +525,7 @@
|
|||||||
"statistics_retention_confirm": "Är du säker på att du vill ändra retentionstiden för statistik? Om du minskar intervallet kommer viss data att gå förlorad",
|
"statistics_retention_confirm": "Är du säker på att du vill ändra retentionstiden för statistik? Om du minskar intervallet kommer viss data att gå förlorad",
|
||||||
"statistics_cleared": "Statistiken har rensats",
|
"statistics_cleared": "Statistiken har rensats",
|
||||||
"statistics_enable": "Aktivera statistik",
|
"statistics_enable": "Aktivera statistik",
|
||||||
|
"ignore_domains_title": "Ignorerade domäner",
|
||||||
"interval_hours": "{{count}} timme",
|
"interval_hours": "{{count}} timme",
|
||||||
"interval_hours_plural": "{{count}} timmar",
|
"interval_hours_plural": "{{count}} timmar",
|
||||||
"filters_configuration": "Filterinställningar",
|
"filters_configuration": "Filterinställningar",
|
||||||
@@ -638,5 +645,14 @@
|
|||||||
"anonymizer_notification": "<0>Observera:</0> IP-anonymisering är aktiverad. Du kan inaktivera den i <1>Allmänna inställningar</1>.",
|
"anonymizer_notification": "<0>Observera:</0> IP-anonymisering är aktiverad. Du kan inaktivera den i <1>Allmänna inställningar</1>.",
|
||||||
"confirm_dns_cache_clear": "Är du säker på att du vill rensa DNS-cache?",
|
"confirm_dns_cache_clear": "Är du säker på att du vill rensa DNS-cache?",
|
||||||
"cache_cleared": "DNS-cacheminnet har rensats",
|
"cache_cleared": "DNS-cacheminnet har rensats",
|
||||||
"clear_cache": "Rensa cache"
|
"clear_cache": "Rensa cache",
|
||||||
|
"theme_dark_desc": "Mörkt tema",
|
||||||
|
"theme_light_desc": "Ljust tema",
|
||||||
|
"disable_for_seconds": "I {{count}} sekund",
|
||||||
|
"disable_for_seconds_plural": "I {{count}} sekunder",
|
||||||
|
"disable_for_minutes": "I {{count}} minut",
|
||||||
|
"disable_for_minutes_plural": "I {{count}} minuter",
|
||||||
|
"disable_for_hours": "I {{count}} timme",
|
||||||
|
"disable_for_hours_plural": "I {{count}} timmar",
|
||||||
|
"disable_until_tomorrow": "Tills imorgon"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,14 +128,14 @@
|
|||||||
"number_of_dns_query_days": "Son {{count}} gün boyunca işlenen DNS sorgularının sayısı",
|
"number_of_dns_query_days": "Son {{count}} gün boyunca işlenen DNS sorgularının sayısı",
|
||||||
"number_of_dns_query_days_plural": "Son {{count}} gün boyunca işlenen DNS sorgularının sayısı",
|
"number_of_dns_query_days_plural": "Son {{count}} gün boyunca işlenen DNS sorgularının sayısı",
|
||||||
"number_of_dns_query_24_hours": "Son 24 saat içinde işlenen DNS sorgularının sayısı",
|
"number_of_dns_query_24_hours": "Son 24 saat içinde işlenen DNS sorgularının sayısı",
|
||||||
"number_of_dns_query_blocked_24_hours": "Reklam engelleme filtreleri ve ana makine engel listeleri tarafından engellenen DNS isteklerinin sayısı",
|
"number_of_dns_query_blocked_24_hours": "Reklam engelleme filtreleri ve hosts engel listeleri tarafından engellenen DNS isteklerinin sayısı",
|
||||||
"number_of_dns_query_blocked_24_hours_by_sec": "AdGuard gezinti koruması modülü tarafından engellenen DNS isteklerinin sayısı",
|
"number_of_dns_query_blocked_24_hours_by_sec": "AdGuard gezinti koruması modülü tarafından engellenen DNS isteklerinin sayısı",
|
||||||
"number_of_dns_query_blocked_24_hours_adult": "Engellenen yetişkin içerikli sitelerin sayısı",
|
"number_of_dns_query_blocked_24_hours_adult": "Engellenen yetişkin içerikli sitelerin sayısı",
|
||||||
"enforced_save_search": "Uygulanan güvenli arama",
|
"enforced_save_search": "Uygulanan güvenli arama",
|
||||||
"number_of_dns_query_to_safe_search": "Güvenli Aramanın uygulandığı arama motorlarına gönderilen DNS isteklerinin sayısı",
|
"number_of_dns_query_to_safe_search": "Güvenli Aramanın uygulandığı arama motorlarına gönderilen DNS isteklerinin sayısı",
|
||||||
"average_processing_time": "Ortalama işlem süresi",
|
"average_processing_time": "Ortalama işlem süresi",
|
||||||
"average_processing_time_hint": "Bir DNS isteğinin milisaniye cinsinden ortalama işlem süresi",
|
"average_processing_time_hint": "Bir DNS isteğinin milisaniye cinsinden ortalama işlem süresi",
|
||||||
"block_domain_use_filters_and_hosts": "Filtre ve ana makine listelerini kullanarak alan adlarını engelle",
|
"block_domain_use_filters_and_hosts": "Filtre ve hosts dosyalarını kullanarak alan adlarını engelle",
|
||||||
"filters_block_toggle_hint": "<a>Filtreler</a> ayarlarında engelleme kuralları oluşturabilirsiniz.",
|
"filters_block_toggle_hint": "<a>Filtreler</a> ayarlarında engelleme kuralları oluşturabilirsiniz.",
|
||||||
"use_adguard_browsing_sec": "AdGuard gezinti koruması web hizmetini kullan",
|
"use_adguard_browsing_sec": "AdGuard gezinti koruması web hizmetini kullan",
|
||||||
"use_adguard_browsing_sec_hint": "AdGuard Home, alan adının gezinti koruması web hizmeti tarafından engellenip engellenmediğini kontrol eder. Kontrolü gerçekleştirmek için gizlilik dostu arama API'sini kullanır: sunucuya yalnızca SHA256 karma alan adının kısa bir ön eki gönderilir.",
|
"use_adguard_browsing_sec_hint": "AdGuard Home, alan adının gezinti koruması web hizmeti tarafından engellenip engellenmediğini kontrol eder. Kontrolü gerçekleştirmek için gizlilik dostu arama API'sini kullanır: sunucuya yalnızca SHA256 karma alan adının kısa bir ön eki gönderilir.",
|
||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Ebeveyn Denetimi etkinleştirildi",
|
"enabled_parental_toast": "Ebeveyn Denetimi etkinleştirildi",
|
||||||
"disabled_safe_search_toast": "Güvenli Arama devre dışı bırakıldı",
|
"disabled_safe_search_toast": "Güvenli Arama devre dışı bırakıldı",
|
||||||
"enabled_save_search_toast": "Güvenli Arama etkinleştirildi",
|
"enabled_save_search_toast": "Güvenli Arama etkinleştirildi",
|
||||||
|
"updated_save_search_toast": "Güvenli Arama ayarları güncellendi",
|
||||||
"enabled_table_header": "Etkin",
|
"enabled_table_header": "Etkin",
|
||||||
"name_table_header": "Ad",
|
"name_table_header": "Ad",
|
||||||
"list_url_table_header": "Liste URL'si",
|
"list_url_table_header": "Liste URL'si",
|
||||||
@@ -177,7 +178,7 @@
|
|||||||
"edit_table_action": "Düzenle",
|
"edit_table_action": "Düzenle",
|
||||||
"delete_table_action": "Sil",
|
"delete_table_action": "Sil",
|
||||||
"elapsed": "Geçen süre",
|
"elapsed": "Geçen süre",
|
||||||
"filters_and_hosts_hint": "AdGuard Home, temel reklam engelleme kurallarını ve ana makine dosyalarının söz dizimini anlar.",
|
"filters_and_hosts_hint": "AdGuard Home, temel reklam engelleme kurallarını ve hosts dosyalarının söz dizimini anlar.",
|
||||||
"no_blocklist_added": "Engel listesi eklenmedi",
|
"no_blocklist_added": "Engel listesi eklenmedi",
|
||||||
"no_whitelist_added": "İzin listesi eklenmedi",
|
"no_whitelist_added": "İzin listesi eklenmedi",
|
||||||
"add_blocklist": "Engel listesi ekle",
|
"add_blocklist": "Engel listesi ekle",
|
||||||
@@ -197,8 +198,8 @@
|
|||||||
"form_error_url_format": "Geçersiz URL biçimi",
|
"form_error_url_format": "Geçersiz URL biçimi",
|
||||||
"form_error_url_or_path_format": "Geçersiz URL adresi veya dosya yolu",
|
"form_error_url_or_path_format": "Geçersiz URL adresi veya dosya yolu",
|
||||||
"custom_filter_rules": "Özel filtreleme kuralları",
|
"custom_filter_rules": "Özel filtreleme kuralları",
|
||||||
"custom_filter_rules_hint": "Her satıra bir kural girin. Reklam engelleme kuralı veya ana makine dosyası söz dizimi kullanabilirsiniz.",
|
"custom_filter_rules_hint": "Her satıra bir kural girin. Reklam engelleme kuralı veya hosts dosyası söz dizimi kullanabilirsiniz.",
|
||||||
"system_host_files": "Sistem ana makine dosyaları",
|
"system_host_files": "Sistem hosts dosyaları",
|
||||||
"examples_title": "Örnekler",
|
"examples_title": "Örnekler",
|
||||||
"example_meaning_filter_block": "example.org'a ve tüm alt alanlarına erişimi engeller;",
|
"example_meaning_filter_block": "example.org'a ve tüm alt alanlarına erişimi engeller;",
|
||||||
"example_meaning_filter_whitelist": "example.org'a ve tüm alt alanlarına erişimin engelini kaldırır;",
|
"example_meaning_filter_whitelist": "example.org'a ve tüm alt alanlarına erişimin engelini kaldırır;",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Sorgu günlüğü başarıyla temizlendi",
|
"query_log_cleared": "Sorgu günlüğü başarıyla temizlendi",
|
||||||
"query_log_updated": "Sorgu günlüğü başarıyla güncellendi",
|
"query_log_updated": "Sorgu günlüğü başarıyla güncellendi",
|
||||||
"query_log_clear": "Sorgu günlüklerini temizle",
|
"query_log_clear": "Sorgu günlüklerini temizle",
|
||||||
"query_log_retention": "Sorgu günlüklerini sakla",
|
"query_log_retention": "Sorgu günlükleri rotasyonu",
|
||||||
"query_log_enable": "Günlüğü etkinleştir",
|
"query_log_enable": "Günlüğü etkinleştir",
|
||||||
"query_log_configuration": "Günlük yapılandırması",
|
"query_log_configuration": "Günlük yapılandırması",
|
||||||
"query_log_disabled": "Sorgu günlüğü devre dışı bırakıldı, bunu <0>ayarlar</0> kısmından yapılandırılabilirsiniz",
|
"query_log_disabled": "Sorgu günlüğü devre dışı bırakıldı, bunu <0>ayarlar</0> kısmından yapılandırılabilirsiniz",
|
||||||
"query_log_strict_search": "Tam arama için çift tırnak işareti kullanın",
|
"query_log_strict_search": "Tam arama için çift tırnak işareti kullanın",
|
||||||
"query_log_retention_confirm": "Sorgu günlüğü saklama süresini değiştirmek istediğinize emin misiniz? Aralık değerini azaltırsanız, bazı veriler kaybolacaktır",
|
"query_log_retention_confirm": "Sorgu günlüğü rotasyonunu değiştirmek istediğinizden emin misiniz? Aralık değerini düşürürseniz, bazı veriler kaybolacaktır.",
|
||||||
"anonymize_client_ip": "İstemcinin IP adresini gizle",
|
"anonymize_client_ip": "İstemcinin IP adresini gizle",
|
||||||
"anonymize_client_ip_desc": "İstemcinin tam IP adresini günlüklere veya istatistiklere kaydetmeyin",
|
"anonymize_client_ip_desc": "İstemcinin tam IP adresini günlüklere veya istatistiklere kaydetmeyin",
|
||||||
"dns_config": "DNS sunucu yapılandırması",
|
"dns_config": "DNS sunucu yapılandırması",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Sıklık limiti",
|
"rate_limit": "Sıklık limiti",
|
||||||
"edns_enable": "EDNS istemci alt ağını etkinleştir",
|
"edns_enable": "EDNS istemci alt ağını etkinleştir",
|
||||||
"edns_cs_desc": "Kaynak yönü isteklerine EDNS İstemci Alt Ağı seçeneğini (ECS) ekleyin ve istemciler tarafından gönderilen değerleri sorgu günlüğüne kaydedin.",
|
"edns_cs_desc": "Kaynak yönü isteklerine EDNS İstemci Alt Ağı seçeneğini (ECS) ekleyin ve istemciler tarafından gönderilen değerleri sorgu günlüğüne kaydedin.",
|
||||||
|
"edns_use_custom_ip": "EDNS için özel IP kullan",
|
||||||
|
"edns_use_custom_ip_desc": "EDNS için özel IP kullanımına izin ver",
|
||||||
"rate_limit_desc": "İstemci başına izin verilen saniyedeki istek sayısı. 0 olarak ayarlamak, sınır olmadığı anlamına gelir.",
|
"rate_limit_desc": "İstemci başına izin verilen saniyedeki istek sayısı. 0 olarak ayarlamak, sınır olmadığı anlamına gelir.",
|
||||||
"blocking_ipv4_desc": "Engellenen bir A isteği için geri döndürülecek IP adresi",
|
"blocking_ipv4_desc": "Engellenen bir A isteği için geri döndürülecek IP adresi",
|
||||||
"blocking_ipv6_desc": "Engellenen bir AAAA isteği için geri döndürülecek IP adresi",
|
"blocking_ipv6_desc": "Engellenen bir AAAA isteği için geri döndürülecek IP adresi",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: NXDOMAIN koduyla yanıt verin",
|
"blocking_mode_nxdomain": "NXDOMAIN: NXDOMAIN koduyla yanıt verin",
|
||||||
"blocking_mode_null_ip": "Boş IP: Sıfır IP adresiyle yanıt verin (A için 0.0.0.0; :: AAAA için)",
|
"blocking_mode_null_ip": "Boş IP: Sıfır IP adresiyle yanıt verin (A için 0.0.0.0; :: AAAA için)",
|
||||||
"blocking_mode_custom_ip": "Özel IP: El ile ayarlanmış bir IP adresiyle yanıt verin",
|
"blocking_mode_custom_ip": "Özel IP: El ile ayarlanmış bir IP adresiyle yanıt verin",
|
||||||
|
"theme_auto": "Otomatik",
|
||||||
|
"theme_light": "Açık",
|
||||||
|
"theme_dark": "Koyu",
|
||||||
"upstream_dns_client_desc": "Bu alanı boş bırakırsanız, AdGuard Home, <0>DNS ayarlarında</0> yapılandırılan sunucuları kullanır.",
|
"upstream_dns_client_desc": "Bu alanı boş bırakırsanız, AdGuard Home, <0>DNS ayarlarında</0> yapılandırılan sunucuları kullanır.",
|
||||||
"tracker_source": "İzleyici kaynağı",
|
"tracker_source": "İzleyici kaynağı",
|
||||||
"source_label": "Kaynak",
|
"source_label": "Kaynak",
|
||||||
@@ -347,12 +353,12 @@
|
|||||||
"install_devices_macos_list_3": "Listedeki ilk bağlantıyı seçin ve Gelişmiş öğesine tıklayın.",
|
"install_devices_macos_list_3": "Listedeki ilk bağlantıyı seçin ve Gelişmiş öğesine tıklayın.",
|
||||||
"install_devices_macos_list_4": "DNS sekmesini seçin ve AdGuard Home sunucunuzun adreslerini girin.",
|
"install_devices_macos_list_4": "DNS sekmesini seçin ve AdGuard Home sunucunuzun adreslerini girin.",
|
||||||
"install_devices_android_list_1": "Android Menüsü ana ekranından Ayarlar'a dokunun.",
|
"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_2": "Menüde bulunan Wi-Fi öğesine dokunun. Mevcut tüm ağlar listelenecektir (telefon 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_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 değiştirmeniz gerekir.",
|
"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_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_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).",
|
"install_devices_ios_list_2": "Sol menüde bulunan Wi-Fi bölümüne girin (telefon ağlar için özel DNS sunucusu ayarlanamaz).",
|
||||||
"install_devices_ios_list_3": "O anda aktif olan ağın adına dokunun.",
|
"install_devices_ios_list_3": "O anda aktif olan ağın adına dokunun.",
|
||||||
"install_devices_ios_list_4": "DNS alanına AdGuard Home sunucunuzun adreslerini girin.",
|
"install_devices_ios_list_4": "DNS alanına AdGuard Home sunucunuzun adreslerini girin.",
|
||||||
"get_started": "Başlayın",
|
"get_started": "Başlayın",
|
||||||
@@ -407,7 +413,7 @@
|
|||||||
"fix": "Düzelt",
|
"fix": "Düzelt",
|
||||||
"dns_providers": "Aralarından seçim yapabileceğiniz, bilinen <0>DNS sağlayıcıların listesi</0>.",
|
"dns_providers": "Aralarından seçim yapabileceğiniz, bilinen <0>DNS sağlayıcıların listesi</0>.",
|
||||||
"update_now": "Şimdi güncelle",
|
"update_now": "Şimdi güncelle",
|
||||||
"update_failed": "Otomatik güncelleme başarısız oldu. Elle güncellemek için lütfen <a>bu adımları izleyin</a>.",
|
"update_failed": "Otomatik güncellenemedi. Elle güncellemek için lütfen <a>bu adımları izleyin</a>.",
|
||||||
"manual_update": "Elle güncellemek için lütfen <a>bu adımları uygulayın</a>.",
|
"manual_update": "Elle güncellemek için lütfen <a>bu adımları uygulayın</a>.",
|
||||||
"processing_update": "Lütfen bekleyin, AdGuard Home güncelleniyor",
|
"processing_update": "Lütfen bekleyin, AdGuard Home güncelleniyor",
|
||||||
"clients_title": "Kalıcı istemciler",
|
"clients_title": "Kalıcı istemciler",
|
||||||
@@ -446,11 +452,12 @@
|
|||||||
"access_disallowed_title": "İzin verilmeyen istemciler",
|
"access_disallowed_title": "İzin verilmeyen istemciler",
|
||||||
"access_disallowed_desc": "CIDR'lerin, IP adreslerinin veya <a>İstemci Kimliklerin</a> listesi. Bu listede girişler varsa, AdGuard Home bu istemcilerden gelen istekleri keser. İzin verilen istemcilerde girişler varsa, bu alan yok sayılır.",
|
"access_disallowed_desc": "CIDR'lerin, IP adreslerinin veya <a>İstemci Kimliklerin</a> listesi. Bu listede girişler varsa, AdGuard Home bu istemcilerden gelen istekleri keser. İzin verilen istemcilerde girişler varsa, bu alan yok sayılır.",
|
||||||
"access_blocked_title": "İzin verilmeyen alan adları",
|
"access_blocked_title": "İzin verilmeyen alan adları",
|
||||||
"access_blocked_desc": "Bu işlem filtrelerle ilgili değildir. AdGuard Home, bu alan adlarından gelen DNS sorgularını yanıtsız bırakır ve bu sorgular sorgu günlüğünde görünmez. Tam alan adlarını, joker karakterleri veya URL filtre kurallarını belirtebilirsiniz, ör. \"example.org\", \"*.example.org\" veya \"||example.org^\".",
|
"access_blocked_desc": "Bu işlem filtrelerle ilgili değildir. AdGuard Home, bu alan adlarından gelen DNS sorgularını yanıtsız bırakır ve bu sorgular sorgu günlüğünde görünmez. Tam alan adlarını, joker karakterleri veya URL filtre kurallarını belirtebilirsiniz, örn. \"example.org\", \"*.example.org\" veya \"||example.org^\".",
|
||||||
"access_settings_saved": "Erişim ayarları başarıyla kaydedildi!",
|
"access_settings_saved": "Erişim ayarları başarıyla kaydedildi!",
|
||||||
"updates_checked": "AdGuard Home'un yeni bir sürümü mevcut",
|
"updates_checked": "AdGuard Home'un yeni bir sürümü mevcut",
|
||||||
"updates_version_equal": "AdGuard Home yazılımı güncel durumda",
|
"updates_version_equal": "AdGuard Home yazılımı güncel durumda",
|
||||||
"check_updates_now": "Güncellemeleri şimdi denetle",
|
"check_updates_now": "Güncellemeleri şimdi denetle",
|
||||||
|
"version_request_error": "Güncelleme denetimi başarısız. Lütfen internet bağlantınızı kontrol edin.",
|
||||||
"dns_privacy": "DNS Gizliliği",
|
"dns_privacy": "DNS Gizliliği",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> dizesini kullan.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> dizesini kullan.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> dizesini kullan.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> dizesini kullan.",
|
||||||
@@ -471,12 +478,14 @@
|
|||||||
"setup_dns_notice": "<1>DNS-over-HTTPS</1> veya <1>DNS-over-TLS</1> protokolünü kullanmak için AdGuard Home üzerinde <0>Şifreleme ayarları</0> bölümünden ayarları yapmanız gerekir.",
|
"setup_dns_notice": "<1>DNS-over-HTTPS</1> veya <1>DNS-over-TLS</1> protokolünü kullanmak için AdGuard Home üzerinde <0>Şifreleme ayarları</0> bölümünden ayarları yapmanız gerekir.",
|
||||||
"rewrite_added": "\"{{key}}\" için DNS yeniden yazımı başarıyla eklendi",
|
"rewrite_added": "\"{{key}}\" için DNS yeniden yazımı başarıyla eklendi",
|
||||||
"rewrite_deleted": "\"{{key}}\" için DNS yeniden yazımı başarıyla silindi",
|
"rewrite_deleted": "\"{{key}}\" için DNS yeniden yazımı başarıyla silindi",
|
||||||
|
"rewrite_updated": "DNS yeniden yazma başarıyla güncellendi",
|
||||||
"rewrite_add": "DNS yeniden yazımı ekle",
|
"rewrite_add": "DNS yeniden yazımı ekle",
|
||||||
|
"rewrite_edit": "DNS yeniden yazmayı düzenle",
|
||||||
"rewrite_not_found": "DNS yeniden yazımı bulunamadı",
|
"rewrite_not_found": "DNS yeniden yazımı bulunamadı",
|
||||||
"rewrite_confirm_delete": "\"{{key}}\" için DNS yeniden yazımını silmek istediğinize emin misiniz?",
|
"rewrite_confirm_delete": "\"{{key}}\" için DNS yeniden yazımını silmek istediğinize emin misiniz?",
|
||||||
"rewrite_desc": "Belirli bir alan adı için özel DNS yanıtını kolayca yapılandırmanızı sağlar.",
|
"rewrite_desc": "Belirli bir alan adı için özel DNS yanıtını kolayca yapılandırmanızı sağlar.",
|
||||||
"rewrite_applied": "Yeniden yazım kuralı uygulandı",
|
"rewrite_applied": "Yeniden yazım kuralı uygulandı",
|
||||||
"rewrite_hosts_applied": "Ana makine dosyası kuralı tarafından yeniden yazıldı",
|
"rewrite_hosts_applied": "Hosts dosyası kuralı tarafından yeniden yazıldı",
|
||||||
"dns_rewrites": "DNS yeniden yazımları",
|
"dns_rewrites": "DNS yeniden yazımları",
|
||||||
"form_domain": "Alan adı veya joker karakter girin",
|
"form_domain": "Alan adı veya joker karakter girin",
|
||||||
"form_answer": "IP adresi veya alan adı girin",
|
"form_answer": "IP adresi veya alan adı girin",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "İstatistik saklama süresini değiştirmek istediğinizden emin misiniz? Aralık değerini azaltırsanız, bazı veriler kaybolacaktır",
|
"statistics_retention_confirm": "İstatistik saklama süresini değiştirmek istediğinizden emin misiniz? Aralık değerini azaltırsanız, bazı veriler kaybolacaktır",
|
||||||
"statistics_cleared": "İstatistikler başarıyla temizlendi",
|
"statistics_cleared": "İstatistikler başarıyla temizlendi",
|
||||||
"statistics_enable": "İstatistikleri etkinleştir",
|
"statistics_enable": "İstatistikleri etkinleştir",
|
||||||
|
"ignore_domains": "Yok sayılan alan adları (yeni satırla ayrılmış)",
|
||||||
|
"ignore_domains_title": "Yok sayılan alan adları",
|
||||||
|
"ignore_domains_desc_stats": "Bu alan adları için yapılan sorgular istatistiklere yazılmaz",
|
||||||
|
"ignore_domains_desc_query": "Bu alan adları için yapılan sorgular sorgu günlüğüne yazılmaz",
|
||||||
"interval_hours": "{{count}} saat",
|
"interval_hours": "{{count}} saat",
|
||||||
"interval_hours_plural": "{{count}} saat",
|
"interval_hours_plural": "{{count}} saat",
|
||||||
"filters_configuration": "Filtre yapılandırması",
|
"filters_configuration": "Filtre yapılandırması",
|
||||||
@@ -539,7 +552,7 @@
|
|||||||
"network": "Ağ",
|
"network": "Ağ",
|
||||||
"descr": "Açıklama",
|
"descr": "Açıklama",
|
||||||
"whois": "WHOIS",
|
"whois": "WHOIS",
|
||||||
"filtering_rules_learn_more": "Kendi ana makine listelerinizi oluşturma hakkında <0>daha fazla bilgi edinin</0>.",
|
"filtering_rules_learn_more": "Kendi hosts listelerinizi oluşturma hakkında <0>daha fazla bilgi edinin</0>.",
|
||||||
"blocked_by_response": "Yanıt olarak CNAME veya IP tarafından engellendi",
|
"blocked_by_response": "Yanıt olarak CNAME veya IP tarafından engellendi",
|
||||||
"blocked_by_cname_or_ip": "CNAME veya IP tarafından engellendi",
|
"blocked_by_cname_or_ip": "CNAME veya IP tarafından engellendi",
|
||||||
"try_again": "Tekrar dene",
|
"try_again": "Tekrar dene",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Not:</0> IP anonimleştirme etkinleştirildi. Bunu <1>Genel ayarlardan</1> devre dışı bırakabilirsiniz.",
|
"anonymizer_notification": "<0>Not:</0> IP anonimleştirme etkinleştirildi. Bunu <1>Genel ayarlardan</1> devre dışı bırakabilirsiniz.",
|
||||||
"confirm_dns_cache_clear": "DNS önbelleğini temizlemek istediğinizden emin misiniz?",
|
"confirm_dns_cache_clear": "DNS önbelleğini temizlemek istediğinizden emin misiniz?",
|
||||||
"cache_cleared": "DNS önbelleği başarıyla temizlendi",
|
"cache_cleared": "DNS önbelleği başarıyla temizlendi",
|
||||||
"clear_cache": "Önbelleği temizle"
|
"clear_cache": "Önbelleği temizle",
|
||||||
|
"make_static": "Statik yap",
|
||||||
|
"theme_auto_desc": "Otomatik (cihazınızın renk düzenine göre)",
|
||||||
|
"theme_dark_desc": "Koyu tema",
|
||||||
|
"theme_light_desc": "Açık tema",
|
||||||
|
"disable_for_seconds": "{{count}} saniye için",
|
||||||
|
"disable_for_seconds_plural": "{{count}} saniye için",
|
||||||
|
"disable_for_minutes": "{{count}} dakika için",
|
||||||
|
"disable_for_minutes_plural": "{{count}} dakika için",
|
||||||
|
"disable_for_hours": "{{count}} saat için",
|
||||||
|
"disable_for_hours_plural": "{{count}} saat için",
|
||||||
|
"disable_until_tomorrow": "Yarına kadar",
|
||||||
|
"disable_notify_for_seconds": "Korumayı {{count}} saniyeliğine devre dışı bırak",
|
||||||
|
"disable_notify_for_seconds_plural": "Korumayı {{count}} saniyeliğine devre dışı bırak",
|
||||||
|
"disable_notify_for_minutes": "Korumayı {{count}} dakiklığına devre dışı bırak",
|
||||||
|
"disable_notify_for_minutes_plural": "Korumayı {{count}} dakiklığına devre dışı bırak",
|
||||||
|
"disable_notify_for_hours": "Korumayı {{count}} saatliğine devre dışı bırak",
|
||||||
|
"disable_notify_for_hours_plural": "Korumayı {{count}} saatliğine devre dışı bırak",
|
||||||
|
"disable_notify_until_tomorrow": "Korumayı yarına kadar devre dışı bırak",
|
||||||
|
"enable_protection_timer": "Koruma {{time}} içinde etkinleştirilecektir",
|
||||||
|
"custom_retention_input": "Saklama süresini saat olarak girin",
|
||||||
|
"custom_rotation_input": "Rotasyonu saat cinsinden girin",
|
||||||
|
"protection_section_label": "Koruma",
|
||||||
|
"log_and_stats_section_label": "Sorgu günlüğü ve istatistikler",
|
||||||
|
"ignore_query_log": "Sorgu günlüğünde bu istemciyi yoksay",
|
||||||
|
"ignore_statistics": "İstatistiklerde bu istemciyi yoksay"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "«Батьківський контроль» увімкнено",
|
"enabled_parental_toast": "«Батьківський контроль» увімкнено",
|
||||||
"disabled_safe_search_toast": "Безпечний пошук вимкнено",
|
"disabled_safe_search_toast": "Безпечний пошук вимкнено",
|
||||||
"enabled_save_search_toast": "Безпечний пошук увімкнено",
|
"enabled_save_search_toast": "Безпечний пошук увімкнено",
|
||||||
|
"updated_save_search_toast": "Налаштування Безпечного пошуку оновлено",
|
||||||
"enabled_table_header": "Увімкнено",
|
"enabled_table_header": "Увімкнено",
|
||||||
"name_table_header": "Назва",
|
"name_table_header": "Назва",
|
||||||
"list_url_table_header": "URL списку",
|
"list_url_table_header": "URL списку",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Обмеження швидкості",
|
"rate_limit": "Обмеження швидкості",
|
||||||
"edns_enable": "Увімкнути відправку EDNS Client Subnet",
|
"edns_enable": "Увімкнути відправку EDNS Client Subnet",
|
||||||
"edns_cs_desc": "Додавати параметр EDNS Client Subnet (ECS) до запитів до upstream-серверів, а також записувати в журнал значення, що надсилаються клієнтами.",
|
"edns_cs_desc": "Додавати параметр EDNS Client Subnet (ECS) до запитів до upstream-серверів, а також записувати в журнал значення, що надсилаються клієнтами.",
|
||||||
|
"edns_use_custom_ip": "Використання користувацької IP-адреси для EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Дозволити використовувати користувацьку IP-адресу для EDNS",
|
||||||
"rate_limit_desc": "Кількість запитів в секунду, які може робити один клієнт. Встановлене значення «0» означатиме необмежену кількість.",
|
"rate_limit_desc": "Кількість запитів в секунду, які може робити один клієнт. Встановлене значення «0» означатиме необмежену кількість.",
|
||||||
"blocking_ipv4_desc": "IP-адреса, яку потрібно видати для заблокованого A запиту",
|
"blocking_ipv4_desc": "IP-адреса, яку потрібно видати для заблокованого A запиту",
|
||||||
"blocking_ipv6_desc": "IP-адреса, яку потрібно видати для заблокованого АААА запиту",
|
"blocking_ipv6_desc": "IP-адреса, яку потрібно видати для заблокованого АААА запиту",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Відповісти з кодом NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Відповісти з кодом NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "Нульовий IP: Відповісти з нульовою IP-адресою (0.0.0.0 для A; :: для AAAA)",
|
"blocking_mode_null_ip": "Нульовий IP: Відповісти з нульовою IP-адресою (0.0.0.0 для A; :: для AAAA)",
|
||||||
"blocking_mode_custom_ip": "Спеціальна IP-адреса: Відповісти із вручну встановленою IP-адресою",
|
"blocking_mode_custom_ip": "Спеціальна IP-адреса: Відповісти із вручну встановленою IP-адресою",
|
||||||
|
"theme_auto": "Авто",
|
||||||
|
"theme_light": "Світла",
|
||||||
|
"theme_dark": "Темна",
|
||||||
"upstream_dns_client_desc": "Якщо це поле залишатиметься порожнім, AdGuard Home використовуватиме сервери, вказані в <0>налаштуваннях DNS</0>.",
|
"upstream_dns_client_desc": "Якщо це поле залишатиметься порожнім, AdGuard Home використовуватиме сервери, вказані в <0>налаштуваннях DNS</0>.",
|
||||||
"tracker_source": "Джерело відстежувача",
|
"tracker_source": "Джерело відстежувача",
|
||||||
"source_label": "Джерело",
|
"source_label": "Джерело",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Доступна нова версія AdGuard Home",
|
"updates_checked": "Доступна нова версія AdGuard Home",
|
||||||
"updates_version_equal": "AdGuard Home останньої версії",
|
"updates_version_equal": "AdGuard Home останньої версії",
|
||||||
"check_updates_now": "Перевірити наявність оновлень",
|
"check_updates_now": "Перевірити наявність оновлень",
|
||||||
|
"version_request_error": "Не вдалося перевірити оновлення. Будь ласка, перевірте з'єднання з інтернетом.",
|
||||||
"dns_privacy": "Конфіденційність DNS",
|
"dns_privacy": "Конфіденційність DNS",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS: </0>Використайте рядок <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS: </0>Використайте рядок <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Використайте рядок <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Використайте рядок <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Для використання <1>DNS-over-HTTPS</1> або <1>DNS-over-TLS</1>, вам потрібно <0>налаштувати Шифрування</0> в налаштуваннях AdGuard Home.",
|
"setup_dns_notice": "Для використання <1>DNS-over-HTTPS</1> або <1>DNS-over-TLS</1>, вам потрібно <0>налаштувати Шифрування</0> в налаштуваннях AdGuard Home.",
|
||||||
"rewrite_added": "Перезапис DNS для «{{key}}» успішно додано",
|
"rewrite_added": "Перезапис DNS для «{{key}}» успішно додано",
|
||||||
"rewrite_deleted": "Перезапис DNS для «{{key}}» успішно видалено",
|
"rewrite_deleted": "Перезапис DNS для «{{key}}» успішно видалено",
|
||||||
|
"rewrite_updated": "Перезапис DNS успішно оновлено",
|
||||||
"rewrite_add": "Додати перезапис DNS",
|
"rewrite_add": "Додати перезапис DNS",
|
||||||
|
"rewrite_edit": "Редагувати перезапис DNS",
|
||||||
"rewrite_not_found": "Перезаписів DNS не знайдено",
|
"rewrite_not_found": "Перезаписів DNS не знайдено",
|
||||||
"rewrite_confirm_delete": "Ви впевнені, що хочете видалити перезапис DNS для «{{key}}»?",
|
"rewrite_confirm_delete": "Ви впевнені, що хочете видалити перезапис DNS для «{{key}}»?",
|
||||||
"rewrite_desc": "Дозволяє легко налаштувати власну відповідь DNS для певного доменного імені.",
|
"rewrite_desc": "Дозволяє легко налаштувати власну відповідь DNS для певного доменного імені.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Ви впевнені, що хочете змінити тривалість статистики? Якщо зменшити значення інтервалу, деякі дані будуть втрачені",
|
"statistics_retention_confirm": "Ви впевнені, що хочете змінити тривалість статистики? Якщо зменшити значення інтервалу, деякі дані будуть втрачені",
|
||||||
"statistics_cleared": "Статистику успішно очищено",
|
"statistics_cleared": "Статистику успішно очищено",
|
||||||
"statistics_enable": "Увімкнути статистику",
|
"statistics_enable": "Увімкнути статистику",
|
||||||
|
"ignore_domains": "Ігноровані домени (по одному на рядок)",
|
||||||
|
"ignore_domains_title": "Ігноровані домени",
|
||||||
|
"ignore_domains_desc_stats": "Запити для цих доменів в статистику не пишуться",
|
||||||
|
"ignore_domains_desc_query": "Запити для цих доменів не записуються до журналу запитів",
|
||||||
"interval_hours": "{{count}} година",
|
"interval_hours": "{{count}} година",
|
||||||
"interval_hours_plural": "{{count}} годин(и)",
|
"interval_hours_plural": "{{count}} годин(и)",
|
||||||
"filters_configuration": "Конфігурація фільтрів",
|
"filters_configuration": "Конфігурація фільтрів",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>Примітка:</0> IP-анонімізацію ввімкнено. Ви можете вимкнути його в <1>Загальні налаштування</1> .",
|
"anonymizer_notification": "<0>Примітка:</0> IP-анонімізацію ввімкнено. Ви можете вимкнути його в <1>Загальні налаштування</1> .",
|
||||||
"confirm_dns_cache_clear": "Ви впевнені, що бажаєте очистити кеш DNS?",
|
"confirm_dns_cache_clear": "Ви впевнені, що бажаєте очистити кеш DNS?",
|
||||||
"cache_cleared": "Кеш DNS успішно очищено",
|
"cache_cleared": "Кеш DNS успішно очищено",
|
||||||
"clear_cache": "Очистити кеш"
|
"clear_cache": "Очистити кеш",
|
||||||
|
"make_static": "Зробити статичним",
|
||||||
|
"theme_auto_desc": "Автоматична (на основі теми вашого пристрою)",
|
||||||
|
"theme_dark_desc": "Темна тема",
|
||||||
|
"theme_light_desc": "Світла тема",
|
||||||
|
"disable_for_seconds": "На {{count}} секунду",
|
||||||
|
"disable_for_seconds_plural": "На {{count}} секунд",
|
||||||
|
"disable_for_minutes": "На {{count}} хвилину",
|
||||||
|
"disable_for_minutes_plural": "На {{count}} хвилин",
|
||||||
|
"disable_for_hours": "На {{count}} годину",
|
||||||
|
"disable_for_hours_plural": "На {{count}} годин",
|
||||||
|
"disable_until_tomorrow": "До завтра",
|
||||||
|
"disable_notify_for_seconds": "Вимкнення захисту на {{count}} секунду",
|
||||||
|
"disable_notify_for_seconds_plural": "Вимкнення захисту на {{count}} секунд",
|
||||||
|
"disable_notify_for_minutes": "Вимкнення захисту на {{count}} хвилину",
|
||||||
|
"disable_notify_for_minutes_plural": "Вимкнення захисту на {{count}} хвилин",
|
||||||
|
"disable_notify_for_hours": "Вимкнення захисту на {{count}} годину",
|
||||||
|
"disable_notify_for_hours_plural": "Вимкнення захисту на {{count}} годин",
|
||||||
|
"disable_notify_until_tomorrow": "Відключення захисту до завтра",
|
||||||
|
"enable_protection_timer": "Захист буде ввімкнено о {{time}}",
|
||||||
|
"custom_retention_input": "Введіть час в годинах",
|
||||||
|
"custom_rotation_input": "Введіть час в годинах",
|
||||||
|
"protection_section_label": "Захист",
|
||||||
|
"log_and_stats_section_label": "Журнал запитів і статистика",
|
||||||
|
"ignore_query_log": "Ігнорувати цей клієнт у журналі запитів",
|
||||||
|
"ignore_statistics": "Ігноруйте цей клієнт в статистиці"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Cài đặt máy khách",
|
"client_settings": "Cài đặt thiết bị",
|
||||||
"example_upstream_reserved": "ngược dòng <0>cho các miền cụ thể</0>;",
|
"example_upstream_reserved": "ngược dòng <0>cho các miền cụ thể</0>;",
|
||||||
"example_upstream_comment": "một lời bình luận.",
|
"example_upstream_comment": "một lời bình luận.",
|
||||||
"upstream_parallel": "Sử dụng truy vấn song song để tăng tốc độ giải quyết bằng cách truy vấn đồng thời tất cả các máy chủ ngược tuyến",
|
"upstream_parallel": "Sử dụng truy vấn song song để tăng tốc độ giải quyết bằng cách truy vấn đồng thời tất cả các máy chủ ngược tuyến",
|
||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "Đã bật quản lý của phụ huynh",
|
"enabled_parental_toast": "Đã bật quản lý của phụ huynh",
|
||||||
"disabled_safe_search_toast": "Đã tắt tìm kiếm an toàn",
|
"disabled_safe_search_toast": "Đã tắt tìm kiếm an toàn",
|
||||||
"enabled_save_search_toast": "Đã bật tìm kiếm an toàn",
|
"enabled_save_search_toast": "Đã bật tìm kiếm an toàn",
|
||||||
|
"updated_save_search_toast": "Cài đặt Tìm kiếm an toàn đã được cập nhật",
|
||||||
"enabled_table_header": "Kích hoạt",
|
"enabled_table_header": "Kích hoạt",
|
||||||
"name_table_header": "Tên",
|
"name_table_header": "Tên",
|
||||||
"list_url_table_header": "URL bộ lọc",
|
"list_url_table_header": "URL bộ lọc",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "Nhật ký truy vấn đã được xóa thành công",
|
"query_log_cleared": "Nhật ký truy vấn đã được xóa thành công",
|
||||||
"query_log_updated": "Cập nhật thành công nhật kí truy xuất",
|
"query_log_updated": "Cập nhật thành công nhật kí truy xuất",
|
||||||
"query_log_clear": "Xóa nhật ký truy vấn",
|
"query_log_clear": "Xóa nhật ký truy vấn",
|
||||||
"query_log_retention": "Lưu giữ nhật ký truy vấn",
|
"query_log_retention": "Xoay vòng nhật ký truy vấn",
|
||||||
"query_log_enable": "Bật nhật ký",
|
"query_log_enable": "Bật nhật ký",
|
||||||
"query_log_configuration": "Cấu hình nhật ký",
|
"query_log_configuration": "Cấu hình nhật ký",
|
||||||
"query_log_disabled": "Nhật ký truy vấn bị vô hiệu hóa và có thể được định cấu hình trong <0>cài đặt</ 0>",
|
"query_log_disabled": "Nhật ký truy vấn bị vô hiệu hóa và có thể được định cấu hình trong <0>cài đặt</ 0>",
|
||||||
"query_log_strict_search": "Sử dụng dấu ngoặc kép để tìm kiếm nghiêm ngặt",
|
"query_log_strict_search": "Sử dụng dấu ngoặc kép để tìm kiếm nghiêm ngặt",
|
||||||
"query_log_retention_confirm": "Bạn có chắc chắn muốn thay đổi lưu giữ nhật ký truy vấn? Nếu bạn giảm giá trị khoảng, một số dữ liệu sẽ bị mất",
|
"query_log_retention_confirm": "Bạn có chắc chắn muốn thay đổi xoay vòng nhật ký truy vấn không? Nếu bạn giảm giá trị khoảng thời gian, một số dữ liệu sẽ bị mất",
|
||||||
"anonymize_client_ip": "Ẩn danh IP khách",
|
"anonymize_client_ip": "Ẩn danh IP khách",
|
||||||
"anonymize_client_ip_desc": "Không lưu địa chỉ IP đầy đủ của khách hàng trong nhật ký và thống kê",
|
"anonymize_client_ip_desc": "Không lưu địa chỉ IP đầy đủ của khách hàng trong nhật ký và thống kê",
|
||||||
"dns_config": "Thiết lập máy chủ DNS",
|
"dns_config": "Thiết lập máy chủ DNS",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "Giới hạn yêu cầu",
|
"rate_limit": "Giới hạn yêu cầu",
|
||||||
"edns_enable": "Bật mạng con EDNS Client",
|
"edns_enable": "Bật mạng con EDNS Client",
|
||||||
"edns_cs_desc": "Thêm tùy chọn EDNS Client Subnet (ECS) vào các yêu cầu ngược dòng và ghi lại các giá trị được gửi bởi các máy khách trong nhật ký truy vấn.",
|
"edns_cs_desc": "Thêm tùy chọn EDNS Client Subnet (ECS) vào các yêu cầu ngược dòng và ghi lại các giá trị được gửi bởi các máy khách trong nhật ký truy vấn.",
|
||||||
|
"edns_use_custom_ip": "Sử dụng địa chỉ IP tùy chỉnh cho EDNS",
|
||||||
|
"edns_use_custom_ip_desc": "Cho phép sử dụng địa chỉ IP tùy chỉnh cho EDNS",
|
||||||
"rate_limit_desc": "Số lượng yêu cầu mỗi giây mà một khách hàng được phép thực hiện (0: không giới hạn)",
|
"rate_limit_desc": "Số lượng yêu cầu mỗi giây mà một khách hàng được phép thực hiện (0: không giới hạn)",
|
||||||
"blocking_ipv4_desc": "Địa chỉ IP được trả lại cho một yêu cầu A bị chặn",
|
"blocking_ipv4_desc": "Địa chỉ IP được trả lại cho một yêu cầu A bị chặn",
|
||||||
"blocking_ipv6_desc": "Địa chỉ IP được trả lại cho một yêu cầu AAA bị chặn",
|
"blocking_ipv6_desc": "Địa chỉ IP được trả lại cho một yêu cầu AAA bị chặn",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN: Phản hổi với mã NXDOMAIN",
|
"blocking_mode_nxdomain": "NXDOMAIN: Phản hổi với mã NXDOMAIN",
|
||||||
"blocking_mode_null_ip": "Null IP: Trả lời bằng không địa chỉ IP (0.0.0.0 cho A; :: cho AAAA)",
|
"blocking_mode_null_ip": "Null IP: Trả lời bằng không địa chỉ IP (0.0.0.0 cho A; :: cho AAAA)",
|
||||||
"blocking_mode_custom_ip": "IP tùy chỉnh: Phản hồi với địa chỉ IP đã được tiết lập",
|
"blocking_mode_custom_ip": "IP tùy chỉnh: Phản hồi với địa chỉ IP đã được tiết lập",
|
||||||
|
"theme_auto": "Tự động",
|
||||||
|
"theme_light": "Light theme",
|
||||||
|
"theme_dark": "Dark theme",
|
||||||
"upstream_dns_client_desc": "Nếu để trống trường này, AdGuardHome sẽ sử dụng nhũng máy chủ được cấu hình ở <0>Cấu hình DNS</0>.",
|
"upstream_dns_client_desc": "Nếu để trống trường này, AdGuardHome sẽ sử dụng nhũng máy chủ được cấu hình ở <0>Cấu hình DNS</0>.",
|
||||||
"tracker_source": "Nguồn theo dõi",
|
"tracker_source": "Nguồn theo dõi",
|
||||||
"source_label": "Nguồn",
|
"source_label": "Nguồn",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "Phiên bản mới của AdGuard Home có sẵn",
|
"updates_checked": "Phiên bản mới của AdGuard Home có sẵn",
|
||||||
"updates_version_equal": "AdGuard Home đã được cập nhật",
|
"updates_version_equal": "AdGuard Home đã được cập nhật",
|
||||||
"check_updates_now": "Kiểm tra cập nhật ngay bây giờ",
|
"check_updates_now": "Kiểm tra cập nhật ngay bây giờ",
|
||||||
|
"version_request_error": "Cập nhật không thành công. Hãy kiểm tra kết nối internet của bạn.",
|
||||||
"dns_privacy": "DNS Riêng Tư",
|
"dns_privacy": "DNS Riêng Tư",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "Để sử dụng <1>DNS-over-HTTPS</1> hoặc <1>DNS-over-TLS</1>, bạn cần <0>định cấu hình Mã hóa</0> trong cài đặt AdGuard Home.",
|
"setup_dns_notice": "Để sử dụng <1>DNS-over-HTTPS</1> hoặc <1>DNS-over-TLS</1>, bạn cần <0>định cấu hình Mã hóa</0> trong cài đặt AdGuard Home.",
|
||||||
"rewrite_added": "DNS viết lại cho \"{{key}}\" đã thêm thành công",
|
"rewrite_added": "DNS viết lại cho \"{{key}}\" đã thêm thành công",
|
||||||
"rewrite_deleted": "DNS viết lại cho \"{{key}}\" đã xóa thành công",
|
"rewrite_deleted": "DNS viết lại cho \"{{key}}\" đã xóa thành công",
|
||||||
|
"rewrite_updated": "Viết lại DNS được cập nhật thành công",
|
||||||
"rewrite_add": "Thêm DNS viết lại",
|
"rewrite_add": "Thêm DNS viết lại",
|
||||||
|
"rewrite_edit": "Chỉnh sửa viết lại DNS",
|
||||||
"rewrite_not_found": "Không tìm thấy DNS viết lại",
|
"rewrite_not_found": "Không tìm thấy DNS viết lại",
|
||||||
"rewrite_confirm_delete": "Bạn có chắc chắn muốn xóa DNS viết lại cho \"{{key}}\" không?",
|
"rewrite_confirm_delete": "Bạn có chắc chắn muốn xóa DNS viết lại cho \"{{key}}\" không?",
|
||||||
"rewrite_desc": "Cho phép dễ dàng định cấu hình tùy chỉnh DNS phản hồi cho một tên miền cụ thể.",
|
"rewrite_desc": "Cho phép dễ dàng định cấu hình tùy chỉnh DNS phản hồi cho một tên miền cụ thể.",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "Bạn có chắc chắn muốn thay đổi lưu giữ số liệu thống kê? Nếu bạn giảm giá trị khoảng, một số dữ liệu sẽ bị mất",
|
"statistics_retention_confirm": "Bạn có chắc chắn muốn thay đổi lưu giữ số liệu thống kê? Nếu bạn giảm giá trị khoảng, một số dữ liệu sẽ bị mất",
|
||||||
"statistics_cleared": "Xoá thống kê thành công",
|
"statistics_cleared": "Xoá thống kê thành công",
|
||||||
"statistics_enable": "Bật thống kê",
|
"statistics_enable": "Bật thống kê",
|
||||||
|
"ignore_domains": "Các miền bị bỏ qua (cách nhau bởi dòng mới)",
|
||||||
|
"ignore_domains_title": "Các miền bị bỏ qua",
|
||||||
|
"ignore_domains_desc_stats": "Các truy vấn cho các miền này sẽ không được ghi vào thống kê",
|
||||||
|
"ignore_domains_desc_query": "Các truy vấn cho các miền này sẽ không được ghi vào nhật ký truy vấn",
|
||||||
"interval_hours": "{{count}} giờ",
|
"interval_hours": "{{count}} giờ",
|
||||||
"interval_hours_plural": "{{count}} giờ",
|
"interval_hours_plural": "{{count}} giờ",
|
||||||
"filters_configuration": "Cấu hình bộ lọc",
|
"filters_configuration": "Cấu hình bộ lọc",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0> Lưu ý:</0> Tính năng ẩn danh IP được bật. Bạn có thể tắt nó trong <1> Cài đặt chung</1>.",
|
"anonymizer_notification": "<0> Lưu ý:</0> Tính năng ẩn danh IP được bật. Bạn có thể tắt nó trong <1> Cài đặt chung</1>.",
|
||||||
"confirm_dns_cache_clear": "Bạn có chắc chắn muốn xóa bộ đệm ẩn DNS không?",
|
"confirm_dns_cache_clear": "Bạn có chắc chắn muốn xóa bộ đệm ẩn DNS không?",
|
||||||
"cache_cleared": "Đã xóa thành công bộ đệm DNS",
|
"cache_cleared": "Đã xóa thành công bộ đệm DNS",
|
||||||
"clear_cache": "Xóa bộ nhớ cache"
|
"clear_cache": "Xóa bộ nhớ cache",
|
||||||
|
"make_static": "Chuyển sang tĩnh",
|
||||||
|
"theme_auto_desc": "Tự động (dựa trên chủ đề màu của thiết bị của bạn)",
|
||||||
|
"theme_dark_desc": "Chủ đề tối",
|
||||||
|
"theme_light_desc": "Chủ đề sáng",
|
||||||
|
"disable_for_seconds": "Trong {{count}} giây",
|
||||||
|
"disable_for_seconds_plural": "Trong {{count}} giây",
|
||||||
|
"disable_for_minutes": "Trong {{count}} phút",
|
||||||
|
"disable_for_minutes_plural": "Trong {{count}} phút",
|
||||||
|
"disable_for_hours": "Trong {{count}} giờ",
|
||||||
|
"disable_for_hours_plural": "Trong {{count}} giờ",
|
||||||
|
"disable_until_tomorrow": "Cho đến ngày mai",
|
||||||
|
"disable_notify_for_seconds": "Tắt bảo vệ trong {{count}} giây",
|
||||||
|
"disable_notify_for_seconds_plural": "Tắt bảo vệ trong {{count}} giây",
|
||||||
|
"disable_notify_for_minutes": "Tắt bảo vệ trong {{count}} phút",
|
||||||
|
"disable_notify_for_minutes_plural": "Tắt bảo vệ trong {{count}} phút",
|
||||||
|
"disable_notify_for_hours": "Tắt bảo vệ trong {{count}} giờ",
|
||||||
|
"disable_notify_for_hours_plural": "Tắt bảo vệ trong {{count}} giờ",
|
||||||
|
"disable_notify_until_tomorrow": "Vô hiệu hóa bảo vệ cho đến ngày mai",
|
||||||
|
"enable_protection_timer": "Bảo vệ sẽ được bật trong {{time}}",
|
||||||
|
"custom_retention_input": "Nhập thời gian giữ lại theo giờ",
|
||||||
|
"custom_rotation_input": "Nhập chu kỳ theo giờ",
|
||||||
|
"protection_section_label": "Sự bảo vệ",
|
||||||
|
"log_and_stats_section_label": "Nhật ký truy vấn và thống kê",
|
||||||
|
"ignore_query_log": "Bỏ qua máy khách này trong nhật ký truy vấn",
|
||||||
|
"ignore_statistics": "Bỏ qua máy khách này trong thống kê"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
"resolve_clients_title": "启用客户端的 IP 地址的反向解析",
|
"resolve_clients_title": "启用客户端的 IP 地址的反向解析",
|
||||||
"resolve_clients_desc": "通过发送 PTR 查询到对应的解析器 (本地客户端的私人 DNS 服务器,公共 IP 客户端的上游服务器) 将 IP 地址反向解析成其客户端主机名。",
|
"resolve_clients_desc": "通过发送 PTR 查询到对应的解析器 (本地客户端的私人 DNS 服务器,公共 IP 客户端的上游服务器) 将 IP 地址反向解析成其客户端主机名。",
|
||||||
"use_private_ptr_resolvers_title": "使用私人反向 DNS 解析器",
|
"use_private_ptr_resolvers_title": "使用私人反向 DNS 解析器",
|
||||||
"use_private_ptr_resolvers_desc": "使用这些上游服务器对本地服务的地址执行反向 DNS 查找。 如果禁用,则 AdGuard Home会以 NXDOMAIN 响应所有此类PTR请求,从 DHCP、/ etc / hosts 等获知的客户端除外。",
|
"use_private_ptr_resolvers_desc": "使用这些上游服务器对本地服务的地址执行反向 DNS 查找。 如果禁用,则 AdGuard Home 会以 NXDOMAIN 响应所有此类 PTR 请求,从 DHCP、/etc/hosts 等获知的客户端除外。",
|
||||||
"check_dhcp_servers": "检查 DHCP 服务器",
|
"check_dhcp_servers": "检查 DHCP 服务器",
|
||||||
"save_config": "保存配置",
|
"save_config": "保存配置",
|
||||||
"enabled_dhcp": "DHCP 服务器已启用",
|
"enabled_dhcp": "DHCP 服务器已启用",
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
"number_of_dns_query_days": "过去 {{count}} 天内处理的 DNS 查询总数",
|
"number_of_dns_query_days": "过去 {{count}} 天内处理的 DNS 查询总数",
|
||||||
"number_of_dns_query_days_plural": "在过去的 {{count}} 天内处理了多少个 DNS 查询",
|
"number_of_dns_query_days_plural": "在过去的 {{count}} 天内处理了多少个 DNS 查询",
|
||||||
"number_of_dns_query_24_hours": "过去 24 小时内处理的 DNS 请求总数",
|
"number_of_dns_query_24_hours": "过去 24 小时内处理的 DNS 请求总数",
|
||||||
"number_of_dns_query_blocked_24_hours": "被广告过滤器和 Hosts 拦截清单阻止的 DNS 请求总数",
|
"number_of_dns_query_blocked_24_hours": "被广告过滤器和 Hosts 黑名单阻止的 DNS 请求总数",
|
||||||
"number_of_dns_query_blocked_24_hours_by_sec": "被 AdGuard 安全浏览模块阻止的 DNS 请求总数",
|
"number_of_dns_query_blocked_24_hours_by_sec": "被 AdGuard 安全浏览模块阻止的 DNS 请求总数",
|
||||||
"number_of_dns_query_blocked_24_hours_adult": "被阻止的成人网站总数",
|
"number_of_dns_query_blocked_24_hours_adult": "被阻止的成人网站总数",
|
||||||
"enforced_save_search": "强制安全搜索",
|
"enforced_save_search": "强制安全搜索",
|
||||||
@@ -146,10 +146,10 @@
|
|||||||
"no_servers_specified": "未找到指定的服务器",
|
"no_servers_specified": "未找到指定的服务器",
|
||||||
"general_settings": "常规设置",
|
"general_settings": "常规设置",
|
||||||
"dns_settings": "DNS 设置",
|
"dns_settings": "DNS 设置",
|
||||||
"dns_blocklists": "DNS 拦截列表",
|
"dns_blocklists": "DNS 黑名单",
|
||||||
"dns_allowlists": "DNS 允许列表",
|
"dns_allowlists": "DNS 白名单",
|
||||||
"dns_blocklists_desc": "AdGuard Home将阻止匹配DNS拦截清单的域名",
|
"dns_blocklists_desc": "AdGuard Home将阻止匹配DNS拦截清单的域名",
|
||||||
"dns_allowlists_desc": "来自DNS允许列表的域将被允许,即使它们位于任意阻止列表中也是如此",
|
"dns_allowlists_desc": "来自 DNS 白名单的域名将被允许,即使它们位于任意黑名单中也是如此。",
|
||||||
"custom_filtering_rules": "自定义过滤规则",
|
"custom_filtering_rules": "自定义过滤规则",
|
||||||
"encryption_settings": "加密设置",
|
"encryption_settings": "加密设置",
|
||||||
"dhcp_settings": "DHCP 设置",
|
"dhcp_settings": "DHCP 设置",
|
||||||
@@ -167,33 +167,34 @@
|
|||||||
"enabled_parental_toast": "家长控制已启用",
|
"enabled_parental_toast": "家长控制已启用",
|
||||||
"disabled_safe_search_toast": "安全搜索已禁用",
|
"disabled_safe_search_toast": "安全搜索已禁用",
|
||||||
"enabled_save_search_toast": "安全搜索已启用",
|
"enabled_save_search_toast": "安全搜索已启用",
|
||||||
|
"updated_save_search_toast": "安全搜索设置更新成功",
|
||||||
"enabled_table_header": "已启用",
|
"enabled_table_header": "已启用",
|
||||||
"name_table_header": "名称",
|
"name_table_header": "名称",
|
||||||
"list_url_table_header": "清单网址",
|
"list_url_table_header": "清单网址",
|
||||||
"rules_count_table_header": "规则数",
|
"rules_count_table_header": "规则数",
|
||||||
"last_time_updated_table_header": "上次更新时间",
|
"last_time_updated_table_header": "上次更新时间",
|
||||||
"actions_table_header": "活跃状态",
|
"actions_table_header": "操作",
|
||||||
"request_table_header": "请求",
|
"request_table_header": "请求",
|
||||||
"edit_table_action": "编辑",
|
"edit_table_action": "编辑",
|
||||||
"delete_table_action": "删除",
|
"delete_table_action": "删除",
|
||||||
"elapsed": "耗时",
|
"elapsed": "耗时",
|
||||||
"filters_and_hosts_hint": "AdGuard Home 可以解析基础的 adblock 规则和 Hosts 语法。",
|
"filters_and_hosts_hint": "AdGuard Home 可以解析基础的 adblock 规则和 Hosts 语法。",
|
||||||
"no_blocklist_added": "未添加阻止列表",
|
"no_blocklist_added": "未添加黑名单",
|
||||||
"no_whitelist_added": "未添加允许列表",
|
"no_whitelist_added": "未添加白名单",
|
||||||
"add_blocklist": "添加阻止列表",
|
"add_blocklist": "添加黑名单",
|
||||||
"add_allowlist": "添加允许列表",
|
"add_allowlist": "添加白名单",
|
||||||
"cancel_btn": "取消",
|
"cancel_btn": "取消",
|
||||||
"enter_name_hint": "输入名称",
|
"enter_name_hint": "输入名称",
|
||||||
"enter_url_or_path_hint": "请输入URL或列表的绝对路径",
|
"enter_url_or_path_hint": "请输入URL或列表的绝对路径",
|
||||||
"check_updates_btn": "检查更新",
|
"check_updates_btn": "检查更新",
|
||||||
"new_blocklist": "新封锁清单",
|
"new_blocklist": "新封锁清单",
|
||||||
"new_allowlist": "新的允许清单",
|
"new_allowlist": "新增白名单",
|
||||||
"edit_blocklist": "编辑阻止列表",
|
"edit_blocklist": "编辑黑名单",
|
||||||
"edit_allowlist": "编辑允许列表",
|
"edit_allowlist": "编辑白名单",
|
||||||
"choose_blocklist": "选择拦截列表",
|
"choose_blocklist": "选择黑名单",
|
||||||
"choose_allowlist": "选择允许列表",
|
"choose_allowlist": "选择白名单",
|
||||||
"enter_valid_blocklist": "输入有效的阻止列表URL",
|
"enter_valid_blocklist": "输入有效的黑名单 URL",
|
||||||
"enter_valid_allowlist": "输入有效的允许列表URL",
|
"enter_valid_allowlist": "输入有效的白名单 URL",
|
||||||
"form_error_url_format": "无效的 URL 格式",
|
"form_error_url_format": "无效的 URL 格式",
|
||||||
"form_error_url_or_path_format": "无效的 URL 或列表的绝对路径",
|
"form_error_url_or_path_format": "无效的 URL 或列表的绝对路径",
|
||||||
"custom_filter_rules": "自定义过滤器规则",
|
"custom_filter_rules": "自定义过滤器规则",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "查询日志已成功清除",
|
"query_log_cleared": "查询日志已成功清除",
|
||||||
"query_log_updated": "已成功更新查询日志",
|
"query_log_updated": "已成功更新查询日志",
|
||||||
"query_log_clear": "清除查询日志",
|
"query_log_clear": "清除查询日志",
|
||||||
"query_log_retention": "查询记录保留时间",
|
"query_log_retention": "查询日志保留时间",
|
||||||
"query_log_enable": "启用日志",
|
"query_log_enable": "启用日志",
|
||||||
"query_log_configuration": "日志配置",
|
"query_log_configuration": "日志配置",
|
||||||
"query_log_disabled": "查询日志已禁用,在<0>这些设置</0>中能配置它们",
|
"query_log_disabled": "查询日志已禁用,在<0>这些设置</0>中能配置它们",
|
||||||
"query_log_strict_search": "使用双引号进行严谨搜索",
|
"query_log_strict_search": "使用双引号进行严谨搜索",
|
||||||
"query_log_retention_confirm": "您确定要更改查询记录保留时间吗? 如果您减少间隔时间的值, 某些数据可能会丢失。",
|
"query_log_retention_confirm": "您确定要更改查询记录保留时间吗?如果减少时间间隔数值,某些数据可能会丢失",
|
||||||
"anonymize_client_ip": "匿名化客户端IP",
|
"anonymize_client_ip": "匿名化客户端IP",
|
||||||
"anonymize_client_ip_desc": "不要在日志和统计信息中保存客户端的完整 IP 地址",
|
"anonymize_client_ip_desc": "不要在日志和统计信息中保存客户端的完整 IP 地址",
|
||||||
"dns_config": "DNS 服务配置",
|
"dns_config": "DNS 服务配置",
|
||||||
@@ -269,9 +270,9 @@
|
|||||||
"dns_cache_config_desc": "您可以在此处配置 DNS 缓存",
|
"dns_cache_config_desc": "您可以在此处配置 DNS 缓存",
|
||||||
"blocking_mode": "拦截模式",
|
"blocking_mode": "拦截模式",
|
||||||
"default": "默认",
|
"default": "默认",
|
||||||
"nxdomain": "无效域名",
|
"nxdomain": "NXDOMAIN",
|
||||||
"refused": "REFUSED",
|
"refused": "REFUSED",
|
||||||
"null_ip": "无效 IP",
|
"null_ip": "空 IP",
|
||||||
"custom_ip": "自定义 IP",
|
"custom_ip": "自定义 IP",
|
||||||
"blocking_ipv4": "拦截 IPv4",
|
"blocking_ipv4": "拦截 IPv4",
|
||||||
"blocking_ipv6": "拦截 IPv6",
|
"blocking_ipv6": "拦截 IPv6",
|
||||||
@@ -290,14 +291,19 @@
|
|||||||
"rate_limit": "速度限制",
|
"rate_limit": "速度限制",
|
||||||
"edns_enable": "启用 EDNS 客户端子网",
|
"edns_enable": "启用 EDNS 客户端子网",
|
||||||
"edns_cs_desc": "在上游请求中加入 EDNS 客户端子网(“EDNS Client Subnet”,即 ECS)选项,并在查询日志中记录客户端发送的数值。",
|
"edns_cs_desc": "在上游请求中加入 EDNS 客户端子网(“EDNS Client Subnet”,即 ECS)选项,并在查询日志中记录客户端发送的数值。",
|
||||||
|
"edns_use_custom_ip": "为 EDNS 使用自定义 IP",
|
||||||
|
"edns_use_custom_ip_desc": "允许为 EDNS 使用自定义 IP",
|
||||||
"rate_limit_desc": "每个客户端每秒钟查询次数的限制。设置为 0 意味着不限制。",
|
"rate_limit_desc": "每个客户端每秒钟查询次数的限制。设置为 0 意味着不限制。",
|
||||||
"blocking_ipv4_desc": "拦截 A 记录请求返回的 IP 地址",
|
"blocking_ipv4_desc": "拦截 A 记录请求返回的 IP 地址",
|
||||||
"blocking_ipv6_desc": "拦截 AAAA 记录请求返回的 IP 地址",
|
"blocking_ipv6_desc": "拦截 AAAA 记录请求返回的 IP 地址",
|
||||||
"blocking_mode_default": "默认:被 Adblock 规则拦截时反应为零 IP 地址(A记录:0.0.0.0;AAAA记录:::);被/etc/hosts 规则拦截时反应为规则中指定 IP 地址",
|
"blocking_mode_default": "默认:被 Adblock 规则拦截时反应为零 IP 地址(A记录:0.0.0.0;AAAA记录:::);被/etc/hosts 规则拦截时反应为规则中指定 IP 地址",
|
||||||
"blocking_mode_refused": "REFUSED:以 REFUSED 码响应请求",
|
"blocking_mode_refused": "REFUSED:以 REFUSED 码响应请求",
|
||||||
"blocking_mode_nxdomain": "NXDOMAIN:以NXDOMAIN码响应",
|
"blocking_mode_nxdomain": "NXDOMAIN:以NXDOMAIN码响应",
|
||||||
"blocking_mode_null_ip": "空IP:以零IP地址响应(A记录 0.0.0.0;AAAA记录 ::)",
|
"blocking_mode_null_ip": "空 IP:以零 IP 地址响应(A 记录 0.0.0.0;AAAA 记录 ::)",
|
||||||
"blocking_mode_custom_ip": "自定IP:以手动设置的IP地址响应",
|
"blocking_mode_custom_ip": "自定IP:以手动设置的IP地址响应",
|
||||||
|
"theme_auto": "自动",
|
||||||
|
"theme_light": "浅色主题",
|
||||||
|
"theme_dark": "深色主题",
|
||||||
"upstream_dns_client_desc": "如果将此字段留空,AdGuard Home 将使用在<0>DNS设置</0>中配置的服务器。",
|
"upstream_dns_client_desc": "如果将此字段留空,AdGuard Home 将使用在<0>DNS设置</0>中配置的服务器。",
|
||||||
"tracker_source": "追踪器来源",
|
"tracker_source": "追踪器来源",
|
||||||
"source_label": "源",
|
"source_label": "源",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "AdGuard Home 的新版本现在可用",
|
"updates_checked": "AdGuard Home 的新版本现在可用",
|
||||||
"updates_version_equal": "AdGuard Home已经是最新版本",
|
"updates_version_equal": "AdGuard Home已经是最新版本",
|
||||||
"check_updates_now": "立即检查更新",
|
"check_updates_now": "立即检查更新",
|
||||||
|
"version_request_error": "检查更新失败。请检查您的因特网连接。",
|
||||||
"dns_privacy": "DNS 隐私",
|
"dns_privacy": "DNS 隐私",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> 使用 <1>{{address}}</1> 字符串。",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> 使用 <1>{{address}}</1> 字符串。",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> 使用 <1>{{address}}</1> 字符串。",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> 使用 <1>{{address}}</1> 字符串。",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "为了使用 <1>DNS-over-HTTPS</1> 或者 <1>DNS-over-TLS</1> ,您需要在 AdGuard Home 设置中 <0>配置加密</0> 。",
|
"setup_dns_notice": "为了使用 <1>DNS-over-HTTPS</1> 或者 <1>DNS-over-TLS</1> ,您需要在 AdGuard Home 设置中 <0>配置加密</0> 。",
|
||||||
"rewrite_added": "已成功添加 \"{{key}}\" 的 DNS 重写",
|
"rewrite_added": "已成功添加 \"{{key}}\" 的 DNS 重写",
|
||||||
"rewrite_deleted": "已成功删除 \"{{key}}\" 的 DNS 重写",
|
"rewrite_deleted": "已成功删除 \"{{key}}\" 的 DNS 重写",
|
||||||
|
"rewrite_updated": "DNS 重写已成功更新",
|
||||||
"rewrite_add": "添加 DNS 重写",
|
"rewrite_add": "添加 DNS 重写",
|
||||||
|
"rewrite_edit": "编辑 DNS 重写",
|
||||||
"rewrite_not_found": "未找到 DNS 重写",
|
"rewrite_not_found": "未找到 DNS 重写",
|
||||||
"rewrite_confirm_delete": "您确定要删除 \"{{key}}\" 的 DNS 重写?",
|
"rewrite_confirm_delete": "您确定要删除 \"{{key}}\" 的 DNS 重写?",
|
||||||
"rewrite_desc": "可以轻松地为特定域名配置自定义 DNS 响应。",
|
"rewrite_desc": "可以轻松地为特定域名配置自定义 DNS 响应。",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "您确定要更改统计记录保留时间吗? 如果您减少间隔时间的值, 某些数据可能会丢失。",
|
"statistics_retention_confirm": "您确定要更改统计记录保留时间吗? 如果您减少间隔时间的值, 某些数据可能会丢失。",
|
||||||
"statistics_cleared": "统计数据已成功清除",
|
"statistics_cleared": "统计数据已成功清除",
|
||||||
"statistics_enable": "启用统计数据",
|
"statistics_enable": "启用统计数据",
|
||||||
|
"ignore_domains": "忽略的网域(以换行符分隔)",
|
||||||
|
"ignore_domains_title": "被忽略的网域",
|
||||||
|
"ignore_domains_desc_stats": "这些网域的查询不在统计信息",
|
||||||
|
"ignore_domains_desc_query": "这些网域的查询不在查询日志记录",
|
||||||
"interval_hours": "{{count}} 小时",
|
"interval_hours": "{{count}} 小时",
|
||||||
"interval_hours_plural": "{{count}} 小时",
|
"interval_hours_plural": "{{count}} 小时",
|
||||||
"filters_configuration": "过滤器配置",
|
"filters_configuration": "过滤器配置",
|
||||||
@@ -601,7 +614,7 @@
|
|||||||
"filtered": "已过滤",
|
"filtered": "已过滤",
|
||||||
"rewritten": "重写项",
|
"rewritten": "重写项",
|
||||||
"safe_search": "安全搜索",
|
"safe_search": "安全搜索",
|
||||||
"blocklist": "拦截列表",
|
"blocklist": "黑名单",
|
||||||
"milliseconds_abbreviation": "毫秒",
|
"milliseconds_abbreviation": "毫秒",
|
||||||
"cache_size": "缓存大小",
|
"cache_size": "缓存大小",
|
||||||
"cache_size_desc": "DNS 缓存大小(单位:字节)。要关闭缓存,请留空。",
|
"cache_size_desc": "DNS 缓存大小(单位:字节)。要关闭缓存,请留空。",
|
||||||
@@ -622,7 +635,7 @@
|
|||||||
"filter_category_general_desc": "在大多数设备上阻止跟踪和广告的列表",
|
"filter_category_general_desc": "在大多数设备上阻止跟踪和广告的列表",
|
||||||
"filter_category_security_desc": "专用于拦截恶意软件、钓鱼或欺诈域名的列表",
|
"filter_category_security_desc": "专用于拦截恶意软件、钓鱼或欺诈域名的列表",
|
||||||
"filter_category_regional_desc": "专注于区域广告和跟踪服务器的列表",
|
"filter_category_regional_desc": "专注于区域广告和跟踪服务器的列表",
|
||||||
"filter_category_other_desc": "其他阻止列表",
|
"filter_category_other_desc": "其他黑名单",
|
||||||
"setup_config_to_enable_dhcp_server": "设置配置以启用 DHCP 服务器",
|
"setup_config_to_enable_dhcp_server": "设置配置以启用 DHCP 服务器",
|
||||||
"original_response": "原始响应",
|
"original_response": "原始响应",
|
||||||
"click_to_view_queries": "点击查看查询",
|
"click_to_view_queries": "点击查看查询",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>注意:</0> IP 匿名化已启用。您可以在<1>常规设置</1>中禁用它。",
|
"anonymizer_notification": "<0>注意:</0> IP 匿名化已启用。您可以在<1>常规设置</1>中禁用它。",
|
||||||
"confirm_dns_cache_clear": "您确定要清除 DNS 缓存吗?",
|
"confirm_dns_cache_clear": "您确定要清除 DNS 缓存吗?",
|
||||||
"cache_cleared": "已成功清除 DNS 缓存",
|
"cache_cleared": "已成功清除 DNS 缓存",
|
||||||
"clear_cache": "清除缓存"
|
"clear_cache": "清除缓存",
|
||||||
|
"make_static": "静态化",
|
||||||
|
"theme_auto_desc": "自动(基于设备的配色方案)",
|
||||||
|
"theme_dark_desc": "暗黑主题",
|
||||||
|
"theme_light_desc": "浅色主题",
|
||||||
|
"disable_for_seconds": "{{count}} 秒",
|
||||||
|
"disable_for_seconds_plural": "{{count}} 秒",
|
||||||
|
"disable_for_minutes": "{{count}} 分钟",
|
||||||
|
"disable_for_minutes_plural": "{{count}} 分钟",
|
||||||
|
"disable_for_hours": "{{count}} 小时",
|
||||||
|
"disable_for_hours_plural": "{{count}} 小时",
|
||||||
|
"disable_until_tomorrow": "直到明天",
|
||||||
|
"disable_notify_for_seconds": "禁用保护 {{count}} 秒",
|
||||||
|
"disable_notify_for_seconds_plural": "禁用保护 {{count}} 秒",
|
||||||
|
"disable_notify_for_minutes": "禁用保护 {{count}} 分钟",
|
||||||
|
"disable_notify_for_minutes_plural": "禁用保护 {{count}} 分钟",
|
||||||
|
"disable_notify_for_hours": "禁用保护 {{count}} 小时",
|
||||||
|
"disable_notify_for_hours_plural": "禁用保护 {{count}} 小时",
|
||||||
|
"disable_notify_until_tomorrow": "禁用保护直到明天",
|
||||||
|
"enable_protection_timer": "保护将于 {{time}} 启用",
|
||||||
|
"custom_retention_input": "输入保留时间(小时)",
|
||||||
|
"custom_rotation_input": "输入旋转时间(小时)",
|
||||||
|
"protection_section_label": "防护",
|
||||||
|
"log_and_stats_section_label": "查询日志和统计数据",
|
||||||
|
"ignore_query_log": "在查询日志中忽略此客户端",
|
||||||
|
"ignore_statistics": "在统计数据中忽略此客户端"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,8 +38,6 @@
|
|||||||
"form_error_required": "必要欄位",
|
"form_error_required": "必要欄位",
|
||||||
"form_error_ip4_format": "無效的 IPv4 格式",
|
"form_error_ip4_format": "無效的 IPv4 格式",
|
||||||
"form_error_ip6_format": "無效的 IPv6 格式",
|
"form_error_ip6_format": "無效的 IPv6 格式",
|
||||||
"form_error_ip4_range_start_format": "無效的 IPv4 範圍起始位址",
|
|
||||||
"form_error_ip4_range_end_format": "無效的 IPv4 範圍結束位址",
|
|
||||||
"form_error_ip4_gateway_format": "閘道的 IPv4 位址無效",
|
"form_error_ip4_gateway_format": "閘道的 IPv4 位址無效",
|
||||||
"form_error_ip_format": "無效的 IP 位址",
|
"form_error_ip_format": "無效的 IP 位址",
|
||||||
"form_error_mac_format": "無效的 「MAC 位址」格式",
|
"form_error_mac_format": "無效的 「MAC 位址」格式",
|
||||||
@@ -50,6 +48,7 @@
|
|||||||
"out_of_range_error": "必須介於 \"{{start}}\" - \"{{end}}\" 範圍之外",
|
"out_of_range_error": "必須介於 \"{{start}}\" - \"{{end}}\" 範圍之外",
|
||||||
"lower_range_start_error": "必須小於起始值",
|
"lower_range_start_error": "必須小於起始值",
|
||||||
"greater_range_start_error": "必須大於起始值",
|
"greater_range_start_error": "必須大於起始值",
|
||||||
|
"gateway_or_subnet_invalid": "無效子網路",
|
||||||
"dhcp_form_gateway_input": "閘道 IP 位址",
|
"dhcp_form_gateway_input": "閘道 IP 位址",
|
||||||
"dhcp_form_subnet_input": "子網路遮罩",
|
"dhcp_form_subnet_input": "子網路遮罩",
|
||||||
"dhcp_form_range_title": "IP 位址範圍",
|
"dhcp_form_range_title": "IP 位址範圍",
|
||||||
@@ -197,6 +196,7 @@
|
|||||||
"form_error_url_or_path_format": "列表中含有的 URL 網址或絕對路徑",
|
"form_error_url_or_path_format": "列表中含有的 URL 網址或絕對路徑",
|
||||||
"custom_filter_rules": "自訂過濾規則",
|
"custom_filter_rules": "自訂過濾規則",
|
||||||
"custom_filter_rules_hint": "一行一條規則。您可以使用「adblock」語法或「hosts檔案」的語法。",
|
"custom_filter_rules_hint": "一行一條規則。您可以使用「adblock」語法或「hosts檔案」的語法。",
|
||||||
|
"system_host_files": "系統 hosts 檔案",
|
||||||
"examples_title": "範例",
|
"examples_title": "範例",
|
||||||
"example_meaning_filter_block": "封鎖對 example.org 網域及其所有子網域的存取",
|
"example_meaning_filter_block": "封鎖對 example.org 網域及其所有子網域的存取",
|
||||||
"example_meaning_filter_whitelist": "解除對 example.org 網域及其所有子網域存取封鎖",
|
"example_meaning_filter_whitelist": "解除對 example.org 網域及其所有子網域存取封鎖",
|
||||||
@@ -281,6 +281,8 @@
|
|||||||
"rate_limit": "速率限制",
|
"rate_limit": "速率限制",
|
||||||
"edns_enable": "啟用 EDNS Client Subnet",
|
"edns_enable": "啟用 EDNS Client Subnet",
|
||||||
"edns_cs_desc": "傳送用戶端的子網路給 DNS 伺服器。",
|
"edns_cs_desc": "傳送用戶端的子網路給 DNS 伺服器。",
|
||||||
|
"edns_use_custom_ip": "使用自訂 EDNS IP",
|
||||||
|
"edns_use_custom_ip_desc": "允許使用自訂 EDNS IP",
|
||||||
"rate_limit_desc": "限制單一裝置每秒發出的查詢次數(設定為 0 即表示無限制)",
|
"rate_limit_desc": "限制單一裝置每秒發出的查詢次數(設定為 0 即表示無限制)",
|
||||||
"blocking_ipv4_desc": "回覆指定 IPv4 位址給被封鎖的網域的 A 紀錄查詢",
|
"blocking_ipv4_desc": "回覆指定 IPv4 位址給被封鎖的網域的 A 紀錄查詢",
|
||||||
"blocking_ipv6_desc": "回覆指定 IPv6 位址給被封鎖的網域的 AAAA 紀錄查詢",
|
"blocking_ipv6_desc": "回覆指定 IPv6 位址給被封鎖的網域的 AAAA 紀錄查詢",
|
||||||
@@ -289,6 +291,9 @@
|
|||||||
"blocking_mode_nxdomain": "NXDOMAIN:回應 NXDOMAIN 狀態碼",
|
"blocking_mode_nxdomain": "NXDOMAIN:回應 NXDOMAIN 狀態碼",
|
||||||
"blocking_mode_null_ip": "Null IP:回應零值的 IP 位址(A 紀錄回應 0.0.0.0 ,AAAA 紀錄回應 ::)",
|
"blocking_mode_null_ip": "Null IP:回應零值的 IP 位址(A 紀錄回應 0.0.0.0 ,AAAA 紀錄回應 ::)",
|
||||||
"blocking_mode_custom_ip": "自訂 IP 位址:回應一個自訂的 IP 位址",
|
"blocking_mode_custom_ip": "自訂 IP 位址:回應一個自訂的 IP 位址",
|
||||||
|
"theme_auto": "自動",
|
||||||
|
"theme_light": "明亮",
|
||||||
|
"theme_dark": "深色",
|
||||||
"upstream_dns_client_desc": "如果您將此欄位留白,AdGuard Home 將使用 <0>DNS 設定</0> 內的設定的 DNS 伺服器。",
|
"upstream_dns_client_desc": "如果您將此欄位留白,AdGuard Home 將使用 <0>DNS 設定</0> 內的設定的 DNS 伺服器。",
|
||||||
"tracker_source": "追蹤器來源",
|
"tracker_source": "追蹤器來源",
|
||||||
"source_label": "來源",
|
"source_label": "來源",
|
||||||
@@ -399,6 +404,7 @@
|
|||||||
"dns_providers": "下列為常見的<0> DNS 伺服器</0>。",
|
"dns_providers": "下列為常見的<0> DNS 伺服器</0>。",
|
||||||
"update_now": "立即更新",
|
"update_now": "立即更新",
|
||||||
"update_failed": "自動更新發生錯誤。請嘗試依照<a>以下步驟</a> 來手動更新。",
|
"update_failed": "自動更新發生錯誤。請嘗試依照<a>以下步驟</a> 來手動更新。",
|
||||||
|
"manual_update": "請嘗試依照<a>下列步驟</a>來手動更新。",
|
||||||
"processing_update": "請稍候,AdGuard Home 正在更新",
|
"processing_update": "請稍候,AdGuard Home 正在更新",
|
||||||
"clients_title": "用戶端",
|
"clients_title": "用戶端",
|
||||||
"clients_desc": "對已連接到 AdGuard Home 的裝置進行設定",
|
"clients_desc": "對已連接到 AdGuard Home 的裝置進行設定",
|
||||||
@@ -507,6 +513,7 @@
|
|||||||
"statistics_clear_confirm": "您確定要清除統計資料嗎?",
|
"statistics_clear_confirm": "您確定要清除統計資料嗎?",
|
||||||
"statistics_retention_confirm": "您確定要更改統計資料保存時間嗎?如果您縮短期限部分資料可能將會遺失",
|
"statistics_retention_confirm": "您確定要更改統計資料保存時間嗎?如果您縮短期限部分資料可能將會遺失",
|
||||||
"statistics_cleared": "已清除統計資料",
|
"statistics_cleared": "已清除統計資料",
|
||||||
|
"statistics_enable": "啟用統計數據",
|
||||||
"interval_hours": "{{count}} 小時",
|
"interval_hours": "{{count}} 小時",
|
||||||
"interval_hours_plural": "{{count}} 小時",
|
"interval_hours_plural": "{{count}} 小時",
|
||||||
"filters_configuration": "過濾器設定",
|
"filters_configuration": "過濾器設定",
|
||||||
@@ -615,5 +622,22 @@
|
|||||||
"original_response": "原始回應",
|
"original_response": "原始回應",
|
||||||
"click_to_view_queries": "按一下以檢視查詢結果",
|
"click_to_view_queries": "按一下以檢視查詢結果",
|
||||||
"port_53_faq_link": "連接埠 53 經常被「DNSStubListener」或「systemd-resolved」服務佔用。請閱讀下列有關解決<0>這個問題</0>的說明",
|
"port_53_faq_link": "連接埠 53 經常被「DNSStubListener」或「systemd-resolved」服務佔用。請閱讀下列有關解決<0>這個問題</0>的說明",
|
||||||
"adg_will_drop_dns_queries": "AdGuard Home 將停止回應此用戶端的所有 DNS 查詢。"
|
"adg_will_drop_dns_queries": "AdGuard Home 將停止回應此用戶端的所有 DNS 查詢。",
|
||||||
|
"safe_browsing": "安全瀏覽",
|
||||||
|
"served_from_cache": "{{value}} <i>(由快取回應)</i>",
|
||||||
|
"form_error_password_length": "密碼必須至少 {{value}} 個字元長度",
|
||||||
|
"theme_dark_desc": "深色主題",
|
||||||
|
"theme_light_desc": "淺色主題",
|
||||||
|
"disable_for_seconds": "{{count}} 秒",
|
||||||
|
"disable_for_seconds_plural": "{{count}} 秒",
|
||||||
|
"disable_for_minutes": "{{count}} 分鐘",
|
||||||
|
"disable_for_minutes_plural": "{{count}} 分鐘",
|
||||||
|
"disable_for_hours": "{{count}} 小時",
|
||||||
|
"disable_for_hours_plural": "{{count}} 小時",
|
||||||
|
"disable_until_tomorrow": "直到明天",
|
||||||
|
"disable_notify_for_seconds": "暫停防護 {{count}} 秒",
|
||||||
|
"disable_notify_for_seconds_plural": "暫停防護 {{count}} 秒",
|
||||||
|
"disable_notify_for_minutes": "暫停防護 {{count}} 分鐘",
|
||||||
|
"disable_notify_for_minutes_plural": "暫停防護 {{count}} 分鐘",
|
||||||
|
"disable_notify_for_hours": "暫停防護 {{count}} 小時"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,7 @@
|
|||||||
"enabled_parental_toast": "已啟用家長控制",
|
"enabled_parental_toast": "已啟用家長控制",
|
||||||
"disabled_safe_search_toast": "已禁用安全搜尋",
|
"disabled_safe_search_toast": "已禁用安全搜尋",
|
||||||
"enabled_save_search_toast": "已啟用安全搜尋",
|
"enabled_save_search_toast": "已啟用安全搜尋",
|
||||||
|
"updated_save_search_toast": "安全搜尋設定更新成功",
|
||||||
"enabled_table_header": "已啟用",
|
"enabled_table_header": "已啟用",
|
||||||
"name_table_header": "名稱",
|
"name_table_header": "名稱",
|
||||||
"list_url_table_header": "清單網址",
|
"list_url_table_header": "清單網址",
|
||||||
@@ -256,12 +257,12 @@
|
|||||||
"query_log_cleared": "該查詢記錄已被成功地清除",
|
"query_log_cleared": "該查詢記錄已被成功地清除",
|
||||||
"query_log_updated": "該查詢記錄已被成功地更新",
|
"query_log_updated": "該查詢記錄已被成功地更新",
|
||||||
"query_log_clear": "清除查詢記錄",
|
"query_log_clear": "清除查詢記錄",
|
||||||
"query_log_retention": "查詢記錄保留",
|
"query_log_retention": "查詢記錄保留時間",
|
||||||
"query_log_enable": "啟用記錄",
|
"query_log_enable": "啟用記錄",
|
||||||
"query_log_configuration": "記錄配置",
|
"query_log_configuration": "記錄配置",
|
||||||
"query_log_disabled": "查詢記錄被禁用並可在<0>設定</0>中被配置",
|
"query_log_disabled": "查詢記錄被禁用並可在<0>設定</0>中被配置",
|
||||||
"query_log_strict_search": "使用雙引號於嚴謹的搜尋",
|
"query_log_strict_search": "使用雙引號於嚴謹的搜尋",
|
||||||
"query_log_retention_confirm": "您確定您想要更改查詢記錄保留嗎?如果您減少該間隔值,某些資料將被丟失",
|
"query_log_retention_confirm": "您確定要更改記錄檔保存期限嗎?如果您縮短期限部分資料可能將會遺失",
|
||||||
"anonymize_client_ip": "將用戶端 IP 匿名",
|
"anonymize_client_ip": "將用戶端 IP 匿名",
|
||||||
"anonymize_client_ip_desc": "不要儲存用戶端之完整的 IP 位址到記錄或統計資料裡",
|
"anonymize_client_ip_desc": "不要儲存用戶端之完整的 IP 位址到記錄或統計資料裡",
|
||||||
"dns_config": "DNS 伺服器配置",
|
"dns_config": "DNS 伺服器配置",
|
||||||
@@ -290,6 +291,8 @@
|
|||||||
"rate_limit": "速率限制",
|
"rate_limit": "速率限制",
|
||||||
"edns_enable": "啟用對於 DNS 的擴充機制(EDNS)用戶端子網路",
|
"edns_enable": "啟用對於 DNS 的擴充機制(EDNS)用戶端子網路",
|
||||||
"edns_cs_desc": "新增對於 DNS 的擴充機制(EDNS)用戶端子網路選項到上游的請求,並在查詢記錄中記錄由用戶端傳送的數值。",
|
"edns_cs_desc": "新增對於 DNS 的擴充機制(EDNS)用戶端子網路選項到上游的請求,並在查詢記錄中記錄由用戶端傳送的數值。",
|
||||||
|
"edns_use_custom_ip": "為 EDNS 使用自訂的 IP",
|
||||||
|
"edns_use_custom_ip_desc": "允許為 EDNS 使用自訂的 IP",
|
||||||
"rate_limit_desc": "每個用戶端被允許的每秒請求之數量。設定它為 0 表示無限制。",
|
"rate_limit_desc": "每個用戶端被允許的每秒請求之數量。設定它為 0 表示無限制。",
|
||||||
"blocking_ipv4_desc": "要被返回給已封鎖的 A 請求之 IP 位址",
|
"blocking_ipv4_desc": "要被返回給已封鎖的 A 請求之 IP 位址",
|
||||||
"blocking_ipv6_desc": "要被返回給已封鎖的 AAAA 請求之 IP 位址",
|
"blocking_ipv6_desc": "要被返回給已封鎖的 AAAA 請求之 IP 位址",
|
||||||
@@ -298,6 +301,9 @@
|
|||||||
"blocking_mode_nxdomain": "不存在的網域(NXDOMAIN):以 NXDOMAIN 碼回覆",
|
"blocking_mode_nxdomain": "不存在的網域(NXDOMAIN):以 NXDOMAIN 碼回覆",
|
||||||
"blocking_mode_null_ip": "無效的 IP:以零值 IP 位址(0.0.0.0 供 A;:: 供 AAAA)回覆",
|
"blocking_mode_null_ip": "無效的 IP:以零值 IP 位址(0.0.0.0 供 A;:: 供 AAAA)回覆",
|
||||||
"blocking_mode_custom_ip": "自訂的 IP:以一組手動地被設定的 IP 位址回覆",
|
"blocking_mode_custom_ip": "自訂的 IP:以一組手動地被設定的 IP 位址回覆",
|
||||||
|
"theme_auto": "自動",
|
||||||
|
"theme_light": "淺色",
|
||||||
|
"theme_dark": "深色",
|
||||||
"upstream_dns_client_desc": "如果您將此欄位留空,AdGuard Home 將使用在 <0>DNS 設定</0>中被配置的伺服器。",
|
"upstream_dns_client_desc": "如果您將此欄位留空,AdGuard Home 將使用在 <0>DNS 設定</0>中被配置的伺服器。",
|
||||||
"tracker_source": "追蹤器來源",
|
"tracker_source": "追蹤器來源",
|
||||||
"source_label": "來源",
|
"source_label": "來源",
|
||||||
@@ -451,6 +457,7 @@
|
|||||||
"updates_checked": "AdGuard Home 的新版本為可用的",
|
"updates_checked": "AdGuard Home 的新版本為可用的",
|
||||||
"updates_version_equal": "AdGuard Home 為最新的",
|
"updates_version_equal": "AdGuard Home 為最新的",
|
||||||
"check_updates_now": "立即檢查更新",
|
"check_updates_now": "立即檢查更新",
|
||||||
|
"version_request_error": "更新檢查已失敗。請檢查您的網際網路連線。",
|
||||||
"dns_privacy": "DNS 隱私",
|
"dns_privacy": "DNS 隱私",
|
||||||
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0>使用 <1>{{address}}</1> 字串。",
|
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0>使用 <1>{{address}}</1> 字串。",
|
||||||
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0>使用 <1>{{address}}</1> 字串。",
|
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0>使用 <1>{{address}}</1> 字串。",
|
||||||
@@ -471,7 +478,9 @@
|
|||||||
"setup_dns_notice": "為了使用 <1>DNS-over-HTTPS</1> 或 <1>DNS-over-TLS</1>,您需要在 AdGuard Home 設定裡<0>配置加密</0>。",
|
"setup_dns_notice": "為了使用 <1>DNS-over-HTTPS</1> 或 <1>DNS-over-TLS</1>,您需要在 AdGuard Home 設定裡<0>配置加密</0>。",
|
||||||
"rewrite_added": "對於 \"{{key}}\" 之 DNS 改寫被成功地加入",
|
"rewrite_added": "對於 \"{{key}}\" 之 DNS 改寫被成功地加入",
|
||||||
"rewrite_deleted": "對於 \"{{key}}\" 之 DNS 改寫被成功地刪除",
|
"rewrite_deleted": "對於 \"{{key}}\" 之 DNS 改寫被成功地刪除",
|
||||||
|
"rewrite_updated": "DNS 重寫已成功更新",
|
||||||
"rewrite_add": "新增 DNS 改寫",
|
"rewrite_add": "新增 DNS 改寫",
|
||||||
|
"rewrite_edit": "編輯 DNS 重寫",
|
||||||
"rewrite_not_found": "無已發現之 DNS 改寫",
|
"rewrite_not_found": "無已發現之 DNS 改寫",
|
||||||
"rewrite_confirm_delete": "您確定您想要刪除對於 \"{{key}}\" 之 DNS 改寫嗎?",
|
"rewrite_confirm_delete": "您確定您想要刪除對於 \"{{key}}\" 之 DNS 改寫嗎?",
|
||||||
"rewrite_desc": "允許輕易地配置自訂的 DNS 回應供特定的域名。",
|
"rewrite_desc": "允許輕易地配置自訂的 DNS 回應供特定的域名。",
|
||||||
@@ -519,6 +528,10 @@
|
|||||||
"statistics_retention_confirm": "您確定您想要更改統計資料保留嗎?如果您減少該間隔值,某些資料將被丟失",
|
"statistics_retention_confirm": "您確定您想要更改統計資料保留嗎?如果您減少該間隔值,某些資料將被丟失",
|
||||||
"statistics_cleared": "統計資料被成功地清除",
|
"statistics_cleared": "統計資料被成功地清除",
|
||||||
"statistics_enable": "啟用統計資料",
|
"statistics_enable": "啟用統計資料",
|
||||||
|
"ignore_domains": "忽略的網域(以換行符分隔)",
|
||||||
|
"ignore_domains_title": "被忽略的網域",
|
||||||
|
"ignore_domains_desc_stats": "這些網域的查詢不在統計資料",
|
||||||
|
"ignore_domains_desc_query": "這些網域的查詢不在查詢記錄",
|
||||||
"interval_hours": "{{count}} 小時",
|
"interval_hours": "{{count}} 小時",
|
||||||
"interval_hours_plural": "{{count}} 小時",
|
"interval_hours_plural": "{{count}} 小時",
|
||||||
"filters_configuration": "過濾器配置",
|
"filters_configuration": "過濾器配置",
|
||||||
@@ -638,5 +651,30 @@
|
|||||||
"anonymizer_notification": "<0>注意:</0>IP 匿名化被啟用。您可在<1>一般設定</1>中禁用它。",
|
"anonymizer_notification": "<0>注意:</0>IP 匿名化被啟用。您可在<1>一般設定</1>中禁用它。",
|
||||||
"confirm_dns_cache_clear": "您確定您想要清除 DNS 快取嗎?",
|
"confirm_dns_cache_clear": "您確定您想要清除 DNS 快取嗎?",
|
||||||
"cache_cleared": "DNS 快取被成功地清除",
|
"cache_cleared": "DNS 快取被成功地清除",
|
||||||
"clear_cache": "清除快取"
|
"clear_cache": "清除快取",
|
||||||
|
"make_static": "靜態化",
|
||||||
|
"theme_auto_desc": "自動(基於裝置的配色方案)",
|
||||||
|
"theme_dark_desc": "深色主題",
|
||||||
|
"theme_light_desc": "淺色主題",
|
||||||
|
"disable_for_seconds": "{{count}} 秒",
|
||||||
|
"disable_for_seconds_plural": "{{count}} 秒",
|
||||||
|
"disable_for_minutes": "{{count}} 分鐘",
|
||||||
|
"disable_for_minutes_plural": "{{count}} 分鐘",
|
||||||
|
"disable_for_hours": "{{count}} 小時",
|
||||||
|
"disable_for_hours_plural": "{{count}} 小時",
|
||||||
|
"disable_until_tomorrow": "直到明天",
|
||||||
|
"disable_notify_for_seconds": "計 {{count}} 秒禁用防護",
|
||||||
|
"disable_notify_for_seconds_plural": "計 {{count}} 秒禁用防護",
|
||||||
|
"disable_notify_for_minutes": "計 {{count}} 分鐘禁用防護",
|
||||||
|
"disable_notify_for_minutes_plural": "計 {{count}} 分鐘禁用防護",
|
||||||
|
"disable_notify_for_hours": "計 {{count}} 小時禁用防護",
|
||||||
|
"disable_notify_for_hours_plural": "計 {{count}} 小時禁用防護",
|
||||||
|
"disable_notify_until_tomorrow": "禁用防護直到明天",
|
||||||
|
"enable_protection_timer": "防護將於 {{time}} 被啟用",
|
||||||
|
"custom_retention_input": "輸入保留時間(小時)",
|
||||||
|
"custom_rotation_input": "輸入旋轉時間(小時)",
|
||||||
|
"protection_section_label": "防護",
|
||||||
|
"log_and_stats_section_label": "查詢記錄和統計資料",
|
||||||
|
"ignore_query_log": "在查詢記錄中忽略此用戶端",
|
||||||
|
"ignore_statistics": "在統計資料中忽略此用戶端"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,9 @@ export const setTlsConfig = (config) => async (dispatch, getState) => {
|
|||||||
|
|
||||||
const dnsStatus = await apiClient.getGlobalStatus();
|
const dnsStatus = await apiClient.getGlobalStatus();
|
||||||
if (dnsStatus) {
|
if (dnsStatus) {
|
||||||
|
if (dnsStatus.protection_disabled_duration === 0) {
|
||||||
|
dnsStatus.protection_disabled_duration = null;
|
||||||
|
}
|
||||||
dispatch(dnsStatusSuccess(dnsStatus));
|
dispatch(dnsStatusSuccess(dnsStatus));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,14 @@ import endsWith from 'lodash/endsWith';
|
|||||||
import escapeRegExp from 'lodash/escapeRegExp';
|
import escapeRegExp from 'lodash/escapeRegExp';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { compose } from 'redux';
|
import { compose } from 'redux';
|
||||||
import { splitByNewLine, sortClients, filterOutComments } from '../helpers/helpers';
|
import {
|
||||||
|
splitByNewLine,
|
||||||
|
sortClients,
|
||||||
|
filterOutComments,
|
||||||
|
msToSeconds,
|
||||||
|
msToMinutes,
|
||||||
|
msToHours,
|
||||||
|
} from '../helpers/helpers';
|
||||||
import {
|
import {
|
||||||
BLOCK_ACTIONS,
|
BLOCK_ACTIONS,
|
||||||
CHECK_TIMEOUT,
|
CHECK_TIMEOUT,
|
||||||
@@ -14,6 +21,7 @@ import {
|
|||||||
SETTINGS_NAMES,
|
SETTINGS_NAMES,
|
||||||
FORM_NAME,
|
FORM_NAME,
|
||||||
MANUAL_UPDATE_LINK,
|
MANUAL_UPDATE_LINK,
|
||||||
|
DISABLE_PROTECTION_TIMINGS,
|
||||||
} from '../helpers/constants';
|
} from '../helpers/constants';
|
||||||
import { areEqualVersions } from '../helpers/version';
|
import { areEqualVersions } from '../helpers/version';
|
||||||
import { getTlsStatus } from './encryption';
|
import { getTlsStatus } from './encryption';
|
||||||
@@ -24,6 +32,12 @@ import { getFilteringStatus, setRules } from './filtering';
|
|||||||
export const toggleSettingStatus = createAction('SETTING_STATUS_TOGGLE');
|
export const toggleSettingStatus = createAction('SETTING_STATUS_TOGGLE');
|
||||||
export const showSettingsFailure = createAction('SETTINGS_FAILURE_SHOW');
|
export const showSettingsFailure = createAction('SETTINGS_FAILURE_SHOW');
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {*} settingKey = SETTINGS_NAMES
|
||||||
|
* @param {*} status: boolean | SafeSearchConfig
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export const toggleSetting = (settingKey, status) => async (dispatch) => {
|
export const toggleSetting = (settingKey, status) => async (dispatch) => {
|
||||||
let successMessage = '';
|
let successMessage = '';
|
||||||
try {
|
try {
|
||||||
@@ -49,14 +63,9 @@ export const toggleSetting = (settingKey, status) => async (dispatch) => {
|
|||||||
dispatch(toggleSettingStatus({ settingKey }));
|
dispatch(toggleSettingStatus({ settingKey }));
|
||||||
break;
|
break;
|
||||||
case SETTINGS_NAMES.safesearch:
|
case SETTINGS_NAMES.safesearch:
|
||||||
if (status) {
|
successMessage = 'updated_save_search_toast';
|
||||||
successMessage = 'disabled_safe_search_toast';
|
await apiClient.updateSafesearch(status);
|
||||||
await apiClient.disableSafesearch();
|
dispatch(toggleSettingStatus({ settingKey, value: status }));
|
||||||
} else {
|
|
||||||
successMessage = 'enabled_save_search_toast';
|
|
||||||
await apiClient.enableSafesearch();
|
|
||||||
}
|
|
||||||
dispatch(toggleSettingStatus({ settingKey }));
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -71,7 +80,9 @@ export const initSettingsRequest = createAction('SETTINGS_INIT_REQUEST');
|
|||||||
export const initSettingsFailure = createAction('SETTINGS_INIT_FAILURE');
|
export const initSettingsFailure = createAction('SETTINGS_INIT_FAILURE');
|
||||||
export const initSettingsSuccess = createAction('SETTINGS_INIT_SUCCESS');
|
export const initSettingsSuccess = createAction('SETTINGS_INIT_SUCCESS');
|
||||||
|
|
||||||
export const initSettings = (settingsList) => async (dispatch) => {
|
export const initSettings = (settingsList = {
|
||||||
|
safebrowsing: {}, parental: {},
|
||||||
|
}) => async (dispatch) => {
|
||||||
dispatch(initSettingsRequest());
|
dispatch(initSettingsRequest());
|
||||||
try {
|
try {
|
||||||
const safebrowsingStatus = await apiClient.getSafebrowsingStatus();
|
const safebrowsingStatus = await apiClient.getSafebrowsingStatus();
|
||||||
@@ -80,7 +91,6 @@ export const initSettings = (settingsList) => async (dispatch) => {
|
|||||||
const {
|
const {
|
||||||
safebrowsing,
|
safebrowsing,
|
||||||
parental,
|
parental,
|
||||||
safesearch,
|
|
||||||
} = settingsList;
|
} = settingsList;
|
||||||
const newSettingsList = {
|
const newSettingsList = {
|
||||||
safebrowsing: {
|
safebrowsing: {
|
||||||
@@ -92,8 +102,7 @@ export const initSettings = (settingsList) => async (dispatch) => {
|
|||||||
enabled: parentalStatus.enabled,
|
enabled: parentalStatus.enabled,
|
||||||
},
|
},
|
||||||
safesearch: {
|
safesearch: {
|
||||||
...safesearch,
|
...safesearchStatus,
|
||||||
enabled: safesearchStatus.enabled,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
dispatch(initSettingsSuccess({ settingsList: newSettingsList }));
|
dispatch(initSettingsSuccess({ settingsList: newSettingsList }));
|
||||||
@@ -107,19 +116,54 @@ export const toggleProtectionRequest = createAction('TOGGLE_PROTECTION_REQUEST')
|
|||||||
export const toggleProtectionFailure = createAction('TOGGLE_PROTECTION_FAILURE');
|
export const toggleProtectionFailure = createAction('TOGGLE_PROTECTION_FAILURE');
|
||||||
export const toggleProtectionSuccess = createAction('TOGGLE_PROTECTION_SUCCESS');
|
export const toggleProtectionSuccess = createAction('TOGGLE_PROTECTION_SUCCESS');
|
||||||
|
|
||||||
export const toggleProtection = (status) => async (dispatch) => {
|
const getDisabledMessage = (time) => {
|
||||||
|
switch (time) {
|
||||||
|
case DISABLE_PROTECTION_TIMINGS.HALF_MINUTE:
|
||||||
|
return i18next.t(
|
||||||
|
'disable_notify_for_seconds',
|
||||||
|
{ count: msToSeconds(DISABLE_PROTECTION_TIMINGS.HALF_MINUTE) },
|
||||||
|
);
|
||||||
|
case DISABLE_PROTECTION_TIMINGS.MINUTE:
|
||||||
|
return i18next.t(
|
||||||
|
'disable_notify_for_minutes',
|
||||||
|
{ count: msToMinutes(DISABLE_PROTECTION_TIMINGS.MINUTE) },
|
||||||
|
);
|
||||||
|
case DISABLE_PROTECTION_TIMINGS.TEN_MINUTES:
|
||||||
|
return i18next.t(
|
||||||
|
'disable_notify_for_minutes',
|
||||||
|
{ count: msToMinutes(DISABLE_PROTECTION_TIMINGS.TEN_MINUTES) },
|
||||||
|
);
|
||||||
|
case DISABLE_PROTECTION_TIMINGS.HOUR:
|
||||||
|
return i18next.t(
|
||||||
|
'disable_notify_for_hours',
|
||||||
|
{ count: msToHours(DISABLE_PROTECTION_TIMINGS.HOUR) },
|
||||||
|
);
|
||||||
|
case DISABLE_PROTECTION_TIMINGS.TOMORROW:
|
||||||
|
return i18next.t('disable_notify_until_tomorrow');
|
||||||
|
default:
|
||||||
|
return 'disabled_protection';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const toggleProtection = (status, time = null) => async (dispatch) => {
|
||||||
dispatch(toggleProtectionRequest());
|
dispatch(toggleProtectionRequest());
|
||||||
try {
|
try {
|
||||||
const successMessage = status ? 'disabled_protection' : 'enabled_protection';
|
const successMessage = status ? getDisabledMessage(time) : 'enabled_protection';
|
||||||
await apiClient.setDnsConfig({ protection_enabled: !status });
|
await apiClient.setProtection({ enabled: !status, duration: time });
|
||||||
dispatch(addSuccessToast(successMessage));
|
dispatch(addSuccessToast(successMessage));
|
||||||
dispatch(toggleProtectionSuccess());
|
dispatch(toggleProtectionSuccess({ disabledDuration: time }));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
dispatch(addErrorToast({ error }));
|
dispatch(addErrorToast({ error }));
|
||||||
dispatch(toggleProtectionFailure());
|
dispatch(toggleProtectionFailure());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const setDisableDurationTime = createAction('SET_DISABLED_DURATION_TIME');
|
||||||
|
|
||||||
|
export const setProtectionTimerTime = (updatedTime) => async (dispatch) => {
|
||||||
|
dispatch(setDisableDurationTime({ timeToEnableProtection: updatedTime }));
|
||||||
|
};
|
||||||
|
|
||||||
export const getVersionRequest = createAction('GET_VERSION_REQUEST');
|
export const getVersionRequest = createAction('GET_VERSION_REQUEST');
|
||||||
export const getVersionFailure = createAction('GET_VERSION_FAILURE');
|
export const getVersionFailure = createAction('GET_VERSION_FAILURE');
|
||||||
export const getVersionSuccess = createAction('GET_VERSION_SUCCESS');
|
export const getVersionSuccess = createAction('GET_VERSION_SUCCESS');
|
||||||
@@ -141,7 +185,7 @@ export const getVersion = (recheck = false) => async (dispatch, getState) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
dispatch(addErrorToast({ error }));
|
dispatch(addErrorToast({ error: 'version_request_error' }));
|
||||||
dispatch(getVersionFailure());
|
dispatch(getVersionFailure());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -272,6 +316,9 @@ export const getDnsStatus = () => async (dispatch) => {
|
|||||||
|
|
||||||
const handleRequestSuccess = (response) => {
|
const handleRequestSuccess = (response) => {
|
||||||
const dnsStatus = response.data;
|
const dnsStatus = response.data;
|
||||||
|
if (dnsStatus.protection_disabled_duration === 0) {
|
||||||
|
dnsStatus.protection_disabled_duration = null;
|
||||||
|
}
|
||||||
const { running } = dnsStatus;
|
const { running } = dnsStatus;
|
||||||
const runningStatus = dnsStatus && running;
|
const runningStatus = dnsStatus && running;
|
||||||
if (runningStatus === true) {
|
if (runningStatus === true) {
|
||||||
@@ -363,18 +410,18 @@ export const changeLanguage = (lang) => async (dispatch) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getLanguageRequest = createAction('GET_LANGUAGE_REQUEST');
|
export const changeThemeRequest = createAction('CHANGE_THEME_REQUEST');
|
||||||
export const getLanguageFailure = createAction('GET_LANGUAGE_FAILURE');
|
export const changeThemeFailure = createAction('CHANGE_THEME_FAILURE');
|
||||||
export const getLanguageSuccess = createAction('GET_LANGUAGE_SUCCESS');
|
export const changeThemeSuccess = createAction('CHANGE_THEME_SUCCESS');
|
||||||
|
|
||||||
export const getLanguage = () => async (dispatch) => {
|
export const changeTheme = (theme) => async (dispatch) => {
|
||||||
dispatch(getLanguageRequest());
|
dispatch(changeThemeRequest());
|
||||||
try {
|
try {
|
||||||
const langSettings = await apiClient.getCurrentLanguage();
|
await apiClient.changeTheme({ theme });
|
||||||
dispatch(getLanguageSuccess(langSettings.language));
|
dispatch(changeThemeSuccess({ theme }));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
dispatch(addErrorToast({ error }));
|
dispatch(addErrorToast({ error }));
|
||||||
dispatch(getLanguageFailure());
|
dispatch(changeThemeFailure());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ export const getLogsConfigSuccess = createAction('GET_LOGS_CONFIG_SUCCESS');
|
|||||||
export const getLogsConfig = () => async (dispatch) => {
|
export const getLogsConfig = () => async (dispatch) => {
|
||||||
dispatch(getLogsConfigRequest());
|
dispatch(getLogsConfigRequest());
|
||||||
try {
|
try {
|
||||||
const data = await apiClient.getQueryLogInfo();
|
const data = await apiClient.getQueryLogConfig();
|
||||||
dispatch(getLogsConfigSuccess(data));
|
dispatch(getLogsConfigSuccess(data));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
dispatch(addErrorToast({ error }));
|
dispatch(addErrorToast({ error }));
|
||||||
|
|||||||
@@ -38,6 +38,29 @@ export const addRewrite = (config) => async (dispatch) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const updateRewriteRequest = createAction('UPDATE_REWRITE_REQUEST');
|
||||||
|
export const updateRewriteFailure = createAction('UPDATE_REWRITE_FAILURE');
|
||||||
|
export const updateRewriteSuccess = createAction('UPDATE_REWRITE_SUCCESS');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Object} config
|
||||||
|
* @param {string} config.target - current DNS rewrite value
|
||||||
|
* @param {string} config.update - updated DNS rewrite value
|
||||||
|
*/
|
||||||
|
export const updateRewrite = (config) => async (dispatch) => {
|
||||||
|
dispatch(updateRewriteRequest());
|
||||||
|
try {
|
||||||
|
await apiClient.updateRewrite(config);
|
||||||
|
dispatch(updateRewriteSuccess());
|
||||||
|
dispatch(toggleRewritesModal());
|
||||||
|
dispatch(getRewritesList());
|
||||||
|
dispatch(addSuccessToast(i18next.t('rewrite_updated', { key: config.domain })));
|
||||||
|
} catch (error) {
|
||||||
|
dispatch(addErrorToast({ error }));
|
||||||
|
dispatch(updateRewriteFailure());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export const deleteRewriteRequest = createAction('DELETE_REWRITE_REQUEST');
|
export const deleteRewriteRequest = createAction('DELETE_REWRITE_REQUEST');
|
||||||
export const deleteRewriteFailure = createAction('DELETE_REWRITE_FAILURE');
|
export const deleteRewriteFailure = createAction('DELETE_REWRITE_FAILURE');
|
||||||
export const deleteRewriteSuccess = createAction('DELETE_REWRITE_SUCCESS');
|
export const deleteRewriteSuccess = createAction('DELETE_REWRITE_SUCCESS');
|
||||||
|
|||||||
@@ -2,21 +2,6 @@ import { createAction } from 'redux-actions';
|
|||||||
import apiClient from '../api/Api';
|
import apiClient from '../api/Api';
|
||||||
import { addErrorToast, addSuccessToast } from './toasts';
|
import { addErrorToast, addSuccessToast } from './toasts';
|
||||||
|
|
||||||
export const getBlockedServicesAvailableServicesRequest = createAction('GET_BLOCKED_SERVICES_AVAILABLE_SERVICES_REQUEST');
|
|
||||||
export const getBlockedServicesAvailableServicesFailure = createAction('GET_BLOCKED_SERVICES_AVAILABLE_SERVICES_FAILURE');
|
|
||||||
export const getBlockedServicesAvailableServicesSuccess = createAction('GET_BLOCKED_SERVICES_AVAILABLE_SERVICES_SUCCESS');
|
|
||||||
|
|
||||||
export const getBlockedServicesAvailableServices = () => async (dispatch) => {
|
|
||||||
dispatch(getBlockedServicesAvailableServicesRequest());
|
|
||||||
try {
|
|
||||||
const data = await apiClient.getBlockedServicesAvailableServices();
|
|
||||||
dispatch(getBlockedServicesAvailableServicesSuccess(data));
|
|
||||||
} catch (error) {
|
|
||||||
dispatch(addErrorToast({ error }));
|
|
||||||
dispatch(getBlockedServicesAvailableServicesFailure());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getBlockedServicesRequest = createAction('GET_BLOCKED_SERVICES_REQUEST');
|
export const getBlockedServicesRequest = createAction('GET_BLOCKED_SERVICES_REQUEST');
|
||||||
export const getBlockedServicesFailure = createAction('GET_BLOCKED_SERVICES_FAILURE');
|
export const getBlockedServicesFailure = createAction('GET_BLOCKED_SERVICES_FAILURE');
|
||||||
export const getBlockedServicesSuccess = createAction('GET_BLOCKED_SERVICES_SUCCESS');
|
export const getBlockedServicesSuccess = createAction('GET_BLOCKED_SERVICES_SUCCESS');
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export const getStatsConfigSuccess = createAction('GET_STATS_CONFIG_SUCCESS');
|
|||||||
export const getStatsConfig = () => async (dispatch) => {
|
export const getStatsConfig = () => async (dispatch) => {
|
||||||
dispatch(getStatsConfigRequest());
|
dispatch(getStatsConfigRequest());
|
||||||
try {
|
try {
|
||||||
const data = await apiClient.getStatsInfo();
|
const data = await apiClient.getStatsConfig();
|
||||||
dispatch(getStatsConfigSuccess(data));
|
dispatch(getStatsConfigSuccess(data));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
dispatch(addErrorToast({ error }));
|
dispatch(addErrorToast({ error }));
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
|
||||||
import { getPathWithQueryString } from '../helpers/helpers';
|
import { getPathWithQueryString } from '../helpers/helpers';
|
||||||
import { QUERY_LOGS_PAGE_LIMIT, HTML_PAGES, R_PATH_LAST_PART } from '../helpers/constants';
|
import {
|
||||||
|
QUERY_LOGS_PAGE_LIMIT, HTML_PAGES, R_PATH_LAST_PART, THEMES,
|
||||||
|
} from '../helpers/constants';
|
||||||
import { BASE_URL } from '../../constants';
|
import { BASE_URL } from '../../constants';
|
||||||
|
import i18n from '../i18n';
|
||||||
|
import { LANGUAGES } from '../helpers/twosky';
|
||||||
|
|
||||||
class Api {
|
class Api {
|
||||||
baseUrl = BASE_URL;
|
baseUrl = BASE_URL;
|
||||||
@@ -204,41 +208,57 @@ class Api {
|
|||||||
// Safesearch
|
// Safesearch
|
||||||
SAFESEARCH_STATUS = { path: 'safesearch/status', method: 'GET' };
|
SAFESEARCH_STATUS = { path: 'safesearch/status', method: 'GET' };
|
||||||
|
|
||||||
SAFESEARCH_ENABLE = { path: 'safesearch/enable', method: 'POST' };
|
SAFESEARCH_UPDATE = { path: 'safesearch/settings', method: 'PUT' };
|
||||||
|
|
||||||
SAFESEARCH_DISABLE = { path: 'safesearch/disable', method: 'POST' };
|
|
||||||
|
|
||||||
getSafesearchStatus() {
|
getSafesearchStatus() {
|
||||||
const { path, method } = this.SAFESEARCH_STATUS;
|
const { path, method } = this.SAFESEARCH_STATUS;
|
||||||
return this.makeRequest(path, method);
|
return this.makeRequest(path, method);
|
||||||
}
|
}
|
||||||
|
|
||||||
enableSafesearch() {
|
/**
|
||||||
const { path, method } = this.SAFESEARCH_ENABLE;
|
* interface SafeSearchConfig {
|
||||||
return this.makeRequest(path, method);
|
"enabled": boolean,
|
||||||
|
"bing": boolean,
|
||||||
|
"duckduckgo": boolean,
|
||||||
|
"google": boolean,
|
||||||
|
"pixabay": boolean,
|
||||||
|
"yandex": boolean,
|
||||||
|
"youtube": boolean
|
||||||
|
* }
|
||||||
|
* @param {*} data - SafeSearchConfig
|
||||||
|
* @returns 200 ok
|
||||||
|
*/
|
||||||
|
updateSafesearch(data) {
|
||||||
|
const { path, method } = this.SAFESEARCH_UPDATE;
|
||||||
|
return this.makeRequest(path, method, { data });
|
||||||
}
|
}
|
||||||
|
|
||||||
disableSafesearch() {
|
// enableSafesearch() {
|
||||||
const { path, method } = this.SAFESEARCH_DISABLE;
|
// const { path, method } = this.SAFESEARCH_ENABLE;
|
||||||
return this.makeRequest(path, method);
|
// return this.makeRequest(path, method);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
// disableSafesearch() {
|
||||||
|
// const { path, method } = this.SAFESEARCH_DISABLE;
|
||||||
|
// return this.makeRequest(path, method);
|
||||||
|
// }
|
||||||
|
|
||||||
// Language
|
// Language
|
||||||
CURRENT_LANGUAGE = { path: 'i18n/current_language', method: 'GET' };
|
|
||||||
|
|
||||||
CHANGE_LANGUAGE = { path: 'i18n/change_language', method: 'POST' };
|
async changeLanguage(config) {
|
||||||
|
const profile = await this.getProfile();
|
||||||
|
profile.language = config.language;
|
||||||
|
|
||||||
getCurrentLanguage() {
|
return this.setProfile(profile);
|
||||||
const { path, method } = this.CURRENT_LANGUAGE;
|
|
||||||
return this.makeRequest(path, method);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
changeLanguage(config) {
|
// Theme
|
||||||
const { path, method } = this.CHANGE_LANGUAGE;
|
|
||||||
const parameters = {
|
async changeTheme(config) {
|
||||||
data: config,
|
const profile = await this.getProfile();
|
||||||
};
|
profile.theme = config.theme;
|
||||||
return this.makeRequest(path, method, parameters);
|
|
||||||
|
return this.setProfile(profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
// DHCP
|
// DHCP
|
||||||
@@ -435,6 +455,8 @@ class Api {
|
|||||||
|
|
||||||
REWRITE_ADD = { path: 'rewrite/add', method: 'POST' };
|
REWRITE_ADD = { path: 'rewrite/add', method: 'POST' };
|
||||||
|
|
||||||
|
REWRITE_UPDATE = { path: 'rewrite/update', method: 'PUT' };
|
||||||
|
|
||||||
REWRITE_DELETE = { path: 'rewrite/delete', method: 'POST' };
|
REWRITE_DELETE = { path: 'rewrite/delete', method: 'POST' };
|
||||||
|
|
||||||
getRewritesList() {
|
getRewritesList() {
|
||||||
@@ -450,6 +472,14 @@ class Api {
|
|||||||
return this.makeRequest(path, method, parameters);
|
return this.makeRequest(path, method, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateRewrite(config) {
|
||||||
|
const { path, method } = this.REWRITE_UPDATE;
|
||||||
|
const parameters = {
|
||||||
|
data: config,
|
||||||
|
};
|
||||||
|
return this.makeRequest(path, method, parameters);
|
||||||
|
}
|
||||||
|
|
||||||
deleteRewrite(config) {
|
deleteRewrite(config) {
|
||||||
const { path, method } = this.REWRITE_DELETE;
|
const { path, method } = this.REWRITE_DELETE;
|
||||||
const parameters = {
|
const parameters = {
|
||||||
@@ -459,19 +489,12 @@ class Api {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Blocked services
|
// Blocked services
|
||||||
BLOCKED_SERVICES_SERVICES = { path: 'blocked_services/services', method: 'GET' };
|
|
||||||
|
|
||||||
BLOCKED_SERVICES_LIST = { path: 'blocked_services/list', method: 'GET' };
|
BLOCKED_SERVICES_LIST = { path: 'blocked_services/list', method: 'GET' };
|
||||||
|
|
||||||
BLOCKED_SERVICES_SET = { path: 'blocked_services/set', method: 'POST' };
|
BLOCKED_SERVICES_SET = { path: 'blocked_services/set', method: 'POST' };
|
||||||
|
|
||||||
BLOCKED_SERVICES_ALL = { path: 'blocked_services/all', method: 'GET' };
|
BLOCKED_SERVICES_ALL = { path: 'blocked_services/all', method: 'GET' };
|
||||||
|
|
||||||
getBlockedServicesAvailableServices() {
|
|
||||||
const { path, method } = this.BLOCKED_SERVICES_SERVICES;
|
|
||||||
return this.makeRequest(path, method);
|
|
||||||
}
|
|
||||||
|
|
||||||
getAllBlockedServices() {
|
getAllBlockedServices() {
|
||||||
const { path, method } = this.BLOCKED_SERVICES_ALL;
|
const { path, method } = this.BLOCKED_SERVICES_ALL;
|
||||||
return this.makeRequest(path, method);
|
return this.makeRequest(path, method);
|
||||||
@@ -493,9 +516,9 @@ class Api {
|
|||||||
// Settings for statistics
|
// Settings for statistics
|
||||||
GET_STATS = { path: 'stats', method: 'GET' };
|
GET_STATS = { path: 'stats', method: 'GET' };
|
||||||
|
|
||||||
STATS_INFO = { path: 'stats_info', method: 'GET' };
|
GET_STATS_CONFIG = { path: 'stats/config', method: 'GET' };
|
||||||
|
|
||||||
STATS_CONFIG = { path: 'stats_config', method: 'POST' };
|
UPDATE_STATS_CONFIG = { path: 'stats/config/update', method: 'PUT' };
|
||||||
|
|
||||||
STATS_RESET = { path: 'stats_reset', method: 'POST' };
|
STATS_RESET = { path: 'stats_reset', method: 'POST' };
|
||||||
|
|
||||||
@@ -504,13 +527,13 @@ class Api {
|
|||||||
return this.makeRequest(path, method);
|
return this.makeRequest(path, method);
|
||||||
}
|
}
|
||||||
|
|
||||||
getStatsInfo() {
|
getStatsConfig() {
|
||||||
const { path, method } = this.STATS_INFO;
|
const { path, method } = this.GET_STATS_CONFIG;
|
||||||
return this.makeRequest(path, method);
|
return this.makeRequest(path, method);
|
||||||
}
|
}
|
||||||
|
|
||||||
setStatsConfig(data) {
|
setStatsConfig(data) {
|
||||||
const { path, method } = this.STATS_CONFIG;
|
const { path, method } = this.UPDATE_STATS_CONFIG;
|
||||||
const config = {
|
const config = {
|
||||||
data,
|
data,
|
||||||
};
|
};
|
||||||
@@ -525,9 +548,9 @@ class Api {
|
|||||||
// Query log
|
// Query log
|
||||||
GET_QUERY_LOG = { path: 'querylog', method: 'GET' };
|
GET_QUERY_LOG = { path: 'querylog', method: 'GET' };
|
||||||
|
|
||||||
QUERY_LOG_CONFIG = { path: 'querylog_config', method: 'POST' };
|
UPDATE_QUERY_LOG_CONFIG = { path: 'querylog/config/update', method: 'PUT' };
|
||||||
|
|
||||||
QUERY_LOG_INFO = { path: 'querylog_info', method: 'GET' };
|
GET_QUERY_LOG_CONFIG = { path: 'querylog/config', method: 'GET' };
|
||||||
|
|
||||||
QUERY_LOG_CLEAR = { path: 'querylog_clear', method: 'POST' };
|
QUERY_LOG_CLEAR = { path: 'querylog_clear', method: 'POST' };
|
||||||
|
|
||||||
@@ -539,13 +562,13 @@ class Api {
|
|||||||
return this.makeRequest(url, method);
|
return this.makeRequest(url, method);
|
||||||
}
|
}
|
||||||
|
|
||||||
getQueryLogInfo() {
|
getQueryLogConfig() {
|
||||||
const { path, method } = this.QUERY_LOG_INFO;
|
const { path, method } = this.GET_QUERY_LOG_CONFIG;
|
||||||
return this.makeRequest(path, method);
|
return this.makeRequest(path, method);
|
||||||
}
|
}
|
||||||
|
|
||||||
setQueryLogConfig(data) {
|
setQueryLogConfig(data) {
|
||||||
const { path, method } = this.QUERY_LOG_CONFIG;
|
const { path, method } = this.UPDATE_QUERY_LOG_CONFIG;
|
||||||
const config = {
|
const config = {
|
||||||
data,
|
data,
|
||||||
};
|
};
|
||||||
@@ -571,11 +594,24 @@ class Api {
|
|||||||
// Profile
|
// Profile
|
||||||
GET_PROFILE = { path: 'profile', method: 'GET' };
|
GET_PROFILE = { path: 'profile', method: 'GET' };
|
||||||
|
|
||||||
|
UPDATE_PROFILE = { path: 'profile/update', method: 'PUT' };
|
||||||
|
|
||||||
getProfile() {
|
getProfile() {
|
||||||
const { path, method } = this.GET_PROFILE;
|
const { path, method } = this.GET_PROFILE;
|
||||||
return this.makeRequest(path, method);
|
return this.makeRequest(path, method);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setProfile(data) {
|
||||||
|
const theme = data.theme ? data.theme : THEMES.auto;
|
||||||
|
const defaultLanguage = i18n.language ? i18n.language : LANGUAGES.en;
|
||||||
|
const language = data.language ? data.language : defaultLanguage;
|
||||||
|
|
||||||
|
const { path, method } = this.UPDATE_PROFILE;
|
||||||
|
const config = { data: { theme, language } };
|
||||||
|
|
||||||
|
return this.makeRequest(path, method, config);
|
||||||
|
}
|
||||||
|
|
||||||
// DNS config
|
// DNS config
|
||||||
GET_DNS_CONFIG = { path: 'dns_info', method: 'GET' };
|
GET_DNS_CONFIG = { path: 'dns_info', method: 'GET' };
|
||||||
|
|
||||||
@@ -594,6 +630,15 @@ class Api {
|
|||||||
return this.makeRequest(path, method, config);
|
return this.makeRequest(path, method, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SET_PROTECTION = { path: 'protection', method: 'POST' };
|
||||||
|
|
||||||
|
setProtection(data) {
|
||||||
|
const { enabled, duration } = data;
|
||||||
|
const { path, method } = this.SET_PROTECTION;
|
||||||
|
|
||||||
|
return this.makeRequest(path, method, { data: { enabled, duration } });
|
||||||
|
}
|
||||||
|
|
||||||
// Cache
|
// Cache
|
||||||
CLEAR_CACHE = { path: 'cache_clear', method: 'POST' };
|
CLEAR_CACHE = { path: 'cache_clear', method: 'POST' };
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,74 @@
|
|||||||
:root {
|
:root {
|
||||||
|
--black: #131313;
|
||||||
|
--bgcolor: #f5f7fb;
|
||||||
|
--mcolor: #495057;
|
||||||
|
--scolor: rgba(74, 74, 74, 0.7);
|
||||||
|
--border-color: rgba(0, 40, 100, 0.12);
|
||||||
|
--header-bgcolor: #fff;
|
||||||
|
--card-bgcolor: #fff;
|
||||||
|
--card-border-color: rgba(0, 40, 100, 0.12);
|
||||||
|
--ctrl-bgcolor: #fff;
|
||||||
|
--ctrl-select-bgcolor: rgba(69, 79, 94, 0.12);
|
||||||
|
--ctrl-dropdown-color: #212529;
|
||||||
|
--ctrl-dropdown-bgcolor-focus: #f8f9fa;
|
||||||
|
--ctrl-dropdown-color-focus: #16181b;
|
||||||
|
--btn-success-bgcolor: #5eba00;
|
||||||
|
--form-disabled-bgcolor: #f8f9fa;
|
||||||
|
--form-disabled-color: #495057;
|
||||||
|
--rt-nodata-bgcolor: rgba(255,255,255,0.8);
|
||||||
|
--rt-nodata-color: rgba(0,0,0,0.5);
|
||||||
|
--modal-overlay-bgcolor: rgba(255, 255, 255, 0.75);
|
||||||
|
--logs__table-bgcolor: #fff;
|
||||||
|
--logs__row--blue-bgcolor: #e5effd;
|
||||||
|
--logs__row--white-bgcolor: #fff;
|
||||||
|
--detailed-info-color: #888888;
|
||||||
--yellow-pale: rgba(247, 181, 0, 0.1);
|
--yellow-pale: rgba(247, 181, 0, 0.1);
|
||||||
--green79: #67b279;
|
--green79: #67b279;
|
||||||
--gray-a5: #a5a5a5;
|
--gray-a5: #a5a5a5;
|
||||||
--gray-d8: #d8d8d8;
|
--gray-d8: #d8d8d8;
|
||||||
--gray-f3: #f3f3f3;
|
--gray-f3: #f3f3f3;
|
||||||
|
--loading-bg: rgba(255, 255, 255, 0.48);
|
||||||
--font-family-monospace: Monaco, Menlo, "Ubuntu Mono", Consolas, source-code-pro, monospace;
|
--font-family-monospace: Monaco, Menlo, "Ubuntu Mono", Consolas, source-code-pro, monospace;
|
||||||
--font-size-disable-autozoom: 1rem;
|
--font-size-disable-autozoom: 1rem;
|
||||||
|
--alert-message-color: #24426c;
|
||||||
|
--alert-message-border: #cbdbf2;
|
||||||
|
--alert-message-bg: #dae5f5;
|
||||||
|
--checkbox-bg: #e2e2e2;
|
||||||
|
--radio-bg: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] {
|
||||||
|
--black: #ffffff;
|
||||||
|
--bgcolor: #131313;
|
||||||
|
--mcolor: #e6e6e6;
|
||||||
|
--scolor: #a5a5a5;
|
||||||
|
--header-bgcolor: #131313;
|
||||||
|
--border-color: #222;
|
||||||
|
--card-bgcolor: #1c1c1c;
|
||||||
|
--card-border-color: #3d3d3d;
|
||||||
|
--ctrl-bgcolor: #1c1c1c;
|
||||||
|
--ctrl-select-bgcolor: #3d3d3d;
|
||||||
|
--ctrl-dropdown-color: #fff;
|
||||||
|
--ctrl-dropdown-bgcolor-focus: #000;
|
||||||
|
--ctrl-dropdown-color-focus: #fff;
|
||||||
|
--btn-success-bgcolor: #67b279;
|
||||||
|
--form-disabled-bgcolor: #2d2d2d;
|
||||||
|
--form-disabled-color: #a5a5a5;
|
||||||
|
--logs__text-color: #f3f3f3;
|
||||||
|
--rt-nodata-bgcolor: #1c1c1c;
|
||||||
|
--rt-nodata-color: #fff;
|
||||||
|
--modal-overlay-bgcolor: rgba(19, 19, 19, 0.75);
|
||||||
|
--logs__table-bgcolor: #3d3d3d;
|
||||||
|
--logs__row--blue-bgcolor: #467fcf;
|
||||||
|
--logs__row--white-bgcolor: #1c1c1c;
|
||||||
|
--detailed-info-color: #fff;
|
||||||
|
--gray300: #f3f3f3;
|
||||||
|
--loading-bg: #131313;
|
||||||
|
--alert-message-color: #e6e6e6;
|
||||||
|
--alert-message-border: #363648;
|
||||||
|
--alert-message-bg: #363648;
|
||||||
|
--checkbox-bg: #a4a4a4;
|
||||||
|
--radio-bg: #a4a4a4;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
|
|||||||
@@ -20,8 +20,13 @@ import EncryptionTopline from '../ui/EncryptionTopline';
|
|||||||
import Icons from '../ui/Icons';
|
import Icons from '../ui/Icons';
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
import Loading from '../ui/Loading';
|
import Loading from '../ui/Loading';
|
||||||
import { FILTERS_URLS, MENU_URLS, SETTINGS_URLS } from '../../helpers/constants';
|
import {
|
||||||
import { getLogsUrlParams, setHtmlLangAttr } from '../../helpers/helpers';
|
FILTERS_URLS,
|
||||||
|
MENU_URLS,
|
||||||
|
SETTINGS_URLS,
|
||||||
|
THEMES,
|
||||||
|
} from '../../helpers/constants';
|
||||||
|
import { getLogsUrlParams, setHtmlLangAttr, setUITheme } from '../../helpers/helpers';
|
||||||
import Header from '../Header';
|
import Header from '../Header';
|
||||||
import { changeLanguage, getDnsStatus } from '../../actions';
|
import { changeLanguage, getDnsStatus } from '../../actions';
|
||||||
|
|
||||||
@@ -38,6 +43,7 @@ import DnsRewrites from '../../containers/DnsRewrites';
|
|||||||
import CustomRules from '../../containers/CustomRules';
|
import CustomRules from '../../containers/CustomRules';
|
||||||
import Services from '../Filters/Services';
|
import Services from '../Filters/Services';
|
||||||
import Logs from '../Logs';
|
import Logs from '../Logs';
|
||||||
|
import ProtectionTimer from '../ProtectionTimer';
|
||||||
|
|
||||||
const ROUTES = [
|
const ROUTES = [
|
||||||
{
|
{
|
||||||
@@ -109,6 +115,7 @@ const App = () => {
|
|||||||
isCoreRunning,
|
isCoreRunning,
|
||||||
isUpdateAvailable,
|
isUpdateAvailable,
|
||||||
processing,
|
processing,
|
||||||
|
theme,
|
||||||
} = useSelector((state) => state.dashboard, shallowEqual);
|
} = useSelector((state) => state.dashboard, shallowEqual);
|
||||||
|
|
||||||
const { processing: processingEncryption } = useSelector((
|
const { processing: processingEncryption } = useSelector((
|
||||||
@@ -138,6 +145,40 @@ const App = () => {
|
|||||||
setLanguage();
|
setLanguage();
|
||||||
}, [language]);
|
}, [language]);
|
||||||
|
|
||||||
|
const handleAutoTheme = (e, accountTheme) => {
|
||||||
|
if (accountTheme !== THEMES.auto) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.matches) {
|
||||||
|
setUITheme(THEMES.dark);
|
||||||
|
} else {
|
||||||
|
setUITheme(THEMES.light);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (theme !== THEMES.auto) {
|
||||||
|
setUITheme(theme);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const colorSchemeMedia = window.matchMedia('(prefers-color-scheme: dark)');
|
||||||
|
setUITheme(theme);
|
||||||
|
|
||||||
|
if (colorSchemeMedia.addEventListener !== undefined) {
|
||||||
|
colorSchemeMedia.addEventListener('change', (e) => {
|
||||||
|
handleAutoTheme(e, theme);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Deprecated addListener for older versions of Safari.
|
||||||
|
colorSchemeMedia.addListener((e) => {
|
||||||
|
handleAutoTheme(e, theme);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, [theme]);
|
||||||
|
|
||||||
const reloadPage = () => {
|
const reloadPage = () => {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
};
|
};
|
||||||
@@ -150,6 +191,7 @@ const App = () => {
|
|||||||
{!processingEncryption && <EncryptionTopline />}
|
{!processingEncryption && <EncryptionTopline />}
|
||||||
<LoadingBar className="loading-bar" updateTime={1000} />
|
<LoadingBar className="loading-bar" updateTime={1000} />
|
||||||
<Header />
|
<Header />
|
||||||
|
<ProtectionTimer />
|
||||||
<div className="container container--wrap pb-5">
|
<div className="container container--wrap pb-5">
|
||||||
{processing && <Loading />}
|
{processing && <Loading />}
|
||||||
{!isCoreRunning && <div className="row row-cards">
|
{!isCoreRunning && <div className="row row-cards">
|
||||||
|
|||||||
@@ -29,8 +29,11 @@ const BlockedDomains = ({
|
|||||||
blockedFiltering,
|
blockedFiltering,
|
||||||
replacedSafebrowsing,
|
replacedSafebrowsing,
|
||||||
replacedParental,
|
replacedParental,
|
||||||
|
replacedSafesearch,
|
||||||
}) => {
|
}) => {
|
||||||
const totalBlocked = blockedFiltering + replacedSafebrowsing + replacedParental;
|
const totalBlocked = (
|
||||||
|
blockedFiltering + replacedSafebrowsing + replacedParental + replacedSafesearch
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card
|
<Card
|
||||||
@@ -71,6 +74,7 @@ BlockedDomains.propTypes = {
|
|||||||
topBlockedDomains: PropTypes.array.isRequired,
|
topBlockedDomains: PropTypes.array.isRequired,
|
||||||
blockedFiltering: PropTypes.number.isRequired,
|
blockedFiltering: PropTypes.number.isRequired,
|
||||||
replacedSafebrowsing: PropTypes.number.isRequired,
|
replacedSafebrowsing: PropTypes.number.isRequired,
|
||||||
|
replacedSafesearch: PropTypes.number.isRequired,
|
||||||
replacedParental: PropTypes.number.isRequired,
|
replacedParental: PropTypes.number.isRequired,
|
||||||
refreshButton: PropTypes.node.isRequired,
|
refreshButton: PropTypes.node.isRequired,
|
||||||
subtitle: PropTypes.string.isRequired,
|
subtitle: PropTypes.string.isRequired,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { shallowEqual, useSelector } from 'react-redux';
|
|||||||
import Card from '../ui/Card';
|
import Card from '../ui/Card';
|
||||||
import { formatNumber } from '../../helpers/helpers';
|
import { formatNumber } from '../../helpers/helpers';
|
||||||
import LogsSearchLink from '../ui/LogsSearchLink';
|
import LogsSearchLink from '../ui/LogsSearchLink';
|
||||||
import { RESPONSE_FILTER } from '../../helpers/constants';
|
import { RESPONSE_FILTER, DAY } from '../../helpers/constants';
|
||||||
import Tooltip from '../ui/Tooltip';
|
import Tooltip from '../ui/Tooltip';
|
||||||
|
|
||||||
const Row = ({
|
const Row = ({
|
||||||
@@ -54,12 +54,12 @@ const Counters = ({ refreshButton, subtitle }) => {
|
|||||||
avgProcessingTime,
|
avgProcessingTime,
|
||||||
} = useSelector((state) => state.stats, shallowEqual);
|
} = useSelector((state) => state.stats, shallowEqual);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const days = interval / DAY;
|
||||||
const rows = [
|
const rows = [
|
||||||
{
|
{
|
||||||
label: 'dns_query',
|
label: 'dns_query',
|
||||||
count: numDnsQueries,
|
count: numDnsQueries,
|
||||||
tooltipTitle: interval === 1 ? 'number_of_dns_query_24_hours' : t('number_of_dns_query_days', { count: interval }),
|
tooltipTitle: days === 1 ? 'number_of_dns_query_24_hours' : t('number_of_dns_query_days', { count: days }),
|
||||||
response_status: RESPONSE_FILTER.ALL.QUERY,
|
response_status: RESPONSE_FILTER.ALL.QUERY,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
.dashboard-protection-button.btn-gray {
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-right-color: #a4a4a4;
|
||||||
|
}
|
||||||
|
|
||||||
.stats__table .popover__body {
|
.stats__table .popover__body {
|
||||||
left: -10px;
|
left: -10px;
|
||||||
min-width: 270px;
|
min-width: 270px;
|
||||||
@@ -34,27 +40,18 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dashboard-title__button {
|
|
||||||
margin: 0 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 767.98px) {
|
@media (max-width: 767.98px) {
|
||||||
.page-title--dashboard {
|
.page-title--dashboard {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dashboard-title__button {
|
|
||||||
margin: 0.5rem 0;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.counters__row {
|
.counters__row {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
border-top: 1px solid #dee2e6;
|
border-top: 1px solid var(--card-border-color);
|
||||||
padding: 0.75rem 1.5rem;
|
padding: 0.75rem 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,18 +9,25 @@ import Counters from './Counters';
|
|||||||
import Clients from './Clients';
|
import Clients from './Clients';
|
||||||
import QueriedDomains from './QueriedDomains';
|
import QueriedDomains from './QueriedDomains';
|
||||||
import BlockedDomains from './BlockedDomains';
|
import BlockedDomains from './BlockedDomains';
|
||||||
import { SETTINGS_URLS } from '../../helpers/constants';
|
import { DISABLE_PROTECTION_TIMINGS, ONE_SECOND_IN_MS, SETTINGS_URLS } from '../../helpers/constants';
|
||||||
|
import {
|
||||||
|
msToSeconds,
|
||||||
|
msToMinutes,
|
||||||
|
msToHours,
|
||||||
|
msToDays,
|
||||||
|
} from '../../helpers/helpers';
|
||||||
|
|
||||||
import PageTitle from '../ui/PageTitle';
|
import PageTitle from '../ui/PageTitle';
|
||||||
import Loading from '../ui/Loading';
|
import Loading from '../ui/Loading';
|
||||||
import './Dashboard.css';
|
import './Dashboard.css';
|
||||||
|
import Dropdown from '../ui/Dropdown';
|
||||||
|
|
||||||
const Dashboard = ({
|
const Dashboard = ({
|
||||||
getAccessList,
|
getAccessList,
|
||||||
getStats,
|
getStats,
|
||||||
getStatsConfig,
|
getStatsConfig,
|
||||||
dashboard,
|
dashboard,
|
||||||
dashboard: { protectionEnabled, processingProtection },
|
dashboard: { protectionEnabled, processingProtection, protectionDisabledDuration },
|
||||||
toggleProtection,
|
toggleProtection,
|
||||||
stats,
|
stats,
|
||||||
access,
|
access,
|
||||||
@@ -36,20 +43,20 @@ const Dashboard = ({
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getAllStats();
|
getAllStats();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const getSubtitle = () => {
|
const getSubtitle = () => {
|
||||||
if (stats.interval === 0) {
|
const ONE_DAY = 1;
|
||||||
|
const intervalInDays = msToDays(stats.interval);
|
||||||
|
|
||||||
|
if (intervalInDays < ONE_DAY) {
|
||||||
return t('stats_disabled_short');
|
return t('stats_disabled_short');
|
||||||
}
|
}
|
||||||
|
|
||||||
return stats.interval === 1
|
return intervalInDays === ONE_DAY
|
||||||
? t('for_last_24_hours')
|
? t('for_last_24_hours')
|
||||||
: t('for_last_days', { count: stats.interval });
|
: t('for_last_days', { count: msToDays(stats.interval) });
|
||||||
};
|
};
|
||||||
|
|
||||||
const buttonText = protectionEnabled ? 'disable_protection' : 'enable_protection';
|
const buttonClass = classNames('btn btn-sm dashboard-protection-button', {
|
||||||
|
|
||||||
const buttonClass = classNames('btn btn-sm dashboard-title__button', {
|
|
||||||
'btn-gray': protectionEnabled,
|
'btn-gray': protectionEnabled,
|
||||||
'btn-success': !protectionEnabled,
|
'btn-success': !protectionEnabled,
|
||||||
});
|
});
|
||||||
@@ -60,7 +67,7 @@ const Dashboard = ({
|
|||||||
title={t('refresh_btn')}
|
title={t('refresh_btn')}
|
||||||
onClick={() => getAllStats()}
|
onClick={() => getAllStats()}
|
||||||
>
|
>
|
||||||
<svg className="icons">
|
<svg className="icons icon12">
|
||||||
<use xlinkHref="#refresh" />
|
<use xlinkHref="#refresh" />
|
||||||
</svg>
|
</svg>
|
||||||
</button>;
|
</button>;
|
||||||
@@ -71,16 +78,87 @@ const Dashboard = ({
|
|||||||
|
|
||||||
const subtitle = getSubtitle();
|
const subtitle = getSubtitle();
|
||||||
|
|
||||||
|
const DISABLE_PROTECTION_ITEMS = [
|
||||||
|
{
|
||||||
|
text: t('disable_for_seconds', { count: msToSeconds(DISABLE_PROTECTION_TIMINGS.HALF_MINUTE) }),
|
||||||
|
disableTime: DISABLE_PROTECTION_TIMINGS.HALF_MINUTE,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: t('disable_for_minutes', { count: msToMinutes(DISABLE_PROTECTION_TIMINGS.MINUTE) }),
|
||||||
|
disableTime: DISABLE_PROTECTION_TIMINGS.MINUTE,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: t('disable_for_minutes', { count: msToMinutes(DISABLE_PROTECTION_TIMINGS.TEN_MINUTES) }),
|
||||||
|
disableTime: DISABLE_PROTECTION_TIMINGS.TEN_MINUTES,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: t('disable_for_hours', { count: msToHours(DISABLE_PROTECTION_TIMINGS.HOUR) }),
|
||||||
|
disableTime: DISABLE_PROTECTION_TIMINGS.HOUR,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: t('disable_until_tomorrow'),
|
||||||
|
disableTime: DISABLE_PROTECTION_TIMINGS.TOMORROW,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const getDisableProtectionItems = () => (
|
||||||
|
Object.values(DISABLE_PROTECTION_ITEMS)
|
||||||
|
.map((item, index) => (
|
||||||
|
<div
|
||||||
|
key={`disable_timings_${index}`}
|
||||||
|
className="dropdown-item"
|
||||||
|
onClick={() => {
|
||||||
|
toggleProtection(protectionEnabled, item.disableTime - ONE_SECOND_IN_MS);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{item.text}
|
||||||
|
</div>
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
const getRemaningTimeText = (milliseconds) => {
|
||||||
|
if (!milliseconds) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
const date = new Date(milliseconds);
|
||||||
|
const hh = date.getUTCHours();
|
||||||
|
const mm = `0${date.getUTCMinutes()}`.slice(-2);
|
||||||
|
const ss = `0${date.getUTCSeconds()}`.slice(-2);
|
||||||
|
const formattedHH = `0${hh}`.slice(-2);
|
||||||
|
|
||||||
|
return hh ? `${formattedHH}:${mm}:${ss}` : `${mm}:${ss}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getProtectionBtnText = (status) => (status ? t('disable_protection') : t('enable_protection'));
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
<PageTitle title={t('dashboard')} containerClass="page-title--dashboard">
|
<PageTitle title={t('dashboard')} containerClass="page-title--dashboard">
|
||||||
<button
|
<div className="page-title__protection">
|
||||||
type="button"
|
<button
|
||||||
className={buttonClass}
|
type="button"
|
||||||
onClick={() => toggleProtection(protectionEnabled)}
|
className={buttonClass}
|
||||||
disabled={processingProtection}
|
onClick={() => {
|
||||||
>
|
toggleProtection(protectionEnabled);
|
||||||
<Trans>{buttonText}</Trans>
|
}}
|
||||||
</button>
|
disabled={processingProtection}
|
||||||
|
>
|
||||||
|
{protectionDisabledDuration
|
||||||
|
? `${t('enable_protection_timer')} ${getRemaningTimeText(protectionDisabledDuration)}`
|
||||||
|
: getProtectionBtnText(protectionEnabled)
|
||||||
|
}
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{protectionEnabled && <Dropdown
|
||||||
|
label=""
|
||||||
|
baseClassName="dropdown-protection"
|
||||||
|
icon="arrow-down"
|
||||||
|
controlClassName="dropdown-protection__toggle"
|
||||||
|
menuClassName="dropdown-menu dropdown-menu-arrow dropdown-menu--protection"
|
||||||
|
>
|
||||||
|
{getDisableProtectionItems()}
|
||||||
|
</Dropdown>}
|
||||||
|
</div>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className="btn btn-outline-primary btn-sm"
|
className="btn btn-outline-primary btn-sm"
|
||||||
@@ -107,7 +185,7 @@ const Dashboard = ({
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<Statistics
|
<Statistics
|
||||||
interval={stats.interval}
|
interval={msToDays(stats.interval)}
|
||||||
dnsQueries={stats.dnsQueries}
|
dnsQueries={stats.dnsQueries}
|
||||||
blockedFiltering={stats.blockedFiltering}
|
blockedFiltering={stats.blockedFiltering}
|
||||||
replacedSafebrowsing={stats.replacedSafebrowsing}
|
replacedSafebrowsing={stats.replacedSafebrowsing}
|
||||||
@@ -151,6 +229,7 @@ const Dashboard = ({
|
|||||||
topBlockedDomains={stats.topBlockedDomains}
|
topBlockedDomains={stats.topBlockedDomains}
|
||||||
blockedFiltering={stats.numBlockedFiltering}
|
blockedFiltering={stats.numBlockedFiltering}
|
||||||
replacedSafebrowsing={stats.numReplacedSafebrowsing}
|
replacedSafebrowsing={stats.numReplacedSafebrowsing}
|
||||||
|
replacedSafesearch={stats.numReplacedSafesearch}
|
||||||
replacedParental={stats.numReplacedParental}
|
replacedParental={stats.numReplacedParental}
|
||||||
refreshButton={refreshButton}
|
refreshButton={refreshButton}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import { MODAL_TYPE } from '../../helpers/constants';
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
getCurrentFilter,
|
getCurrentFilter,
|
||||||
getObjDiff,
|
|
||||||
} from '../../helpers/helpers';
|
} from '../../helpers/helpers';
|
||||||
|
|
||||||
import filtersCatalog from '../../helpers/filters/filters';
|
import filtersCatalog from '../../helpers/filters/filters';
|
||||||
@@ -22,7 +21,7 @@ class DnsBlocklist extends Component {
|
|||||||
this.props.getFilteringStatus();
|
this.props.getFilteringStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSubmit = (values, _, { initialValues }) => {
|
handleSubmit = (values) => {
|
||||||
const { modalFilterUrl, modalType } = this.props.filtering;
|
const { modalFilterUrl, modalType } = this.props.filtering;
|
||||||
|
|
||||||
switch (modalType) {
|
switch (modalType) {
|
||||||
@@ -35,7 +34,12 @@ class DnsBlocklist extends Component {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MODAL_TYPE.CHOOSE_FILTERING_LIST: {
|
case MODAL_TYPE.CHOOSE_FILTERING_LIST: {
|
||||||
const changedValues = getObjDiff(initialValues, values);
|
const changedValues = Object.entries(values)?.reduce((acc, [key, value]) => {
|
||||||
|
if (value && key in filtersCatalog.filters) {
|
||||||
|
acc[key] = value;
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
|
||||||
Object.keys(changedValues)
|
Object.keys(changedValues)
|
||||||
.forEach((fieldName) => {
|
.forEach((fieldName) => {
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ Form.propTypes = {
|
|||||||
submitting: PropTypes.bool.isRequired,
|
submitting: PropTypes.bool.isRequired,
|
||||||
processingAdd: PropTypes.bool.isRequired,
|
processingAdd: PropTypes.bool.isRequired,
|
||||||
t: PropTypes.func.isRequired,
|
t: PropTypes.func.isRequired,
|
||||||
|
initialValues: PropTypes.object,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default flow([
|
export default flow([
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
|||||||
import { Trans, withTranslation } from 'react-i18next';
|
import { Trans, withTranslation } from 'react-i18next';
|
||||||
import ReactModal from 'react-modal';
|
import ReactModal from 'react-modal';
|
||||||
|
|
||||||
|
import { MODAL_TYPE } from '../../../helpers/constants';
|
||||||
import Form from './Form';
|
import Form from './Form';
|
||||||
|
|
||||||
const Modal = (props) => {
|
const Modal = (props) => {
|
||||||
@@ -12,6 +13,8 @@ const Modal = (props) => {
|
|||||||
toggleRewritesModal,
|
toggleRewritesModal,
|
||||||
processingAdd,
|
processingAdd,
|
||||||
processingDelete,
|
processingDelete,
|
||||||
|
modalType,
|
||||||
|
currentRewrite,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -24,13 +27,18 @@ const Modal = (props) => {
|
|||||||
<div className="modal-content">
|
<div className="modal-content">
|
||||||
<div className="modal-header">
|
<div className="modal-header">
|
||||||
<h4 className="modal-title">
|
<h4 className="modal-title">
|
||||||
<Trans>rewrite_add</Trans>
|
{modalType === MODAL_TYPE.EDIT_REWRITE ? (
|
||||||
|
<Trans>rewrite_edit</Trans>
|
||||||
|
) : (
|
||||||
|
<Trans>rewrite_add</Trans>
|
||||||
|
)}
|
||||||
</h4>
|
</h4>
|
||||||
<button type="button" className="close" onClick={() => toggleRewritesModal()}>
|
<button type="button" className="close" onClick={() => toggleRewritesModal()}>
|
||||||
<span className="sr-only">Close</span>
|
<span className="sr-only">Close</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<Form
|
<Form
|
||||||
|
initialValues={{ ...currentRewrite }}
|
||||||
onSubmit={handleSubmit}
|
onSubmit={handleSubmit}
|
||||||
toggleRewritesModal={toggleRewritesModal}
|
toggleRewritesModal={toggleRewritesModal}
|
||||||
processingAdd={processingAdd}
|
processingAdd={processingAdd}
|
||||||
@@ -47,6 +55,8 @@ Modal.propTypes = {
|
|||||||
toggleRewritesModal: PropTypes.func.isRequired,
|
toggleRewritesModal: PropTypes.func.isRequired,
|
||||||
processingAdd: PropTypes.bool.isRequired,
|
processingAdd: PropTypes.bool.isRequired,
|
||||||
processingDelete: PropTypes.bool.isRequired,
|
processingDelete: PropTypes.bool.isRequired,
|
||||||
|
modalType: PropTypes.string.isRequired,
|
||||||
|
currentRewrite: PropTypes.object,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default withTranslation()(Modal);
|
export default withTranslation()(Modal);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
|||||||
import ReactTable from 'react-table';
|
import ReactTable from 'react-table';
|
||||||
import { withTranslation } from 'react-i18next';
|
import { withTranslation } from 'react-i18next';
|
||||||
import { sortIp } from '../../../helpers/helpers';
|
import { sortIp } from '../../../helpers/helpers';
|
||||||
|
import { MODAL_TYPE } from '../../../helpers/constants';
|
||||||
|
|
||||||
class Table extends Component {
|
class Table extends Component {
|
||||||
cellWrap = ({ value }) => (
|
cellWrap = ({ value }) => (
|
||||||
@@ -31,24 +32,44 @@ class Table extends Component {
|
|||||||
maxWidth: 100,
|
maxWidth: 100,
|
||||||
sortable: false,
|
sortable: false,
|
||||||
resizable: false,
|
resizable: false,
|
||||||
Cell: (value) => (
|
Cell: (value) => {
|
||||||
<div className="logs__row logs__row--center">
|
const currentRewrite = {
|
||||||
<button
|
answer: value.row.answer,
|
||||||
type="button"
|
domain: value.row.domain,
|
||||||
className="btn btn-icon btn-icon--green btn-outline-secondary btn-sm"
|
};
|
||||||
onClick={() => this.props.handleDelete({
|
|
||||||
answer: value.row.answer,
|
return (
|
||||||
domain: value.row.domain,
|
<div className="logs__row logs__row--center">
|
||||||
})
|
<button
|
||||||
}
|
type="button"
|
||||||
title={this.props.t('delete_table_action')}
|
className="btn btn-icon btn-outline-primary btn-sm mr-2"
|
||||||
>
|
onClick={() => {
|
||||||
<svg className="icons">
|
this.props.toggleRewritesModal({
|
||||||
<use xlinkHref="#delete" />
|
type: MODAL_TYPE.EDIT_REWRITE,
|
||||||
</svg>
|
currentRewrite,
|
||||||
</button>
|
});
|
||||||
</div>
|
}}
|
||||||
),
|
disabled={this.props.processingUpdate}
|
||||||
|
title={this.props.t('edit_table_action')}
|
||||||
|
>
|
||||||
|
<svg className="icons icon12">
|
||||||
|
<use xlinkHref="#edit" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="btn btn-icon btn-outline-secondary btn-sm"
|
||||||
|
onClick={() => this.props.handleDelete(currentRewrite)}
|
||||||
|
title={this.props.t('delete_table_action')}
|
||||||
|
>
|
||||||
|
<svg className="icons">
|
||||||
|
<use xlinkHref="#delete" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -84,7 +105,9 @@ Table.propTypes = {
|
|||||||
processing: PropTypes.bool.isRequired,
|
processing: PropTypes.bool.isRequired,
|
||||||
processingAdd: PropTypes.bool.isRequired,
|
processingAdd: PropTypes.bool.isRequired,
|
||||||
processingDelete: PropTypes.bool.isRequired,
|
processingDelete: PropTypes.bool.isRequired,
|
||||||
|
processingUpdate: PropTypes.bool.isRequired,
|
||||||
handleDelete: PropTypes.func.isRequired,
|
handleDelete: PropTypes.func.isRequired,
|
||||||
|
toggleRewritesModal: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default withTranslation()(Table);
|
export default withTranslation()(Table);
|
||||||
|
|||||||
@@ -6,16 +6,13 @@ import Table from './Table';
|
|||||||
import Modal from './Modal';
|
import Modal from './Modal';
|
||||||
import Card from '../../ui/Card';
|
import Card from '../../ui/Card';
|
||||||
import PageTitle from '../../ui/PageTitle';
|
import PageTitle from '../../ui/PageTitle';
|
||||||
|
import { MODAL_TYPE } from '../../../helpers/constants';
|
||||||
|
|
||||||
class Rewrites extends Component {
|
class Rewrites extends Component {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.props.getRewritesList();
|
this.props.getRewritesList();
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSubmit = (values) => {
|
|
||||||
this.props.addRewrite(values);
|
|
||||||
};
|
|
||||||
|
|
||||||
handleDelete = (values) => {
|
handleDelete = (values) => {
|
||||||
// eslint-disable-next-line no-alert
|
// eslint-disable-next-line no-alert
|
||||||
if (window.confirm(this.props.t('rewrite_confirm_delete', { key: values.domain }))) {
|
if (window.confirm(this.props.t('rewrite_confirm_delete', { key: values.domain }))) {
|
||||||
@@ -23,6 +20,19 @@ class Rewrites extends Component {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handleSubmit = (values) => {
|
||||||
|
const { modalType, currentRewrite } = this.props.rewrites;
|
||||||
|
|
||||||
|
if (modalType === MODAL_TYPE.EDIT_REWRITE && currentRewrite) {
|
||||||
|
this.props.updateRewrite({
|
||||||
|
target: currentRewrite,
|
||||||
|
update: values,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.props.addRewrite(values);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
t,
|
t,
|
||||||
@@ -36,6 +46,9 @@ class Rewrites extends Component {
|
|||||||
processing,
|
processing,
|
||||||
processingAdd,
|
processingAdd,
|
||||||
processingDelete,
|
processingDelete,
|
||||||
|
processingUpdate,
|
||||||
|
modalType,
|
||||||
|
currentRewrite,
|
||||||
} = rewrites;
|
} = rewrites;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -54,13 +67,15 @@ class Rewrites extends Component {
|
|||||||
processing={processing}
|
processing={processing}
|
||||||
processingAdd={processingAdd}
|
processingAdd={processingAdd}
|
||||||
processingDelete={processingDelete}
|
processingDelete={processingDelete}
|
||||||
|
processingUpdate={processingUpdate}
|
||||||
handleDelete={this.handleDelete}
|
handleDelete={this.handleDelete}
|
||||||
|
toggleRewritesModal={toggleRewritesModal}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className="btn btn-success btn-standard mt-3"
|
className="btn btn-success btn-standard mt-3"
|
||||||
onClick={() => toggleRewritesModal()}
|
onClick={() => toggleRewritesModal({ type: MODAL_TYPE.ADD_REWRITE })}
|
||||||
disabled={processingAdd}
|
disabled={processingAdd}
|
||||||
>
|
>
|
||||||
<Trans>rewrite_add</Trans>
|
<Trans>rewrite_add</Trans>
|
||||||
@@ -68,10 +83,13 @@ class Rewrites extends Component {
|
|||||||
|
|
||||||
<Modal
|
<Modal
|
||||||
isModalOpen={isModalOpen}
|
isModalOpen={isModalOpen}
|
||||||
|
modalType={modalType}
|
||||||
toggleRewritesModal={toggleRewritesModal}
|
toggleRewritesModal={toggleRewritesModal}
|
||||||
handleSubmit={this.handleSubmit}
|
handleSubmit={this.handleSubmit}
|
||||||
processingAdd={processingAdd}
|
processingAdd={processingAdd}
|
||||||
processingDelete={processingDelete}
|
processingDelete={processingDelete}
|
||||||
|
processingUpdate={processingUpdate}
|
||||||
|
currentRewrite={currentRewrite}
|
||||||
/>
|
/>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
</Card>
|
</Card>
|
||||||
@@ -86,6 +104,7 @@ Rewrites.propTypes = {
|
|||||||
toggleRewritesModal: PropTypes.func.isRequired,
|
toggleRewritesModal: PropTypes.func.isRequired,
|
||||||
addRewrite: PropTypes.func.isRequired,
|
addRewrite: PropTypes.func.isRequired,
|
||||||
deleteRewrite: PropTypes.func.isRequired,
|
deleteRewrite: PropTypes.func.isRequired,
|
||||||
|
updateRewrite: PropTypes.func.isRequired,
|
||||||
rewrites: PropTypes.object.isRequired,
|
rewrites: PropTypes.object.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ class Table extends Component {
|
|||||||
Header: <Trans>list_url_table_header</Trans>,
|
Header: <Trans>list_url_table_header</Trans>,
|
||||||
accessor: 'url',
|
accessor: 'url',
|
||||||
minWidth: 180,
|
minWidth: 180,
|
||||||
|
// eslint-disable-next-line react/prop-types
|
||||||
Cell: ({ value }) => (
|
Cell: ({ value }) => (
|
||||||
<div className="logs__row">
|
<div className="logs__row">
|
||||||
{isValidAbsolutePath(value) ? value
|
{isValidAbsolutePath(value) ? value
|
||||||
@@ -100,7 +101,7 @@ class Table extends Component {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<svg className="icons">
|
<svg className="icons icon12">
|
||||||
<use xlinkHref="#edit" />
|
<use xlinkHref="#edit" />
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
@@ -110,7 +111,7 @@ class Table extends Component {
|
|||||||
onClick={() => handleDelete(url)}
|
onClick={() => handleDelete(url)}
|
||||||
title={t('delete_table_action')}
|
title={t('delete_table_action')}
|
||||||
>
|
>
|
||||||
<svg className="icons">
|
<svg className="icons icon12">
|
||||||
<use xlinkHref="#delete" />
|
<use xlinkHref="#delete" />
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
.nav-tabs .nav-link.active {
|
.nav-tabs .nav-link.active {
|
||||||
border-color: var(--green-74);
|
border-color: var(--btn-success-bgcolor);
|
||||||
color: var(--green-74);
|
color: var(--btn-success-bgcolor);
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-tabs .nav-link.active:hover {
|
.nav-tabs .nav-link.active:hover {
|
||||||
border-color: #58a273;
|
border-color: #4b9400;
|
||||||
color: #58a273;
|
color: #4b9400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-icon {
|
.nav-icon {
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
width: 250px;
|
width: 250px;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
transition: transform 0.3s ease;
|
transition: transform 0.3s ease;
|
||||||
background-color: #fff;
|
background-color: var(--header-bgcolor);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ const ClientCell = ({
|
|||||||
{content && (
|
{content && (
|
||||||
<button className={buttonArrowClass} disabled={processingRules}>
|
<button className={buttonArrowClass} disabled={processingRules}>
|
||||||
<IconTooltip
|
<IconTooltip
|
||||||
className="h-100"
|
className="icon24"
|
||||||
tooltipClass="button-action--arrow-option-container"
|
tooltipClass="button-action--arrow-option-container"
|
||||||
xlinkHref="chevron-down"
|
xlinkHref="chevron-down"
|
||||||
triggerClass="button-action--icon"
|
triggerClass="button-action--icon"
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
box-shadow: 2px 4px 8px rgba(0, 0, 0, 0.2);
|
box-shadow: 2px 4px 8px rgba(0, 0, 0, 0.2);
|
||||||
border-radius: 4px !important;
|
border-radius: 4px !important;
|
||||||
pointer-events: auto !important;
|
pointer-events: auto !important;
|
||||||
background-color: var(--white);
|
background-color: var(--ctrl-bgcolor);
|
||||||
|
color: var(--mcolor);
|
||||||
z-index: 102;
|
z-index: 102;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
|
|||||||
@@ -129,7 +129,6 @@ const Form = (props) => {
|
|||||||
|
|
||||||
const onInputClear = async () => {
|
const onInputClear = async () => {
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
setDebouncedSearch(DEFAULT_LOGS_FILTER[FORM_NAMES.search]);
|
|
||||||
change(FORM_NAMES.search, DEFAULT_LOGS_FILTER[FORM_NAMES.search]);
|
change(FORM_NAMES.search, DEFAULT_LOGS_FILTER[FORM_NAMES.search]);
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,6 +24,12 @@
|
|||||||
--option-border-radius: 4px;
|
--option-border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] {
|
||||||
|
--red: rgba(223, 56, 18, 0.25);
|
||||||
|
--green-pale: rgba(103, 178, 121, 0.25);
|
||||||
|
--yellow: rgba(247, 181, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
.logs__text {
|
.logs__text {
|
||||||
padding: 0 1px;
|
padding: 0 1px;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
@@ -31,11 +37,19 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
font-family: var(--font-family-sans-serif);
|
font-family: var(--font-family-sans-serif);
|
||||||
color: var(--gray-4d);
|
color: var(--logs__text-color);
|
||||||
letter-spacing: 0;
|
letter-spacing: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] .logs__text a {
|
||||||
|
color: var(--gray-f3);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] .logs__text a:hover {
|
||||||
|
color: var(--gray-f3);
|
||||||
|
}
|
||||||
|
|
||||||
.logs__text--bold {
|
.logs__text--bold {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
@@ -48,7 +62,7 @@
|
|||||||
.detailed-info {
|
.detailed-info {
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
color: #888888;
|
color: var(--detailed-info-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.logs__text--link {
|
.logs__text--link {
|
||||||
@@ -66,6 +80,10 @@
|
|||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[data-theme=dark] .icon--selected {
|
||||||
|
opacity: 0.75;
|
||||||
|
}
|
||||||
|
|
||||||
.text-pre {
|
.text-pre {
|
||||||
white-space: pre-wrap !important;
|
white-space: pre-wrap !important;
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
@@ -88,6 +106,16 @@
|
|||||||
max-height: 100% !important;
|
max-height: 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon24 {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon12 {
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
.cursor--pointer {
|
.cursor--pointer {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
@@ -112,6 +140,10 @@
|
|||||||
background-color: transparent !important;
|
background-color: transparent !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] .form-control--transparent option {
|
||||||
|
background-color: var(--card-bgcolor);
|
||||||
|
}
|
||||||
|
|
||||||
.input-group-search {
|
.input-group-search {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -205,6 +237,12 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 1025px) {
|
||||||
|
.logs__cell--client {
|
||||||
|
width: 13rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.logs__cell--header__container > .logs__cell--header__item {
|
.logs__cell--header__container > .logs__cell--header__item {
|
||||||
border-right: 0;
|
border-right: 0;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
@@ -283,7 +321,6 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-action:active {
|
.button-action:active {
|
||||||
@@ -340,6 +377,10 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] .tooltip-custom__container .button-action--arrow-option:not(:disabled):hover {
|
||||||
|
background: var(--ctrl-dropdown-bgcolor-focus);
|
||||||
|
}
|
||||||
|
|
||||||
.button-action--arrow-option-container {
|
.button-action--arrow-option-container {
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
transform-origin: left;
|
transform-origin: left;
|
||||||
@@ -369,7 +410,11 @@
|
|||||||
|
|
||||||
/* QUERY_STATUS_COLORS */
|
/* QUERY_STATUS_COLORS */
|
||||||
.logs__row--blue {
|
.logs__row--blue {
|
||||||
background-color: var(--blue);
|
background-color: var(--logs__row--blue-bgcolor);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] .logs__row--blue .logs__text--link {
|
||||||
|
color: var(--white);
|
||||||
}
|
}
|
||||||
|
|
||||||
.logs__row--green {
|
.logs__row--green {
|
||||||
@@ -381,7 +426,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.logs__row--white {
|
.logs__row--white {
|
||||||
background-color: var(--white);
|
background-color: var(--logs__row--white-bgcolor);
|
||||||
}
|
}
|
||||||
|
|
||||||
.logs__row--yellow {
|
.logs__row--yellow {
|
||||||
@@ -389,8 +434,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.logs__no-data {
|
.logs__no-data {
|
||||||
color: var(--gray-4d);
|
color: var(--mcolor);
|
||||||
background-color: var(--white80);
|
background-color: var(--logs__table-bgcolor);
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -403,7 +448,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.logs__table {
|
.logs__table {
|
||||||
background-color: var(--white);
|
background-color: var(--logs__table-bgcolor);
|
||||||
border: 0;
|
border: 0;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
min-height: 43rem;
|
min-height: 43rem;
|
||||||
@@ -482,6 +527,10 @@
|
|||||||
color: var(--green79);
|
color: var(--green79);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] .logs__question.icon--lightgray {
|
||||||
|
color: var(--gray-f3);
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 1024px) {
|
@media (max-width: 1024px) {
|
||||||
.logs__question {
|
.logs__question {
|
||||||
display: none;
|
display: none;
|
||||||
@@ -491,3 +540,8 @@
|
|||||||
.logs__modal {
|
.logs__modal {
|
||||||
max-width: 720px;
|
max-width: 720px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.logs__modal-wrap {
|
||||||
|
padding: 1rem 1.5rem;
|
||||||
|
background-color: var(--card-bgcolor);
|
||||||
|
}
|
||||||
|
|||||||
@@ -195,11 +195,11 @@ const Logs = () => {
|
|||||||
onRequestClose={closeModal}
|
onRequestClose={closeModal}
|
||||||
style={{
|
style={{
|
||||||
content: {
|
content: {
|
||||||
width: '100%',
|
width: 'calc(100% - 32px)',
|
||||||
height: 'fit-content',
|
height: 'fit-content',
|
||||||
left: '50%',
|
left: '50%',
|
||||||
top: 47,
|
top: 47,
|
||||||
padding: '1rem 1.5rem 1rem',
|
padding: '0',
|
||||||
maxWidth: '720px',
|
maxWidth: '720px',
|
||||||
transform: 'translateX(-50%)',
|
transform: 'translateX(-50%)',
|
||||||
},
|
},
|
||||||
|
|||||||
54
client/src/components/ProtectionTimer/index.js
Normal file
54
client/src/components/ProtectionTimer/index.js
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
import { useEffect } from 'react';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
|
import { ONE_SECOND_IN_MS } from '../../helpers/constants';
|
||||||
|
import { setProtectionTimerTime, toggleProtectionSuccess } from '../../actions';
|
||||||
|
|
||||||
|
let interval = null;
|
||||||
|
|
||||||
|
const ProtectionTimer = ({
|
||||||
|
protectionDisabledDuration,
|
||||||
|
toggleProtectionSuccess,
|
||||||
|
setProtectionTimerTime,
|
||||||
|
}) => {
|
||||||
|
useEffect(() => {
|
||||||
|
if (protectionDisabledDuration !== null && protectionDisabledDuration < ONE_SECOND_IN_MS) {
|
||||||
|
toggleProtectionSuccess({ disabledDuration: null });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (protectionDisabledDuration) {
|
||||||
|
interval = setInterval(() => {
|
||||||
|
setProtectionTimerTime(protectionDisabledDuration - ONE_SECOND_IN_MS);
|
||||||
|
}, ONE_SECOND_IN_MS);
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
clearInterval(interval);
|
||||||
|
};
|
||||||
|
}, [protectionDisabledDuration]);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
ProtectionTimer.propTypes = {
|
||||||
|
protectionDisabledDuration: PropTypes.number,
|
||||||
|
toggleProtectionSuccess: PropTypes.func.isRequired,
|
||||||
|
setProtectionTimerTime: PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapStateToProps = (state) => {
|
||||||
|
const { dashboard } = state;
|
||||||
|
const { protectionEnabled, protectionDisabledDuration } = dashboard;
|
||||||
|
return { protectionEnabled, protectionDisabledDuration };
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapDispatchToProps = {
|
||||||
|
toggleProtectionSuccess,
|
||||||
|
setProtectionTimerTime,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default connect(
|
||||||
|
mapStateToProps,
|
||||||
|
mapDispatchToProps,
|
||||||
|
)(ProtectionTimer);
|
||||||
@@ -7,6 +7,7 @@ import { useDispatch, useSelector } from 'react-redux';
|
|||||||
import ReactTable from 'react-table';
|
import ReactTable from 'react-table';
|
||||||
|
|
||||||
import { getAllBlockedServices } from '../../../../actions/services';
|
import { getAllBlockedServices } from '../../../../actions/services';
|
||||||
|
import { initSettings } from '../../../../actions';
|
||||||
import {
|
import {
|
||||||
splitByNewLine,
|
splitByNewLine,
|
||||||
countClientsStatistics,
|
countClientsStatistics,
|
||||||
@@ -38,9 +39,13 @@ const ClientsTable = ({
|
|||||||
const [t] = useTranslation();
|
const [t] = useTranslation();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const services = useSelector((store) => store?.services);
|
const services = useSelector((store) => store?.services);
|
||||||
|
const globalSettings = useSelector((store) => store?.settings.settingsList) || {};
|
||||||
|
|
||||||
|
const { safesearch } = globalSettings;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(getAllBlockedServices());
|
dispatch(getAllBlockedServices());
|
||||||
|
dispatch(initSettings());
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleFormAdd = (values) => {
|
const handleFormAdd = (values) => {
|
||||||
@@ -107,6 +112,7 @@ const ClientsTable = ({
|
|||||||
tags: [],
|
tags: [],
|
||||||
use_global_settings: true,
|
use_global_settings: true,
|
||||||
use_global_blocked_services: true,
|
use_global_blocked_services: true,
|
||||||
|
safe_search: { ...(safesearch || {}) },
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -290,7 +296,7 @@ const ClientsTable = ({
|
|||||||
disabled={processingUpdating}
|
disabled={processingUpdating}
|
||||||
title={t('edit_table_action')}
|
title={t('edit_table_action')}
|
||||||
>
|
>
|
||||||
<svg className="icons">
|
<svg className="icons icon12">
|
||||||
<use xlinkHref="#edit" />
|
<use xlinkHref="#edit" />
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
@@ -301,7 +307,7 @@ const ClientsTable = ({
|
|||||||
disabled={processingDeleting}
|
disabled={processingDeleting}
|
||||||
title={t('delete_table_action')}
|
title={t('delete_table_action')}
|
||||||
>
|
>
|
||||||
<svg className="icons">
|
<svg className="icons icon12">
|
||||||
<use xlinkHref="#delete" />
|
<use xlinkHref="#delete" />
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import Select from 'react-select';
|
|||||||
import i18n from '../../../i18n';
|
import i18n from '../../../i18n';
|
||||||
import Tabs from '../../ui/Tabs';
|
import Tabs from '../../ui/Tabs';
|
||||||
import Examples from '../Dns/Upstream/Examples';
|
import Examples from '../Dns/Upstream/Examples';
|
||||||
import { toggleAllServices, trimLinesAndRemoveEmpty } from '../../../helpers/helpers';
|
import { toggleAllServices, trimLinesAndRemoveEmpty, captitalizeWords } from '../../../helpers/helpers';
|
||||||
import {
|
import {
|
||||||
renderInputField,
|
renderInputField,
|
||||||
renderGroupField,
|
renderGroupField,
|
||||||
@@ -40,9 +40,16 @@ const settingsCheckboxes = [
|
|||||||
name: 'parental_enabled',
|
name: 'parental_enabled',
|
||||||
placeholder: 'use_adguard_parental',
|
placeholder: 'use_adguard_parental',
|
||||||
},
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const logAndStatsCheckboxes = [
|
||||||
{
|
{
|
||||||
name: 'safesearch_enabled',
|
name: 'ignore_querylog',
|
||||||
placeholder: 'enforce_safe_search',
|
placeholder: 'ignore_query_log',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ignore_statistics',
|
||||||
|
placeholder: 'ignore_statistics',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const validate = (values) => {
|
const validate = (values) => {
|
||||||
@@ -139,8 +146,12 @@ let Form = (props) => {
|
|||||||
processingUpdating,
|
processingUpdating,
|
||||||
invalid,
|
invalid,
|
||||||
tagsOptions,
|
tagsOptions,
|
||||||
|
initialValues,
|
||||||
} = props;
|
} = props;
|
||||||
const services = useSelector((store) => store?.services);
|
const services = useSelector((store) => store?.services);
|
||||||
|
const { safe_search } = initialValues;
|
||||||
|
const safeSearchServices = { ...safe_search };
|
||||||
|
delete safeSearchServices.enabled;
|
||||||
|
|
||||||
const [activeTabLabel, setActiveTabLabel] = useState('settings');
|
const [activeTabLabel, setActiveTabLabel] = useState('settings');
|
||||||
|
|
||||||
@@ -148,6 +159,9 @@ let Form = (props) => {
|
|||||||
settings: {
|
settings: {
|
||||||
title: 'settings',
|
title: 'settings',
|
||||||
component: <div label="settings" title={props.t('main_settings')}>
|
component: <div label="settings" title={props.t('main_settings')}>
|
||||||
|
<div className="form__label--bot form__label--bold">
|
||||||
|
{t('protection_section_label')}
|
||||||
|
</div>
|
||||||
{settingsCheckboxes.map((setting) => (
|
{settingsCheckboxes.map((setting) => (
|
||||||
<div className="form__group" key={setting.name}>
|
<div className="form__group" key={setting.name}>
|
||||||
<Field
|
<Field
|
||||||
@@ -163,6 +177,41 @@ let Form = (props) => {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
<div className="form__group">
|
||||||
|
<Field
|
||||||
|
name="safe_search.enabled"
|
||||||
|
type="checkbox"
|
||||||
|
component={CheckboxField}
|
||||||
|
placeholder={t('enforce_safe_search')}
|
||||||
|
disabled={useGlobalSettings}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className='form__group--inner'>
|
||||||
|
{Object.keys(safeSearchServices).map((searchKey) => (
|
||||||
|
<div key={searchKey}>
|
||||||
|
<Field
|
||||||
|
name={`safe_search.${searchKey}`}
|
||||||
|
type="checkbox"
|
||||||
|
component={CheckboxField}
|
||||||
|
placeholder={captitalizeWords(searchKey)}
|
||||||
|
disabled={useGlobalSettings}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
<div className="form__label--bold form__label--top form__label--bot">
|
||||||
|
{t('log_and_stats_section_label')}
|
||||||
|
</div>
|
||||||
|
{logAndStatsCheckboxes.map((setting) => (
|
||||||
|
<div className="form__group" key={setting.name}>
|
||||||
|
<Field
|
||||||
|
name={setting.name}
|
||||||
|
type="checkbox"
|
||||||
|
component={CheckboxField}
|
||||||
|
placeholder={t(setting.placeholder)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
</div>,
|
</div>,
|
||||||
},
|
},
|
||||||
block_services: {
|
block_services: {
|
||||||
@@ -358,6 +407,7 @@ Form.propTypes = {
|
|||||||
processingUpdating: PropTypes.bool.isRequired,
|
processingUpdating: PropTypes.bool.isRequired,
|
||||||
invalid: PropTypes.bool.isRequired,
|
invalid: PropTypes.bool.isRequired,
|
||||||
tagsOptions: PropTypes.array.isRequired,
|
tagsOptions: PropTypes.array.isRequired,
|
||||||
|
initialValues: PropTypes.object,
|
||||||
};
|
};
|
||||||
|
|
||||||
const selector = formValueSelector(FORM_NAME.CLIENT);
|
const selector = formValueSelector(FORM_NAME.CLIENT);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
border: 1px solid #eee;
|
border: 1px solid var(--card-border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
@@ -54,6 +54,12 @@
|
|||||||
color: #495057;
|
color: #495057;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.service__icon svg {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
fill: #495057;
|
||||||
|
}
|
||||||
|
|
||||||
.service--global .service__icon {
|
.service--global .service__icon {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import ReactTable from 'react-table';
|
import ReactTable from 'react-table';
|
||||||
import { Trans, withTranslation } from 'react-i18next';
|
import { Trans, withTranslation } from 'react-i18next';
|
||||||
import { LEASES_TABLE_DEFAULT_PAGE_SIZE } from '../../../helpers/constants';
|
import { LEASES_TABLE_DEFAULT_PAGE_SIZE } from '../../../helpers/constants';
|
||||||
import { sortIp } from '../../../helpers/helpers';
|
import { sortIp } from '../../../helpers/helpers';
|
||||||
|
import { toggleLeaseModal } from '../../../actions';
|
||||||
|
|
||||||
class Leases extends Component {
|
class Leases extends Component {
|
||||||
cellWrap = ({ value }) => (
|
cellWrap = ({ value }) => (
|
||||||
@@ -14,6 +16,30 @@ class Leases extends Component {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
convertToStatic = (data) => () => {
|
||||||
|
const { dispatch } = this.props;
|
||||||
|
dispatch(toggleLeaseModal(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
makeStatic = ({ row }) => {
|
||||||
|
const { t, disabledLeasesButton } = this.props;
|
||||||
|
return (
|
||||||
|
<div className="logs__row logs__row--center">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="btn btn-icon btn-icon--green btn-outline-secondary btn-sm"
|
||||||
|
title={t('make_static')}
|
||||||
|
onClick={this.convertToStatic(row)}
|
||||||
|
disabled={disabledLeasesButton}
|
||||||
|
>
|
||||||
|
<svg className="icons icon12">
|
||||||
|
<use xlinkHref="#plus" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { leases, t } = this.props;
|
const { leases, t } = this.props;
|
||||||
return (
|
return (
|
||||||
@@ -23,20 +49,27 @@ class Leases extends Component {
|
|||||||
{
|
{
|
||||||
Header: 'MAC',
|
Header: 'MAC',
|
||||||
accessor: 'mac',
|
accessor: 'mac',
|
||||||
|
minWidth: 180,
|
||||||
Cell: this.cellWrap,
|
Cell: this.cellWrap,
|
||||||
}, {
|
}, {
|
||||||
Header: 'IP',
|
Header: 'IP',
|
||||||
accessor: 'ip',
|
accessor: 'ip',
|
||||||
|
minWidth: 230,
|
||||||
Cell: this.cellWrap,
|
Cell: this.cellWrap,
|
||||||
sortMethod: sortIp,
|
sortMethod: sortIp,
|
||||||
}, {
|
}, {
|
||||||
Header: <Trans>dhcp_table_hostname</Trans>,
|
Header: <Trans>dhcp_table_hostname</Trans>,
|
||||||
accessor: 'hostname',
|
accessor: 'hostname',
|
||||||
|
minWidth: 230,
|
||||||
Cell: this.cellWrap,
|
Cell: this.cellWrap,
|
||||||
}, {
|
}, {
|
||||||
Header: <Trans>dhcp_table_expires</Trans>,
|
Header: <Trans>dhcp_table_expires</Trans>,
|
||||||
accessor: 'expires',
|
accessor: 'expires',
|
||||||
|
minWidth: 220,
|
||||||
Cell: this.cellWrap,
|
Cell: this.cellWrap,
|
||||||
|
}, {
|
||||||
|
Header: <Trans>actions_table_header</Trans>,
|
||||||
|
Cell: this.makeStatic,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
pageSize={LEASES_TABLE_DEFAULT_PAGE_SIZE}
|
pageSize={LEASES_TABLE_DEFAULT_PAGE_SIZE}
|
||||||
@@ -53,6 +86,8 @@ class Leases extends Component {
|
|||||||
Leases.propTypes = {
|
Leases.propTypes = {
|
||||||
leases: PropTypes.array,
|
leases: PropTypes.array,
|
||||||
t: PropTypes.func,
|
t: PropTypes.func,
|
||||||
|
dispatch: PropTypes.func,
|
||||||
|
disabledLeasesButton: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default withTranslation()(Leases);
|
export default withTranslation()(connect(() => ({}), (dispatch) => ({ dispatch }))(Leases));
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import React from 'react';
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { Field, reduxForm } from 'redux-form';
|
import { Field, reduxForm } from 'redux-form';
|
||||||
import { Trans, useTranslation } from 'react-i18next';
|
import { Trans, useTranslation } from 'react-i18next';
|
||||||
import { useDispatch } from 'react-redux';
|
import { useDispatch, useSelector, shallowEqual } from 'react-redux';
|
||||||
|
|
||||||
import { renderInputField, normalizeMac } from '../../../../helpers/form';
|
import { renderInputField, normalizeMac } from '../../../../helpers/form';
|
||||||
import {
|
import {
|
||||||
@@ -25,6 +25,7 @@ const Form = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
const dynamicLease = useSelector((store) => store.dhcp.leaseModalConfig, shallowEqual);
|
||||||
|
|
||||||
const onClick = () => {
|
const onClick = () => {
|
||||||
reset();
|
reset();
|
||||||
@@ -87,7 +88,7 @@ const Form = ({
|
|||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
className="btn btn-success btn-standard"
|
className="btn btn-success btn-standard"
|
||||||
disabled={submitting || pristine || processingAdding}
|
disabled={submitting || processingAdding || (pristine && !dynamicLease)}
|
||||||
>
|
>
|
||||||
<Trans>save_btn</Trans>
|
<Trans>save_btn</Trans>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import React from 'react';
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { Trans, withTranslation } from 'react-i18next';
|
import { Trans, withTranslation } from 'react-i18next';
|
||||||
import ReactModal from 'react-modal';
|
import ReactModal from 'react-modal';
|
||||||
import { useDispatch } from 'react-redux';
|
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
|
||||||
import Form from './Form';
|
import Form from './Form';
|
||||||
import { toggleLeaseModal } from '../../../../actions';
|
import { toggleLeaseModal } from '../../../../actions';
|
||||||
|
|
||||||
@@ -18,6 +18,9 @@ const Modal = ({
|
|||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
const toggleModal = () => dispatch(toggleLeaseModal());
|
const toggleModal = () => dispatch(toggleLeaseModal());
|
||||||
|
const leaseInitialData = useSelector(
|
||||||
|
(state) => state.dhcp.leaseModalConfig, shallowEqual,
|
||||||
|
) || {};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ReactModal
|
<ReactModal
|
||||||
@@ -37,9 +40,9 @@ const Modal = ({
|
|||||||
</div>
|
</div>
|
||||||
<Form
|
<Form
|
||||||
initialValues={{
|
initialValues={{
|
||||||
mac: '',
|
mac: leaseInitialData.mac ?? '',
|
||||||
ip: '',
|
ip: leaseInitialData.ip ?? '',
|
||||||
hostname: '',
|
hostname: leaseInitialData.hostname ?? '',
|
||||||
cidr,
|
cidr,
|
||||||
rangeStart,
|
rangeStart,
|
||||||
rangeEnd,
|
rangeEnd,
|
||||||
|
|||||||
@@ -54,17 +54,20 @@ const StaticLeases = ({
|
|||||||
{
|
{
|
||||||
Header: 'MAC',
|
Header: 'MAC',
|
||||||
accessor: 'mac',
|
accessor: 'mac',
|
||||||
|
minWidth: 180,
|
||||||
Cell: cellWrap,
|
Cell: cellWrap,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Header: 'IP',
|
Header: 'IP',
|
||||||
accessor: 'ip',
|
accessor: 'ip',
|
||||||
|
minWidth: 230,
|
||||||
sortMethod: sortIp,
|
sortMethod: sortIp,
|
||||||
Cell: cellWrap,
|
Cell: cellWrap,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Header: <Trans>dhcp_table_hostname</Trans>,
|
Header: <Trans>dhcp_table_hostname</Trans>,
|
||||||
accessor: 'hostname',
|
accessor: 'hostname',
|
||||||
|
minWidth: 230,
|
||||||
Cell: cellWrap,
|
Cell: cellWrap,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -188,8 +188,8 @@ const Dhcp = () => {
|
|||||||
|
|
||||||
const inputtedIPv4values = dhcp?.values?.v4?.gateway_ip && dhcp?.values?.v4?.subnet_mask;
|
const inputtedIPv4values = dhcp?.values?.v4?.gateway_ip && dhcp?.values?.v4?.subnet_mask;
|
||||||
const isEmptyConfig = !Object.values(dhcp?.values?.v4 ?? {}).some(Boolean);
|
const isEmptyConfig = !Object.values(dhcp?.values?.v4 ?? {}).some(Boolean);
|
||||||
const disabledLeasesButton = dhcp?.syncErrors || interfaces?.syncErrors
|
const disabledLeasesButton = Boolean(dhcp?.syncErrors || interfaces?.syncErrors
|
||||||
|| !isInterfaceIncludesIpv4 || isEmptyConfig || processingConfig || !inputtedIPv4values;
|
|| !isInterfaceIncludesIpv4 || isEmptyConfig || processingConfig || !inputtedIPv4values);
|
||||||
const cidr = inputtedIPv4values ? `${dhcp?.values?.v4?.gateway_ip}/${subnetMaskToBitMask(dhcp?.values?.v4?.subnet_mask)}` : '';
|
const cidr = inputtedIPv4values ? `${dhcp?.values?.v4?.gateway_ip}/${subnetMaskToBitMask(dhcp?.values?.v4?.subnet_mask)}` : '';
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
@@ -260,7 +260,7 @@ const Dhcp = () => {
|
|||||||
>
|
>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col">
|
<div className="col">
|
||||||
<Leases leases={leases} />
|
<Leases leases={leases} disabledLeasesButton={disabledLeasesButton}/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Card>}
|
</Card>}
|
||||||
|
|||||||
@@ -13,15 +13,11 @@ import {
|
|||||||
validateIpv4,
|
validateIpv4,
|
||||||
validateIpv6,
|
validateIpv6,
|
||||||
validateRequiredValue,
|
validateRequiredValue,
|
||||||
|
validateIp,
|
||||||
} from '../../../../helpers/validators';
|
} from '../../../../helpers/validators';
|
||||||
import { BLOCKING_MODES, FORM_NAME, UINT32_RANGE } from '../../../../helpers/constants';
|
import { BLOCKING_MODES, FORM_NAME, UINT32_RANGE } from '../../../../helpers/constants';
|
||||||
|
|
||||||
const checkboxes = [
|
const checkboxes = [
|
||||||
{
|
|
||||||
name: 'edns_cs_enabled',
|
|
||||||
placeholder: 'edns_enable',
|
|
||||||
subtitle: 'edns_cs_desc',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: 'dnssec_enabled',
|
name: 'dnssec_enabled',
|
||||||
placeholder: 'dnssec_enable',
|
placeholder: 'dnssec_enable',
|
||||||
@@ -66,6 +62,8 @@ const Form = ({
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const {
|
const {
|
||||||
blocking_mode,
|
blocking_mode,
|
||||||
|
edns_cs_enabled,
|
||||||
|
edns_cs_use_custom,
|
||||||
} = useSelector((state) => state.form[FORM_NAME.BLOCKING_MODE].values ?? {}, shallowEqual);
|
} = useSelector((state) => state.form[FORM_NAME.BLOCKING_MODE].values ?? {}, shallowEqual);
|
||||||
|
|
||||||
return <form onSubmit={handleSubmit}>
|
return <form onSubmit={handleSubmit}>
|
||||||
@@ -92,6 +90,39 @@ const Form = ({
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="col-12">
|
||||||
|
<div className="form__group form__group--settings">
|
||||||
|
<Field
|
||||||
|
name="edns_cs_enabled"
|
||||||
|
type="checkbox"
|
||||||
|
component={CheckboxField}
|
||||||
|
placeholder={t('edns_enable')}
|
||||||
|
disabled={processing}
|
||||||
|
subtitle={t('edns_cs_desc')}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="col-12 form__group form__group--inner">
|
||||||
|
<div className="form__group ">
|
||||||
|
<Field
|
||||||
|
name="edns_cs_use_custom"
|
||||||
|
type="checkbox"
|
||||||
|
component={CheckboxField}
|
||||||
|
placeholder={t('edns_use_custom_ip')}
|
||||||
|
disabled={processing || !edns_cs_enabled}
|
||||||
|
subtitle={t('edns_use_custom_ip_desc')}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{edns_cs_use_custom && (<Field
|
||||||
|
name="edns_cs_custom_ip"
|
||||||
|
component={renderInputField}
|
||||||
|
className="form-control"
|
||||||
|
placeholder={t('form_enter_ip')}
|
||||||
|
validate={[validateIp, validateRequiredValue]}
|
||||||
|
/>)}
|
||||||
|
|
||||||
|
</div>
|
||||||
{checkboxes.map(({ name, placeholder, subtitle }) => <div className="col-12" key={name}>
|
{checkboxes.map(({ name, placeholder, subtitle }) => <div className="col-12" key={name}>
|
||||||
<div className="form__group form__group--settings">
|
<div className="form__group form__group--settings">
|
||||||
<Field
|
<Field
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ const Config = () => {
|
|||||||
blocking_ipv4,
|
blocking_ipv4,
|
||||||
blocking_ipv6,
|
blocking_ipv6,
|
||||||
edns_cs_enabled,
|
edns_cs_enabled,
|
||||||
|
edns_cs_use_custom,
|
||||||
|
edns_cs_custom_ip,
|
||||||
dnssec_enabled,
|
dnssec_enabled,
|
||||||
disable_ipv6,
|
disable_ipv6,
|
||||||
processingSetConfig,
|
processingSetConfig,
|
||||||
@@ -39,6 +41,8 @@ const Config = () => {
|
|||||||
edns_cs_enabled,
|
edns_cs_enabled,
|
||||||
disable_ipv6,
|
disable_ipv6,
|
||||||
dnssec_enabled,
|
dnssec_enabled,
|
||||||
|
edns_cs_use_custom,
|
||||||
|
edns_cs_custom_ip,
|
||||||
}}
|
}}
|
||||||
onSubmit={handleFormSubmit}
|
onSubmit={handleFormSubmit}
|
||||||
processing={processingSetConfig}
|
processing={processingSetConfig}
|
||||||
|
|||||||
@@ -1,21 +1,42 @@
|
|||||||
import React from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { Field, reduxForm } from 'redux-form';
|
import {
|
||||||
|
change,
|
||||||
|
Field,
|
||||||
|
formValueSelector,
|
||||||
|
reduxForm,
|
||||||
|
} from 'redux-form';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
import { Trans, withTranslation } from 'react-i18next';
|
import { Trans, withTranslation } from 'react-i18next';
|
||||||
import flow from 'lodash/flow';
|
import flow from 'lodash/flow';
|
||||||
|
|
||||||
import { CheckboxField, renderRadioField, toFloatNumber } from '../../../helpers/form';
|
import {
|
||||||
import { FORM_NAME, QUERY_LOG_INTERVALS_DAYS } from '../../../helpers/constants';
|
CheckboxField,
|
||||||
|
toFloatNumber,
|
||||||
|
renderTextareaField, renderInputField, renderRadioField,
|
||||||
|
} from '../../../helpers/form';
|
||||||
|
import {
|
||||||
|
FORM_NAME,
|
||||||
|
QUERY_LOG_INTERVALS_DAYS,
|
||||||
|
HOUR,
|
||||||
|
DAY,
|
||||||
|
RETENTION_CUSTOM,
|
||||||
|
RETENTION_CUSTOM_INPUT,
|
||||||
|
RETENTION_RANGE,
|
||||||
|
CUSTOM_INTERVAL,
|
||||||
|
} from '../../../helpers/constants';
|
||||||
import '../FormButton.css';
|
import '../FormButton.css';
|
||||||
|
|
||||||
const getIntervalTitle = (interval, t) => {
|
const getIntervalTitle = (interval, t) => {
|
||||||
switch (interval) {
|
switch (interval) {
|
||||||
case 0.25:
|
case RETENTION_CUSTOM:
|
||||||
|
return t('settings_custom');
|
||||||
|
case 6 * HOUR:
|
||||||
return t('interval_6_hour');
|
return t('interval_6_hour');
|
||||||
case 1:
|
case DAY:
|
||||||
return t('interval_24_hour');
|
return t('interval_24_hour');
|
||||||
default:
|
default:
|
||||||
return t('interval_days', { count: interval });
|
return t('interval_days', { count: interval / DAY });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -32,11 +53,26 @@ const getIntervalFields = (processing, t, toNumber) => QUERY_LOG_INTERVALS_DAYS.
|
|||||||
/>
|
/>
|
||||||
));
|
));
|
||||||
|
|
||||||
const Form = (props) => {
|
let Form = (props) => {
|
||||||
const {
|
const {
|
||||||
handleSubmit, submitting, invalid, processing, processingClear, handleClear, t,
|
handleSubmit,
|
||||||
|
submitting,
|
||||||
|
invalid,
|
||||||
|
processing,
|
||||||
|
processingClear,
|
||||||
|
handleClear,
|
||||||
|
t,
|
||||||
|
interval,
|
||||||
|
customInterval,
|
||||||
|
dispatch,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (QUERY_LOG_INTERVALS_DAYS.includes(interval)) {
|
||||||
|
dispatch(change(FORM_NAME.LOG_CONFIG, CUSTOM_INTERVAL, null));
|
||||||
|
}
|
||||||
|
}, [interval]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<form onSubmit={handleSubmit}>
|
<form onSubmit={handleSubmit}>
|
||||||
<div className="form__group form__group--settings">
|
<div className="form__group form__group--settings">
|
||||||
@@ -63,14 +99,66 @@ const Form = (props) => {
|
|||||||
</label>
|
</label>
|
||||||
<div className="form__group form__group--settings">
|
<div className="form__group form__group--settings">
|
||||||
<div className="custom-controls-stacked">
|
<div className="custom-controls-stacked">
|
||||||
|
<Field
|
||||||
|
key={RETENTION_CUSTOM}
|
||||||
|
name="interval"
|
||||||
|
type="radio"
|
||||||
|
component={renderRadioField}
|
||||||
|
value={QUERY_LOG_INTERVALS_DAYS.includes(interval)
|
||||||
|
? RETENTION_CUSTOM
|
||||||
|
: interval
|
||||||
|
}
|
||||||
|
placeholder={getIntervalTitle(RETENTION_CUSTOM, t)}
|
||||||
|
normalize={toFloatNumber}
|
||||||
|
disabled={processing}
|
||||||
|
/>
|
||||||
|
{!QUERY_LOG_INTERVALS_DAYS.includes(interval) && (
|
||||||
|
<div className="form__group--input">
|
||||||
|
<div className="form__desc form__desc--top">
|
||||||
|
{t('custom_rotation_input')}
|
||||||
|
</div>
|
||||||
|
<Field
|
||||||
|
key={RETENTION_CUSTOM_INPUT}
|
||||||
|
name={CUSTOM_INTERVAL}
|
||||||
|
type="number"
|
||||||
|
className="form-control"
|
||||||
|
component={renderInputField}
|
||||||
|
disabled={processing}
|
||||||
|
normalize={toFloatNumber}
|
||||||
|
min={RETENTION_RANGE.MIN}
|
||||||
|
max={RETENTION_RANGE.MAX}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
{getIntervalFields(processing, t, toFloatNumber)}
|
{getIntervalFields(processing, t, toFloatNumber)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<label className="form__label form__label--with-desc">
|
||||||
|
<Trans>ignore_domains_title</Trans>
|
||||||
|
</label>
|
||||||
|
<div className="form__desc form__desc--top">
|
||||||
|
<Trans>ignore_domains_desc_query</Trans>
|
||||||
|
</div>
|
||||||
|
<div className="form__group form__group--settings">
|
||||||
|
<Field
|
||||||
|
name="ignored"
|
||||||
|
type="textarea"
|
||||||
|
className="form-control form-control--textarea font-monospace text-input"
|
||||||
|
component={renderTextareaField}
|
||||||
|
placeholder={t('ignore_domains')}
|
||||||
|
disabled={processing}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<div className="mt-5">
|
<div className="mt-5">
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
className="btn btn-success btn-standard btn-large"
|
className="btn btn-success btn-standard btn-large"
|
||||||
disabled={submitting || invalid || processing}
|
disabled={
|
||||||
|
submitting
|
||||||
|
|| invalid
|
||||||
|
|| processing
|
||||||
|
|| (!QUERY_LOG_INTERVALS_DAYS.includes(interval) && !customInterval)
|
||||||
|
}
|
||||||
>
|
>
|
||||||
<Trans>save_btn</Trans>
|
<Trans>save_btn</Trans>
|
||||||
</button>
|
</button>
|
||||||
@@ -95,8 +183,22 @@ Form.propTypes = {
|
|||||||
processing: PropTypes.bool.isRequired,
|
processing: PropTypes.bool.isRequired,
|
||||||
processingClear: PropTypes.bool.isRequired,
|
processingClear: PropTypes.bool.isRequired,
|
||||||
t: PropTypes.func.isRequired,
|
t: PropTypes.func.isRequired,
|
||||||
|
interval: PropTypes.number,
|
||||||
|
customInterval: PropTypes.number,
|
||||||
|
dispatch: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const selector = formValueSelector(FORM_NAME.LOG_CONFIG);
|
||||||
|
|
||||||
|
Form = connect((state) => {
|
||||||
|
const interval = selector(state, 'interval');
|
||||||
|
const customInterval = selector(state, CUSTOM_INTERVAL);
|
||||||
|
return {
|
||||||
|
interval,
|
||||||
|
customInterval,
|
||||||
|
};
|
||||||
|
})(Form);
|
||||||
|
|
||||||
export default flow([
|
export default flow([
|
||||||
withTranslation(),
|
withTranslation(),
|
||||||
reduxForm({ form: FORM_NAME.LOG_CONFIG }),
|
reduxForm({ form: FORM_NAME.LOG_CONFIG }),
|
||||||
|
|||||||
@@ -4,19 +4,28 @@ import { withTranslation } from 'react-i18next';
|
|||||||
|
|
||||||
import Card from '../../ui/Card';
|
import Card from '../../ui/Card';
|
||||||
import Form from './Form';
|
import Form from './Form';
|
||||||
|
import { HOUR } from '../../../helpers/constants';
|
||||||
|
|
||||||
class LogsConfig extends Component {
|
class LogsConfig extends Component {
|
||||||
handleFormSubmit = (values) => {
|
handleFormSubmit = (values) => {
|
||||||
const { t, interval: prevInterval } = this.props;
|
const { t, interval: prevInterval } = this.props;
|
||||||
const { interval } = values;
|
const { interval, customInterval, ...rest } = values;
|
||||||
|
|
||||||
if (interval !== prevInterval) {
|
const newInterval = customInterval ? customInterval * HOUR : interval;
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
...rest,
|
||||||
|
ignored: values.ignored ? values.ignored.split('\n') : [],
|
||||||
|
interval: newInterval,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (newInterval < prevInterval) {
|
||||||
// eslint-disable-next-line no-alert
|
// eslint-disable-next-line no-alert
|
||||||
if (window.confirm(t('query_log_retention_confirm'))) {
|
if (window.confirm(t('query_log_retention_confirm'))) {
|
||||||
this.props.setLogsConfig(values);
|
this.props.setLogsConfig(data);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.props.setLogsConfig(values);
|
this.props.setLogsConfig(data);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -30,7 +39,14 @@ class LogsConfig extends Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
t, enabled, interval, processing, processingClear, anonymize_client_ip,
|
t,
|
||||||
|
enabled,
|
||||||
|
interval,
|
||||||
|
processing,
|
||||||
|
processingClear,
|
||||||
|
anonymize_client_ip,
|
||||||
|
ignored,
|
||||||
|
customInterval,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -44,7 +60,9 @@ class LogsConfig extends Component {
|
|||||||
initialValues={{
|
initialValues={{
|
||||||
enabled,
|
enabled,
|
||||||
interval,
|
interval,
|
||||||
|
customInterval,
|
||||||
anonymize_client_ip,
|
anonymize_client_ip,
|
||||||
|
ignored: ignored.join('\n'),
|
||||||
}}
|
}}
|
||||||
onSubmit={this.handleFormSubmit}
|
onSubmit={this.handleFormSubmit}
|
||||||
processing={processing}
|
processing={processing}
|
||||||
@@ -59,9 +77,11 @@ class LogsConfig extends Component {
|
|||||||
|
|
||||||
LogsConfig.propTypes = {
|
LogsConfig.propTypes = {
|
||||||
interval: PropTypes.number.isRequired,
|
interval: PropTypes.number.isRequired,
|
||||||
|
customInterval: PropTypes.number,
|
||||||
enabled: PropTypes.bool.isRequired,
|
enabled: PropTypes.bool.isRequired,
|
||||||
anonymize_client_ip: PropTypes.bool.isRequired,
|
anonymize_client_ip: PropTypes.bool.isRequired,
|
||||||
processing: PropTypes.bool.isRequired,
|
processing: PropTypes.bool.isRequired,
|
||||||
|
ignored: PropTypes.array.isRequired,
|
||||||
processingClear: PropTypes.bool.isRequired,
|
processingClear: PropTypes.bool.isRequired,
|
||||||
setLogsConfig: PropTypes.func.isRequired,
|
setLogsConfig: PropTypes.func.isRequired,
|
||||||
clearLogs: PropTypes.func.isRequired,
|
clearLogs: PropTypes.func.isRequired,
|
||||||
|
|||||||
@@ -18,10 +18,23 @@
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form__group--input {
|
||||||
|
max-width: 300px;
|
||||||
|
margin: 0 1.5rem 10px;
|
||||||
|
}
|
||||||
|
|
||||||
.form__group--checkbox {
|
.form__group--checkbox {
|
||||||
margin-bottom: 25px;
|
margin-bottom: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form__group--inner .form__group--checkbox {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form__group--inner .form__group--checkbox:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.form__inline {
|
.form__inline {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
@@ -77,7 +90,7 @@
|
|||||||
.form__desc {
|
.form__desc {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
color: rgba(74, 74, 74, 0.7);
|
color: var(--scolor);
|
||||||
}
|
}
|
||||||
|
|
||||||
.form__desc--top {
|
.form__desc--top {
|
||||||
@@ -92,6 +105,14 @@
|
|||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form__label--bot {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form__label--top {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
.form__status {
|
.form__status {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
|||||||
@@ -1,34 +1,62 @@
|
|||||||
import React from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { Field, reduxForm } from 'redux-form';
|
import {
|
||||||
|
change, Field, formValueSelector, reduxForm,
|
||||||
|
} from 'redux-form';
|
||||||
import { Trans, withTranslation } from 'react-i18next';
|
import { Trans, withTranslation } from 'react-i18next';
|
||||||
import flow from 'lodash/flow';
|
import flow from 'lodash/flow';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
|
|
||||||
import { renderRadioField, toNumber, CheckboxField } from '../../../helpers/form';
|
import {
|
||||||
import { FORM_NAME, STATS_INTERVALS_DAYS, DISABLED_STATS_INTERVAL } from '../../../helpers/constants';
|
renderRadioField,
|
||||||
|
toNumber,
|
||||||
|
CheckboxField,
|
||||||
|
renderTextareaField,
|
||||||
|
toFloatNumber,
|
||||||
|
renderInputField,
|
||||||
|
} from '../../../helpers/form';
|
||||||
|
import {
|
||||||
|
FORM_NAME,
|
||||||
|
STATS_INTERVALS_DAYS,
|
||||||
|
DAY,
|
||||||
|
RETENTION_CUSTOM,
|
||||||
|
RETENTION_CUSTOM_INPUT,
|
||||||
|
CUSTOM_INTERVAL,
|
||||||
|
RETENTION_RANGE,
|
||||||
|
} from '../../../helpers/constants';
|
||||||
import '../FormButton.css';
|
import '../FormButton.css';
|
||||||
|
|
||||||
const getIntervalTitle = (interval, t) => {
|
const getIntervalTitle = (intervalMs, t) => {
|
||||||
switch (interval) {
|
switch (intervalMs) {
|
||||||
case 1:
|
case RETENTION_CUSTOM:
|
||||||
|
return t('settings_custom');
|
||||||
|
case DAY:
|
||||||
return t('interval_24_hour');
|
return t('interval_24_hour');
|
||||||
default:
|
default:
|
||||||
return t('interval_days', { count: interval });
|
return t('interval_days', { count: intervalMs / DAY });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const Form = (props) => {
|
let Form = (props) => {
|
||||||
const {
|
const {
|
||||||
handleSubmit,
|
handleSubmit,
|
||||||
change,
|
|
||||||
processing,
|
processing,
|
||||||
submitting,
|
submitting,
|
||||||
invalid,
|
invalid,
|
||||||
handleReset,
|
handleReset,
|
||||||
processingReset,
|
processingReset,
|
||||||
t,
|
t,
|
||||||
|
interval,
|
||||||
|
customInterval,
|
||||||
|
dispatch,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (STATS_INTERVALS_DAYS.includes(interval)) {
|
||||||
|
dispatch(change(FORM_NAME.STATS_CONFIG, CUSTOM_INTERVAL, null));
|
||||||
|
}
|
||||||
|
}, [interval]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<form onSubmit={handleSubmit}>
|
<form onSubmit={handleSubmit}>
|
||||||
<div className="form__group form__group--settings">
|
<div className="form__group form__group--settings">
|
||||||
@@ -38,13 +66,6 @@ const Form = (props) => {
|
|||||||
component={CheckboxField}
|
component={CheckboxField}
|
||||||
placeholder={t('statistics_enable')}
|
placeholder={t('statistics_enable')}
|
||||||
disabled={processing}
|
disabled={processing}
|
||||||
onChange={(event) => {
|
|
||||||
if (event.target.checked) {
|
|
||||||
change('interval', STATS_INTERVALS_DAYS[0]);
|
|
||||||
} else {
|
|
||||||
change('interval', DISABLED_STATS_INTERVAL);
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<label className="form__label form__label--with-desc">
|
<label className="form__label form__label--with-desc">
|
||||||
@@ -55,6 +76,37 @@ const Form = (props) => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="form__group form__group--settings mt-2">
|
<div className="form__group form__group--settings mt-2">
|
||||||
<div className="custom-controls-stacked">
|
<div className="custom-controls-stacked">
|
||||||
|
<Field
|
||||||
|
key={RETENTION_CUSTOM}
|
||||||
|
name="interval"
|
||||||
|
type="radio"
|
||||||
|
component={renderRadioField}
|
||||||
|
value={STATS_INTERVALS_DAYS.includes(interval)
|
||||||
|
? RETENTION_CUSTOM
|
||||||
|
: interval
|
||||||
|
}
|
||||||
|
placeholder={getIntervalTitle(RETENTION_CUSTOM, t)}
|
||||||
|
normalize={toFloatNumber}
|
||||||
|
disabled={processing}
|
||||||
|
/>
|
||||||
|
{!STATS_INTERVALS_DAYS.includes(interval) && (
|
||||||
|
<div className="form__group--input">
|
||||||
|
<div className="form__desc form__desc--top">
|
||||||
|
{t('custom_retention_input')}
|
||||||
|
</div>
|
||||||
|
<Field
|
||||||
|
key={RETENTION_CUSTOM_INPUT}
|
||||||
|
name={CUSTOM_INTERVAL}
|
||||||
|
type="number"
|
||||||
|
className="form-control"
|
||||||
|
component={renderInputField}
|
||||||
|
disabled={processing}
|
||||||
|
normalize={toFloatNumber}
|
||||||
|
min={RETENTION_RANGE.MIN}
|
||||||
|
max={RETENTION_RANGE.MAX}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
{STATS_INTERVALS_DAYS.map((interval) => (
|
{STATS_INTERVALS_DAYS.map((interval) => (
|
||||||
<Field
|
<Field
|
||||||
key={interval}
|
key={interval}
|
||||||
@@ -65,20 +117,36 @@ const Form = (props) => {
|
|||||||
placeholder={getIntervalTitle(interval, t)}
|
placeholder={getIntervalTitle(interval, t)}
|
||||||
normalize={toNumber}
|
normalize={toNumber}
|
||||||
disabled={processing}
|
disabled={processing}
|
||||||
onChange={(event) => {
|
|
||||||
if (event.target.checked) {
|
|
||||||
change('enabled', true);
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<label className="form__label form__label--with-desc">
|
||||||
|
<Trans>ignore_domains_title</Trans>
|
||||||
|
</label>
|
||||||
|
<div className="form__desc form__desc--top">
|
||||||
|
<Trans>ignore_domains_desc_stats</Trans>
|
||||||
|
</div>
|
||||||
|
<div className="form__group form__group--settings">
|
||||||
|
<Field
|
||||||
|
name="ignored"
|
||||||
|
type="textarea"
|
||||||
|
className="form-control form-control--textarea font-monospace text-input"
|
||||||
|
component={renderTextareaField}
|
||||||
|
placeholder={t('ignore_domains')}
|
||||||
|
disabled={processing}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<div className="mt-5">
|
<div className="mt-5">
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
className="btn btn-success btn-standard btn-large"
|
className="btn btn-success btn-standard btn-large"
|
||||||
disabled={submitting || invalid || processing}
|
disabled={
|
||||||
|
submitting
|
||||||
|
|| invalid
|
||||||
|
|| processing
|
||||||
|
|| (!STATS_INTERVALS_DAYS.includes(interval) && !customInterval)
|
||||||
|
}
|
||||||
>
|
>
|
||||||
<Trans>save_btn</Trans>
|
<Trans>save_btn</Trans>
|
||||||
</button>
|
</button>
|
||||||
@@ -104,8 +172,22 @@ Form.propTypes = {
|
|||||||
processing: PropTypes.bool.isRequired,
|
processing: PropTypes.bool.isRequired,
|
||||||
processingReset: PropTypes.bool.isRequired,
|
processingReset: PropTypes.bool.isRequired,
|
||||||
t: PropTypes.func.isRequired,
|
t: PropTypes.func.isRequired,
|
||||||
|
interval: PropTypes.number,
|
||||||
|
customInterval: PropTypes.number,
|
||||||
|
dispatch: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const selector = formValueSelector(FORM_NAME.STATS_CONFIG);
|
||||||
|
|
||||||
|
Form = connect((state) => {
|
||||||
|
const interval = selector(state, 'interval');
|
||||||
|
const customInterval = selector(state, CUSTOM_INTERVAL);
|
||||||
|
return {
|
||||||
|
interval,
|
||||||
|
customInterval,
|
||||||
|
};
|
||||||
|
})(Form);
|
||||||
|
|
||||||
export default flow([
|
export default flow([
|
||||||
withTranslation(),
|
withTranslation(),
|
||||||
reduxForm({ form: FORM_NAME.STATS_CONFIG }),
|
reduxForm({ form: FORM_NAME.STATS_CONFIG }),
|
||||||
|
|||||||
@@ -4,11 +4,20 @@ import { withTranslation } from 'react-i18next';
|
|||||||
|
|
||||||
import Card from '../../ui/Card';
|
import Card from '../../ui/Card';
|
||||||
import Form from './Form';
|
import Form from './Form';
|
||||||
|
import { HOUR } from '../../../helpers/constants';
|
||||||
|
|
||||||
class StatsConfig extends Component {
|
class StatsConfig extends Component {
|
||||||
handleFormSubmit = (values) => {
|
handleFormSubmit = ({
|
||||||
|
enabled, interval, ignored, customInterval,
|
||||||
|
}) => {
|
||||||
const { t, interval: prevInterval } = this.props;
|
const { t, interval: prevInterval } = this.props;
|
||||||
const config = { interval: values.interval };
|
const newInterval = customInterval ? customInterval * HOUR : interval;
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
enabled,
|
||||||
|
interval: newInterval,
|
||||||
|
ignored: ignored ? ignored.split('\n') : [],
|
||||||
|
};
|
||||||
|
|
||||||
if (config.interval < prevInterval) {
|
if (config.interval < prevInterval) {
|
||||||
if (window.confirm(t('statistics_retention_confirm'))) {
|
if (window.confirm(t('statistics_retention_confirm'))) {
|
||||||
@@ -29,7 +38,13 @@ class StatsConfig extends Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
t, interval, processing, processingReset,
|
t,
|
||||||
|
interval,
|
||||||
|
customInterval,
|
||||||
|
processing,
|
||||||
|
processingReset,
|
||||||
|
ignored,
|
||||||
|
enabled,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -42,7 +57,9 @@ class StatsConfig extends Component {
|
|||||||
<Form
|
<Form
|
||||||
initialValues={{
|
initialValues={{
|
||||||
interval,
|
interval,
|
||||||
enabled: !!interval,
|
customInterval,
|
||||||
|
enabled,
|
||||||
|
ignored: ignored.join('\n'),
|
||||||
}}
|
}}
|
||||||
onSubmit={this.handleFormSubmit}
|
onSubmit={this.handleFormSubmit}
|
||||||
processing={processing}
|
processing={processing}
|
||||||
@@ -57,6 +74,9 @@ class StatsConfig extends Component {
|
|||||||
|
|
||||||
StatsConfig.propTypes = {
|
StatsConfig.propTypes = {
|
||||||
interval: PropTypes.number.isRequired,
|
interval: PropTypes.number.isRequired,
|
||||||
|
customInterval: PropTypes.number,
|
||||||
|
ignored: PropTypes.array.isRequired,
|
||||||
|
enabled: PropTypes.bool.isRequired,
|
||||||
processing: PropTypes.bool.isRequired,
|
processing: PropTypes.bool.isRequired,
|
||||||
processingReset: PropTypes.bool.isRequired,
|
processingReset: PropTypes.bool.isRequired,
|
||||||
setStatsConfig: PropTypes.func.isRequired,
|
setStatsConfig: PropTypes.func.isRequired,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import Checkbox from '../ui/Checkbox';
|
|||||||
import Loading from '../ui/Loading';
|
import Loading from '../ui/Loading';
|
||||||
import PageTitle from '../ui/PageTitle';
|
import PageTitle from '../ui/PageTitle';
|
||||||
import Card from '../ui/Card';
|
import Card from '../ui/Card';
|
||||||
import { getObjectKeysSorted } from '../../helpers/helpers';
|
import { getObjectKeysSorted, captitalizeWords } from '../../helpers/helpers';
|
||||||
import './Settings.css';
|
import './Settings.css';
|
||||||
|
|
||||||
const ORDER_KEY = 'order';
|
const ORDER_KEY = 'order';
|
||||||
@@ -28,12 +28,6 @@ const SETTINGS = {
|
|||||||
subtitle: 'use_adguard_parental_hint',
|
subtitle: 'use_adguard_parental_hint',
|
||||||
[ORDER_KEY]: 1,
|
[ORDER_KEY]: 1,
|
||||||
},
|
},
|
||||||
safesearch: {
|
|
||||||
enabled: false,
|
|
||||||
title: 'enforce_safe_search',
|
|
||||||
subtitle: 'enforce_save_search_hint',
|
|
||||||
[ORDER_KEY]: 2,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Settings extends Component {
|
class Settings extends Component {
|
||||||
@@ -44,7 +38,7 @@ class Settings extends Component {
|
|||||||
this.props.getFilteringStatus();
|
this.props.getFilteringStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
renderSettings = (settings) => getObjectKeysSorted(settings, ORDER_KEY)
|
renderSettings = (settings) => getObjectKeysSorted(SETTINGS, ORDER_KEY)
|
||||||
.map((key) => {
|
.map((key) => {
|
||||||
const setting = settings[key];
|
const setting = settings[key];
|
||||||
const { enabled } = setting;
|
const { enabled } = setting;
|
||||||
@@ -55,6 +49,35 @@ class Settings extends Component {
|
|||||||
/>;
|
/>;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
renderSafeSearch = () => {
|
||||||
|
const { settings: { settingsList: { safesearch } } } = this.props;
|
||||||
|
const { enabled } = safesearch || {};
|
||||||
|
const searches = { ...(safesearch || {}) };
|
||||||
|
delete searches.enabled;
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Checkbox
|
||||||
|
enabled={enabled}
|
||||||
|
title='enforce_safe_search'
|
||||||
|
subtitle='enforce_save_search_hint'
|
||||||
|
handleChange={({ target: { checked: enabled } }) => this.props.toggleSetting('safesearch', { ...safesearch, enabled })}
|
||||||
|
/>
|
||||||
|
<div className='form__group--inner'>
|
||||||
|
{Object.keys(searches).map((searchKey) => (
|
||||||
|
<Checkbox
|
||||||
|
key={searchKey}
|
||||||
|
enabled={searches[searchKey]}
|
||||||
|
title={captitalizeWords(searchKey)}
|
||||||
|
subtitle=''
|
||||||
|
disabled={!safesearch.enabled}
|
||||||
|
handleChange={({ target: { checked } }) => this.props.toggleSetting('safesearch', { ...safesearch, [searchKey]: checked })}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
settings,
|
settings,
|
||||||
@@ -92,13 +115,16 @@ class Settings extends Component {
|
|||||||
setFiltersConfig={setFiltersConfig}
|
setFiltersConfig={setFiltersConfig}
|
||||||
/>
|
/>
|
||||||
{this.renderSettings(settings.settingsList)}
|
{this.renderSettings(settings.settingsList)}
|
||||||
|
{this.renderSafeSearch()}
|
||||||
</div>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-md-12">
|
<div className="col-md-12">
|
||||||
<LogsConfig
|
<LogsConfig
|
||||||
enabled={queryLogs.enabled}
|
enabled={queryLogs.enabled}
|
||||||
|
ignored={queryLogs.ignored}
|
||||||
interval={queryLogs.interval}
|
interval={queryLogs.interval}
|
||||||
|
customInterval={queryLogs.customInterval}
|
||||||
anonymize_client_ip={queryLogs.anonymize_client_ip}
|
anonymize_client_ip={queryLogs.anonymize_client_ip}
|
||||||
processing={queryLogs.processingSetConfig}
|
processing={queryLogs.processingSetConfig}
|
||||||
processingClear={queryLogs.processingClear}
|
processingClear={queryLogs.processingClear}
|
||||||
@@ -109,6 +135,9 @@ class Settings extends Component {
|
|||||||
<div className="col-md-12">
|
<div className="col-md-12">
|
||||||
<StatsConfig
|
<StatsConfig
|
||||||
interval={stats.interval}
|
interval={stats.interval}
|
||||||
|
customInterval={stats.customInterval}
|
||||||
|
ignored={stats.ignored}
|
||||||
|
enabled={stats.enabled}
|
||||||
processing={stats.processingSetConfig}
|
processing={stats.processingSetConfig}
|
||||||
processingReset={stats.processingReset}
|
processingReset={stats.processingReset}
|
||||||
setStatsConfig={setStatsConfig}
|
setStatsConfig={setStatsConfig}
|
||||||
@@ -139,16 +168,21 @@ Settings.propTypes = {
|
|||||||
stats: PropTypes.shape({
|
stats: PropTypes.shape({
|
||||||
processingGetConfig: PropTypes.bool,
|
processingGetConfig: PropTypes.bool,
|
||||||
interval: PropTypes.number,
|
interval: PropTypes.number,
|
||||||
|
customInterval: PropTypes.number,
|
||||||
|
enabled: PropTypes.bool,
|
||||||
|
ignored: PropTypes.array,
|
||||||
processingSetConfig: PropTypes.bool,
|
processingSetConfig: PropTypes.bool,
|
||||||
processingReset: PropTypes.bool,
|
processingReset: PropTypes.bool,
|
||||||
}),
|
}),
|
||||||
queryLogs: PropTypes.shape({
|
queryLogs: PropTypes.shape({
|
||||||
enabled: PropTypes.bool,
|
enabled: PropTypes.bool,
|
||||||
interval: PropTypes.number,
|
interval: PropTypes.number,
|
||||||
|
customInterval: PropTypes.number,
|
||||||
anonymize_client_ip: PropTypes.bool,
|
anonymize_client_ip: PropTypes.bool,
|
||||||
processingSetConfig: PropTypes.bool,
|
processingSetConfig: PropTypes.bool,
|
||||||
processingClear: PropTypes.bool,
|
processingClear: PropTypes.bool,
|
||||||
processingGetConfig: PropTypes.bool,
|
processingGetConfig: PropTypes.bool,
|
||||||
|
ignored: PropTypes.array,
|
||||||
}),
|
}),
|
||||||
filtering: PropTypes.shape({
|
filtering: PropTypes.shape({
|
||||||
interval: PropTypes.number,
|
interval: PropTypes.number,
|
||||||
|
|||||||
@@ -54,6 +54,11 @@
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.toast__dismiss:hover,
|
||||||
|
.toast__dismiss:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
.toast-enter {
|
.toast-enter {
|
||||||
opacity: 0.01;
|
opacity: 0.01;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
.card-header {
|
.card-header {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 0.6rem 1.5rem;
|
padding: 10px 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-subtitle {
|
.card-subtitle {
|
||||||
@@ -16,11 +16,11 @@
|
|||||||
|
|
||||||
.card-table-overflow--limited {
|
.card-table-overflow--limited {
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
max-height: 17.5rem;
|
max-height: 280px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dashboard .card-table-overflow--limited {
|
.dashboard .card-table-overflow--limited {
|
||||||
max-height: 18rem;
|
max-height: 288px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-actions {
|
.card-actions {
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.card-body--status {
|
.card-body--status {
|
||||||
padding: 2.5rem 1.5rem;
|
padding: 40px 24px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,14 +81,14 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 1rem 1.5rem;
|
padding: 16px 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-value-stats {
|
.card-value-stats {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 2.1rem;
|
font-size: 2.1rem;
|
||||||
line-height: 2.7rem;
|
line-height: 2.7rem;
|
||||||
height: 2.7rem;
|
height: 44px;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.card--full {
|
.card--full {
|
||||||
height: calc(100% - 1.5rem);
|
height: calc(100% - 22px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-wrap {
|
.card-wrap {
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
|
|
||||||
@media (min-width: 992px) {
|
@media (min-width: 992px) {
|
||||||
.dashboard .card:not(.card--full) {
|
.dashboard .card:not(.card--full) {
|
||||||
height: 22rem;
|
height: 350px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
height: 20px;
|
height: 20px;
|
||||||
min-width: 20px;
|
min-width: 20px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
background-color: #e2e2e2;
|
background-color: var(--checkbox-bg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: center center;
|
background-position: center center;
|
||||||
background-size: 12px 10px;
|
background-size: 12px 10px;
|
||||||
@@ -107,5 +107,5 @@
|
|||||||
.checkbox__label-subtitle {
|
.checkbox__label-subtitle {
|
||||||
display: block;
|
display: block;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
color: rgba(74, 74, 74, 0.7);
|
color: var(--scolor);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,13 +11,14 @@ class Checkbox extends Component {
|
|||||||
subtitle,
|
subtitle,
|
||||||
enabled,
|
enabled,
|
||||||
handleChange,
|
handleChange,
|
||||||
|
disabled,
|
||||||
t,
|
t,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
return (
|
return (
|
||||||
<div className="form__group form__group--checkbox">
|
<div className="form__group form__group--checkbox">
|
||||||
<label className="checkbox checkbox--settings">
|
<label className="checkbox checkbox--settings">
|
||||||
<span className="checkbox__marker"/>
|
<span className="checkbox__marker"/>
|
||||||
<input type="checkbox" className="checkbox__input" onChange={handleChange} checked={enabled}/>
|
<input type="checkbox" className="checkbox__input" onChange={handleChange} checked={enabled} disabled={disabled}/>
|
||||||
<span className="checkbox__label">
|
<span className="checkbox__label">
|
||||||
<span className="checkbox__label-text">
|
<span className="checkbox__label-text">
|
||||||
<span className="checkbox__label-title">{ t(title) }</span>
|
<span className="checkbox__label-title">{ t(title) }</span>
|
||||||
@@ -35,6 +36,7 @@ Checkbox.propTypes = {
|
|||||||
subtitle: PropTypes.string.isRequired,
|
subtitle: PropTypes.string.isRequired,
|
||||||
enabled: PropTypes.bool.isRequired,
|
enabled: PropTypes.bool.isRequired,
|
||||||
handleChange: PropTypes.func.isRequired,
|
handleChange: PropTypes.func.isRequired,
|
||||||
|
disabled: PropTypes.bool,
|
||||||
t: PropTypes.func,
|
t: PropTypes.func,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,64 @@
|
|||||||
|
.dropdown-item {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.dropdown-item.active,
|
.dropdown-item.active,
|
||||||
.dropdown-item:active {
|
.dropdown-item:active {
|
||||||
background-color: var(--green-74);
|
background-color: var(--btn-success-bgcolor);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu {
|
.dropdown-menu {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dropdown-menu.dropdown-menu--protection {
|
||||||
|
top: calc(100% + 8px);
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu.dropdown-menu-arrow.dropdown-menu--protection::before,
|
||||||
|
.dropdown-menu.dropdown-menu-arrow.dropdown-menu--protection::after {
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-protection {
|
||||||
|
align-self: stretch;
|
||||||
|
width: 26px;
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid #868e96;
|
||||||
|
border-top-right-radius: 3px;
|
||||||
|
border-bottom-right-radius: 3px;
|
||||||
|
border-left: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-protection__toggle {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
background-color: #868e96;
|
||||||
|
transition: background-color 0.15s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-protection__toggle:hover {
|
||||||
|
background-color: #727b84;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-protection__toggle .nav-icon {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
color: var(--white);
|
||||||
|
transition: 0.15s ease-in-out transform;
|
||||||
|
transform-origin: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-protection.show .nav-icon {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user