Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
'CLIENT_DIR': |-
${{ case(
startsWith(github.ref_name, 'release-v'), 'client',
startsWith(github.ref_name, 'beta-v'), 'client',
'client_v2'
) }}
'DIST_DIR': |-
Expand Down Expand Up @@ -197,9 +196,15 @@
VERSION=${{ needs.Build.outputs.app_version }}
- 'uses': 'actions/upload-artifact@v7'
'with':
'name': 'adguardhome'
'name': 'adguardhome-static'
'path': |
${{ env.DIST_DIR }}/*.*
- 'uses': 'actions/upload-artifact@v7'
'with':
'name': 'adguardhome-github'
'path': |
${{ env.DIST_DIR }}/*.*
!${{ env.DIST_DIR }}/version.json
'DeployToStaticStorage':
'if': |
${{ github.repository_owner == 'AdGuardSoftwareLimited' }}
Expand All @@ -218,7 +223,7 @@
startsWith(github.ref_name, 'beta-v'), 'beta',
'edge'
) }}
'artifact-name': 'adguardhome'
'artifact-name': 'adguardhome-static'
'environment': |-
${{ case(
startsWith(github.ref_name, 'release-v'), 'release',
Expand Down Expand Up @@ -277,8 +282,10 @@
'id-token': 'write'
'uses': 'AdGuardSoftwareLimited/actions/.github/workflows/create-gh-release.yml@master'
'with':
'artifact_name': 'adguardhome'
'artifact_name': 'adguardhome-github'
'draft': true
'prerelease': |
${{ startsWith(github.ref_name, 'beta-v') }}
# Use the actual application version, e.g. v0.108.1, as the tag, and not
# the branch name, so that it matches the announcement_url written to
# version.json by scripts/make/pack-release.sh.
Expand Down
1 change: 0 additions & 1 deletion .twosky.json
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@
"uk": "Українська",
"vi": "Tiếng Việt",
"zh-cn": "简体中文",
"zh-hk": "繁體中文(香港)",
"zh-tw": "正體中文(台灣)"
},
"metadata": {
Expand Down
11 changes: 11 additions & 0 deletions client_v2/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,17 @@ friendly:
template literals, or concatenation (e.g. `getMessage(\`btn\_\${action}\`)`).
Dynamic keys cannot be statically detected, so the translation tooling will
not pick them up and the strings will go untranslated.
- **Translate while rendering, never at module load.** `getMessage`/`getPlural`
track the language signal, but a call at module scope — or in a plain `const`
in a component body, which SolidJS runs once per mount — happens outside any
tracked scope, so the string keeps whichever language was active when it ran.
Resolve the translation where it is rendered: inline in JSX, by reading a
`createMemo` in the JSX expression (`<For each={items()}>`,
`options={options()}`), or by calling a per-render accessor
(`label: () => intl.getMessage('key')`, rendered as `config.label()` — see
`DnsSettings/Cache/blocks/CacheInputDialog.tsx`). `For`'s row mapper runs
untracked, so only its `each` expression is reactive: a value read inside the
row body must be resolved at the JSX read site, not in the mapper.
- Do not add duplicate keys to any locale file.
- Run `npm run translations:check` after adding or editing translation keys.
- Every `aria-*` string must have its own dedicated translation key.
83 changes: 69 additions & 14 deletions client_v2/src/__locales/ar.json

Large diffs are not rendered by default.

84 changes: 70 additions & 14 deletions client_v2/src/__locales/be.json

Large diffs are not rendered by default.

88 changes: 72 additions & 16 deletions client_v2/src/__locales/bg.json

Large diffs are not rendered by default.

83 changes: 69 additions & 14 deletions client_v2/src/__locales/cs.json

Large diffs are not rendered by default.

83 changes: 69 additions & 14 deletions client_v2/src/__locales/da.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
"add_allowlist": "Tilføj hvidliste",
"add_blocklist": "Tilføj sortliste",
"add_persistent_client": "Tilføj som vedvarende klient",
"add_to_allowlist": "Føj til hvidliste",
"ads_blocked": "Blokerede annoncer",
"ads_blocked_card": "Blokerede annoncer",
"ads_blocked_tooltip": "Antallet af DNS-forespørgsler blokeret af adblockfiltre og værtsblockliste",
Expand All @@ -12,7 +11,6 @@
"all_lists_up_to_date_toast": "Alle lister er allerede opdaterede",
"all_rewrites_disabled": "Alle tilpassede DNS-svar deaktiveres",
"all_rewrites_enabled": "Alle tilpassede DNS-svar aktiveres",
"allow_service": "Tillad tjeneste",
"allowed": "Hvidlistet",
"allowlist_add": "Tilføj hvidliste",
"allowlist_edit": "Hvidlisteredigering",
Expand All @@ -36,6 +34,7 @@
"average_time_processing": "Gennemsnitlig behandlingstid",
"average_time_processing_tooltip": "Gennemsnitlig tid i millisekunder til behandling af en DNS-forespørgsel",
"average_upstream_response_time": "Gennemsnitlig upstream-responstid",
"avg_response_time": "Gns. svartid",
"back": "Tilbage",
"block": "Blokér",
"block_client": "Blokér klient",
Expand Down Expand Up @@ -136,7 +135,7 @@
"dashboard": "Kontrolpanel",
"dashboard_statistics_disabled": "Statistiklagring er deaktiveret i Generelle indstillinger",
"delete_btn": "Slet",
"delete_confirm": "Slet lejemål?",
"delete_confirm": "Fjern lejemål?",
"delete_confirm_desc": "Dette frigiver <b>%ip%</b>",
"delete_table_action": "Slet",
"delete_table_action_confirm": "Ja, slet",
Expand Down Expand Up @@ -270,6 +269,7 @@
"dns_override_min_ttl_placeholder": "Levetid (TTL)",
"dns_override_min_ttl_title": "Tilsidesæt minimum TTL",
"dns_privacy": "DNS-fortrolighed",
"dns_private_reverse_no_default_resolvers": "AdGuard Home kunne ikke bestemme passende private omvendte DNS-opløsere til dette system. Angiv dem for at aktivere denne indstilling.",
"dns_private_reverse_resolve_clients_desc": "Opløser klienters IP-adresser til deres værtsnavne vha. PTR-forespørgsler. Bruger private DNS-servere til lokale klienter og upstream-servere til klienter med offentlige IP-adresser",
"dns_private_reverse_resolve_clients_title": "Omvendt opslag af klienters IP-adresser",
"dns_private_reverse_resolvers": "Private omvendt DNS-opløsere",
Expand All @@ -279,9 +279,8 @@
"dns_private_reverse_servers_desc_2": "Er dette felt tomt, benyttes operativsystemets standard DNS-oplser, undtagen for AdGuard Home IP-adresser. Som standard benytter AdGuard Home flg. omvendt DNS-opløsere: %value_1% og %value_2%",
"dns_private_reverse_servers_label": "Private reverse-DNS-servere, én pr. linje",
"dns_private_reverse_servers_placeholder": "IP-adresser, sdns://, quic://, https://, h3://, or tls://",
"dns_private_reverse_servers_required": "Angiv mindst én privat omvendt DNS-server, eller deaktivér private omvendte DNS-opløsere",
"dns_private_reverse_servers_resolvers": "Standard DNS-opløsere: %value_1% og %value_2%",
"dns_private_reverse_servers_title": "Private reverse DNS-servere",
"dns_protocols_title": "DNS-protokoller",
"dns_queries": "DNS-forespørgsler",
"dns_queries_tooltip": "Antallet af DNS-forespørgsler behandlet i de seneste 24 timer",
"dns_query": "DNS-forespørgsler",
Expand All @@ -298,7 +297,6 @@
"dns_rate_limit_title": "Hyppighedsgrænse",
"dns_rate_limit_value": "%value% foresp./s",
"dns_rewrite_exists": "Denne DNS-omskrivning findes allerede",
"dns_rewrite_removed": "DNS-omskrivning fjernet",
"dns_rewrite_same": "Omskrivning kan ikke ske til det samme domæne eller jokertegn",
"dns_rewrites": "DNS-omskrivninger",
"dns_rewrites_desc": "Lister de tilpassede DNS-svar for bestemte domænenavne",
Expand Down Expand Up @@ -335,6 +333,7 @@
"enable_dns_rewrites": "Aktivér DNS-omskrivninger?",
"encrypted_dns_addresses": "Krypterede DNS-serveradresser",
"encrypted_dns_settings": "Indstillinger for krypteret DNS-server",
"encryption_cert_dropzone_hint": "Træk og slip en certifikatfil, eller klik for at gennemse. Vi indsætter indholdet i feltet ovenfor",
"encryption_certificate_has_issues": "Certifikatet har problemer",
"encryption_certificates": "Certifikater",
"encryption_chain_invalid": "Certifikatkæden er ugyldig",
Expand All @@ -343,29 +342,33 @@
"encryption_disable_plain_dns_desc": "Enheder, som ikke understøtter krypteret DNS, fungerer muligvis ikke korrekt",
"encryption_doq": "DNS-over-QUIC port",
"encryption_doq_summary": "DNS-over-QUIC-port: %value%",
"encryption_doq_tooltip": "Denne port kører en DNS-over-QUIC-server over UDP. Standard: %port%",
"encryption_dot": "DNS-over-TLS port",
"encryption_dot_summary": "DNS-over-TLS-port: %value%",
"encryption_dot_tooltip": "Denne port kører en DNS-over-TLS-server. Standard: %port%",
"encryption_enabled_toast": "Krypteret DNS er aktiveret",
"encryption_encrypted_dns": "Krypteret DNS",
"encryption_encrypted_dns_desc": "AdGuard Homes admin-grænseflade bruger HTTPS. DNS-serveren understøtter DNS-over-HTTPS, DNS-over-TLS og DNS-over-QUIC",
"encryption_expire": "Udløber: %value%",
"encryption_force_redirect": "Omdirigér automatisk fra HTTP til HTTPS",
"encryption_hostnames": "Værtsnavne: %value%",
"encryption_https": "HTTPS-port",
"encryption_https_summary": "HTTPS-port: %value%",
"encryption_https_tooltip": "Denne port giver HTTPS-adgang til AdGuard Homes admin-grænseflade. Den leverer også DNS-over-HTTPS på endepunktet '/dns-query'. Standard: %port%",
"encryption_invalid_data": "Ugyldige data",
"encryption_issuer": "Udsteder: %value%",
"encryption_key_cert_mismatch": "Privat nøgle matcher ikke certifikatet",
"encryption_key_dropzone_hint": "Træk og slip en privat nøglefil, eller klik for at gennemse. Vi indsætter indholdet i feltet ovenfor",
"encryption_key_type": "Krypteringsalgoritme: %value%",
"encryption_plain_dns": "Almindelig DNS",
"encryption_plain_dns_desc": "Almindelig DNS er aktiveret som standard. Deaktivering tvinger alle enheder til at bruge krypteret DNS. For at gøre dette, angiv mindst én krypteret DNS-protokol",
"encryption_plain_dns_error": "Aktivér mindst én krypteret DNS-protokol for at deaktivere almindelig DNS",
"encryption_server": "Servernavn",
"encryption_server_enter": "Angiv dit domænenavn",
"encryption_server_summary": "Servernavn: %value%",
"encryption_server_tooltip": "Domænenavnet på serveren. Det skal matche et DNS-navn i certifikatet. Hvis angivet, detekterer AdGuard Home ClientID'er, besvarer DDR-forespørgsler og udfører yderligere forbindelsesvalideringer",
"encryption_subject": "Emne: %value%",
"encryption_title": "Kryptering",
"encryption_unable_read_cert": "Kan ikke læse certifikatfil",
"encryption_unable_read_key": "Kan ikke læse privat nøglefil",
"error": "Fejl",
"filter_added_successfully": "Tilføjet sortliste: <strong>%value%</strong>",
"filter_added_successfully_allowlist": "Tilføjet hvidliste: <strong>%value%</strong>",
Expand Down Expand Up @@ -396,7 +399,6 @@
"form_error_answer_format": "Ugyldigt resultatformat",
"form_error_client_id_format": "KlientID må kun indeholde cifre, minuskler og bindestreger",
"form_error_domain_format": "Ugyldigt domæneformat",
"form_error_equal": "Må ikke svare til.",
"form_error_format": "Ugyldigt format",
"form_error_format_line": "Ugyldigt format på linje %line%",
"form_error_format_lines": "Ugyldigt format på linjerne %lines%",
Expand Down Expand Up @@ -439,15 +441,14 @@
"inactivity_schedule_edit": "Redigér tidsplan",
"inactivity_schedule_no_schedules": "Ingen tidsplan",
"inactivity_schedule_replace_desc": "Denne tidsplan erstatter alle eksisterende for samme ugedag. Hver dag kan kun have én inaktivitetsperiode",
"inactivity_schedule_time_from": "Tid fra",
"inactivity_schedule_time_to": "Tid til",
"inactivity_schedule_time_from": "Tid fra (TT:mm)",
"inactivity_schedule_time_to": "Tid til (TT:mm)",
"inactivity_schedule_timezone": "Tidszone",
"install_auth_confirm": "Bekræft adgangskode",
"install_auth_password": "Adgangskode",
"install_auth_password_enter": "Angiv adgangskode",
"install_auth_username": "Brugernavn",
"install_auth_username_enter": "Angiv brugernavn",
"install_saved": "Gemt",
"install_settings_all_interfaces": "Alle grænseflader",
"install_settings_port": "Port",
"install_static_configure": "AdGuard Home har registreret, at den dynamiske IP-adresse %ip% bruges. Indstil den som den statiske adresse?",
Expand Down Expand Up @@ -511,7 +512,6 @@
"password_requirements_match": "Adgangskoder matcher",
"password_requirements_special": "Engelske bogstaver, tal og specialtegn",
"password_requirements_uppercase": "Minimum 1 majuskel",
"path_to_file_placeholder": "Sti til fil: Lokal- eller internetadresse",
"pause_for_hour": "Pauseret i %count% time",
"pause_for_minutes": "| Pauseret i %count% minut | Pauseret i %count% minutter",
"pause_for_seconds": "| Pauseret i %count% sekund | Pauseret i %count% sekunder",
Expand Down Expand Up @@ -573,6 +573,8 @@
"release_notes": "Udgivelsesnoter",
"remove": "Fjern",
"remove_tag": "Fjern %value%",
"remove_tls_certificate": "Fjern TLS-certifikat?",
"remove_tls_certificate_desc": "Fjernelse af certifikatet deaktiverer HTTPS og nulstiller TLS-indstillingerne. Er der oprettet forbindelse via HTTPS, afsluttes session, og der omdirigeres til http://%host%:%port%",
"report_an_issue": "Anmeld et problem",
"request_table_header": "Forespørgsel",
"requests_table_header": "Forespørgsler",
Expand Down Expand Up @@ -611,6 +613,7 @@
"safe_search_used_tooltip": "Antallet af DNS-forespørgsler til søgemaskiner, hvor Safe Search blev håndhævet",
"saturday": "Lørdag",
"save": "Gem",
"save_anyway": "Gem alligevel",
"save_btn": "Gem",
"search_placeholder": "Søg",
"select_language": "Vælg sprog",
Expand Down Expand Up @@ -648,7 +651,7 @@
"settings_notify_query_log_cleared": "Forespørgselslog ryddet",
"settings_notify_statistics_cleared": "Statistik ryddet",
"settings_parental_control": "Forældrekontrol",
"settings_parental_control_desc": "Blokér websteder med indhold upassende for børn",
"settings_parental_control_desc": "Blokér websteder med upassende indhold, såsom pornografi, vold, blod og andet foruroligende materiale, vha. AdGuards løbende opdaterede familiefilterdatabase",
"settings_rotation_placeholder": "Benyt tal",
"settings_rule_syntax": "Regelsyntaks",
"settings_safe_search": "Sikker Søgning",
Expand Down Expand Up @@ -737,11 +740,25 @@
"show_more_count": "+ %count% flere",
"show_processed_responses": "Behandlet",
"sort_asc": "Sortér fra A-Z",
"sort_by": "Sortér efter",
"sort_desc": "Sortér fra Z-A",
"sort_domain_asc": "Domæne A-Z",
"sort_domain_desc": "Domæne Z-A",
"sort_ip_asc": "Stigende IP-adresse",
"sort_ip_desc": "Faldende IP-adresse",
"sort_name_asc": "Navn A-Z",
"sort_name_desc": "Navn Z-A",
"sort_queries_asc": "Stigende forespørgsler",
"sort_queries_desc": "Faldende forespørgsler",
"sort_response_time_asc": "Stigende svartid",
"sort_response_time_desc": "Faldende svartid",
"sort_upstream_asc": "Upstream A-Z",
"sort_upstream_desc": "Upstream Z-A",
"source_label": "Kilde",
"source_tooltip": "Kilde",
"stats_adult": "Blokerede voksne websteder",
"stats_query_domain": "Mest forespurgte domæner",
"stats_strict_search": "Benyt dobbelte anførselstegn for præcise match",
"status_table_header": "Status",
"subnet_error": "Intervaladresser skal være i samme undernet",
"sunday": "Søndag",
Expand All @@ -753,10 +770,48 @@
"threats_blocked_tooltip": "Antallet af DNS-forespørgsler blokeret af AdGuard-browsingsikkerhedsmodulet",
"thursday": "Torsdag",
"time_table_header": "Tid",
"tls_cert_path_label": "Angiv den fulde sti til certifikatfilen",
"tls_certificate": "TLS-certifikat",
"tls_certificate_expired": "TLS-certifikatet er udløbet",
"tls_certificate_expiring": "TLS-certifikatet er ved at udløbe",
"tls_key_path_label": "Anguv den fulde sti til den private nøglefil",
"tls_setup_add_anyway": "Tilføj alligevel",
"tls_setup_cert_description": "Der kræves en gyldig TLS-certifikatkæde til domænet. Få et gratis certifikat fra <a>letsencrypt.org</a> eller køb et fra en betroet CA. Tilføj dernæst den private nøgle og opsæt den krypterede DNS-server",
"tls_setup_cert_paste_label": "Indsæt certifikatindholdet",
"tls_setup_cert_path_option": "Sti til fil på serveren",
"tls_setup_cert_path_option_desc": "Certifikatfilen forbliver på serverdisken og opdateres automatisk, når den fornyes",
"tls_setup_cert_text_option": "Certifikat som tekst",
"tls_setup_cert_text_option_desc": "Certifikatet gemmes i AdGuard Home-opsætningsfilen",
"tls_setup_cert_title": "Tilføj TLS-certifikat",
"tls_setup_config_title": "Aktivér krypteret DNS",
"tls_setup_enable_anyway": "Aktivér alligevel",
"tls_setup_error_cert_incomplete": "Certifikatet er ufuldstændigt. Indsæt hele teksten, inkl. BEGIN- og END-linjerne",
"tls_setup_error_duplicate_port": "Port %port% bruges af mere end én protokol. Vælg en anden port for hver krypteret DNS-protokol",
"tls_setup_error_ed25519_key": "Denne nøgletype understøttes ikke af webbrowsere. Brug i stedet en RSA- eller ECDSA-nøgle",
"tls_setup_error_enable_failed": "Krypteret DNS kunne ikke aktiveres. Tjek indstillingerne, og forsøg igen",
"tls_setup_error_key_incomplete": "Den private nøgle er ufuldstændig. Indsæt hele teksten, inkl. BEGIN- og END-linjerne",
"tls_setup_error_key_mismatch": "Denne private nøgle matcher ikke certifikatet fra det foregående trin",
"tls_setup_error_not_a_cert": "Dette er ikke et certifikat. Tjek, at der er indsat et certifikat, ikke en nøgle",
"tls_setup_error_not_a_key": "Dette er ikke en privat nøgle. Tjek, at der er indsat en nøgle, ikke et certifikat",
"tls_setup_error_parse_cert": "Certifikatet kunne ikke fortolkes. Filen er muligvis beskadiget",
"tls_setup_error_parse_key": "Privat nøgle kunne ikke fortolkes. Filen er muligvis beskadiget",
"tls_setup_error_port_busy": "Porten %port% er ikke tilgængelig for %protocol%",
"tls_setup_error_port_in_use": "Denne port bruges allerede af en anden AdGuard Home-indstilling",
"tls_setup_error_read_cert": "Certifikatfilen på den angivne sti kan ikke læses",
"tls_setup_error_read_key": "Kan ikke læse privat nøglefil",
"tls_setup_key_description": "Privat nøgle skal matche certifikatet fra det foregående trin. Den kan findes i certifikatpakken",
"tls_setup_key_paste_label": "Indsæt nøgleindholdet",
"tls_setup_key_path_option": "Sti til fil på serveren",
"tls_setup_key_path_option_desc": "Den private nøglefil forbliver på serverdisken",
"tls_setup_key_text_option": "Privat nøgle som tekst",
"tls_setup_key_text_option_desc": "Den private nøgle gemmes i AdGuard Home-opsætningsfilen",
"tls_setup_key_title": "Tilføj privat nøgle",
"tls_setup_row_description": "Upload TLS-certifikatet og den private nøgle, og opsæt dernæst DNS-serveren",
"tls_setup_row_title": "Opsætning",
"tls_setup_warning_cert_expired": "Problemer med certifikatet. Tjek emne, udsteder, gyldighed og værtsnavne",
"tls_setup_warning_cert_untrusted": "Dette certifikat er selvsigneret – det fungerer muligvis ikke på alle enheder. Sørg for, at enhederne accepterer det",
"tls_setup_warning_no_ip": "Certifikatet indeholder ikke IP-adresser. DDR og DNS-over-TLS fungerer muligvis ikke korrekt",
"tls_setup_warning_server_name_mismatch": "Certifikatet er ikke gyldigt til %hostname%. Tjek værtsnavnene i certifikatet",
"top_blocked_domains": "Hyppigst blokerede domæner",
"top_clients": "Hyppigste klienter",
"top_upstreams": "Top-upstreams",
Expand Down
Loading
Loading