From 836d42617969cb08de3ea1cb990908be569d777d Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Thu, 1 Oct 2026 08:47:27 +0200 Subject: [PATCH 1/5] feat(banner): compact phone layout for the notice buttons Below 440px the shipped templates give each notice button a full-width row of its own, so the notice is 372px tall on a 390x844 phone - 44% of the viewport, and past half of it on a 375x667 screen. Reported by a user whose banner took more than half the screen on mobile while rendering correctly on desktop. Add banner_control.mobile_layout with two values. 'comfortable' is the default and is byte-for-byte the current behaviour, so no installed site changes appearance on update; 'compact' lays the buttons out on a shared row. Measured against a live 1.32.0 site at five widths, before and after: 430px 351px 41.6% -> 223px 26.4% one row 390px 372px 44.1% -> 244px 28.9% one row 375px 372px 43.0% -> 244px 28.2% one row 360px 372px 41.3% -> 296px 32.9% two rows 320px 336px 33.2% -> 260px 25.7% two rows Three constraints shaped the CSS, and none of them is cosmetic: - `flex: 1 1 0` makes accept and reject exactly as wide as each other because one layout pass sizes them, not because two widths were written to match. EDPB Guidelines 03/2022 require equal prominence between accepting and refusing, and that has to survive translation into any language - which hardcoded widths do not. - `min-height: 44px` keeps the tap target at the size a finger needs. Reclaiming height by shrinking the target would trade one usability problem for a worse one. - Under 360px three buttons no longer fit side by side, so accept and reject stay paired on their own row and the customise button - the longest label, and the one that takes no part in the equal-prominence comparison - drops to a row of its own. The rules are emitted after boost_css_specificity(), already carrying their `#faz-consent` prefix, so they are specificity 1-1-0 against the template's own rules and win on document order without a single `!important`. A first prototype written at class specificity failed at 360px and below against a live site, which is what the prefix is there to prevent. The mobile layout is part of the boosted-CSS transient key. Keyed on the template alone, toggling the setting would keep serving yesterday's stylesheet for a day and the setting would look broken; the generated banner-.css filename already derives from the assembled CSS, so a switch mints a new file rather than overwriting a cached one. It is a site-wide value, not a per-visitor one, so it stays invariant under Cache Compatibility Mode. The stored value is whitelisted on save and re-checked on read. It decides which CSS is emitted, so a row written before the sanitiser existed, or by hand, must not reach the stylesheet. Tests: 13 sanitiser assertions covering the whitelist, array input through the full settings pipeline, case and whitespace normalisation and the shipped default; a new E2E spec asserting the three properties that a later CSS edit could silently break - that compact actually shortens the notice, that accept and reject keep identical size on a shared row, and that every button stays 44px tall - plus that no label is clipped. Both suites were confirmed to fail when the compact CSS is disabled, which on the E2E side required flushing the boosted-CSS transient: the first control run passed against a stale cached stylesheet and proved nothing. --- .../settings/includes/class-settings.php | 14 + admin/views/settings.php | 21 ++ frontend/class-frontend.php | 98 +++++- languages/faz-cookie-manager-cs_CZ.po | 294 ++++++++++-------- languages/faz-cookie-manager-de_DE.po | 294 ++++++++++-------- languages/faz-cookie-manager-fr_FR.po | 294 ++++++++++-------- languages/faz-cookie-manager-hr.po | 294 ++++++++++-------- languages/faz-cookie-manager-it_IT.mo | Bin 301192 -> 302771 bytes languages/faz-cookie-manager-it_IT.po | 292 +++++++++-------- languages/faz-cookie-manager-nl_NL.po | 294 ++++++++++-------- languages/faz-cookie-manager.pot | 294 ++++++++++-------- tests/e2e/specs/mobile-compact-layout.spec.ts | 160 ++++++++++ tests/unit/test-settings-sanitize.php | 22 ++ 13 files changed, 1430 insertions(+), 941 deletions(-) create mode 100644 tests/e2e/specs/mobile-compact-layout.spec.ts diff --git a/admin/modules/settings/includes/class-settings.php b/admin/modules/settings/includes/class-settings.php index dfaeea4c..39a9e554 100644 --- a/admin/modules/settings/includes/class-settings.php +++ b/admin/modules/settings/includes/class-settings.php @@ -131,6 +131,12 @@ public function get_defaults() { 'banner_title_tag' => 'h2', 'preference_title_tag' => 'h2', 'category_title_tag' => 'h3', + // Phone layout. 'comfortable' is the shipped behaviour: below + // 440px the notice buttons stack into one full-width row each. + // 'compact' lays them out on a shared row so the banner stops + // claiming ~44% of a 390px viewport. Default is the existing + // behaviour, so no installed site changes appearance on update. + 'mobile_layout' => 'comfortable', 'subdomain_sharing' => false, 'hide_from_bots' => true, 'gtm_datalayer' => false, @@ -351,6 +357,7 @@ public static function get_excludes() { 'banner_title_tag', 'preference_title_tag', 'category_title_tag', + 'mobile_layout', 'sites', 'custom_rules', 'target_regions', @@ -505,6 +512,13 @@ public static function sanitize_option( $option, $value, $group = '' ) { $value = is_string( $value ) ? strtolower( trim( $value ) ) : ''; $value = in_array( $value, $allowed, true ) ? $value : ( 'category_title_tag' === $option ? 'h3' : 'h2' ); break; + case 'mobile_layout': + // Whitelist, never a pass-through: this value is interpolated + // into a CSS class name on the banner container, so an + // unchecked string would be an injection point. + $value = is_string( $value ) ? strtolower( trim( $value ) ) : ''; + $value = in_array( $value, array( 'comfortable', 'compact' ), true ) ? $value : 'comfortable'; + break; case 'status': case 'subdomain_sharing': case 'uet_consent_mode': diff --git a/admin/views/settings.php b/admin/views/settings.php index dc68f749..4e67b005 100644 --- a/admin/views/settings.php +++ b/admin/views/settings.php @@ -213,6 +213,27 @@ +
+
+

+
+
+
+ + +
+ +
+
+

+ +

+
+
+

diff --git a/frontend/class-frontend.php b/frontend/class-frontend.php index 01c339c5..26dc3fc5 100755 --- a/frontend/class-frontend.php +++ b/frontend/class-frontend.php @@ -6759,10 +6759,17 @@ private function get_boosted_css() { */ public static function prepare_banner_styles( $raw_css ) { $raw_css = is_string( $raw_css ) ? $raw_css : ''; + $layout = self::get_mobile_layout(); // Keep an explicit pipeline revision in addition to FAZ_VERSION so a // development deploy cannot reuse CSS assembled before utility rules were // added. Release builds also invalidate through the version as usual. - $cache_key = 'faz_boosted_css_v2_' . FAZ_VERSION . '_' . md5( $raw_css ); + // + // The mobile layout is part of the key because it changes the assembled + // CSS without changing $raw_css: keyed on the template alone, toggling + // the setting would keep serving the previously cached stylesheet for a + // day and the setting would look broken. It is a site-wide value, not a + // per-visitor one, so it stays safe under Cache Compatibility Mode. + $cache_key = 'faz_boosted_css_v3_' . FAZ_VERSION . '_' . $layout . '_' . md5( $raw_css ); $cached = get_transient( $cache_key ); if ( false !== $cached ) { return $cached; @@ -6826,12 +6833,99 @@ public static function prepare_banner_styles( $raw_css ) { . '.faz-cookie-settings-btn:focus-visible{' . 'outline:2px solid var(--faz-accept-button-background-color,#1863dc);outline-offset:2px;' . '}'; - $css = $css_reset . $css . $css_fixes . $css_settings_btn; + $css = $css_reset . $css . $css_fixes . $css_settings_btn . self::compact_mobile_css( $layout ); set_transient( $cache_key, $css, DAY_IN_SECONDS ); return $css; } + /** + * Current phone layout for the consent notice. + * + * Static because prepare_banner_styles() is reached both from the frontend + * render and from the banner REST endpoint, neither of which shares an + * instance. + * + * @since 1.34.0 + * @return string Either 'comfortable' or 'compact'; never anything else. + */ + private static function get_mobile_layout() { + $settings = get_option( 'faz_settings', array() ); + $value = ''; + if ( is_array( $settings ) && isset( $settings['banner_control']['mobile_layout'] ) ) { + $value = $settings['banner_control']['mobile_layout']; + } + $value = is_string( $value ) ? strtolower( trim( $value ) ) : ''; + + // Re-check here rather than trusting the stored value. The sanitiser + // already whitelists it on save, but this string decides which CSS is + // emitted, and a row written before the sanitiser existed - or by hand - + // must not reach the stylesheet. + return 'compact' === $value ? 'compact' : 'comfortable'; + } + + /** + * Compact phone layout for the notice buttons. + * + * Below 440px the shipped templates give each notice button its own + * full-width row, which on a 390x844 screen makes the notice 372px tall - + * about 44% of the viewport, and past half of it on a 375x667 phone. Laying + * the buttons out on a shared row brings the same notice to 244px (29%). + * + * Three constraints shape the rules below, and none of them is cosmetic: + * + * 1. `flex: 1 1 0` makes the accept and reject buttons exactly as wide as + * each other because the same layout pass sizes them, not because two + * widths were written to match. EDPB Guidelines 03/2022 require the + * accept and reject options to carry equal prominence, so equality has to + * survive translation into any language - which hardcoded widths do not. + * 2. `min-height: 44px` keeps the tap target at the size a finger needs. + * Shrinking the buttons to fit is exactly the wrong trade. + * 3. Under 360px three buttons no longer fit side by side. Accept and reject + * stay paired on their own row and "customise" - the longest label, and + * the one that takes no part in the equal-prominence comparison - drops + * to a row of its own. The pair that matters stays equal. + * + * Emitted AFTER boost_css_specificity(), so the selectors are written with + * their `#faz-consent` prefix already in place and need no `!important`: + * they are specificity 1-1-0 against the template's own 1-1-0 rules and win + * on document order. Measured against a live 1.32.0 site at 320, 360, 375, + * 390 and 430 CSS pixels. + * + * @since 1.34.0 + * @param string $layout Resolved layout, already whitelisted. + * @return string CSS, or an empty string for the default layout. + */ + private static function compact_mobile_css( $layout ) { + if ( 'compact' !== $layout ) { + return ''; + } + + return '@media (max-width:440px){' + . '#faz-consent .faz-notice-btn-wrapper{' + . 'flex-direction:row;flex-wrap:wrap;gap:8px;margin-top:12px;' + . '}' + . '#faz-consent .faz-notice-btn-wrapper .faz-btn{' + . 'flex:1 1 0;width:auto;min-width:0;margin:0;' + . 'min-height:44px;font-size:13px;padding:8px 4px;white-space:nowrap;' + . '}' + // Accept first, reject immediately beside it: the two compared + // options sit together and read as one pair. + . '#faz-consent .faz-notice-btn-wrapper .faz-btn-accept{order:1;margin-top:0;}' + . '#faz-consent .faz-notice-btn-wrapper .faz-btn-reject{order:2;}' + . '#faz-consent .faz-notice-btn-wrapper .faz-btn-customize{order:3;}' + . '}' + . '@media (max-width:360px){' + // 40% rather than calc(50% - 4px): the exact value lands on the + // width budget to the pixel, and one sub-pixel of rounding pushes + // the second button onto its own row. A basis under half leaves + // flex-grow to fill the row and cannot round into a wrap. + . '#faz-consent .faz-notice-btn-wrapper .faz-btn-accept,' + . '#faz-consent .faz-notice-btn-wrapper .faz-btn-reject{flex:1 1 40%;}' + . '#faz-consent .faz-notice-btn-wrapper .faz-btn-customize{flex:1 1 100%;}' + . '}'; + } + /** * Prefix all CSS selectors with #faz-consent to boost specificity above * page-builder rules (Elementor, Divi, Beaver Builder). diff --git a/languages/faz-cookie-manager-cs_CZ.po b/languages/faz-cookie-manager-cs_CZ.po index ce21eeea..a1b3ef42 100644 --- a/languages/faz-cookie-manager-cs_CZ.po +++ b/languages/faz-cookie-manager-cs_CZ.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: FAZ Cookie Manager 1.7.0\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/faz-cookie-manager\n" -"POT-Creation-Date: 2026-09-29T10:34:49+00:00\n" +"POT-Creation-Date: 2026-10-01T06:43:53+00:00\n" "PO-Revision-Date: 2026-08-01 13:45+0200\n" "Last-Translator: \n" "Language-Team: Czech\n" @@ -49,13 +49,13 @@ msgid "Cookie Banner" msgstr "Cookie Banner" #: admin/class-admin.php:233 admin/views/base.php:21 -#: frontend/class-frontend.php:2886 +#: frontend/class-frontend.php:2880 #: frontend/modules/banner-rest/class-banner-rest.php:598 msgid "Cookies" msgstr "Cookies" #: admin/class-admin.php:238 admin/views/base.php:22 -#: admin/views/dashboard.php:247 admin/views/settings.php:268 +#: admin/views/dashboard.php:247 admin/views/settings.php:289 msgid "Consent Logs" msgstr "Záznamy souhlasu" @@ -3997,7 +3997,7 @@ msgstr "Jazyk:" msgid "Notice Title" msgstr "Nadpis banneru" -#: admin/views/banner.php:341 frontend/class-frontend.php:2881 +#: admin/views/banner.php:341 frontend/class-frontend.php:2875 #: frontend/modules/banner-rest/class-banner-rest.php:593 msgid "We value your privacy" msgstr "Vážíme si vašeho soukromí" @@ -4336,7 +4336,7 @@ msgstr "Text pro opt-out (Do Not Sell)" msgid "Text for the \"Opt-out Preferences\" modal a visitor sees after clicking the \"Do Not Sell or Share My Personal Information\" link. Shown only on CCPA / US State Laws (and Both) banners. Follows the language selected above." msgstr "Text modálního okna «Předvolby odhlášení», které návštěvník uvidí po kliknutí na odkaz «Do Not Sell or Share My Personal Information». Zobrazuje se pouze u bannerů CCPA / zákonů států USA (a Obojí). Řídí se jazykem vybraným výše." -#: admin/views/banner.php:833 frontend/class-frontend.php:2883 +#: admin/views/banner.php:833 frontend/class-frontend.php:2877 #: frontend/modules/banner-rest/class-banner-rest.php:595 msgid "Opt-out Preferences" msgstr "Předvolby odhlášení" @@ -4491,7 +4491,7 @@ msgstr "Kanada (PIPEDA)" msgid "Brazil (LGPD)" msgstr "Brazílie (LGPD)" -#: admin/views/banner.php:1054 admin/views/settings.php:480 +#: admin/views/banner.php:1054 admin/views/settings.php:501 #: admin/views/setup.php:189 msgid "Australia" msgstr "Austrálie" @@ -5566,7 +5566,7 @@ msgstr "Když plugin směruje návštěvníky z Číny (platí PIPL), přeshrani msgid "Global Vendor List (IAB TCF 2.3)" msgstr "Globální seznam dodavatelů (IAB TCF 2.3)" -#: admin/views/gvl.php:15 admin/views/settings.php:440 +#: admin/views/gvl.php:15 admin/views/settings.php:461 msgid "Update GVL Now" msgstr "Aktualizovat GVL nyní" @@ -5884,476 +5884,502 @@ msgid "Defaults: H2 for the banner and preferences titles, H3 for category title msgstr "" #: admin/views/settings.php:218 +#, fuzzy +msgid "Mobile Layout" +msgstr "Rozvržení banneru" + +#: admin/views/settings.php:222 +#, fuzzy +msgid "Banner layout on phones" +msgstr "Rozvržení banneru" + +#: admin/views/settings.php:224 +msgid "Comfortable (default) — buttons stacked" +msgstr "" + +#: admin/views/settings.php:225 +msgid "Compact — buttons on one row" +msgstr "" + +#: admin/views/settings.php:228 +msgid "Below 440px the comfortable layout gives each button its own full-width row, which makes the banner about 44% of a 390px screen. The compact layout puts them on a shared row and brings the same banner to about 29%. Desktop is not affected." +msgstr "" + +#: admin/views/settings.php:232 +msgid "Compact keeps every button at least 44px tall so it stays comfortable to tap, and keeps the accept and reject buttons exactly the same size as each other, as equal prominence requires. On screens narrower than 360px accept and reject stay side by side and the customise button moves to its own row." +msgstr "" + +#: admin/views/settings.php:239 msgid "Script Blocking" msgstr "Blokování skriptů" -#: admin/views/settings.php:222 +#: admin/views/settings.php:243 msgid "Pages Excluded from Script Blocking" msgstr "Stránky vyloučené z blokování skriptů" -#: admin/views/settings.php:223 +#: admin/views/settings.php:244 msgid "One per line: /checkout/* or /cart/*" msgstr "Jeden na řádek: /checkout/* nebo /cart/*" -#: admin/views/settings.php:224 +#: admin/views/settings.php:245 msgid "URL patterns where script blocking is disabled (banner still shows). One per line, supports wildcards (e.g. /checkout/*)." msgstr "URL vzory, kde je blokování skriptů zakázáno (banner se stále zobrazuje). Jeden na řádek, podporuje zástupné znaky (např. /checkout/*)." -#: admin/views/settings.php:227 +#: admin/views/settings.php:248 msgid "Script Blocking Exceptions" msgstr "Výjimky blokování skriptů" -#: admin/views/settings.php:228 +#: admin/views/settings.php:249 msgid "One per line: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" msgstr "Jeden na řádek: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" -#: admin/views/settings.php:229 +#: admin/views/settings.php:250 msgid "Scripts that should never be blocked, even before consent. One per line. Accepts three types of pattern:
- URL fragment (contains . or /): matched against the script's src or related URL attribute, e.g. googleapis.com/youtube/v3.
- Script ID (no dots/slashes): matched against the id attribute of the script tag, e.g. my-product-form-data.
- CSS class (no dots/slashes): matched against the script's class attribute, e.g. recaptcha.
- How IDs and classes match: whole words, plus their hyphen or underscore children. recaptcha matches recaptcha, recaptcha-badge and recaptcha_frame, but not myrecaptcha. Ending a pattern with - or _ (e.g. wp-) matches every word starting with it, which is much broader — prefer the exact ID or class wherever you can.
These exceptions bypass blocking entirely. Use them only for scripts that genuinely do not set tracking cookies. Be specific to avoid accidentally unblocking trackers.
Tip: You can also add class=\"faz-skip\" directly to any script tag to exclude it without adding anything here — no configuration needed." msgstr "Skripty, které by neměly být nikdy blokovány, a to ani před udělením souhlasu. Jeden na řádek. Podporovány jsou tři typy vzorů:
- Fragment URL (obsahuje . nebo /): porovnává se s atributem src skriptu nebo s příslušným atributem URL, např. googleapis.com/youtube/v3.
- ID skriptu (bez teček/lomítek): porovnává se s atributem id tagu skriptu, např. my-product-form-data.
- Třída CSS (bez teček/lomítek): porovnává se s atributem class skriptu, např. recaptcha.
- Jak se ID a třídy shodují: celá slova a jejich potomci oddělení pomlčkou nebo podtržítkem. recaptcha odpovídá recaptcha, recaptcha-badge a recaptcha_frame, ale ne myrecaptcha. Ukončení vzoru znakem - nebo _ (např. wp-) odpovídá každému slovu, které jím začíná, což je mnohem širší shoda — kdykoli je to možné, upřednostněte přesné ID nebo třídu.
Tyto výjimky zcela obcházejí blokování. Používejte je pouze pro skripty, které skutečně nenastavují sledovací cookies. Buďte konkrétní, abyste náhodou neodblokovali sledovací nástroje.
Tip: Ke kterémukoli tagu skriptu můžete rovněž přímo přidat class=\"faz-skip\" a vyloučit jej bez nutnosti čehokoli přidávat zde — není potřeba žádná konfigurace." -#: admin/views/settings.php:235 +#: admin/views/settings.php:256 msgid "Advanced inline CSS URL blocking" msgstr "Pokročilé blokování URL adres v inline CSS" -#: admin/views/settings.php:237 +#: admin/views/settings.php:258 msgid "Optional high-coverage mode for CSS-based third-party loads. The default blocker already handles server-rendered <style> tags and direct HTMLStyleElement updates. Enable this only if you have confirmed that a theme, page builder, or CSS-in-JS library injects blocked url() or @import rules through broader runtime channels such as Element.innerHTML, insertAdjacentHTML, CharacterData edits inside a style tag, or Constructable Stylesheets. This strengthens pre-consent blocking but hooks global browser APIs and may affect builders, editors, icon fonts, or CSS-in-JS libraries. Test the site before enabling in production." msgstr "Volitelný režim s vysokým pokrytím pro načítání prvků třetích stran založených na CSS. Výchozí blokovač již zpracovává tagy <style> vykreslované na serveru a přímé aktualizace HTMLStyleElement. Tuto funkci povolte pouze v případě, že jste se ujistili, že šablona, nástroj pro tvorbu stránek nebo knihovna CSS-in-JS vkládá blokovaná pravidla url() nebo @import prostřednictvím širších kanálů běhu, jako jsou úpravy Element.innerHTML, insertAdjacentHTML, CharacterData uvnitř značky style nebo Constructable Stylesheets. Toto posiluje blokování před udělením souhlasu, ale zasahuje do globálních API prohlížeče a může ovlivnit nástroje pro tvorbu stránek, editory, ikonová písma nebo knihovny CSS-in-JS. Před aktivací v produkčním prostředí web otestujte." -#: admin/views/settings.php:243 +#: admin/views/settings.php:264 msgid "Block non-consented cookies emitted by PHP" msgstr "Blokovat cookies bez souhlasu odesílané prostřednictvím PHP" -#: admin/views/settings.php:245 +#: admin/views/settings.php:266 msgid "Advanced, off by default. Filters outgoing Set-Cookie headers from pages, AJAX, REST and redirects, including HttpOnly cookies that JavaScript cannot remove. Necessary, WordPress-internal, security and checkout cookies are preserved, and deletion headers always pass. Enable only after testing login, forms, cart and checkout; unknown cookies fail permissive until the scanner classifies them." msgstr "Pokročilé, ve výchozím nastavení vypnuto. Filtruje odchozí hlavičky Set-Cookie ze stránek, AJAXu, REST a přesměrování, včetně cookies HttpOnly, které JavaScript nemůže odstranit. Nezbytné, interní WordPress, bezpečnostní a pokladní cookies jsou zachovány a hlavičky pro smazání procházejí vždy. Zapněte až po otestování přihlášení, formulářů, košíku a pokladny; neznámé cookies se do doby, než je skener zařadí, chovají permisivně (nejsou blokovány)." -#: admin/views/settings.php:249 +#: admin/views/settings.php:270 msgid "Payment gateway scripts (e-commerce)" msgstr "Skripty platebních bran (elektronický obchod)" -#: admin/views/settings.php:250 +#: admin/views/settings.php:271 msgid "Only enable a gateway if your site takes payments. A payment provider's SDK (PayPal, Stripe, …) can set cookies and fingerprint the visitor, so it is blocked until consent by default. Enabling a gateway here loads its payment scripts before consent across your site — needed for payment forms that live outside a WooCommerce checkout (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). This is a compliance decision and your responsibility for your jurisdiction. A real WooCommerce checkout/cart page already loads these automatically as strictly necessary; a gateway's marketing pixel (e.g. PayPal's pptm.js) stays blocked regardless." msgstr "Bránu aktivujte pouze v případě, že váš web přijímá platby. SDK poskytovatele platebních služeb (PayPal, Stripe, …) může ukládat soubory cookie a identifikovat návštěvníka, proto je ve výchozím nastavení blokováno, dokud není udělen souhlas. Povolení platební brány zde způsobí, že se její platební skripty načtou na vašem webu ještě před udělením souhlasu — to je nutné pro platební formuláře, které se nacházejí mimo pokladnu WooCommerce (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). Jedná se o rozhodnutí týkající se dodržování předpisů a vaše odpovědnost v rámci vaší jurisdikce. Skutečná stránka pokladny/košíku WooCommerce již tyto soubory načítá automaticky, jelikož jsou nezbytně nutné; marketingový pixel platební brány (např. pptm.js od PayPal) zůstává v každém případě zablokován." #. translators: %s: payment gateway name, e.g. PayPal. -#: admin/views/settings.php:257 +#: admin/views/settings.php:278 #, php-format msgid "Allow %s payment scripts before consent" msgstr "Povolit platební skripty %s před udělením souhlasu" -#: admin/views/settings.php:275 +#: admin/views/settings.php:296 msgid "Enable consent logging" msgstr "Povolit zaznamenávání souhlasu" -#: admin/views/settings.php:277 +#: admin/views/settings.php:298 msgid "Records each visitor's consent choice (accepted, rejected, or partial) for GDPR accountability. Required by Art. 7(1) GDPR to demonstrate that consent was given." msgstr "Zaznamenává volbu souhlasu každého návštěvníka (přijato, odmítnuto nebo částečné) pro odpovědnost podle GDPR. Vyžadováno podle čl. 7(1) GDPR k prokázání, že byl udělen souhlas." -#: admin/views/settings.php:280 +#: admin/views/settings.php:301 msgid "Consent log retention (months)" msgstr "Doba uchování záznamů souhlasu (měsíce)" -#: admin/views/settings.php:282 +#: admin/views/settings.php:303 msgid "How long consent records are kept before automatic deletion. Choose a documented period appropriate to your accountability obligations. Logs older than this period are purged daily." msgstr "Jak dlouho jsou záznamy souhlasu uchovávány před automatickým smazáním. Zvolte zdokumentovanou dobu odpovídající vašim povinnostem v oblasti odpovědnosti (accountability). Záznamy starší než tato doba jsou denně odstraňovány." -#: admin/views/settings.php:289 +#: admin/views/settings.php:310 msgid "Data Subject Requests" msgstr "Žádosti subjektů údajů" -#: admin/views/settings.php:293 +#: admin/views/settings.php:314 msgid "Data subject request retention (months)" msgstr "Doba uchování žádostí subjektů údajů (měsíce)" -#: admin/views/settings.php:295 +#: admin/views/settings.php:316 msgid "How long completed data-subject request records are kept before automatic deletion. Keep a period that supports your ability to demonstrate and manage requests." msgstr "Jak dlouho jsou vyřízené záznamy žádostí subjektů údajů uchovávány před automatickým smazáním. Zvolte dobu, která podpoří vaši schopnost žádosti prokazovat a spravovat." -#: admin/views/settings.php:302 +#: admin/views/settings.php:323 msgid "Scanner" msgstr "Skener" -#: admin/views/settings.php:306 +#: admin/views/settings.php:327 msgid "Max Pages to Scan" msgstr "Max. stránek ke skenování" -#: admin/views/settings.php:308 +#: admin/views/settings.php:329 msgid "Maximum number of pages the cookie scanner will crawl. Higher values find more cookies but take longer. 100 pages is sufficient for most sites." msgstr "Maximální počet stránek, které cookie skener procházení. Vyšší hodnoty najdou více cookies, ale trvají déle. 100 stránek je dostačujících pro většinu webů." -#: admin/views/settings.php:311 +#: admin/views/settings.php:332 msgid "Static public IP (optional)" msgstr "Statická veřejná IP adresa (volitelné)" -#: admin/views/settings.php:313 +#: admin/views/settings.php:334 msgid "Pin every server-side scanner request — sitemap discovery and page fetches — to this site IP while preserving the hostname, HTTPS certificate validation and SNI. Only public IPv4/IPv6 addresses are accepted; requires the WordPress cURL transport. Leave blank to use DNS." msgstr "Připne každý serverový požadavek skeneru — zjišťování mapy webu i načítání stránek — na IP adresu tohoto webu, přičemž zachová název hostitele, ověřování certifikátu HTTPS i SNI. Přijímány jsou pouze veřejné adresy IPv4/IPv6; vyžaduje HTTP transport WordPress cURL. Ponechte prázdné pro použití DNS." -#: admin/views/settings.php:319 +#: admin/views/settings.php:340 msgid "Scanner Debug Mode" msgstr "Režim ladění skeneru" -#: admin/views/settings.php:321 +#: admin/views/settings.php:342 msgid "When enabled, the scanner logs every categorization decision. Download logs from the Cookies page." msgstr "Pokud je povoleno, skener zaznamenává každé rozhodnutí o kategorizaci. Stažněte protokoly ze stránky Cookies." -#: admin/views/settings.php:328 +#: admin/views/settings.php:349 msgid "Automatic Scanning" msgstr "Automatické skenování" -#: admin/views/settings.php:335 +#: admin/views/settings.php:356 msgid "Enable automatic cookie scanning" msgstr "Povolit automatické skenování cookies" -#: admin/views/settings.php:337 +#: admin/views/settings.php:358 msgid "Automatically scan your site for new cookies on a schedule. You will receive an email notification if new uncategorized cookies are found." msgstr "Automaticky skenujte váš web na nové cookies podle plánu. Obdržíte e-mailové oznámení, pokud budou nalezeny nové nekategorizované cookies." -#: admin/views/settings.php:343 +#: admin/views/settings.php:364 msgid "Update cookie definitions weekly" msgstr "" -#: admin/views/settings.php:345 +#: admin/views/settings.php:366 msgid "Optional: downloads the Open Cookie Database from raw.githubusercontent.com once a week. Off by default. Without this option, the bundled database is updated with plugin releases. A failed download keeps the existing definitions." msgstr "" -#: admin/views/settings.php:348 +#: admin/views/settings.php:369 msgid "Scan Frequency" msgstr "Frekvence skenování" -#: admin/views/settings.php:350 +#: admin/views/settings.php:371 msgid "Daily" msgstr "Denně" -#: admin/views/settings.php:351 includes/class-activator.php:712 +#: admin/views/settings.php:372 includes/class-activator.php:712 msgid "Weekly" msgstr "Týdně" -#: admin/views/settings.php:352 +#: admin/views/settings.php:373 msgid "Monthly" msgstr "Měsíčně" -#: admin/views/settings.php:354 +#: admin/views/settings.php:375 msgid "How often the scanner runs automatically. Weekly is recommended for most sites." msgstr "Jak často se skener spouští automaticky. Pro většinu webů se doporučuje týdně." -#: admin/views/settings.php:361 +#: admin/views/settings.php:382 msgid "Microsoft Consent APIs" msgstr "Microsoft Consent API" -#: admin/views/settings.php:368 +#: admin/views/settings.php:389 msgid "Microsoft UET Consent Mode" msgstr "Microsoft UET Consent Mode" -#: admin/views/settings.php:370 +#: admin/views/settings.php:391 msgid "Signals consent status to Microsoft Advertising (Bing Ads) via the UET tag. Enable if you use Microsoft Advertising and need to respect consent for ad tracking." msgstr "Signalizuje stav souhlasu Microsoft Advertising (Bing Ads) přes UET tag. Povolte, pokud používáte Microsoft Advertising a potřebujete respektovat souhlas pro sledování reklam." -#: admin/views/settings.php:376 +#: admin/views/settings.php:397 msgid "Microsoft Clarity Consent API" msgstr "Microsoft Clarity Consent API" -#: admin/views/settings.php:378 +#: admin/views/settings.php:399 msgid "Signals consent status to Microsoft Clarity (heatmaps and session recordings). Enable if you use Clarity and want it to pause tracking until consent is given." msgstr "Signalizuje stav souhlasu Microsoft Clarity (tepelné mapy a záznamy relací). Povolte, pokud používáte Clarity a chcete, aby pozastavilo sledování, dokud nebude udělen souhlas." -#: admin/views/settings.php:385 +#: admin/views/settings.php:406 msgid "Age Verification" msgstr "Ověření věku" -#: admin/views/settings.php:392 +#: admin/views/settings.php:413 msgid "Require age verification for consent" msgstr "Vyžadovat ověření věku pro souhlas" -#: admin/views/settings.php:394 +#: admin/views/settings.php:415 msgid "Under GDPR Art. 8, children below the minimum age cannot give valid consent for data processing. When enabled, the visitor sees an age-confirmation checkbox directly above the Accept/Reject buttons; it gates only the Accept path — Reject stays available and is never blocked, and the checkbox is never pre-ticked." msgstr "Podle článku 8 nařízení GDPR nemohou děti, které nedosáhly minimálního věku, udělit platný souhlas se zpracováním údajů. Je-li tato funkce aktivována, zobrazí se návštěvníkovi přímo nad tlačítky \"Přijmout\" a \"Odmítnout\" zaškrtávací políčko pro potvrzení věku; toto políčko omezuje pouze volbu \"Přijmout\" – volba \"Odmítnout\" zůstává dostupná a není nikdy blokována, přičemž políčko není nikdy předem zaškrtnuto." -#: admin/views/settings.php:395 +#: admin/views/settings.php:416 msgid "This is a self-declared age affirmation only. It is NOT a substitute for verifying parental consent for under-age children under GDPR Art. 8(2), which requires separate reasonable-efforts verification this feature does not provide." msgstr "Jedná se pouze o prohlášení o věku. NENÍ to náhrada za ověření souhlasu rodičů u nezletilých dětí podle čl. 8 odst. 2 nařízení GDPR, který vyžaduje samostatné ověření s vynaložením přiměřeného úsilí, což tato funkce neposkytuje." -#: admin/views/settings.php:398 +#: admin/views/settings.php:419 msgid "Minimum Age" msgstr "Minimální věk" -#: admin/views/settings.php:400 +#: admin/views/settings.php:421 msgid "GDPR default is 16. Some EU member states allow 13-15 (e.g. Italy 14, Spain 14, France 15, Germany 16). Check your local law." msgstr "Výchozí věk podle GDPR je 16 let. Některé členské státy EU povolují věk 13–15 let (např. Itálie 14, Španělsko 14, Francie 15, Německo 16). Ověřte si místní právní předpisy." -#: admin/views/settings.php:407 admin/views/setup.php:201 +#: admin/views/settings.php:428 admin/views/setup.php:201 msgid "IAB TCF" msgstr "IAB TCF" -#: admin/views/settings.php:414 +#: admin/views/settings.php:435 msgid "Enable IAB TCF v2.3" msgstr "Povolit IAB TCF v2.3" -#: admin/views/settings.php:416 +#: admin/views/settings.php:437 msgid "Enables the IAB Transparency & Consent Framework. Required if you work with ad-tech vendors that need a standardised TC String for programmatic advertising in the EU." msgstr "Povoluje IAB Transparency & Consent Framework. Vyžadováno, pokud pracujete s dodavateli reklamních technologií, kteří potřebují standardizovaný TC String pro programatickou reklamu v EU." -#: admin/views/settings.php:419 +#: admin/views/settings.php:440 msgid "Publisher Country Code" msgstr "Kód země vydavatele" -#: admin/views/settings.php:421 +#: admin/views/settings.php:442 msgid "ISO 3166-1 alpha-2 code of the publisher's country (e.g. IT, DE, FR). Used in the TCF consent string." msgstr "ISO 3166-1 alpha-2 kód země vydavatele (např. IT, DE, FR). Používá se v TCF řetězci souhlasu." -#: admin/views/settings.php:424 admin/views/setup.php:348 +#: admin/views/settings.php:445 admin/views/setup.php:348 msgid "CMP ID" msgstr "CMP ID" -#: admin/views/settings.php:426 +#: admin/views/settings.php:447 msgid "Your registered IAB CMP ID (IAB CMP List). With ID 0 the banner and cookie blocking work normally, but ad-tech vendors will ignore the TC String. Google Consent Mode v2 works regardless of CMP registration." msgstr "Vaše registrované IAB CMP ID (IAB CMP List). S ID 0 banner a blokování cookies fungují normálně, ale dodavatelé reklamních technologií budou ignorovat TC String. Google Consent Mode v2 funguje bez ohledu na registraci CMP." -#: admin/views/settings.php:432 +#: admin/views/settings.php:453 msgid "Purpose One Treatment" msgstr "Zacházení s účelem jedna" -#: admin/views/settings.php:434 +#: admin/views/settings.php:455 msgid "Set to true if Purpose 1 consent was NOT disclosed (e.g. publisher in a country where Purpose 1 is not required)." msgstr "Nastavte na true, pokud souhlas s účelem 1 NEBYL zveřejněn (např. vydavatel v zemi, kde není účel 1 vyžadován)." -#: admin/views/settings.php:438 +#: admin/views/settings.php:459 msgid "Loading GVL status..." msgstr "Načítání stavu GVL..." -#: admin/views/settings.php:447 +#: admin/views/settings.php:468 msgid "Jurisdiction & Geo-routing" msgstr "Jurisdikce a geografické směrování" -#: admin/views/settings.php:454 +#: admin/views/settings.php:475 msgid "Apply jurisdiction rules by visitor location" msgstr "Použít pravidla jurisdikce podle polohy návštěvníka" -#: admin/views/settings.php:456 +#: admin/views/settings.php:477 msgid "Recommended and enabled by default. Detect each visitor's location to enforce the matching jurisdiction rules and mandatory controls, and optionally limit banner display to selected regions. Turning this off means the law saved on the active banner applies to every visitor; for example, a CCPA banner will no longer gain GDPR blocking for an EEA visitor. Location requires a MaxMind GeoLite2 database (configured below), or a trusted country signal such as Cloudflare CF-IPCountry." msgstr "Doporučeno a ve výchozím nastavení zapnuto. Zjistí polohu každého návštěvníka, aby vynutilo odpovídající pravidla jurisdikce a povinné ovládací prvky, a volitelně omezí zobrazení banneru na vybrané oblasti. Po vypnutí se na každého návštěvníka použije zákon uložený v aktivním banneru; například banner CCPA již nezíská blokování GDPR pro návštěvníka z EHP. Určení polohy vyžaduje níže nastavenou databázi MaxMind GeoLite2 nebo důvěryhodný signál země, například Cloudflare CF-IPCountry." -#: admin/views/settings.php:462 admin/views/setup.php:376 +#: admin/views/settings.php:483 admin/views/setup.php:376 msgid "Cache-safe jurisdiction bootstrap" msgstr "Bootstrap jurisdikce bezpečný pro mezipaměť" -#: admin/views/settings.php:464 +#: admin/views/settings.php:485 msgid "Allows compatible full-page caches and CDNs to share one strict GDPR shell. The browser resolves the live jurisdiction through a no-store endpoint before mounting the banner or releasing optional scripts. If the configuration is unsupported or the endpoint fails, FAZ keeps the stricter shell and preserves the normal page-cache bypass." msgstr "Umožňuje kompatibilním celostránkovým mezipamětem a CDN sdílet jediný přísný shell GDPR. Prohlížeč zjistí aktuální jurisdikci přes koncový bod no-store ještě před připojením banneru nebo uvolněním volitelných skriptů. Pokud konfigurace není podporována nebo koncový bod selže, FAZ zachová přísnější shell a běžné obcházení mezipaměti stránky." -#: admin/views/settings.php:466 +#: admin/views/settings.php:487 msgid "Checking cache-safe bootstrap readiness..." msgstr "Kontrola připravenosti bootstrapu bezpečného pro mezipaměť..." -#: admin/views/settings.php:468 +#: admin/views/settings.php:489 msgid "Currently excluded: AMP, IAB TCF, country-based language fallback, country-targeted banner rows, hiding the banner outside selected regions, and custom country-dependent output. Excluded configurations remain protected but bypass full-page caching." msgstr "Aktuálně vyloučeno: AMP, IAB TCF, záložní jazyk podle země, bannery cílené na země, skrytí banneru mimo vybrané oblasti a vlastní výstup závislý na zemi. Vyloučené konfigurace zůstávají chráněné, ale obcházejí celostránkovou mezipaměť." -#: admin/views/settings.php:471 +#: admin/views/settings.php:492 msgid "Target Regions" msgstr "Cílové regiony" -#: admin/views/settings.php:475 admin/views/setup.php:184 +#: admin/views/settings.php:496 admin/views/setup.php:184 msgid "EU / EEA" msgstr "EU / EHP" -#: admin/views/settings.php:476 admin/views/setup.php:185 +#: admin/views/settings.php:497 admin/views/setup.php:185 msgid "United Kingdom" msgstr "Spojené království" -#: admin/views/settings.php:477 admin/views/setup.php:186 +#: admin/views/settings.php:498 admin/views/setup.php:186 msgid "United States" msgstr "Spojené státy" -#: admin/views/settings.php:478 admin/views/setup.php:187 +#: admin/views/settings.php:499 admin/views/setup.php:187 msgid "Canada" msgstr "Kanada" -#: admin/views/settings.php:479 admin/views/setup.php:188 +#: admin/views/settings.php:500 admin/views/setup.php:188 msgid "Brazil" msgstr "Brazílie" -#: admin/views/settings.php:481 admin/views/setup.php:190 +#: admin/views/settings.php:502 admin/views/setup.php:190 msgid "Japan" msgstr "Japonsko" -#: admin/views/settings.php:482 admin/views/setup.php:191 +#: admin/views/settings.php:503 admin/views/setup.php:191 msgid "Switzerland" msgstr "Švýcarsko" -#: admin/views/settings.php:483 admin/views/setup.php:192 +#: admin/views/settings.php:504 admin/views/setup.php:192 msgid "South Africa" msgstr "Jihoafrická republika" -#: admin/views/settings.php:493 +#: admin/views/settings.php:514 msgid "Select which regions should see the cookie banner. Visitors from other regions will not see it (if \"Hide banner\" is selected below)." msgstr "Vyberte, které regiony by měly vidět cookie banner. Návštěvníci z jiných regionů jej neuvidí (pokud je níže vybráno \"Skrýt banner\")." -#: admin/views/settings.php:496 +#: admin/views/settings.php:517 msgid "Non-target visitors" msgstr "Necílení návštěvníci" -#: admin/views/settings.php:498 +#: admin/views/settings.php:519 msgid "Show banner anyway (safest)" msgstr "Přesto zobrazit banner (nejbezpečnější)" -#: admin/views/settings.php:499 +#: admin/views/settings.php:520 msgid "Hide banner (scripts load normally)" msgstr "Skrýt banner (skripty se načítají normálně)" -#: admin/views/settings.php:501 +#: admin/views/settings.php:522 msgid "What happens when a visitor is from outside the target regions. \"Show banner anyway\" is the safest option and recommended for sites with global audiences." msgstr "Co se stane, když návštěvník přijde mimo cílové regiony. \"Přesto zobrazit banner\" je nejbezpečnější možnost a doporučuje se pro weby s globálním publikem." -#: admin/views/settings.php:508 +#: admin/views/settings.php:529 msgid "GeoIP Database (MaxMind GeoLite2)" msgstr "GeoIP databáze (MaxMind GeoLite2)" -#: admin/views/settings.php:512 +#: admin/views/settings.php:533 msgid "Geo-targeting requires a MaxMind GeoLite2 database. Get a free license key." msgstr "Geografické cílení vyžaduje databázi MaxMind GeoLite2. Získejte bezplatný licenční klíč." -#: admin/views/settings.php:515 +#: admin/views/settings.php:536 msgid "Database edition" msgstr "Edice databáze" -#: admin/views/settings.php:517 +#: admin/views/settings.php:538 msgid "Country — country-level only (recommended)" msgstr "Country — pouze na úrovni země (doporučeno)" -#: admin/views/settings.php:518 +#: admin/views/settings.php:539 msgid "City — adds region / state detection" msgstr "City — přidává detekci regionu/státu" -#: admin/views/settings.php:521 +#: admin/views/settings.php:542 msgid "Country (~10 MB) resolves the visitor’s country only — enough for country-based banner targeting and most per-jurisdiction rules. City (~60–110 MB) additionally resolves the region / province / state, which a few rules need: sub-national regimes such as Quebec Law 25 apply only inside one region of a country, so without City (or a Cloudflare CF-Region-Code header) the plugin can only see “Canada” and cannot route that visitor to the Quebec ruleset. Choose City only if you rely on region-level routing — it is a much larger download. Changing this and clicking “Update Database” replaces the installed database." msgstr "Country (~10 MB) určuje pouze zemi návštěvníka — postačuje pro cílení banneru podle země a pro většinu pravidel podle jurisdikce. City (~60–110 MB) navíc určuje region / provincii / stát, což některá pravidla potřebují: subnárodní režimy jako zákon 25 v Quebecu platí jen uvnitř jednoho regionu země, takže bez City (nebo hlavičky Cloudflare CF-Region-Code) plugin vidí pouze “Kanadu” a nemůže tohoto návštěvníka směrovat na ruleset Quebecu. City zvolte pouze tehdy, spoléháte-li na směrování na úrovni regionu — jde o mnohem větší stahování. Změnou tohoto nastavení a kliknutím na “Aktualizovat databázi” se nainstalovaná databáze nahradí." -#: admin/views/settings.php:525 +#: admin/views/settings.php:546 msgid "MaxMind License Key" msgstr "Licenční klíč MaxMind" -#: admin/views/settings.php:526 +#: admin/views/settings.php:547 msgid "Enter your MaxMind license key" msgstr "Zadejte svůj licenční klíč MaxMind" -#: admin/views/settings.php:530 +#: admin/views/settings.php:551 msgid "Update Database" msgstr "Aktualizovat databázi" -#: admin/views/settings.php:536 +#: admin/views/settings.php:557 msgid "Data Management" msgstr "Správa dat" -#: admin/views/settings.php:543 +#: admin/views/settings.php:564 msgid "Remove all data on uninstall" msgstr "Odebrat všechna data při odinstalaci" -#: admin/views/settings.php:545 +#: admin/views/settings.php:566 msgid "When enabled, deleting the plugin will permanently remove ALL data: cookies, categories, consent logs, pageviews, banner settings, and scan history. Keep this OFF if you plan to reinstall or update the plugin." msgstr "Pokud je povoleno, odinstalace pluginu trvale odstraní VŠECHNA data: cookies, kategorie, záznamy souhlasů, zobrazení stránek, nastavení banneru a historii skenovnáí. Nechte tuto možnost VYPNUTOU, pokud plánujete plugin znovu nainstalovat nebo aktualizovat." -#: admin/views/settings.php:548 +#: admin/views/settings.php:569 msgid "Privacy Request Retention Period (months)" msgstr "Doba uchování žádostí o ochranu soukromí (měsíce)" -#: admin/views/settings.php:550 +#: admin/views/settings.php:571 msgid "How long completed privacy (DSAR) request records are kept before automatic deletion. They are the evidence that a data-subject request was answered, so a minimum of 12–24 months is recommended. Default is 24 months." msgstr "Jak dlouho jsou vyřízené záznamy žádostí o ochranu soukromí (DSAR) uchovávány před automatickým smazáním. Slouží jako důkaz, že byla žádost subjektu údajů zodpovězena, proto se doporučuje minimálně 12–24 měsíců. Výchozí hodnota je 24 měsíců." -#: admin/views/settings.php:558 +#: admin/views/settings.php:579 msgid "Paid Memberships Pro integration" msgstr "Integrace Paid Memberships Pro" -#: admin/views/settings.php:562 +#: admin/views/settings.php:583 msgid "Offer selected Paid Memberships Pro levels a privacy-preserving membership alternative: logged-in members skip the cookie banner, necessary storage remains available, and all optional purposes stay denied until the member explicitly changes them in the preference center. Other visitors continue to use the standard consent flow." msgstr "Nabídněte vybraným úrovním Paid Memberships Pro alternativu členství šetrnou k soukromí: přihlášení členové banner s žádostí o cookies neuvidí, nezbytné úložiště zůstane k dispozici a všechny volitelné účely zůstávají odmítnuty, dokud je člen výslovně nezmění v centru předvoleb. Ostatní návštěvníci nadále používají standardní proces udělování souhlasu." -#: admin/views/settings.php:565 +#: admin/views/settings.php:586 msgid "Legal note:" msgstr "Právní poznámka:" -#: admin/views/settings.php:566 +#: admin/views/settings.php:587 msgid "This option does not grant consent on the member's behalf. Disclose the privacy-preserving membership alternative in your Terms and Privacy Policy, keep the paid service genuinely equivalent, and leave the standard preference control available so members can change any optional purpose at any time. Assess your specific model with qualified counsel; EDPB Opinion 08/2024 does not make every consent-or-pay implementation lawful." msgstr "Tato možnost neuděluje souhlas jménem člena. Alternativu členství šetrnou k soukromí uveďte ve svých Obchodních podmínkách a Zásadách ochrany osobních údajů, zajistěte, aby byla placená služba skutečně rovnocenná, a ponechte k dispozici standardní ovládání předvoleb, aby členové mohli kdykoli změnit jakýkoli volitelný účel. Svůj konkrétní model posuďte s kvalifikovaným právním poradcem; stanovisko EDPB č. 08/2024 nečiní zákonnou každou implementaci modelu souhlas-nebo-platba." -#: admin/views/settings.php:572 +#: admin/views/settings.php:593 msgid "Enable PMP integration" msgstr "Povolit integraci PMP" -#: admin/views/settings.php:576 +#: admin/views/settings.php:597 msgid "Exempt membership level IDs" msgstr "ID úrovní členství s výjimkou" -#: admin/views/settings.php:577 +#: admin/views/settings.php:598 msgid "e.g. 2, 3, 5" msgstr "např. 2, 3, 5" -#: admin/views/settings.php:579 +#: admin/views/settings.php:600 msgid "Comma-separated PMP level IDs whose members should be exempted. Find level IDs in Memberships → Settings → Levels. Leave empty to disable exemption." msgstr "ID úrovní PMP oddělená čárkami, jejichž členové mají být osvobozeni. ID úrovní najdete v Memberships → Settings → Levels. Pro zakázání osvobození ponechte prázdné." -#: admin/views/settings.php:588 +#: admin/views/settings.php:609 msgid "Footer legal links" msgstr "Právní odkazy v patičce" -#: admin/views/settings.php:595 +#: admin/views/settings.php:616 msgid "Show legal links in the footer" msgstr "Zobrazit právní odkazy v patičce" -#: admin/views/settings.php:597 +#: admin/views/settings.php:618 msgid "Off by default. When enabled, the pages you select below are printed as a small navigation block in your theme footer (via wp_footer). The markup is identical for every visitor — it does not depend on consent, login state or country — so it stays safe to serve from a page cache." msgstr "Ve výchozím nastavení vypnuto. Po zapnutí jsou stránky, které vyberete níže, vypsány jako malý navigační blok v patičce vašeho motivu (prostřednictvím wp_footer). Značkování je pro všechny návštěvníky stejné — nezávisí na souhlasu, stavu přihlášení ani zemi — takže je bezpečné jej poskytovat z mezipaměti stránek." -#: admin/views/settings.php:600 +#: admin/views/settings.php:621 msgid "Pages to link" msgstr "Stránky k propojení" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:638 +#: admin/views/settings.php:659 #, php-format msgid "Page #%d (unavailable)" msgstr "Stránka č. %d (nedostupná)" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:644 +#: admin/views/settings.php:665 #, php-format msgid "Page #%d (untitled)" msgstr "Stránka č. %d (bez názvu)" -#: admin/views/settings.php:674 +#: admin/views/settings.php:695 msgid "No published pages yet. Publish your Cookie Policy or Privacy Policy page first." msgstr "Zatím nejsou publikovány žádné stránky. Nejprve publikujte stránku se Zásadami cookies nebo Zásadami ochrany osobních údajů." -#: admin/views/settings.php:683 +#: admin/views/settings.php:704 msgid "Custom label (optional)" msgstr "Vlastní popisek (volitelné)" -#: admin/views/settings.php:687 +#: admin/views/settings.php:708 msgid "Selected links appear first in their saved order. Leave the label empty to use the page title. Unpublished or unavailable selections stay visible here so you can remove them; they are never printed in the footer." msgstr "Vybrané odkazy se zobrazují jako první v pořadí, ve kterém byly uloženy. Ponechte popisek prázdný, chcete-li použít název stránky. Nepublikované nebo nedostupné výběry zůstávají zde viditelné, abyste je mohli odstranit; v patičce se nikdy nevypisují." -#: admin/views/settings.php:695 +#: admin/views/settings.php:716 msgid "Force re-consent" msgstr "Vynutit nový souhlas" -#: admin/views/settings.php:699 +#: admin/views/settings.php:720 msgid "Show the cookie banner again to all returning visitors. Useful when you change which cookies or services are used on your site (e.g. new AdSense tags, added analytics) and want prior visitors to renew their consent before those services run." msgstr "Znovu zobrazit banner s cookies všem vracejícím se návštěvníkům. Užitečné, když změníte používané cookies nebo služby na svém webu (např. nové značky AdSense, přidané analýzy) a chcete, aby předchozí návštěvníci obnovili svůj souhlas před spuštěním těchto služeb." -#: admin/views/settings.php:702 +#: admin/views/settings.php:723 msgid "Current consent revision" msgstr "Aktuální revize souhlasu" -#: admin/views/settings.php:706 +#: admin/views/settings.php:727 msgid "Invalidate all consents" msgstr "Zneplatit všechny souhlasy" -#: admin/views/settings.php:709 +#: admin/views/settings.php:730 msgid "Visitors whose stored consent has a lower revision will see the banner again on their next visit. This does not affect the current page load." msgstr "Návštěvníci, jejichž uložený souhlas má nižší revizi, uvidí banner znovu při příštím přístupu. Toto nemá vliv na načtení aktuální stránky." -#: admin/views/settings.php:717 +#: admin/views/settings.php:738 msgid "Save Settings" msgstr "Uložit nastavení" @@ -7104,59 +7130,59 @@ msgid "Manage cookie preferences" msgstr "Spravovat předvolby cookies" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:908 +#: frontend/class-frontend.php:902 msgid "{name} enabled, disable {name}" msgstr "{name} povoleno, zakázat {name}" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:910 +#: frontend/class-frontend.php:904 msgid "{name} disabled, enable {name}" msgstr "{name} zakázáno, povolit {name}" -#: frontend/class-frontend.php:2882 +#: frontend/class-frontend.php:2876 #: frontend/modules/banner-rest/class-banner-rest.php:594 msgid "Your cookie preferences have been saved." msgstr "Vaše předvolby cookies byly uloženy." -#: frontend/class-frontend.php:2884 +#: frontend/class-frontend.php:2878 #: frontend/modules/banner-rest/class-banner-rest.php:596 msgid "Customise Consent Preferences" msgstr "Přizpůsobit předvolby souhlasu" -#: frontend/class-frontend.php:2885 +#: frontend/class-frontend.php:2879 #: frontend/modules/banner-rest/class-banner-rest.php:597 msgid "Service consent" msgstr "Souhlas se službou" -#: frontend/class-frontend.php:2887 +#: frontend/class-frontend.php:2881 #: frontend/modules/banner-rest/class-banner-rest.php:599 msgid "Cookie consent" msgstr "Souhlas s cookies" -#: frontend/class-frontend.php:2888 +#: frontend/class-frontend.php:2882 #: frontend/modules/banner-rest/class-banner-rest.php:600 msgid "Vendor consent" msgstr "Souhlas dodavatele" -#: frontend/class-frontend.php:2889 +#: frontend/class-frontend.php:2883 #: frontend/modules/banner-rest/class-banner-rest.php:601 msgid "These cookies are set by the embedded service on its own domain and are controlled by allowing or blocking the embed above — they cannot be removed individually." msgstr "Tyto soubory cookie nastavuje vložená služba na své vlastní doméně a jejich chování lze řídit povolením nebo zablokováním výše uvedené vložené služby – nelze je odstranit jednotlivě." #. translators: %d is the minimum digital age of consent. -#: frontend/class-frontend.php:2893 +#: frontend/class-frontend.php:2887 #: frontend/modules/banner-rest/class-banner-rest.php:606 #, php-format msgid "I confirm I am at least %d years old" msgstr "Potvrzuji, že mi je alespoň %d let" -#: frontend/class-frontend.php:2894 +#: frontend/class-frontend.php:2888 #: frontend/modules/banner-rest/class-banner-rest.php:607 msgid "Please confirm you meet the minimum age to accept optional cookies." msgstr "Potvrďte prosím, že splňujete minimální věk pro přijetí volitelných cookies." #. translators: %d is a number of seconds. -#: frontend/class-frontend.php:2901 +#: frontend/class-frontend.php:2895 #: frontend/modules/banner-rest/class-banner-rest.php:609 #, php-format msgid "Banner closes automatically in %d s..." diff --git a/languages/faz-cookie-manager-de_DE.po b/languages/faz-cookie-manager-de_DE.po index 54d85a71..c0599d2a 100644 --- a/languages/faz-cookie-manager-de_DE.po +++ b/languages/faz-cookie-manager-de_DE.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: FAZ Cookie Manager 1.9.2\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/faz-cookie-manager\n" -"POT-Creation-Date: 2026-09-29T10:34:49+00:00\n" +"POT-Creation-Date: 2026-10-01T06:43:53+00:00\n" "PO-Revision-Date: 2026-04-10\n" "Last-Translator: Fabio D'Alessandro\n" "Language-Team: German\n" @@ -48,13 +48,13 @@ msgid "Cookie Banner" msgstr "Cookie-Banner" #: admin/class-admin.php:233 admin/views/base.php:21 -#: frontend/class-frontend.php:2886 +#: frontend/class-frontend.php:2880 #: frontend/modules/banner-rest/class-banner-rest.php:598 msgid "Cookies" msgstr "Cookies" #: admin/class-admin.php:238 admin/views/base.php:22 -#: admin/views/dashboard.php:247 admin/views/settings.php:268 +#: admin/views/dashboard.php:247 admin/views/settings.php:289 msgid "Consent Logs" msgstr "Einwilligungsprotokolle" @@ -3987,7 +3987,7 @@ msgstr "Sprache:" msgid "Notice Title" msgstr "Hinweistitel" -#: admin/views/banner.php:341 frontend/class-frontend.php:2881 +#: admin/views/banner.php:341 frontend/class-frontend.php:2875 #: frontend/modules/banner-rest/class-banner-rest.php:593 msgid "We value your privacy" msgstr "Wir schätzen Ihre Privatsphäre" @@ -4326,7 +4326,7 @@ msgstr "Opt-out-Text (Do Not Sell)" msgid "Text for the \"Opt-out Preferences\" modal a visitor sees after clicking the \"Do Not Sell or Share My Personal Information\" link. Shown only on CCPA / US State Laws (and Both) banners. Follows the language selected above." msgstr "Text für das Modal «Opt-out-Einstellungen», das ein Besucher nach dem Klick auf den Link «Do Not Sell or Share My Personal Information» sieht. Wird nur bei CCPA-/US-State-Laws-Bannern (und Beide) angezeigt. Folgt der oben ausgewählten Sprache." -#: admin/views/banner.php:833 frontend/class-frontend.php:2883 +#: admin/views/banner.php:833 frontend/class-frontend.php:2877 #: frontend/modules/banner-rest/class-banner-rest.php:595 msgid "Opt-out Preferences" msgstr "Opt-out-Einstellungen" @@ -4481,7 +4481,7 @@ msgstr "Kanada (PIPEDA)" msgid "Brazil (LGPD)" msgstr "Brasilien (LGPD)" -#: admin/views/banner.php:1054 admin/views/settings.php:480 +#: admin/views/banner.php:1054 admin/views/settings.php:501 #: admin/views/setup.php:189 msgid "Australia" msgstr "Australien" @@ -5556,7 +5556,7 @@ msgstr "Wenn das Plugin Besucher aus China weiterleitet (PIPL gilt), erfordert d msgid "Global Vendor List (IAB TCF 2.3)" msgstr "Globale Anbieterliste (IAB TCF 2.3)" -#: admin/views/gvl.php:15 admin/views/settings.php:440 +#: admin/views/gvl.php:15 admin/views/settings.php:461 msgid "Update GVL Now" msgstr "GVL jetzt aktualisieren" @@ -5874,476 +5874,502 @@ msgid "Defaults: H2 for the banner and preferences titles, H3 for category title msgstr "" #: admin/views/settings.php:218 +#, fuzzy +msgid "Mobile Layout" +msgstr "Banner-Layout" + +#: admin/views/settings.php:222 +#, fuzzy +msgid "Banner layout on phones" +msgstr "Banner-Layout" + +#: admin/views/settings.php:224 +msgid "Comfortable (default) — buttons stacked" +msgstr "" + +#: admin/views/settings.php:225 +msgid "Compact — buttons on one row" +msgstr "" + +#: admin/views/settings.php:228 +msgid "Below 440px the comfortable layout gives each button its own full-width row, which makes the banner about 44% of a 390px screen. The compact layout puts them on a shared row and brings the same banner to about 29%. Desktop is not affected." +msgstr "" + +#: admin/views/settings.php:232 +msgid "Compact keeps every button at least 44px tall so it stays comfortable to tap, and keeps the accept and reject buttons exactly the same size as each other, as equal prominence requires. On screens narrower than 360px accept and reject stay side by side and the customise button moves to its own row." +msgstr "" + +#: admin/views/settings.php:239 msgid "Script Blocking" msgstr "Skript-Blockierung" -#: admin/views/settings.php:222 +#: admin/views/settings.php:243 msgid "Pages Excluded from Script Blocking" msgstr "Von der Skriptblockierung ausgeschlossene Seiten" -#: admin/views/settings.php:223 +#: admin/views/settings.php:244 msgid "One per line: /checkout/* or /cart/*" msgstr "Einer pro Zeile: /checkout/* oder /cart/*" -#: admin/views/settings.php:224 +#: admin/views/settings.php:245 msgid "URL patterns where script blocking is disabled (banner still shows). One per line, supports wildcards (e.g. /checkout/*)." msgstr "URL-Muster, bei denen die Skriptblockierung deaktiviert ist (Banner wird trotzdem angezeigt). Eines pro Zeile, unterstützt Platzhalter (z. B. /checkout/*)." -#: admin/views/settings.php:227 +#: admin/views/settings.php:248 msgid "Script Blocking Exceptions" msgstr "Ausnahmen für die Skript-Blockierung" -#: admin/views/settings.php:228 +#: admin/views/settings.php:249 msgid "One per line: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" msgstr "Einer pro Zeile: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" -#: admin/views/settings.php:229 +#: admin/views/settings.php:250 msgid "Scripts that should never be blocked, even before consent. One per line. Accepts three types of pattern:
- URL fragment (contains . or /): matched against the script's src or related URL attribute, e.g. googleapis.com/youtube/v3.
- Script ID (no dots/slashes): matched against the id attribute of the script tag, e.g. my-product-form-data.
- CSS class (no dots/slashes): matched against the script's class attribute, e.g. recaptcha.
- How IDs and classes match: whole words, plus their hyphen or underscore children. recaptcha matches recaptcha, recaptcha-badge and recaptcha_frame, but not myrecaptcha. Ending a pattern with - or _ (e.g. wp-) matches every word starting with it, which is much broader — prefer the exact ID or class wherever you can.
These exceptions bypass blocking entirely. Use them only for scripts that genuinely do not set tracking cookies. Be specific to avoid accidentally unblocking trackers.
Tip: You can also add class=\"faz-skip\" directly to any script tag to exclude it without adding anything here — no configuration needed." msgstr "Skripte, die niemals blockiert werden sollen, auch nicht vor der Einwilligung. Eines pro Zeile. Es werden drei Musterarten akzeptiert:
- URL-Fragment (enthält . oder /): wird mit dem src-Attribut des Skripts oder einem verwandten URL-Attribut abgeglichen, z. B. googleapis.com/youtube/v3.
- Skript-ID (ohne Punkte/Schrägstriche): wird mit dem id-Attribut des Skript-Tags abgeglichen, z. B. my-product-form-data.
- CSS-Klasse (ohne Punkte/Schrägstriche): wird mit dem class-Attribut des Skripts abgeglichen, z. B. recaptcha.
- Wie IDs und Klassen übereinstimmen: ganze Wörter sowie ihre durch Bindestrich oder Unterstrich verbundenen Unterbegriffe. recaptcha stimmt mit recaptcha, recaptcha-badge und recaptcha_frame überein, jedoch nicht mit myrecaptcha. Endet ein Muster mit - oder _ (z. B. wp-), stimmt es mit jedem damit beginnenden Wort überein, was deutlich breiter greift — bevorzugen Sie wo möglich die genaue ID oder Klasse.
Diese Ausnahmen umgehen die Blockierung vollständig. Verwenden Sie sie nur für Skripte, die tatsächlich keine Tracking-Cookies setzen. Seien Sie präzise, um nicht versehentlich Tracker freizugeben.
Tipp: Sie können einem beliebigen Skript-Tag auch direkt class=\"faz-skip\" hinzufügen, um es auszuschließen, ohne hier etwas eintragen zu müssen — keine Konfiguration nötig." -#: admin/views/settings.php:235 +#: admin/views/settings.php:256 msgid "Advanced inline CSS URL blocking" msgstr "Erweiterte Blockierung von Inline-CSS-URLs" -#: admin/views/settings.php:237 +#: admin/views/settings.php:258 msgid "Optional high-coverage mode for CSS-based third-party loads. The default blocker already handles server-rendered <style> tags and direct HTMLStyleElement updates. Enable this only if you have confirmed that a theme, page builder, or CSS-in-JS library injects blocked url() or @import rules through broader runtime channels such as Element.innerHTML, insertAdjacentHTML, CharacterData edits inside a style tag, or Constructable Stylesheets. This strengthens pre-consent blocking but hooks global browser APIs and may affect builders, editors, icon fonts, or CSS-in-JS libraries. Test the site before enabling in production." msgstr "Optionaler Modus mit höherer Abdeckung für CSS-basierte Drittanbieter-Ladevorgänge. Der Standard-Blocker behandelt bereits serverseitig gerenderte <style>-Tags und direkte HTMLStyleElement-Aktualisierungen. Aktivieren Sie dies nur, wenn Sie bestätigt haben, dass ein Theme, ein Page-Builder oder eine CSS-in-JS-Bibliothek blockierte url()- oder @import-Regeln über breitere Laufzeitkanäle wie Element.innerHTML, insertAdjacentHTML, CharacterData-Änderungen innerhalb eines Style-Tags oder Constructable Stylesheets einschleust. Dies verstärkt die Blockierung vor der Einwilligung, greift jedoch in globale Browser-APIs ein und kann Builder, Editoren, Icon-Schriftarten oder CSS-in-JS-Bibliotheken beeinträchtigen. Testen Sie die Website, bevor Sie dies in der Produktivumgebung aktivieren." -#: admin/views/settings.php:243 +#: admin/views/settings.php:264 msgid "Block non-consented cookies emitted by PHP" msgstr "Nicht eingewilligte, von PHP ausgegebene Cookies blockieren" -#: admin/views/settings.php:245 +#: admin/views/settings.php:266 msgid "Advanced, off by default. Filters outgoing Set-Cookie headers from pages, AJAX, REST and redirects, including HttpOnly cookies that JavaScript cannot remove. Necessary, WordPress-internal, security and checkout cookies are preserved, and deletion headers always pass. Enable only after testing login, forms, cart and checkout; unknown cookies fail permissive until the scanner classifies them." msgstr "Erweitert, standardmäßig deaktiviert. Filtert ausgehende Set-Cookie-Header von Seiten, AJAX, REST und Weiterleitungen, einschließlich HttpOnly-Cookies, die JavaScript nicht entfernen kann. Notwendige, WordPress-interne, sicherheitsrelevante und Checkout-Cookies bleiben erhalten, und Löschungs-Header werden immer durchgelassen. Aktivieren Sie dies erst, nachdem Sie Anmeldung, Formulare, Warenkorb und Checkout getestet haben; unbekannte Cookies werden bis zur Klassifizierung durch den Scanner permissiv behandelt (nicht blockiert)." -#: admin/views/settings.php:249 +#: admin/views/settings.php:270 msgid "Payment gateway scripts (e-commerce)" msgstr "Zahlungsgateway-Skripte (E-Commerce)" -#: admin/views/settings.php:250 +#: admin/views/settings.php:271 msgid "Only enable a gateway if your site takes payments. A payment provider's SDK (PayPal, Stripe, …) can set cookies and fingerprint the visitor, so it is blocked until consent by default. Enabling a gateway here loads its payment scripts before consent across your site — needed for payment forms that live outside a WooCommerce checkout (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). This is a compliance decision and your responsibility for your jurisdiction. A real WooCommerce checkout/cart page already loads these automatically as strictly necessary; a gateway's marketing pixel (e.g. PayPal's pptm.js) stays blocked regardless." msgstr "Aktivieren Sie ein Gateway nur, wenn Ihre Website Zahlungen entgegennimmt. Das SDK eines Zahlungsanbieters (PayPal, Stripe, …) kann Cookies setzen und den Besucher fingerprinten, daher ist es standardmäßig bis zur Einwilligung blockiert. Die Aktivierung eines Gateways hier lädt dessen Zahlungs-Skripte bereits vor der Einwilligung auf Ihrer gesamten Website — notwendig für Zahlungsformulare außerhalb eines WooCommerce-Checkouts (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). Dies ist eine Compliance-Entscheidung und liegt in Ihrer Verantwortung für Ihre Jurisdiktion. Eine echte WooCommerce-Checkout-/Warenkorbseite lädt diese bereits automatisch als unbedingt erforderlich; das Marketing-Pixel eines Gateways (z. B. PayPals pptm.js) bleibt davon unabhängig weiterhin blockiert." #. translators: %s: payment gateway name, e.g. PayPal. -#: admin/views/settings.php:257 +#: admin/views/settings.php:278 #, php-format msgid "Allow %s payment scripts before consent" msgstr "%s-Zahlungsskripte vor der Einwilligung zulassen" -#: admin/views/settings.php:275 +#: admin/views/settings.php:296 msgid "Enable consent logging" msgstr "Einwilligungsprotokollierung aktivieren" -#: admin/views/settings.php:277 +#: admin/views/settings.php:298 msgid "Records each visitor's consent choice (accepted, rejected, or partial) for GDPR accountability. Required by Art. 7(1) GDPR to demonstrate that consent was given." msgstr "Zeichnet die Einwilligungsentscheidung jedes Besuchers (akzeptiert, abgelehnt oder teilweise) für die DSGVO-Rechenschaftspflicht auf. Gemäß Art. 7(1) DSGVO erforderlich, um nachzuweisen, dass eine Einwilligung erteilt wurde." -#: admin/views/settings.php:280 +#: admin/views/settings.php:301 msgid "Consent log retention (months)" msgstr "Aufbewahrungsdauer der Einwilligungsprotokolle (Monate)" -#: admin/views/settings.php:282 +#: admin/views/settings.php:303 msgid "How long consent records are kept before automatic deletion. Choose a documented period appropriate to your accountability obligations. Logs older than this period are purged daily." msgstr "Wie lange Einwilligungsdatensätze vor der automatischen Löschung aufbewahrt werden. Wählen Sie einen dokumentierten Zeitraum, der Ihren Rechenschaftspflichten angemessen ist. Protokolle, die älter als dieser Zeitraum sind, werden täglich gelöscht." -#: admin/views/settings.php:289 +#: admin/views/settings.php:310 msgid "Data Subject Requests" msgstr "Anfragen betroffener Personen" -#: admin/views/settings.php:293 +#: admin/views/settings.php:314 msgid "Data subject request retention (months)" msgstr "Aufbewahrungsdauer für Anfragen betroffener Personen (Monate)" -#: admin/views/settings.php:295 +#: admin/views/settings.php:316 msgid "How long completed data-subject request records are kept before automatic deletion. Keep a period that supports your ability to demonstrate and manage requests." msgstr "Wie lange abgeschlossene Datensätze zu Anfragen betroffener Personen vor der automatischen Löschung aufbewahrt werden. Wählen Sie einen Zeitraum, der es Ihnen ermöglicht, Anfragen nachzuweisen und zu verwalten." -#: admin/views/settings.php:302 +#: admin/views/settings.php:323 msgid "Scanner" msgstr "Scanner" -#: admin/views/settings.php:306 +#: admin/views/settings.php:327 msgid "Max Pages to Scan" msgstr "Maximale Seitenanzahl für den Scan" -#: admin/views/settings.php:308 +#: admin/views/settings.php:329 msgid "Maximum number of pages the cookie scanner will crawl. Higher values find more cookies but take longer. 100 pages is sufficient for most sites." msgstr "Maximale Anzahl von Seiten, die der Cookie-Scanner durchsucht. Höhere Werte finden mehr Cookies, dauern aber länger. 100 Seiten reichen für die meisten Websites." -#: admin/views/settings.php:311 +#: admin/views/settings.php:332 msgid "Static public IP (optional)" msgstr "Statische öffentliche IP (optional)" -#: admin/views/settings.php:313 +#: admin/views/settings.php:334 msgid "Pin every server-side scanner request — sitemap discovery and page fetches — to this site IP while preserving the hostname, HTTPS certificate validation and SNI. Only public IPv4/IPv6 addresses are accepted; requires the WordPress cURL transport. Leave blank to use DNS." msgstr "Bindet jede serverseitige Scanner-Anfrage — Sitemap-Erkennung und Seitenabrufe — an diese Website-IP, während Hostname, HTTPS-Zertifikatsprüfung und SNI erhalten bleiben. Es werden nur öffentliche IPv4-/IPv6-Adressen akzeptiert; erfordert den cURL-Transport von WordPress. Leer lassen, um DNS zu verwenden." -#: admin/views/settings.php:319 +#: admin/views/settings.php:340 msgid "Scanner Debug Mode" msgstr "Scanner-Debugmodus" -#: admin/views/settings.php:321 +#: admin/views/settings.php:342 msgid "When enabled, the scanner logs every categorization decision. Download logs from the Cookies page." msgstr "Wenn aktiviert, protokolliert der Scanner jede Kategorisierungsentscheidung. Logs von der Cookie-Seite herunterladen." -#: admin/views/settings.php:328 +#: admin/views/settings.php:349 msgid "Automatic Scanning" msgstr "Automatisches Scannen" -#: admin/views/settings.php:335 +#: admin/views/settings.php:356 msgid "Enable automatic cookie scanning" msgstr "Automatischen Cookie-Scan aktivieren" -#: admin/views/settings.php:337 +#: admin/views/settings.php:358 msgid "Automatically scan your site for new cookies on a schedule. You will receive an email notification if new uncategorized cookies are found." msgstr "Durchsuchen Sie Ihre Website automatisch nach neuen Cookies nach einem Zeitplan. Sie erhalten eine E-Mail-Benachrichtigung, wenn neue nicht kategorisierte Cookies gefunden werden." -#: admin/views/settings.php:343 +#: admin/views/settings.php:364 msgid "Update cookie definitions weekly" msgstr "" -#: admin/views/settings.php:345 +#: admin/views/settings.php:366 msgid "Optional: downloads the Open Cookie Database from raw.githubusercontent.com once a week. Off by default. Without this option, the bundled database is updated with plugin releases. A failed download keeps the existing definitions." msgstr "" -#: admin/views/settings.php:348 +#: admin/views/settings.php:369 msgid "Scan Frequency" msgstr "Scan-Häufigkeit" -#: admin/views/settings.php:350 +#: admin/views/settings.php:371 msgid "Daily" msgstr "Täglich" -#: admin/views/settings.php:351 includes/class-activator.php:712 +#: admin/views/settings.php:372 includes/class-activator.php:712 msgid "Weekly" msgstr "Wöchentlich" -#: admin/views/settings.php:352 +#: admin/views/settings.php:373 msgid "Monthly" msgstr "Monatlich" -#: admin/views/settings.php:354 +#: admin/views/settings.php:375 msgid "How often the scanner runs automatically. Weekly is recommended for most sites." msgstr "Wie oft der Scanner automatisch ausgeführt wird. Für die meisten Websites wird wöchentlich empfohlen." -#: admin/views/settings.php:361 +#: admin/views/settings.php:382 msgid "Microsoft Consent APIs" msgstr "Microsoft Consent-APIs" -#: admin/views/settings.php:368 +#: admin/views/settings.php:389 msgid "Microsoft UET Consent Mode" msgstr "Microsoft UET Consent Mode" -#: admin/views/settings.php:370 +#: admin/views/settings.php:391 msgid "Signals consent status to Microsoft Advertising (Bing Ads) via the UET tag. Enable if you use Microsoft Advertising and need to respect consent for ad tracking." msgstr "Übermittelt den Einwilligungsstatus an Microsoft Advertising (Bing Ads) über das UET-Tag. Aktivieren, wenn Sie Microsoft Advertising verwenden und die Einwilligung für das Anzeigen-Tracking respektieren müssen." -#: admin/views/settings.php:376 +#: admin/views/settings.php:397 msgid "Microsoft Clarity Consent API" msgstr "Microsoft Clarity Consent API" -#: admin/views/settings.php:378 +#: admin/views/settings.php:399 msgid "Signals consent status to Microsoft Clarity (heatmaps and session recordings). Enable if you use Clarity and want it to pause tracking until consent is given." msgstr "Übermittelt den Einwilligungsstatus an Microsoft Clarity (Heatmaps und Sitzungsaufzeichnungen). Aktivieren, wenn Sie Clarity verwenden und das Tracking pausieren möchten, bis die Einwilligung erteilt wurde." -#: admin/views/settings.php:385 +#: admin/views/settings.php:406 msgid "Age Verification" msgstr "Altersverifizierung" -#: admin/views/settings.php:392 +#: admin/views/settings.php:413 msgid "Require age verification for consent" msgstr "Altersverifizierung für die Einwilligung erforderlich" -#: admin/views/settings.php:394 +#: admin/views/settings.php:415 msgid "Under GDPR Art. 8, children below the minimum age cannot give valid consent for data processing. When enabled, the visitor sees an age-confirmation checkbox directly above the Accept/Reject buttons; it gates only the Accept path — Reject stays available and is never blocked, and the checkbox is never pre-ticked." msgstr "Gemäß GDPR Art. 8 können Kinder unterhalb des Mindestalters keine wirksame Einwilligung zur Datenverarbeitung erteilen. Bei Aktivierung sieht der Besucher direkt über den Schaltflächen Akzeptieren/Ablehnen ein Kontrollkästchen zur Altersbestätigung; es sperrt nur den Weg über Akzeptieren — Ablehnen bleibt stets verfügbar und wird nie blockiert, und das Kontrollkästchen ist nie vorangekreuzt." -#: admin/views/settings.php:395 +#: admin/views/settings.php:416 msgid "This is a self-declared age affirmation only. It is NOT a substitute for verifying parental consent for under-age children under GDPR Art. 8(2), which requires separate reasonable-efforts verification this feature does not provide." msgstr "Dies ist lediglich eine selbst erklärte Altersbestätigung. Sie ist KEIN Ersatz für die Überprüfung der elterlichen Einwilligung bei minderjährigen Kindern gemäß GDPR Art. 8(2), die eine gesonderte, angemessene Verifizierung erfordert, die diese Funktion nicht bietet." -#: admin/views/settings.php:398 +#: admin/views/settings.php:419 msgid "Minimum Age" msgstr "Mindestalter" -#: admin/views/settings.php:400 +#: admin/views/settings.php:421 msgid "GDPR default is 16. Some EU member states allow 13-15 (e.g. Italy 14, Spain 14, France 15, Germany 16). Check your local law." msgstr "Der GDPR-Standardwert ist 16. Einige EU-Mitgliedstaaten erlauben 13-15 (z. B. Italien 14, Spanien 14, Frankreich 15, Deutschland 16). Prüfen Sie Ihr örtliches Recht." -#: admin/views/settings.php:407 admin/views/setup.php:201 +#: admin/views/settings.php:428 admin/views/setup.php:201 msgid "IAB TCF" msgstr "IAB TCF" -#: admin/views/settings.php:414 +#: admin/views/settings.php:435 msgid "Enable IAB TCF v2.3" msgstr "IAB TCF v2.3 aktivieren" -#: admin/views/settings.php:416 +#: admin/views/settings.php:437 msgid "Enables the IAB Transparency & Consent Framework. Required if you work with ad-tech vendors that need a standardised TC String for programmatic advertising in the EU." msgstr "Aktiviert das IAB Transparency & Consent Framework. Erforderlich, wenn Sie mit Ad-Tech-Anbietern arbeiten, die einen standardisierten TC String für programmatische Werbung in der EU benötigen." -#: admin/views/settings.php:419 +#: admin/views/settings.php:440 msgid "Publisher Country Code" msgstr "Ländercode des Herausgebers" -#: admin/views/settings.php:421 +#: admin/views/settings.php:442 msgid "ISO 3166-1 alpha-2 code of the publisher's country (e.g. IT, DE, FR). Used in the TCF consent string." msgstr "ISO 3166-1 alpha-2-Code des Landes des Publishers (z. B. IT, DE, FR). Wird im TCF-Einwilligungsstring verwendet." -#: admin/views/settings.php:424 admin/views/setup.php:348 +#: admin/views/settings.php:445 admin/views/setup.php:348 msgid "CMP ID" msgstr "CMP-ID" -#: admin/views/settings.php:426 +#: admin/views/settings.php:447 msgid "Your registered IAB CMP ID (IAB CMP List). With ID 0 the banner and cookie blocking work normally, but ad-tech vendors will ignore the TC String. Google Consent Mode v2 works regardless of CMP registration." msgstr "Deine registrierte IAB CMP-ID (IAB CMP-Liste). Mit ID 0 funktionieren Banner und Cookie-Blockierung normal, aber Ad-Tech-Anbieter ignorieren den TC String. Google Consent Mode v2 funktioniert unabhängig von der CMP-Registrierung." -#: admin/views/settings.php:432 +#: admin/views/settings.php:453 msgid "Purpose One Treatment" msgstr "Behandlung von Zweck eins" -#: admin/views/settings.php:434 +#: admin/views/settings.php:455 msgid "Set to true if Purpose 1 consent was NOT disclosed (e.g. publisher in a country where Purpose 1 is not required)." msgstr "Auf true setzen, wenn die Zustimmung zu Zweck 1 NICHT offengelegt wurde (z. B. Herausgeber in einem Land, in dem Zweck 1 nicht erforderlich ist)." -#: admin/views/settings.php:438 +#: admin/views/settings.php:459 msgid "Loading GVL status..." msgstr "GVL-Status wird geladen..." -#: admin/views/settings.php:447 +#: admin/views/settings.php:468 msgid "Jurisdiction & Geo-routing" msgstr "Rechtsraum & Geo-Routing" -#: admin/views/settings.php:454 +#: admin/views/settings.php:475 msgid "Apply jurisdiction rules by visitor location" msgstr "Rechtsraumregeln anhand des Besucherstandorts anwenden" -#: admin/views/settings.php:456 +#: admin/views/settings.php:477 msgid "Recommended and enabled by default. Detect each visitor's location to enforce the matching jurisdiction rules and mandatory controls, and optionally limit banner display to selected regions. Turning this off means the law saved on the active banner applies to every visitor; for example, a CCPA banner will no longer gain GDPR blocking for an EEA visitor. Location requires a MaxMind GeoLite2 database (configured below), or a trusted country signal such as Cloudflare CF-IPCountry." msgstr "Empfohlen und standardmäßig aktiviert. Ermittelt den Standort jedes Besuchers, um die passenden Rechtsraumregeln und Pflichtkontrollen durchzusetzen und die Banneranzeige optional auf ausgewählte Regionen zu begrenzen. Wird dies ausgeschaltet, gilt das im aktiven Banner gespeicherte Recht für jeden Besucher; ein CCPA-Banner erhält dann beispielsweise keine DSGVO-Blockierung mehr für einen Besucher aus dem EWR. Die Standortbestimmung benötigt eine unten konfigurierte MaxMind-GeoLite2-Datenbank oder ein vertrauenswürdiges Ländersignal wie Cloudflare CF-IPCountry." -#: admin/views/settings.php:462 admin/views/setup.php:376 +#: admin/views/settings.php:483 admin/views/setup.php:376 msgid "Cache-safe jurisdiction bootstrap" msgstr "Cache-sicherer Rechtsraum-Bootstrap" -#: admin/views/settings.php:464 +#: admin/views/settings.php:485 msgid "Allows compatible full-page caches and CDNs to share one strict GDPR shell. The browser resolves the live jurisdiction through a no-store endpoint before mounting the banner or releasing optional scripts. If the configuration is unsupported or the endpoint fails, FAZ keeps the stricter shell and preserves the normal page-cache bypass." msgstr "Ermöglicht kompatiblen Ganzseiten-Caches und CDNs, eine einzige strenge DSGVO-Shell gemeinsam zu verwenden. Der Browser ermittelt den aktuellen Rechtsraum über einen No-Store-Endpunkt, bevor das Banner eingebunden oder optionale Skripte freigegeben werden. Wird die Konfiguration nicht unterstützt oder schlägt der Endpunkt fehl, behält FAZ die strengere Shell und den normalen Seiten-Cache-Bypass bei." -#: admin/views/settings.php:466 +#: admin/views/settings.php:487 msgid "Checking cache-safe bootstrap readiness..." msgstr "Bereitschaft des cache-sicheren Bootstraps wird geprüft ..." -#: admin/views/settings.php:468 +#: admin/views/settings.php:489 msgid "Currently excluded: AMP, IAB TCF, country-based language fallback, country-targeted banner rows, hiding the banner outside selected regions, and custom country-dependent output. Excluded configurations remain protected but bypass full-page caching." msgstr "Derzeit ausgeschlossen: AMP, IAB TCF, länderabhängiger Sprach-Fallback, länderspezifische Bannerzeilen, Ausblenden des Banners außerhalb ausgewählter Regionen und benutzerdefinierte länderabhängige Ausgabe. Ausgeschlossene Konfigurationen bleiben geschützt, umgehen aber den Ganzseiten-Cache." -#: admin/views/settings.php:471 +#: admin/views/settings.php:492 msgid "Target Regions" msgstr "Zielregionen" -#: admin/views/settings.php:475 admin/views/setup.php:184 +#: admin/views/settings.php:496 admin/views/setup.php:184 msgid "EU / EEA" msgstr "EU / EWR" -#: admin/views/settings.php:476 admin/views/setup.php:185 +#: admin/views/settings.php:497 admin/views/setup.php:185 msgid "United Kingdom" msgstr "Vereinigtes Königreich" -#: admin/views/settings.php:477 admin/views/setup.php:186 +#: admin/views/settings.php:498 admin/views/setup.php:186 msgid "United States" msgstr "Vereinigte Staaten" -#: admin/views/settings.php:478 admin/views/setup.php:187 +#: admin/views/settings.php:499 admin/views/setup.php:187 msgid "Canada" msgstr "Kanada" -#: admin/views/settings.php:479 admin/views/setup.php:188 +#: admin/views/settings.php:500 admin/views/setup.php:188 msgid "Brazil" msgstr "Brasilien" -#: admin/views/settings.php:481 admin/views/setup.php:190 +#: admin/views/settings.php:502 admin/views/setup.php:190 msgid "Japan" msgstr "Japan" -#: admin/views/settings.php:482 admin/views/setup.php:191 +#: admin/views/settings.php:503 admin/views/setup.php:191 msgid "Switzerland" msgstr "Schweiz" -#: admin/views/settings.php:483 admin/views/setup.php:192 +#: admin/views/settings.php:504 admin/views/setup.php:192 msgid "South Africa" msgstr "Südafrika" -#: admin/views/settings.php:493 +#: admin/views/settings.php:514 msgid "Select which regions should see the cookie banner. Visitors from other regions will not see it (if \"Hide banner\" is selected below)." msgstr "Wählen Sie aus, welche Regionen das Cookie-Banner sehen sollen. Besucher aus anderen Regionen sehen es nicht (wenn unten „Banner ausblenden“ ausgewählt ist)." -#: admin/views/settings.php:496 +#: admin/views/settings.php:517 msgid "Non-target visitors" msgstr "Nicht-Zielbesucher" -#: admin/views/settings.php:498 +#: admin/views/settings.php:519 msgid "Show banner anyway (safest)" msgstr "Banner trotzdem anzeigen (sicherste Option)" -#: admin/views/settings.php:499 +#: admin/views/settings.php:520 msgid "Hide banner (scripts load normally)" msgstr "Banner ausblenden (Skripte laden normal)" -#: admin/views/settings.php:501 +#: admin/views/settings.php:522 msgid "What happens when a visitor is from outside the target regions. \"Show banner anyway\" is the safest option and recommended for sites with global audiences." msgstr "Was passiert, wenn ein Besucher von außerhalb der Zielregionen kommt. „Banner trotzdem anzeigen“ ist die sicherste Option und für Websites mit globalem Publikum empfohlen." -#: admin/views/settings.php:508 +#: admin/views/settings.php:529 msgid "GeoIP Database (MaxMind GeoLite2)" msgstr "GeoIP-Datenbank (MaxMind GeoLite2)" -#: admin/views/settings.php:512 +#: admin/views/settings.php:533 msgid "Geo-targeting requires a MaxMind GeoLite2 database. Get a free license key." msgstr "Geo-Targeting erfordert eine MaxMind-GeoLite2-Datenbank. Kostenlosen Lizenzschlüssel anfordern." -#: admin/views/settings.php:515 +#: admin/views/settings.php:536 msgid "Database edition" msgstr "Datenbank-Edition" -#: admin/views/settings.php:517 +#: admin/views/settings.php:538 msgid "Country — country-level only (recommended)" msgstr "Country — nur auf Länderebene (empfohlen)" -#: admin/views/settings.php:518 +#: admin/views/settings.php:539 msgid "City — adds region / state detection" msgstr "City — ergänzt die Erkennung von Region/Bundesland" -#: admin/views/settings.php:521 +#: admin/views/settings.php:542 msgid "Country (~10 MB) resolves the visitor’s country only — enough for country-based banner targeting and most per-jurisdiction rules. City (~60–110 MB) additionally resolves the region / province / state, which a few rules need: sub-national regimes such as Quebec Law 25 apply only inside one region of a country, so without City (or a Cloudflare CF-Region-Code header) the plugin can only see “Canada” and cannot route that visitor to the Quebec ruleset. Choose City only if you rely on region-level routing — it is a much larger download. Changing this and clicking “Update Database” replaces the installed database." msgstr "Country (~10 MB) ermittelt nur das Land des Besuchers — ausreichend für länderbasiertes Banner-Targeting und die meisten Regeln pro Rechtsraum. City (~60–110 MB) ermittelt zusätzlich Region / Provinz / Bundesland, was einige Regeln benötigen: subnationale Regelungen wie das Quebec-Gesetz 25 gelten nur innerhalb einer Region eines Landes, sodass das Plugin ohne City (oder einen Cloudflare-Header CF-Region-Code) nur “Kanada” sieht und diesen Besucher nicht zum Quebec-Ruleset leiten kann. Wählen Sie City nur, wenn Sie auf Routing auf Regionsebene angewiesen sind — es ist ein deutlich größerer Download. Wenn Sie dies ändern und auf “Datenbank aktualisieren” klicken, wird die installierte Datenbank ersetzt." -#: admin/views/settings.php:525 +#: admin/views/settings.php:546 msgid "MaxMind License Key" msgstr "MaxMind-Lizenzschlüssel" -#: admin/views/settings.php:526 +#: admin/views/settings.php:547 msgid "Enter your MaxMind license key" msgstr "Geben Sie Ihren MaxMind-Lizenzschlüssel ein" -#: admin/views/settings.php:530 +#: admin/views/settings.php:551 msgid "Update Database" msgstr "Datenbank aktualisieren" -#: admin/views/settings.php:536 +#: admin/views/settings.php:557 msgid "Data Management" msgstr "Datenverwaltung" -#: admin/views/settings.php:543 +#: admin/views/settings.php:564 msgid "Remove all data on uninstall" msgstr "Alle Daten bei der Deinstallation entfernen" -#: admin/views/settings.php:545 +#: admin/views/settings.php:566 msgid "When enabled, deleting the plugin will permanently remove ALL data: cookies, categories, consent logs, pageviews, banner settings, and scan history. Keep this OFF if you plan to reinstall or update the plugin." msgstr "Wenn aktiviert, werden beim Löschen des Plugins ALLE Daten dauerhaft entfernt: Cookies, Kategorien, Einwilligungsprotokolle, Seitenaufrufe, Banner-Einstellungen und Scan-Verlauf. Lasse diese Option DEAKTIVIERT, wenn du das Plugin erneut installieren oder aktualisieren möchtest." -#: admin/views/settings.php:548 +#: admin/views/settings.php:569 msgid "Privacy Request Retention Period (months)" msgstr "Aufbewahrungsdauer für Datenschutzanfragen (Monate)" -#: admin/views/settings.php:550 +#: admin/views/settings.php:571 msgid "How long completed privacy (DSAR) request records are kept before automatic deletion. They are the evidence that a data-subject request was answered, so a minimum of 12–24 months is recommended. Default is 24 months." msgstr "Wie lange abgeschlossene Datenschutzanfragen (DSAR) vor der automatischen Löschung aufbewahrt werden. Sie sind der Nachweis dafür, dass eine Anfrage einer betroffenen Person beantwortet wurde, daher werden mindestens 12–24 Monate empfohlen. Standard sind 24 Monate." -#: admin/views/settings.php:558 +#: admin/views/settings.php:579 msgid "Paid Memberships Pro integration" msgstr "Paid Memberships Pro-Integration" -#: admin/views/settings.php:562 +#: admin/views/settings.php:583 msgid "Offer selected Paid Memberships Pro levels a privacy-preserving membership alternative: logged-in members skip the cookie banner, necessary storage remains available, and all optional purposes stay denied until the member explicitly changes them in the preference center. Other visitors continue to use the standard consent flow." msgstr "Bietet ausgewählten Paid-Memberships-Pro-Stufen eine datenschutzfreundliche Mitgliedschaftsalternative: Angemeldete Mitglieder überspringen das Cookie-Banner, notwendiger Speicher bleibt verfügbar, und alle optionalen Zwecke bleiben abgelehnt, bis das Mitglied sie im Präferenzzentrum ausdrücklich ändert. Andere Besucher nutzen weiterhin den Standard-Einwilligungsablauf." -#: admin/views/settings.php:565 +#: admin/views/settings.php:586 msgid "Legal note:" msgstr "Rechtlicher Hinweis:" -#: admin/views/settings.php:566 +#: admin/views/settings.php:587 msgid "This option does not grant consent on the member's behalf. Disclose the privacy-preserving membership alternative in your Terms and Privacy Policy, keep the paid service genuinely equivalent, and leave the standard preference control available so members can change any optional purpose at any time. Assess your specific model with qualified counsel; EDPB Opinion 08/2024 does not make every consent-or-pay implementation lawful." msgstr "Diese Option erteilt keine Einwilligung im Namen des Mitglieds. Legen Sie die datenschutzfreundliche Mitgliedschaftsalternative in Ihren AGB und Ihrer Datenschutzerklärung offen, halten Sie den kostenpflichtigen Dienst wirklich gleichwertig, und lassen Sie die Standard-Präferenzsteuerung verfügbar, damit Mitglieder jeden optionalen Zweck jederzeit ändern können. Lassen Sie Ihr konkretes Modell von qualifiziertem Rechtsbeistand prüfen; die EDPB-Stellungnahme 08/2024 macht nicht jede „Consent or Pay“-Umsetzung rechtmäßig." -#: admin/views/settings.php:572 +#: admin/views/settings.php:593 msgid "Enable PMP integration" msgstr "PMP-Integration aktivieren" -#: admin/views/settings.php:576 +#: admin/views/settings.php:597 msgid "Exempt membership level IDs" msgstr "Ausgenommene Mitgliedschaftsstufen-IDs" -#: admin/views/settings.php:577 +#: admin/views/settings.php:598 msgid "e.g. 2, 3, 5" msgstr "z. B. 2, 3, 5" -#: admin/views/settings.php:579 +#: admin/views/settings.php:600 msgid "Comma-separated PMP level IDs whose members should be exempted. Find level IDs in Memberships → Settings → Levels. Leave empty to disable exemption." msgstr "Kommagetrennte PMP-Level-IDs, deren Mitglieder ausgenommen werden sollen. Level-IDs finden Sie unter Memberships → Settings → Levels. Leer lassen, um die Ausnahme zu deaktivieren." -#: admin/views/settings.php:588 +#: admin/views/settings.php:609 msgid "Footer legal links" msgstr "Rechtliche Links im Footer" -#: admin/views/settings.php:595 +#: admin/views/settings.php:616 msgid "Show legal links in the footer" msgstr "Rechtliche Links im Footer anzeigen" -#: admin/views/settings.php:597 +#: admin/views/settings.php:618 msgid "Off by default. When enabled, the pages you select below are printed as a small navigation block in your theme footer (via wp_footer). The markup is identical for every visitor — it does not depend on consent, login state or country — so it stays safe to serve from a page cache." msgstr "Standardmäßig deaktiviert. Bei Aktivierung werden die unten ausgewählten Seiten als kleiner Navigationsblock im Footer Ihres Themes ausgegeben (über wp_footer). Das Markup ist für jeden Besucher identisch — es hängt nicht von Einwilligung, Anmeldestatus oder Land ab — und kann daher gefahrlos aus einem Seiten-Cache ausgeliefert werden." -#: admin/views/settings.php:600 +#: admin/views/settings.php:621 msgid "Pages to link" msgstr "Zu verlinkende Seiten" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:638 +#: admin/views/settings.php:659 #, php-format msgid "Page #%d (unavailable)" msgstr "Seite Nr. %d (nicht verfügbar)" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:644 +#: admin/views/settings.php:665 #, php-format msgid "Page #%d (untitled)" msgstr "Seite Nr. %d (ohne Titel)" -#: admin/views/settings.php:674 +#: admin/views/settings.php:695 msgid "No published pages yet. Publish your Cookie Policy or Privacy Policy page first." msgstr "Noch keine veröffentlichten Seiten. Veröffentlichen Sie zuerst Ihre Cookie-Richtlinie oder Datenschutzerklärung." -#: admin/views/settings.php:683 +#: admin/views/settings.php:704 msgid "Custom label (optional)" msgstr "Benutzerdefinierte Beschriftung (optional)" -#: admin/views/settings.php:687 +#: admin/views/settings.php:708 msgid "Selected links appear first in their saved order. Leave the label empty to use the page title. Unpublished or unavailable selections stay visible here so you can remove them; they are never printed in the footer." msgstr "Ausgewählte Links erscheinen zuerst in der gespeicherten Reihenfolge. Lassen Sie die Beschriftung leer, um den Seitentitel zu verwenden. Nicht veröffentlichte oder nicht verfügbare Auswahlen bleiben hier sichtbar, damit Sie sie entfernen können; sie werden nie im Footer ausgegeben." -#: admin/views/settings.php:695 +#: admin/views/settings.php:716 msgid "Force re-consent" msgstr "Neue Einwilligung erzwingen" -#: admin/views/settings.php:699 +#: admin/views/settings.php:720 msgid "Show the cookie banner again to all returning visitors. Useful when you change which cookies or services are used on your site (e.g. new AdSense tags, added analytics) and want prior visitors to renew their consent before those services run." msgstr "Zeigen Sie das Cookie-Banner erneut allen wiederkehrenden Besuchern. Nützlich, wenn Sie ändern, welche Cookies oder Dienste auf Ihrer Website verwendet werden (z. B. neue AdSense-Tags, hinzugefügte Analysen), und möchten, dass frühere Besucher ihre Zustimmung erneuern, bevor diese Dienste ausgeführt werden." -#: admin/views/settings.php:702 +#: admin/views/settings.php:723 msgid "Current consent revision" msgstr "Aktuelle Einwilligungsrevision" -#: admin/views/settings.php:706 +#: admin/views/settings.php:727 msgid "Invalidate all consents" msgstr "Alle Einwilligungen ungültig machen" -#: admin/views/settings.php:709 +#: admin/views/settings.php:730 msgid "Visitors whose stored consent has a lower revision will see the banner again on their next visit. This does not affect the current page load." msgstr "Besucher, deren gespeichertes Einverständnis eine niedrigere Revision hat, sehen das Banner beim nächsten Besuch erneut. Dies betrifft den aktuellen Seitenaufruf nicht." -#: admin/views/settings.php:717 +#: admin/views/settings.php:738 msgid "Save Settings" msgstr "Einstellungen speichern" @@ -7093,59 +7119,59 @@ msgid "Manage cookie preferences" msgstr "Cookie-Einstellungen verwalten" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:908 +#: frontend/class-frontend.php:902 msgid "{name} enabled, disable {name}" msgstr "{name} aktiviert, {name} deaktivieren" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:910 +#: frontend/class-frontend.php:904 msgid "{name} disabled, enable {name}" msgstr "{name} deaktiviert, {name} aktivieren" -#: frontend/class-frontend.php:2882 +#: frontend/class-frontend.php:2876 #: frontend/modules/banner-rest/class-banner-rest.php:594 msgid "Your cookie preferences have been saved." msgstr "Ihre Cookie-Einstellungen wurden gespeichert." -#: frontend/class-frontend.php:2884 +#: frontend/class-frontend.php:2878 #: frontend/modules/banner-rest/class-banner-rest.php:596 msgid "Customise Consent Preferences" msgstr "Einwilligungseinstellungen anpassen" -#: frontend/class-frontend.php:2885 +#: frontend/class-frontend.php:2879 #: frontend/modules/banner-rest/class-banner-rest.php:597 msgid "Service consent" msgstr "Dienst-Zustimmung" -#: frontend/class-frontend.php:2887 +#: frontend/class-frontend.php:2881 #: frontend/modules/banner-rest/class-banner-rest.php:599 msgid "Cookie consent" msgstr "Cookie-Einwilligung" -#: frontend/class-frontend.php:2888 +#: frontend/class-frontend.php:2882 #: frontend/modules/banner-rest/class-banner-rest.php:600 msgid "Vendor consent" msgstr "Anbieter-Einwilligung" -#: frontend/class-frontend.php:2889 +#: frontend/class-frontend.php:2883 #: frontend/modules/banner-rest/class-banner-rest.php:601 msgid "These cookies are set by the embedded service on its own domain and are controlled by allowing or blocking the embed above — they cannot be removed individually." msgstr "Diese Cookies werden vom eingebetteten Dienst auf dessen eigener Domain gesetzt und über das Zulassen oder Blockieren der Einbettung oben gesteuert — einzeln können sie nicht entfernt werden." #. translators: %d is the minimum digital age of consent. -#: frontend/class-frontend.php:2893 +#: frontend/class-frontend.php:2887 #: frontend/modules/banner-rest/class-banner-rest.php:606 #, php-format msgid "I confirm I am at least %d years old" msgstr "Ich bestätige, dass ich mindestens %d Jahre alt bin" -#: frontend/class-frontend.php:2894 +#: frontend/class-frontend.php:2888 #: frontend/modules/banner-rest/class-banner-rest.php:607 msgid "Please confirm you meet the minimum age to accept optional cookies." msgstr "Bitte bestätigen Sie, dass Sie das Mindestalter erreichen, um optionale Cookies zu akzeptieren." #. translators: %d is a number of seconds. -#: frontend/class-frontend.php:2901 +#: frontend/class-frontend.php:2895 #: frontend/modules/banner-rest/class-banner-rest.php:609 #, php-format msgid "Banner closes automatically in %d s..." diff --git a/languages/faz-cookie-manager-fr_FR.po b/languages/faz-cookie-manager-fr_FR.po index e3f3e98e..b5bf5948 100644 --- a/languages/faz-cookie-manager-fr_FR.po +++ b/languages/faz-cookie-manager-fr_FR.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: faz-cookie-manager\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/faz-cookie-manager\n" -"POT-Creation-Date: 2026-09-29T10:34:49+00:00\n" +"POT-Creation-Date: 2026-10-01T06:43:53+00:00\n" "PO-Revision-Date: 2026-03-23\n" "Last-Translator: Pascal (contributed by user pascalminator)\n" "Language-Team: French\n" @@ -48,13 +48,13 @@ msgid "Cookie Banner" msgstr "Bannière cookie" #: admin/class-admin.php:233 admin/views/base.php:21 -#: frontend/class-frontend.php:2886 +#: frontend/class-frontend.php:2880 #: frontend/modules/banner-rest/class-banner-rest.php:598 msgid "Cookies" msgstr "Cookies" #: admin/class-admin.php:238 admin/views/base.php:22 -#: admin/views/dashboard.php:247 admin/views/settings.php:268 +#: admin/views/dashboard.php:247 admin/views/settings.php:289 msgid "Consent Logs" msgstr "Journaux de consentement" @@ -3987,7 +3987,7 @@ msgstr "Langue :" msgid "Notice Title" msgstr "Titre de l'avis" -#: admin/views/banner.php:341 frontend/class-frontend.php:2881 +#: admin/views/banner.php:341 frontend/class-frontend.php:2875 #: frontend/modules/banner-rest/class-banner-rest.php:593 msgid "We value your privacy" msgstr "Nous respectons votre vie privée" @@ -4326,7 +4326,7 @@ msgstr "Texte d'opt-out (Do Not Sell)" msgid "Text for the \"Opt-out Preferences\" modal a visitor sees after clicking the \"Do Not Sell or Share My Personal Information\" link. Shown only on CCPA / US State Laws (and Both) banners. Follows the language selected above." msgstr "Texte de la fenêtre « Préférences de désinscription » qu'un visiteur voit après avoir cliqué sur le lien « Do Not Sell or Share My Personal Information ». Affiché uniquement sur les bannières CCPA / lois des États américains (et Les deux). Suit la langue sélectionnée ci-dessus." -#: admin/views/banner.php:833 frontend/class-frontend.php:2883 +#: admin/views/banner.php:833 frontend/class-frontend.php:2877 #: frontend/modules/banner-rest/class-banner-rest.php:595 msgid "Opt-out Preferences" msgstr "Préférences de désinscription" @@ -4481,7 +4481,7 @@ msgstr "Canada (PIPEDA)" msgid "Brazil (LGPD)" msgstr "Brésil (LGPD)" -#: admin/views/banner.php:1054 admin/views/settings.php:480 +#: admin/views/banner.php:1054 admin/views/settings.php:501 #: admin/views/setup.php:189 msgid "Australia" msgstr "Australie" @@ -5556,7 +5556,7 @@ msgstr "Lorsque le plugin dirige des visiteurs depuis la Chine (PIPL applicable) msgid "Global Vendor List (IAB TCF 2.3)" msgstr "Liste globale des fournisseurs (IAB TCF 2.3)" -#: admin/views/gvl.php:15 admin/views/settings.php:440 +#: admin/views/gvl.php:15 admin/views/settings.php:461 msgid "Update GVL Now" msgstr "Mettre à jour la GVL maintenant" @@ -5874,476 +5874,502 @@ msgid "Defaults: H2 for the banner and preferences titles, H3 for category title msgstr "" #: admin/views/settings.php:218 +#, fuzzy +msgid "Mobile Layout" +msgstr "Mise en page de la bannière" + +#: admin/views/settings.php:222 +#, fuzzy +msgid "Banner layout on phones" +msgstr "Mise en page de la bannière" + +#: admin/views/settings.php:224 +msgid "Comfortable (default) — buttons stacked" +msgstr "" + +#: admin/views/settings.php:225 +msgid "Compact — buttons on one row" +msgstr "" + +#: admin/views/settings.php:228 +msgid "Below 440px the comfortable layout gives each button its own full-width row, which makes the banner about 44% of a 390px screen. The compact layout puts them on a shared row and brings the same banner to about 29%. Desktop is not affected." +msgstr "" + +#: admin/views/settings.php:232 +msgid "Compact keeps every button at least 44px tall so it stays comfortable to tap, and keeps the accept and reject buttons exactly the same size as each other, as equal prominence requires. On screens narrower than 360px accept and reject stay side by side and the customise button moves to its own row." +msgstr "" + +#: admin/views/settings.php:239 msgid "Script Blocking" msgstr "Blocage de scripts" -#: admin/views/settings.php:222 +#: admin/views/settings.php:243 msgid "Pages Excluded from Script Blocking" msgstr "Pages exclues du blocage de scripts" -#: admin/views/settings.php:223 +#: admin/views/settings.php:244 msgid "One per line: /checkout/* or /cart/*" msgstr "Un par ligne : /checkout/* ou /cart/*" -#: admin/views/settings.php:224 +#: admin/views/settings.php:245 msgid "URL patterns where script blocking is disabled (banner still shows). One per line, supports wildcards (e.g. /checkout/*)." msgstr "Modèles d'URL où le blocage de scripts est désactivé (la bannière reste visible). Un par ligne, supporte les caractères génériques (par ex. /checkout/*)." -#: admin/views/settings.php:227 +#: admin/views/settings.php:248 msgid "Script Blocking Exceptions" msgstr "Exceptions au blocage des scripts" -#: admin/views/settings.php:228 +#: admin/views/settings.php:249 msgid "One per line: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" msgstr "Un par ligne : googleapis.com/youtube/v3, recaptcha, my-inline-script-id" -#: admin/views/settings.php:229 +#: admin/views/settings.php:250 msgid "Scripts that should never be blocked, even before consent. One per line. Accepts three types of pattern:
- URL fragment (contains . or /): matched against the script's src or related URL attribute, e.g. googleapis.com/youtube/v3.
- Script ID (no dots/slashes): matched against the id attribute of the script tag, e.g. my-product-form-data.
- CSS class (no dots/slashes): matched against the script's class attribute, e.g. recaptcha.
- How IDs and classes match: whole words, plus their hyphen or underscore children. recaptcha matches recaptcha, recaptcha-badge and recaptcha_frame, but not myrecaptcha. Ending a pattern with - or _ (e.g. wp-) matches every word starting with it, which is much broader — prefer the exact ID or class wherever you can.
These exceptions bypass blocking entirely. Use them only for scripts that genuinely do not set tracking cookies. Be specific to avoid accidentally unblocking trackers.
Tip: You can also add class=\"faz-skip\" directly to any script tag to exclude it without adding anything here — no configuration needed." msgstr "Scripts qui ne doivent jamais être bloqués, même avant le consentement. Un par ligne. Trois types de modèles sont acceptés :
- Fragment d'URL (contient . ou /) : comparé au src du script ou à un attribut d'URL associé, par ex. googleapis.com/youtube/v3.
- ID de script (sans point ni barre oblique) : comparé à l'attribut id de la balise script, par ex. my-product-form-data.
- Classe CSS (sans point ni barre oblique) : comparée à l'attribut class du script, par ex. recaptcha.
- Correspondance des ID et classes : mots entiers, ainsi que leurs dérivés avec trait d'union ou underscore. recaptcha correspond à recaptcha, recaptcha-badge et recaptcha_frame, mais pas à myrecaptcha. Terminer un modèle par - ou _ (par ex. wp-) correspond à tout mot commençant ainsi, ce qui est bien plus large — préférez l'ID ou la classe exacts chaque fois que possible.
Ces exceptions contournent entièrement le blocage. Ne les utilisez que pour des scripts qui ne déposent réellement aucun cookie de suivi. Soyez précis pour éviter de débloquer accidentellement des traceurs.
Astuce : vous pouvez aussi ajouter class=\"faz-skip\" directement sur n'importe quelle balise script pour l'exclure sans rien ajouter ici — aucune configuration nécessaire." -#: admin/views/settings.php:235 +#: admin/views/settings.php:256 msgid "Advanced inline CSS URL blocking" msgstr "Blocage avancé des URL CSS en ligne" -#: admin/views/settings.php:237 +#: admin/views/settings.php:258 msgid "Optional high-coverage mode for CSS-based third-party loads. The default blocker already handles server-rendered <style> tags and direct HTMLStyleElement updates. Enable this only if you have confirmed that a theme, page builder, or CSS-in-JS library injects blocked url() or @import rules through broader runtime channels such as Element.innerHTML, insertAdjacentHTML, CharacterData edits inside a style tag, or Constructable Stylesheets. This strengthens pre-consent blocking but hooks global browser APIs and may affect builders, editors, icon fonts, or CSS-in-JS libraries. Test the site before enabling in production." msgstr "Mode optionnel à couverture étendue pour les chargements tiers basés sur CSS. Le bloqueur par défaut gère déjà les balises <style> rendues côté serveur et les mises à jour directes de HTMLStyleElement. N'activez ceci que si vous avez confirmé qu'un thème, un constructeur de pages ou une bibliothèque CSS-in-JS injecte des règles url() ou @import bloquées via des canaux d'exécution plus larges tels que Element.innerHTML, insertAdjacentHTML, des modifications de CharacterData à l'intérieur d'une balise style, ou les Constructable Stylesheets. Cela renforce le blocage avant consentement mais intercepte des API globales du navigateur et peut affecter des constructeurs, éditeurs, polices d'icônes ou bibliothèques CSS-in-JS. Testez le site avant d'activer en production." -#: admin/views/settings.php:243 +#: admin/views/settings.php:264 msgid "Block non-consented cookies emitted by PHP" msgstr "Bloquer les cookies non consentis émis par PHP" -#: admin/views/settings.php:245 +#: admin/views/settings.php:266 msgid "Advanced, off by default. Filters outgoing Set-Cookie headers from pages, AJAX, REST and redirects, including HttpOnly cookies that JavaScript cannot remove. Necessary, WordPress-internal, security and checkout cookies are preserved, and deletion headers always pass. Enable only after testing login, forms, cart and checkout; unknown cookies fail permissive until the scanner classifies them." msgstr "Fonction avancée, désactivée par défaut. Filtre les en-têtes Set-Cookie sortants des pages, des requêtes AJAX, REST et des redirections, y compris les cookies HttpOnly que JavaScript ne peut pas supprimer. Les cookies nécessaires, internes à WordPress, de sécurité et de paiement sont préservés, et les en-têtes de suppression passent toujours. N'activez qu'après avoir testé la connexion, les formulaires, le panier et le paiement ; les cookies inconnus sont autorisés par défaut tant que le scanner ne les a pas classifiés." -#: admin/views/settings.php:249 +#: admin/views/settings.php:270 msgid "Payment gateway scripts (e-commerce)" msgstr "Scripts des passerelles de paiement (e-commerce)" -#: admin/views/settings.php:250 +#: admin/views/settings.php:271 msgid "Only enable a gateway if your site takes payments. A payment provider's SDK (PayPal, Stripe, …) can set cookies and fingerprint the visitor, so it is blocked until consent by default. Enabling a gateway here loads its payment scripts before consent across your site — needed for payment forms that live outside a WooCommerce checkout (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). This is a compliance decision and your responsibility for your jurisdiction. A real WooCommerce checkout/cart page already loads these automatically as strictly necessary; a gateway's marketing pixel (e.g. PayPal's pptm.js) stays blocked regardless." msgstr "N'activez une passerelle que si votre site accepte des paiements. Le SDK d'un prestataire de paiement (PayPal, Stripe, …) peut déposer des cookies et créer une empreinte du visiteur ; il est donc bloqué par défaut jusqu'au consentement. Activer une passerelle ici charge ses scripts de paiement avant le consentement sur l'ensemble de votre site — nécessaire pour les formulaires de paiement situés en dehors d'un tunnel de commande WooCommerce (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). Il s'agit d'une décision de conformité relevant de votre responsabilité pour votre juridiction. Une véritable page de panier/paiement WooCommerce charge déjà automatiquement ces scripts en tant que strictement nécessaires ; le pixel marketing d'une passerelle (par ex. pptm.js de PayPal) reste bloqué dans tous les cas." #. translators: %s: payment gateway name, e.g. PayPal. -#: admin/views/settings.php:257 +#: admin/views/settings.php:278 #, php-format msgid "Allow %s payment scripts before consent" msgstr "Autoriser les scripts de paiement %s avant le consentement" -#: admin/views/settings.php:275 +#: admin/views/settings.php:296 msgid "Enable consent logging" msgstr "Activer la journalisation du consentement" -#: admin/views/settings.php:277 +#: admin/views/settings.php:298 msgid "Records each visitor's consent choice (accepted, rejected, or partial) for GDPR accountability. Required by Art. 7(1) GDPR to demonstrate that consent was given." msgstr "Enregistre le choix de consentement de chaque visiteur (accepté, refusé ou partiel) pour la responsabilité GDPR. Requis par l'art. 7(1) du GDPR pour démontrer que le consentement a été donné." -#: admin/views/settings.php:280 +#: admin/views/settings.php:301 msgid "Consent log retention (months)" msgstr "Conservation des journaux de consentement (mois)" -#: admin/views/settings.php:282 +#: admin/views/settings.php:303 msgid "How long consent records are kept before automatic deletion. Choose a documented period appropriate to your accountability obligations. Logs older than this period are purged daily." msgstr "Durée de conservation des enregistrements de consentement avant suppression automatique. Choisissez une durée documentée adaptée à vos obligations de responsabilité (accountability). Les journaux plus anciens que cette durée sont purgés quotidiennement." -#: admin/views/settings.php:289 +#: admin/views/settings.php:310 msgid "Data Subject Requests" msgstr "Demandes des personnes concernées" -#: admin/views/settings.php:293 +#: admin/views/settings.php:314 msgid "Data subject request retention (months)" msgstr "Conservation des demandes des personnes concernées (mois)" -#: admin/views/settings.php:295 +#: admin/views/settings.php:316 msgid "How long completed data-subject request records are kept before automatic deletion. Keep a period that supports your ability to demonstrate and manage requests." msgstr "Durée de conservation des demandes des personnes concernées traitées avant suppression automatique. Conservez une durée qui vous permet de démontrer et de gérer ces demandes." -#: admin/views/settings.php:302 +#: admin/views/settings.php:323 msgid "Scanner" msgstr "Scanner" -#: admin/views/settings.php:306 +#: admin/views/settings.php:327 msgid "Max Pages to Scan" msgstr "Nombre max. de pages à analyser" -#: admin/views/settings.php:308 +#: admin/views/settings.php:329 msgid "Maximum number of pages the cookie scanner will crawl. Higher values find more cookies but take longer. 100 pages is sufficient for most sites." msgstr "Nombre maximum de pages que le scanner de cookies va parcourir. Des valeurs plus élevées trouvent plus de cookies mais prennent plus de temps. 100 pages suffisent pour la plupart des sites." -#: admin/views/settings.php:311 +#: admin/views/settings.php:332 msgid "Static public IP (optional)" msgstr "IP publique statique (facultatif)" -#: admin/views/settings.php:313 +#: admin/views/settings.php:334 msgid "Pin every server-side scanner request — sitemap discovery and page fetches — to this site IP while preserving the hostname, HTTPS certificate validation and SNI. Only public IPv4/IPv6 addresses are accepted; requires the WordPress cURL transport. Leave blank to use DNS." msgstr "Épingle chaque requête du scanner côté serveur — découverte du sitemap et récupération des pages — sur cette IP du site, tout en préservant le nom d'hôte, la validation du certificat HTTPS et le SNI. Seules les adresses IPv4/IPv6 publiques sont acceptées ; nécessite le transport cURL de WordPress. Laissez vide pour utiliser le DNS." -#: admin/views/settings.php:319 +#: admin/views/settings.php:340 msgid "Scanner Debug Mode" msgstr "Mode débogage du scanner" -#: admin/views/settings.php:321 +#: admin/views/settings.php:342 msgid "When enabled, the scanner logs every categorization decision. Download logs from the Cookies page." msgstr "Lorsqu’activé, le scanner enregistre chaque décision de catégorisation. Téléchargez les journaux depuis la page Cookies." -#: admin/views/settings.php:328 +#: admin/views/settings.php:349 msgid "Automatic Scanning" msgstr "Analyse automatique" -#: admin/views/settings.php:335 +#: admin/views/settings.php:356 msgid "Enable automatic cookie scanning" msgstr "Activer l'analyse automatique des cookies" -#: admin/views/settings.php:337 +#: admin/views/settings.php:358 msgid "Automatically scan your site for new cookies on a schedule. You will receive an email notification if new uncategorized cookies are found." msgstr "Analyse automatiquement votre site à la recherche de nouveaux cookies selon un calendrier. Vous recevrez une notification par e-mail si de nouveaux cookies non catégorisés sont trouvés." -#: admin/views/settings.php:343 +#: admin/views/settings.php:364 msgid "Update cookie definitions weekly" msgstr "" -#: admin/views/settings.php:345 +#: admin/views/settings.php:366 msgid "Optional: downloads the Open Cookie Database from raw.githubusercontent.com once a week. Off by default. Without this option, the bundled database is updated with plugin releases. A failed download keeps the existing definitions." msgstr "" -#: admin/views/settings.php:348 +#: admin/views/settings.php:369 msgid "Scan Frequency" msgstr "Fréquence d'analyse" -#: admin/views/settings.php:350 +#: admin/views/settings.php:371 msgid "Daily" msgstr "Quotidienne" -#: admin/views/settings.php:351 includes/class-activator.php:712 +#: admin/views/settings.php:372 includes/class-activator.php:712 msgid "Weekly" msgstr "Hebdomadaire" -#: admin/views/settings.php:352 +#: admin/views/settings.php:373 msgid "Monthly" msgstr "Mensuelle" -#: admin/views/settings.php:354 +#: admin/views/settings.php:375 msgid "How often the scanner runs automatically. Weekly is recommended for most sites." msgstr "Fréquence d'exécution automatique du scanner. Hebdomadaire est recommandé pour la plupart des sites." -#: admin/views/settings.php:361 +#: admin/views/settings.php:382 msgid "Microsoft Consent APIs" msgstr "API de consentement Microsoft" -#: admin/views/settings.php:368 +#: admin/views/settings.php:389 msgid "Microsoft UET Consent Mode" msgstr "Microsoft UET Consent Mode" -#: admin/views/settings.php:370 +#: admin/views/settings.php:391 msgid "Signals consent status to Microsoft Advertising (Bing Ads) via the UET tag. Enable if you use Microsoft Advertising and need to respect consent for ad tracking." msgstr "Signale l'état du consentement à Microsoft Advertising (Bing Ads) via la balise UET. Activez si vous utilisez Microsoft Advertising et devez respecter le consentement pour le suivi publicitaire." -#: admin/views/settings.php:376 +#: admin/views/settings.php:397 msgid "Microsoft Clarity Consent API" msgstr "API de consentement Microsoft Clarity" -#: admin/views/settings.php:378 +#: admin/views/settings.php:399 msgid "Signals consent status to Microsoft Clarity (heatmaps and session recordings). Enable if you use Clarity and want it to pause tracking until consent is given." msgstr "Signale l'état du consentement à Microsoft Clarity (cartes de chaleur et enregistrements de session). Activez si vous utilisez Clarity et souhaitez qu'il suspende le suivi jusqu'à ce que le consentement soit donné." -#: admin/views/settings.php:385 +#: admin/views/settings.php:406 msgid "Age Verification" msgstr "Vérification de l'âge" -#: admin/views/settings.php:392 +#: admin/views/settings.php:413 msgid "Require age verification for consent" msgstr "Exiger la vérification de l'âge pour le consentement" -#: admin/views/settings.php:394 +#: admin/views/settings.php:415 msgid "Under GDPR Art. 8, children below the minimum age cannot give valid consent for data processing. When enabled, the visitor sees an age-confirmation checkbox directly above the Accept/Reject buttons; it gates only the Accept path — Reject stays available and is never blocked, and the checkbox is never pre-ticked." msgstr "En vertu de l'art. 8 du RGPD, les enfants n'ayant pas atteint l'âge minimum ne peuvent pas donner un consentement valide pour le traitement des données. Une fois activée, le visiteur voit une case de confirmation d'âge directement au-dessus des boutons Accepter/Refuser ; elle ne conditionne que le parcours Accepter — Refuser reste disponible et n'est jamais bloqué, et la case n'est jamais précochée." -#: admin/views/settings.php:395 +#: admin/views/settings.php:416 msgid "This is a self-declared age affirmation only. It is NOT a substitute for verifying parental consent for under-age children under GDPR Art. 8(2), which requires separate reasonable-efforts verification this feature does not provide." msgstr "Il ne s'agit que d'une déclaration d'âge autodéclarée. Ce n'est PAS un substitut à la vérification du consentement parental pour les mineurs au titre de l'art. 8(2) du RGPD, qui exige une vérification distincte par des efforts raisonnables que cette fonctionnalité ne fournit pas." -#: admin/views/settings.php:398 +#: admin/views/settings.php:419 msgid "Minimum Age" msgstr "Âge minimum" -#: admin/views/settings.php:400 +#: admin/views/settings.php:421 msgid "GDPR default is 16. Some EU member states allow 13-15 (e.g. Italy 14, Spain 14, France 15, Germany 16). Check your local law." msgstr "La valeur par défaut du RGPD est 16 ans. Certains États membres de l'UE autorisent 13 à 15 ans (par ex. Italie 14, Espagne 14, France 15, Allemagne 16). Vérifiez votre législation locale." -#: admin/views/settings.php:407 admin/views/setup.php:201 +#: admin/views/settings.php:428 admin/views/setup.php:201 msgid "IAB TCF" msgstr "IAB TCF" -#: admin/views/settings.php:414 +#: admin/views/settings.php:435 msgid "Enable IAB TCF v2.3" msgstr "Activer IAB TCF v2.3" -#: admin/views/settings.php:416 +#: admin/views/settings.php:437 msgid "Enables the IAB Transparency & Consent Framework. Required if you work with ad-tech vendors that need a standardised TC String for programmatic advertising in the EU." msgstr "Active le cadre de transparence et de consentement IAB. Requis si vous travaillez avec des fournisseurs ad-tech qui ont besoin d'une chaîne TC standardisée pour la publicité programmatique dans l'UE." -#: admin/views/settings.php:419 +#: admin/views/settings.php:440 msgid "Publisher Country Code" msgstr "Code pays de l'éditeur" -#: admin/views/settings.php:421 +#: admin/views/settings.php:442 msgid "ISO 3166-1 alpha-2 code of the publisher's country (e.g. IT, DE, FR). Used in the TCF consent string." msgstr "Code ISO 3166-1 alpha-2 du pays de l'éditeur (par ex. IT, DE, FR). Utilisé dans la chaîne de consentement TCF." -#: admin/views/settings.php:424 admin/views/setup.php:348 +#: admin/views/settings.php:445 admin/views/setup.php:348 msgid "CMP ID" msgstr "ID CMP" -#: admin/views/settings.php:426 +#: admin/views/settings.php:447 msgid "Your registered IAB CMP ID (IAB CMP List). With ID 0 the banner and cookie blocking work normally, but ad-tech vendors will ignore the TC String. Google Consent Mode v2 works regardless of CMP registration." msgstr "Votre ID CMP IAB enregistré (Liste des CMP IAB). Avec l'ID 0, la bannière et le blocage de cookies fonctionnent normalement, mais les fournisseurs ad-tech ignoreront la chaîne TC. Google Consent Mode v2 fonctionne indépendamment de l'enregistrement CMP." -#: admin/views/settings.php:432 +#: admin/views/settings.php:453 msgid "Purpose One Treatment" msgstr "Traitement du Purpose One" -#: admin/views/settings.php:434 +#: admin/views/settings.php:455 msgid "Set to true if Purpose 1 consent was NOT disclosed (e.g. publisher in a country where Purpose 1 is not required)." msgstr "Définir sur true si le consentement au Purpose 1 n'a PAS été divulgué (par ex. éditeur dans un pays où le Purpose 1 n'est pas requis)." -#: admin/views/settings.php:438 +#: admin/views/settings.php:459 msgid "Loading GVL status..." msgstr "Chargement de l'état de la GVL..." -#: admin/views/settings.php:447 +#: admin/views/settings.php:468 msgid "Jurisdiction & Geo-routing" msgstr "Juridiction et géo-routage" -#: admin/views/settings.php:454 +#: admin/views/settings.php:475 msgid "Apply jurisdiction rules by visitor location" msgstr "Appliquer les règles juridictionnelles selon la position du visiteur" -#: admin/views/settings.php:456 +#: admin/views/settings.php:477 msgid "Recommended and enabled by default. Detect each visitor's location to enforce the matching jurisdiction rules and mandatory controls, and optionally limit banner display to selected regions. Turning this off means the law saved on the active banner applies to every visitor; for example, a CCPA banner will no longer gain GDPR blocking for an EEA visitor. Location requires a MaxMind GeoLite2 database (configured below), or a trusted country signal such as Cloudflare CF-IPCountry." msgstr "Recommandé et activé par défaut. Détecte la position de chaque visiteur pour appliquer les règles juridictionnelles et les contrôles obligatoires correspondants et, facultativement, limiter la bannière aux régions choisies. Si vous désactivez cette option, la loi enregistrée dans la bannière active s'applique à tous les visiteurs ; par exemple, une bannière CCPA ne bénéficiera plus du blocage RGPD pour un visiteur de l'EEE. La localisation nécessite une base MaxMind GeoLite2 configurée ci-dessous ou un signal de pays fiable comme Cloudflare CF-IPCountry." -#: admin/views/settings.php:462 admin/views/setup.php:376 +#: admin/views/settings.php:483 admin/views/setup.php:376 msgid "Cache-safe jurisdiction bootstrap" msgstr "Amorçage juridictionnel compatible avec le cache" -#: admin/views/settings.php:464 +#: admin/views/settings.php:485 msgid "Allows compatible full-page caches and CDNs to share one strict GDPR shell. The browser resolves the live jurisdiction through a no-store endpoint before mounting the banner or releasing optional scripts. If the configuration is unsupported or the endpoint fails, FAZ keeps the stricter shell and preserves the normal page-cache bypass." msgstr "Permet aux caches de page complète et CDN compatibles de partager une seule enveloppe RGPD stricte. Le navigateur détermine la juridiction réelle via un point de terminaison no-store avant de monter la bannière ou de libérer les scripts facultatifs. Si la configuration n'est pas prise en charge ou si le point de terminaison échoue, FAZ conserve l'enveloppe la plus stricte et le contournement normal du cache de page." -#: admin/views/settings.php:466 +#: admin/views/settings.php:487 msgid "Checking cache-safe bootstrap readiness..." msgstr "Vérification de l'état de préparation de l'amorçage compatible avec le cache…" -#: admin/views/settings.php:468 +#: admin/views/settings.php:489 msgid "Currently excluded: AMP, IAB TCF, country-based language fallback, country-targeted banner rows, hiding the banner outside selected regions, and custom country-dependent output. Excluded configurations remain protected but bypass full-page caching." msgstr "Actuellement exclus : AMP, IAB TCF, repli linguistique selon le pays, bannières ciblant certains pays, masquage de la bannière hors des régions choisies et sortie personnalisée dépendant du pays. Les configurations exclues restent protégées, mais contournent le cache de page complète." -#: admin/views/settings.php:471 +#: admin/views/settings.php:492 msgid "Target Regions" msgstr "Régions cibles" -#: admin/views/settings.php:475 admin/views/setup.php:184 +#: admin/views/settings.php:496 admin/views/setup.php:184 msgid "EU / EEA" msgstr "UE / EEE" -#: admin/views/settings.php:476 admin/views/setup.php:185 +#: admin/views/settings.php:497 admin/views/setup.php:185 msgid "United Kingdom" msgstr "Royaume-Uni" -#: admin/views/settings.php:477 admin/views/setup.php:186 +#: admin/views/settings.php:498 admin/views/setup.php:186 msgid "United States" msgstr "États-Unis" -#: admin/views/settings.php:478 admin/views/setup.php:187 +#: admin/views/settings.php:499 admin/views/setup.php:187 msgid "Canada" msgstr "Canada" -#: admin/views/settings.php:479 admin/views/setup.php:188 +#: admin/views/settings.php:500 admin/views/setup.php:188 msgid "Brazil" msgstr "Brésil" -#: admin/views/settings.php:481 admin/views/setup.php:190 +#: admin/views/settings.php:502 admin/views/setup.php:190 msgid "Japan" msgstr "Japon" -#: admin/views/settings.php:482 admin/views/setup.php:191 +#: admin/views/settings.php:503 admin/views/setup.php:191 msgid "Switzerland" msgstr "Suisse" -#: admin/views/settings.php:483 admin/views/setup.php:192 +#: admin/views/settings.php:504 admin/views/setup.php:192 msgid "South Africa" msgstr "Afrique du Sud" -#: admin/views/settings.php:493 +#: admin/views/settings.php:514 msgid "Select which regions should see the cookie banner. Visitors from other regions will not see it (if \"Hide banner\" is selected below)." msgstr "Sélectionnez les régions qui doivent voir la bannière cookie. Les visiteurs d'autres régions ne la verront pas (si « Masquer la bannière » est sélectionné ci-dessous)." -#: admin/views/settings.php:496 +#: admin/views/settings.php:517 msgid "Non-target visitors" msgstr "Visiteurs hors cible" -#: admin/views/settings.php:498 +#: admin/views/settings.php:519 msgid "Show banner anyway (safest)" msgstr "Afficher la bannière quand même (plus sûr)" -#: admin/views/settings.php:499 +#: admin/views/settings.php:520 msgid "Hide banner (scripts load normally)" msgstr "Masquer la bannière (les scripts se chargent normalement)" -#: admin/views/settings.php:501 +#: admin/views/settings.php:522 msgid "What happens when a visitor is from outside the target regions. \"Show banner anyway\" is the safest option and recommended for sites with global audiences." msgstr "Ce qui se passe lorsqu'un visiteur provient de l'extérieur des régions cibles. « Afficher la bannière quand même » est l'option la plus sûre et recommandée pour les sites à audience mondiale." -#: admin/views/settings.php:508 +#: admin/views/settings.php:529 msgid "GeoIP Database (MaxMind GeoLite2)" msgstr "Base de données GeoIP (MaxMind GeoLite2)" -#: admin/views/settings.php:512 +#: admin/views/settings.php:533 msgid "Geo-targeting requires a MaxMind GeoLite2 database. Get a free license key." msgstr "Le ciblage géographique nécessite une base de données MaxMind GeoLite2. Obtenez une clé de licence gratuite." -#: admin/views/settings.php:515 +#: admin/views/settings.php:536 msgid "Database edition" msgstr "Édition de la base de données" -#: admin/views/settings.php:517 +#: admin/views/settings.php:538 msgid "Country — country-level only (recommended)" msgstr "Country — niveau pays uniquement (recommandé)" -#: admin/views/settings.php:518 +#: admin/views/settings.php:539 msgid "City — adds region / state detection" msgstr "City — ajoute la détection de la région / de l’État" -#: admin/views/settings.php:521 +#: admin/views/settings.php:542 msgid "Country (~10 MB) resolves the visitor’s country only — enough for country-based banner targeting and most per-jurisdiction rules. City (~60–110 MB) additionally resolves the region / province / state, which a few rules need: sub-national regimes such as Quebec Law 25 apply only inside one region of a country, so without City (or a Cloudflare CF-Region-Code header) the plugin can only see “Canada” and cannot route that visitor to the Quebec ruleset. Choose City only if you rely on region-level routing — it is a much larger download. Changing this and clicking “Update Database” replaces the installed database." msgstr "Country (~10 Mo) ne résout que le pays du visiteur — suffisant pour le ciblage du bandeau par pays et la plupart des règles par juridiction. City (~60–110 Mo) résout en plus la région / province / État, ce dont quelques règles ont besoin : les régimes infranationaux comme la Loi 25 du Québec ne s’appliquent qu’à l’intérieur d’une région d’un pays ; sans City (ou un en-tête Cloudflare CF-Region-Code), l’extension ne voit que “Canada” et ne peut pas router ce visiteur vers le ruleset du Québec. Ne choisissez City que si vous utilisez le routage au niveau régional — c’est un téléchargement bien plus volumineux. Modifier ce réglage puis cliquer sur “Mettre à jour la base de données” remplace la base installée." -#: admin/views/settings.php:525 +#: admin/views/settings.php:546 msgid "MaxMind License Key" msgstr "Clé de licence MaxMind" -#: admin/views/settings.php:526 +#: admin/views/settings.php:547 msgid "Enter your MaxMind license key" msgstr "Saisissez votre clé de licence MaxMind" -#: admin/views/settings.php:530 +#: admin/views/settings.php:551 msgid "Update Database" msgstr "Mettre à jour la base de données" -#: admin/views/settings.php:536 +#: admin/views/settings.php:557 msgid "Data Management" msgstr "Gestion des données" -#: admin/views/settings.php:543 +#: admin/views/settings.php:564 msgid "Remove all data on uninstall" msgstr "Supprimer toutes les données lors de la désinstallation" -#: admin/views/settings.php:545 +#: admin/views/settings.php:566 msgid "When enabled, deleting the plugin will permanently remove ALL data: cookies, categories, consent logs, pageviews, banner settings, and scan history. Keep this OFF if you plan to reinstall or update the plugin." msgstr "Lorsqu’activé, la suppression du plugin supprimera définitivement TOUTES les données : cookies, catégories, journaux de consentement, pages vues, paramètres de bannière et historique des analyses. Laissez cette option DÉSACTIVÉE si vous prévoyez de réinstaller ou de mettre à jour le plugin." -#: admin/views/settings.php:548 +#: admin/views/settings.php:569 msgid "Privacy Request Retention Period (months)" msgstr "Durée de conservation des demandes de confidentialité (mois)" -#: admin/views/settings.php:550 +#: admin/views/settings.php:571 msgid "How long completed privacy (DSAR) request records are kept before automatic deletion. They are the evidence that a data-subject request was answered, so a minimum of 12–24 months is recommended. Default is 24 months." msgstr "Durée de conservation des demandes de confidentialité (DSAR) traitées avant suppression automatique. Elles constituent la preuve qu'une demande d'une personne concernée a été traitée ; une durée minimale de 12 à 24 mois est donc recommandée. La valeur par défaut est 24 mois." -#: admin/views/settings.php:558 +#: admin/views/settings.php:579 msgid "Paid Memberships Pro integration" msgstr "Intégration Paid Memberships Pro" -#: admin/views/settings.php:562 +#: admin/views/settings.php:583 msgid "Offer selected Paid Memberships Pro levels a privacy-preserving membership alternative: logged-in members skip the cookie banner, necessary storage remains available, and all optional purposes stay denied until the member explicitly changes them in the preference center. Other visitors continue to use the standard consent flow." msgstr "Offrez aux niveaux Paid Memberships Pro sélectionnés une alternative d'adhésion respectueuse de la vie privée : les membres connectés ne voient pas la bannière de cookies, le stockage nécessaire reste disponible, et toutes les finalités optionnelles restent refusées jusqu'à ce que le membre les modifie explicitement dans le centre de préférences. Les autres visiteurs continuent d'utiliser le parcours de consentement standard." -#: admin/views/settings.php:565 +#: admin/views/settings.php:586 msgid "Legal note:" msgstr "Mention légale :" -#: admin/views/settings.php:566 +#: admin/views/settings.php:587 msgid "This option does not grant consent on the member's behalf. Disclose the privacy-preserving membership alternative in your Terms and Privacy Policy, keep the paid service genuinely equivalent, and leave the standard preference control available so members can change any optional purpose at any time. Assess your specific model with qualified counsel; EDPB Opinion 08/2024 does not make every consent-or-pay implementation lawful." msgstr "Cette option n'accorde pas le consentement au nom du membre. Mentionnez cette alternative d'adhésion respectueuse de la vie privée dans vos conditions générales et votre politique de confidentialité, veillez à ce que le service payant reste réellement équivalent, et laissez le contrôle de préférences standard disponible afin que les membres puissent modifier toute finalité optionnelle à tout moment. Évaluez votre modèle spécifique avec un conseil juridique qualifié ; l'avis 08/2024 du CEPD ne rend pas licite toute mise en œuvre de type « consentement ou paiement »." -#: admin/views/settings.php:572 +#: admin/views/settings.php:593 msgid "Enable PMP integration" msgstr "Activer l'intégration PMP" -#: admin/views/settings.php:576 +#: admin/views/settings.php:597 msgid "Exempt membership level IDs" msgstr "ID de niveau d'abonnement exemptés" -#: admin/views/settings.php:577 +#: admin/views/settings.php:598 msgid "e.g. 2, 3, 5" msgstr "ex. 2, 3, 5" -#: admin/views/settings.php:579 +#: admin/views/settings.php:600 msgid "Comma-separated PMP level IDs whose members should be exempted. Find level IDs in Memberships → Settings → Levels. Leave empty to disable exemption." msgstr "ID de niveau PMP séparés par des virgules dont les membres doivent être exemptés. Trouvez les ID de niveau dans Memberships → Settings → Levels. Laissez vide pour désactiver l'exemption." -#: admin/views/settings.php:588 +#: admin/views/settings.php:609 msgid "Footer legal links" msgstr "Liens légaux du pied de page" -#: admin/views/settings.php:595 +#: admin/views/settings.php:616 msgid "Show legal links in the footer" msgstr "Afficher les liens légaux dans le pied de page" -#: admin/views/settings.php:597 +#: admin/views/settings.php:618 msgid "Off by default. When enabled, the pages you select below are printed as a small navigation block in your theme footer (via wp_footer). The markup is identical for every visitor — it does not depend on consent, login state or country — so it stays safe to serve from a page cache." msgstr "Désactivé par défaut. Une fois activées, les pages sélectionnées ci-dessous sont affichées sous forme d'un petit bloc de navigation dans le pied de page de votre thème (via wp_footer). Le balisage est identique pour chaque visiteur — il ne dépend ni du consentement, ni de l'état de connexion, ni du pays — il reste donc sûr à servir depuis un cache de page." -#: admin/views/settings.php:600 +#: admin/views/settings.php:621 msgid "Pages to link" msgstr "Pages à lier" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:638 +#: admin/views/settings.php:659 #, php-format msgid "Page #%d (unavailable)" msgstr "Page n° %d (indisponible)" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:644 +#: admin/views/settings.php:665 #, php-format msgid "Page #%d (untitled)" msgstr "Page n° %d (sans titre)" -#: admin/views/settings.php:674 +#: admin/views/settings.php:695 msgid "No published pages yet. Publish your Cookie Policy or Privacy Policy page first." msgstr "Aucune page publiée pour le moment. Publiez d'abord votre page de politique de cookies ou de politique de confidentialité." -#: admin/views/settings.php:683 +#: admin/views/settings.php:704 msgid "Custom label (optional)" msgstr "Libellé personnalisé (facultatif)" -#: admin/views/settings.php:687 +#: admin/views/settings.php:708 msgid "Selected links appear first in their saved order. Leave the label empty to use the page title. Unpublished or unavailable selections stay visible here so you can remove them; they are never printed in the footer." msgstr "Les liens sélectionnés apparaissent en premier, dans leur ordre enregistré. Laissez le libellé vide pour utiliser le titre de la page. Les sélections dépubliées ou indisponibles restent visibles ici afin que vous puissiez les supprimer ; elles ne sont jamais affichées dans le pied de page." -#: admin/views/settings.php:695 +#: admin/views/settings.php:716 msgid "Force re-consent" msgstr "Forcer un nouveau consentement" -#: admin/views/settings.php:699 +#: admin/views/settings.php:720 msgid "Show the cookie banner again to all returning visitors. Useful when you change which cookies or services are used on your site (e.g. new AdSense tags, added analytics) and want prior visitors to renew their consent before those services run." msgstr "Affichez à nouveau la bannière de cookies à tous les visiteurs qui reviennent. Utile lorsque vous modifiez les cookies ou services utilisés sur votre site (ex. nouveaux tags AdSense, analyses ajoutées) et souhaitez que les visiteurs précédents renouvellent leur consentement avant l’exécution de ces services." -#: admin/views/settings.php:702 +#: admin/views/settings.php:723 msgid "Current consent revision" msgstr "Révision du consentement actuel" -#: admin/views/settings.php:706 +#: admin/views/settings.php:727 msgid "Invalidate all consents" msgstr "Invalider tous les consentements" -#: admin/views/settings.php:709 +#: admin/views/settings.php:730 msgid "Visitors whose stored consent has a lower revision will see the banner again on their next visit. This does not affect the current page load." msgstr "Les visiteurs dont le consentement enregistré a une révision inférieure verront à nouveau la bannière lors de leur prochaine visite. Cela n’affecte pas le chargement de la page actuelle." -#: admin/views/settings.php:717 +#: admin/views/settings.php:738 msgid "Save Settings" msgstr "Enregistrer les paramètres" @@ -7093,59 +7119,59 @@ msgid "Manage cookie preferences" msgstr "Gérer les préférences de cookies" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:908 +#: frontend/class-frontend.php:902 msgid "{name} enabled, disable {name}" msgstr "{name} activé, désactiver {name}" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:910 +#: frontend/class-frontend.php:904 msgid "{name} disabled, enable {name}" msgstr "{name} désactivé, activer {name}" -#: frontend/class-frontend.php:2882 +#: frontend/class-frontend.php:2876 #: frontend/modules/banner-rest/class-banner-rest.php:594 msgid "Your cookie preferences have been saved." msgstr "Vos préférences en matière de cookies ont été enregistrées." -#: frontend/class-frontend.php:2884 +#: frontend/class-frontend.php:2878 #: frontend/modules/banner-rest/class-banner-rest.php:596 msgid "Customise Consent Preferences" msgstr "Personnaliser les préférences de consentement" -#: frontend/class-frontend.php:2885 +#: frontend/class-frontend.php:2879 #: frontend/modules/banner-rest/class-banner-rest.php:597 msgid "Service consent" msgstr "Consentement au service" -#: frontend/class-frontend.php:2887 +#: frontend/class-frontend.php:2881 #: frontend/modules/banner-rest/class-banner-rest.php:599 msgid "Cookie consent" msgstr "Consentement aux cookies" -#: frontend/class-frontend.php:2888 +#: frontend/class-frontend.php:2882 #: frontend/modules/banner-rest/class-banner-rest.php:600 msgid "Vendor consent" msgstr "Consentement du fournisseur" -#: frontend/class-frontend.php:2889 +#: frontend/class-frontend.php:2883 #: frontend/modules/banner-rest/class-banner-rest.php:601 msgid "These cookies are set by the embedded service on its own domain and are controlled by allowing or blocking the embed above — they cannot be removed individually." msgstr "Ces cookies sont déposés par le service intégré sur son propre domaine et se contrôlent en autorisant ou en bloquant l’intégration ci-dessus — ils ne peuvent pas être supprimés individuellement." #. translators: %d is the minimum digital age of consent. -#: frontend/class-frontend.php:2893 +#: frontend/class-frontend.php:2887 #: frontend/modules/banner-rest/class-banner-rest.php:606 #, php-format msgid "I confirm I am at least %d years old" msgstr "Je confirme avoir au moins %d ans" -#: frontend/class-frontend.php:2894 +#: frontend/class-frontend.php:2888 #: frontend/modules/banner-rest/class-banner-rest.php:607 msgid "Please confirm you meet the minimum age to accept optional cookies." msgstr "Veuillez confirmer que vous avez l’âge minimum requis pour accepter les cookies facultatifs." #. translators: %d is a number of seconds. -#: frontend/class-frontend.php:2901 +#: frontend/class-frontend.php:2895 #: frontend/modules/banner-rest/class-banner-rest.php:609 #, php-format msgid "Banner closes automatically in %d s..." diff --git a/languages/faz-cookie-manager-hr.po b/languages/faz-cookie-manager-hr.po index 197635f3..1c48c436 100644 --- a/languages/faz-cookie-manager-hr.po +++ b/languages/faz-cookie-manager-hr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: FAZ Cookie Manager 1.12.1\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/faz-cookie-manager\n" -"POT-Creation-Date: 2026-09-29T10:34:49+00:00\n" +"POT-Creation-Date: 2026-10-01T06:43:53+00:00\n" "PO-Revision-Date: 2026-04-20 00:00+0200\n" "Last-Translator: \n" "Language-Team: Croatian\n" @@ -49,13 +49,13 @@ msgid "Cookie Banner" msgstr "Banner za kolačiće" #: admin/class-admin.php:233 admin/views/base.php:21 -#: frontend/class-frontend.php:2886 +#: frontend/class-frontend.php:2880 #: frontend/modules/banner-rest/class-banner-rest.php:598 msgid "Cookies" msgstr "Kolačići" #: admin/class-admin.php:238 admin/views/base.php:22 -#: admin/views/dashboard.php:247 admin/views/settings.php:268 +#: admin/views/dashboard.php:247 admin/views/settings.php:289 msgid "Consent Logs" msgstr "Zapisi privola" @@ -3990,7 +3990,7 @@ msgstr "Jezik:" msgid "Notice Title" msgstr "Naslov obavijesti" -#: admin/views/banner.php:341 frontend/class-frontend.php:2881 +#: admin/views/banner.php:341 frontend/class-frontend.php:2875 #: frontend/modules/banner-rest/class-banner-rest.php:593 msgid "We value your privacy" msgstr "Cijenimo vašu privatnost" @@ -4329,7 +4329,7 @@ msgstr "Tekst za opt-out (Do Not Sell)" msgid "Text for the \"Opt-out Preferences\" modal a visitor sees after clicking the \"Do Not Sell or Share My Personal Information\" link. Shown only on CCPA / US State Laws (and Both) banners. Follows the language selected above." msgstr "Tekst modalnog prozora «Postavke odjave» koji posjetitelj vidi nakon klika na poveznicu «Do Not Sell or Share My Personal Information». Prikazuje se samo na CCPA / američkim državnim zakonima (i Oboje) bannerima. Slijedi jezik odabran gore." -#: admin/views/banner.php:833 frontend/class-frontend.php:2883 +#: admin/views/banner.php:833 frontend/class-frontend.php:2877 #: frontend/modules/banner-rest/class-banner-rest.php:595 msgid "Opt-out Preferences" msgstr "Postavke odjave" @@ -4484,7 +4484,7 @@ msgstr "Kanada (PIPEDA)" msgid "Brazil (LGPD)" msgstr "Brazil (LGPD)" -#: admin/views/banner.php:1054 admin/views/settings.php:480 +#: admin/views/banner.php:1054 admin/views/settings.php:501 #: admin/views/setup.php:189 msgid "Australia" msgstr "Australija" @@ -5559,7 +5559,7 @@ msgstr "Kada dodatak usmjerava posjetitelje iz Kine (primjenjuje se PIPL), preko msgid "Global Vendor List (IAB TCF 2.3)" msgstr "Globalni popis dobavljača (IAB TCF 2.3)" -#: admin/views/gvl.php:15 admin/views/settings.php:440 +#: admin/views/gvl.php:15 admin/views/settings.php:461 msgid "Update GVL Now" msgstr "Ažuriraj GVL sada" @@ -5877,476 +5877,502 @@ msgid "Defaults: H2 for the banner and preferences titles, H3 for category title msgstr "" #: admin/views/settings.php:218 +#, fuzzy +msgid "Mobile Layout" +msgstr "Raspored bannera" + +#: admin/views/settings.php:222 +#, fuzzy +msgid "Banner layout on phones" +msgstr "Raspored bannera" + +#: admin/views/settings.php:224 +msgid "Comfortable (default) — buttons stacked" +msgstr "" + +#: admin/views/settings.php:225 +msgid "Compact — buttons on one row" +msgstr "" + +#: admin/views/settings.php:228 +msgid "Below 440px the comfortable layout gives each button its own full-width row, which makes the banner about 44% of a 390px screen. The compact layout puts them on a shared row and brings the same banner to about 29%. Desktop is not affected." +msgstr "" + +#: admin/views/settings.php:232 +msgid "Compact keeps every button at least 44px tall so it stays comfortable to tap, and keeps the accept and reject buttons exactly the same size as each other, as equal prominence requires. On screens narrower than 360px accept and reject stay side by side and the customise button moves to its own row." +msgstr "" + +#: admin/views/settings.php:239 msgid "Script Blocking" msgstr "Blokiranje skripti" -#: admin/views/settings.php:222 +#: admin/views/settings.php:243 msgid "Pages Excluded from Script Blocking" msgstr "Stranice izuzete iz blokiranja skripti" -#: admin/views/settings.php:223 +#: admin/views/settings.php:244 msgid "One per line: /checkout/* or /cart/*" msgstr "Jedan unos po retku: /checkout/* ili /cart/*" -#: admin/views/settings.php:224 +#: admin/views/settings.php:245 msgid "URL patterns where script blocking is disabled (banner still shows). One per line, supports wildcards (e.g. /checkout/*)." msgstr "URL obrasci na kojima je blokiranje skripti onemogućeno (banner se i dalje prikazuje). Jedan po retku, podržava zamjenske znakove (npr. /checkout/*)." -#: admin/views/settings.php:227 +#: admin/views/settings.php:248 msgid "Script Blocking Exceptions" msgstr "Iznimke blokiranja skripti" -#: admin/views/settings.php:228 +#: admin/views/settings.php:249 msgid "One per line: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" msgstr "Jedan po retku: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" -#: admin/views/settings.php:229 +#: admin/views/settings.php:250 msgid "Scripts that should never be blocked, even before consent. One per line. Accepts three types of pattern:
- URL fragment (contains . or /): matched against the script's src or related URL attribute, e.g. googleapis.com/youtube/v3.
- Script ID (no dots/slashes): matched against the id attribute of the script tag, e.g. my-product-form-data.
- CSS class (no dots/slashes): matched against the script's class attribute, e.g. recaptcha.
- How IDs and classes match: whole words, plus their hyphen or underscore children. recaptcha matches recaptcha, recaptcha-badge and recaptcha_frame, but not myrecaptcha. Ending a pattern with - or _ (e.g. wp-) matches every word starting with it, which is much broader — prefer the exact ID or class wherever you can.
These exceptions bypass blocking entirely. Use them only for scripts that genuinely do not set tracking cookies. Be specific to avoid accidentally unblocking trackers.
Tip: You can also add class=\"faz-skip\" directly to any script tag to exclude it without adding anything here — no configuration needed." msgstr "Skripte koje se nikada ne bi trebale blokirati, čak ni prije privole. Jedna po retku. Prihvaća tri vrste uzoraka:
- Dio URL-a (sadrži . ili /): uspoređuje se s atributom src skripte ili srodnim URL atributom, npr. googleapis.com/youtube/v3.
- ID skripte (bez točaka/kosih crta): uspoređuje se s atributom id oznake skripte, npr. my-product-form-data.
- CSS klasa (bez točaka/kosih crta): uspoređuje se s atributom class skripte, npr. recaptcha.
- Kako se ID-jevi i klase podudaraju: cijele riječi, uključujući njihove podređene oblike s crticom ili donjom crtom. recaptcha odgovara vrijednostima recaptcha, recaptcha-badge i recaptcha_frame, ali ne i myrecaptcha. Završavanje uzorka s - ili _ (npr. wp-) odgovara svakoj riječi koja njime počinje, što je znatno šire — kad god možete, dajte prednost točnom ID-u ili klasi.
Ove iznimke u potpunosti zaobilaze blokiranje. Koristite ih samo za skripte koje doista ne postavljaju kolačiće za praćenje. Budite precizni kako biste izbjegli slučajno odblokiravanje alata za praćenje.
Savjet: Također možete dodati class=\"faz-skip\" izravno u bilo koju oznaku skripte kako biste je isključili bez dodavanja ičega ovdje — nije potrebna nikakva konfiguracija." -#: admin/views/settings.php:235 +#: admin/views/settings.php:256 msgid "Advanced inline CSS URL blocking" msgstr "Napredno blokiranje URL-ova unutar ugrađenog (inline) CSS-a" -#: admin/views/settings.php:237 +#: admin/views/settings.php:258 msgid "Optional high-coverage mode for CSS-based third-party loads. The default blocker already handles server-rendered <style> tags and direct HTMLStyleElement updates. Enable this only if you have confirmed that a theme, page builder, or CSS-in-JS library injects blocked url() or @import rules through broader runtime channels such as Element.innerHTML, insertAdjacentHTML, CharacterData edits inside a style tag, or Constructable Stylesheets. This strengthens pre-consent blocking but hooks global browser APIs and may affect builders, editors, icon fonts, or CSS-in-JS libraries. Test the site before enabling in production." msgstr "Neobavezan način visoke pokrivenosti za učitavanja trećih strana temeljena na CSS-u. Zadani blokator već obrađuje oznake <style> generirane na poslužitelju i izravna ažuriranja HTMLStyleElement-a. Omogućite ovo samo ako ste potvrdili da tema, alat za izradu stranica ili CSS-in-JS biblioteka ubacuje blokirana url() ili @import pravila putem širih kanala u stvarnom vremenu poput Element.innerHTML, insertAdjacentHTML, izmjena CharacterData unutar style oznake, ili Constructable Stylesheets. Ovo pojačava blokiranje prije privole, ali kači se na globalne API-je preglednika i može utjecati na alate za izradu, uređivače, ikonografske fontove ili CSS-in-JS biblioteke. Testirajte stranicu prije omogućavanja u produkciji." -#: admin/views/settings.php:243 +#: admin/views/settings.php:264 msgid "Block non-consented cookies emitted by PHP" msgstr "Blokiraj kolačiće bez privole koje emitira PHP" -#: admin/views/settings.php:245 +#: admin/views/settings.php:266 msgid "Advanced, off by default. Filters outgoing Set-Cookie headers from pages, AJAX, REST and redirects, including HttpOnly cookies that JavaScript cannot remove. Necessary, WordPress-internal, security and checkout cookies are preserved, and deletion headers always pass. Enable only after testing login, forms, cart and checkout; unknown cookies fail permissive until the scanner classifies them." msgstr "Napredno, zadano isključeno. Filtrira odlazna Set-Cookie zaglavlja sa stranica, AJAX-a, REST-a i preusmjeravanja, uključujući HttpOnly kolačiće koje JavaScript ne može ukloniti. Nužni, WordPress-interni, sigurnosni kolačići i kolačići plaćanja se čuvaju, a zaglavlja za brisanje uvijek prolaze. Omogućite tek nakon testiranja prijave, obrazaca, košarice i naplate; nepoznati kolačići se dopuštaju (fail-open) dok ih skener ne klasificira." -#: admin/views/settings.php:249 +#: admin/views/settings.php:270 msgid "Payment gateway scripts (e-commerce)" msgstr "Skripte pružatelja usluga plaćanja (e-trgovina)" -#: admin/views/settings.php:250 +#: admin/views/settings.php:271 msgid "Only enable a gateway if your site takes payments. A payment provider's SDK (PayPal, Stripe, …) can set cookies and fingerprint the visitor, so it is blocked until consent by default. Enabling a gateway here loads its payment scripts before consent across your site — needed for payment forms that live outside a WooCommerce checkout (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). This is a compliance decision and your responsibility for your jurisdiction. A real WooCommerce checkout/cart page already loads these automatically as strictly necessary; a gateway's marketing pixel (e.g. PayPal's pptm.js) stays blocked regardless." msgstr "Omogućite pružatelja usluge plaćanja samo ako vaša stranica prima plaćanja. SDK pružatelja usluge plaćanja (PayPal, Stripe, …) može postavljati kolačiće i uzimati digitalni otisak posjetitelja, pa je zadano blokiran do privole. Omogućavanjem pružatelja ovdje učitavaju se njegove skripte za plaćanje prije privole na cijeloj vašoj stranici — potrebno za obrasce za plaćanje koji postoje izvan WooCommerce naplate (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). Ovo je odluka o usklađenosti i vaša odgovornost za vašu jurisdikciju. Prava WooCommerce stranica naplate/košarice već automatski učitava ove skripte kao strogo nužne; marketinški piksel pružatelja (npr. PayPal-ov pptm.js) ostaje blokiran bez obzira na to." #. translators: %s: payment gateway name, e.g. PayPal. -#: admin/views/settings.php:257 +#: admin/views/settings.php:278 #, php-format msgid "Allow %s payment scripts before consent" msgstr "Dopusti skripte za plaćanje %s prije privole" -#: admin/views/settings.php:275 +#: admin/views/settings.php:296 msgid "Enable consent logging" msgstr "Omogući bilježenje privole" -#: admin/views/settings.php:277 +#: admin/views/settings.php:298 msgid "Records each visitor's consent choice (accepted, rejected, or partial) for GDPR accountability. Required by Art. 7(1) GDPR to demonstrate that consent was given." msgstr "Bilježi svaki odabir privole posjetitelja (prihvaćeno, odbijeno ili djelomično) za GDPR odgovornost. Potrebno prema čl. 7. st. 1. GDPR-a za dokazivanje da je privola dana." -#: admin/views/settings.php:280 +#: admin/views/settings.php:301 msgid "Consent log retention (months)" msgstr "Čuvanje zapisnika privola (mjeseci)" -#: admin/views/settings.php:282 +#: admin/views/settings.php:303 msgid "How long consent records are kept before automatic deletion. Choose a documented period appropriate to your accountability obligations. Logs older than this period are purged daily." msgstr "Koliko dugo se zapisi privola čuvaju prije automatskog brisanja. Odaberite dokumentirano razdoblje primjereno vašim obvezama odgovornosti. Zapisi stariji od ovog razdoblja brišu se svakodnevno." -#: admin/views/settings.php:289 +#: admin/views/settings.php:310 msgid "Data Subject Requests" msgstr "Zahtjevi ispitanika" -#: admin/views/settings.php:293 +#: admin/views/settings.php:314 msgid "Data subject request retention (months)" msgstr "Čuvanje zahtjeva ispitanika (mjeseci)" -#: admin/views/settings.php:295 +#: admin/views/settings.php:316 msgid "How long completed data-subject request records are kept before automatic deletion. Keep a period that supports your ability to demonstrate and manage requests." msgstr "Koliko dugo se zapisi dovršenih zahtjeva ispitanika čuvaju prije automatskog brisanja. Zadržite razdoblje koje podržava vašu sposobnost dokazivanja i upravljanja zahtjevima." -#: admin/views/settings.php:302 +#: admin/views/settings.php:323 msgid "Scanner" msgstr "Skener" -#: admin/views/settings.php:306 +#: admin/views/settings.php:327 msgid "Max Pages to Scan" msgstr "Maks. broj stranica za skeniranje" -#: admin/views/settings.php:308 +#: admin/views/settings.php:329 msgid "Maximum number of pages the cookie scanner will crawl. Higher values find more cookies but take longer. 100 pages is sufficient for most sites." msgstr "Maksimalan broj stranica koje će skener kolačića obići. Veće vrijednosti pronalaze više kolačića, ali traju dulje. 100 stranica dovoljno je za većinu web-stranica." -#: admin/views/settings.php:311 +#: admin/views/settings.php:332 msgid "Static public IP (optional)" msgstr "Statička javna IP adresa (neobavezno)" -#: admin/views/settings.php:313 +#: admin/views/settings.php:334 msgid "Pin every server-side scanner request — sitemap discovery and page fetches — to this site IP while preserving the hostname, HTTPS certificate validation and SNI. Only public IPv4/IPv6 addresses are accepted; requires the WordPress cURL transport. Leave blank to use DNS." msgstr "Fiksirajte svaki zahtjev skenera na strani poslužitelja — otkrivanje mape stranice i dohvaćanje stranica — na IP adresu ove stranice, uz zadržavanje naziva hosta, provjere HTTPS certifikata i SNI-ja. Prihvaćaju se samo javne IPv4/IPv6 adrese; zahtijeva WordPress cURL transport. Ostavite prazno za korištenje DNS-a." -#: admin/views/settings.php:319 +#: admin/views/settings.php:340 msgid "Scanner Debug Mode" msgstr "Način otklanjanja pogrešaka skenera" -#: admin/views/settings.php:321 +#: admin/views/settings.php:342 msgid "When enabled, the scanner logs every categorization decision. Download logs from the Cookies page." msgstr "Kada je omogućeno, skener bilježi svaku odluku o kategorizaciji. Preuzmite zapisnike sa stranice Kolačići." -#: admin/views/settings.php:328 +#: admin/views/settings.php:349 msgid "Automatic Scanning" msgstr "Automatsko skeniranje" -#: admin/views/settings.php:335 +#: admin/views/settings.php:356 msgid "Enable automatic cookie scanning" msgstr "Omogući automatsko skeniranje kolačića" -#: admin/views/settings.php:337 +#: admin/views/settings.php:358 msgid "Automatically scan your site for new cookies on a schedule. You will receive an email notification if new uncategorized cookies are found." msgstr "Automatski skenirajte svoju stranicu za nove kolačiće prema rasporedu. Primit ćete e-mail obavijest ako se pronađu novi nekategorizirani kolačići." -#: admin/views/settings.php:343 +#: admin/views/settings.php:364 msgid "Update cookie definitions weekly" msgstr "" -#: admin/views/settings.php:345 +#: admin/views/settings.php:366 msgid "Optional: downloads the Open Cookie Database from raw.githubusercontent.com once a week. Off by default. Without this option, the bundled database is updated with plugin releases. A failed download keeps the existing definitions." msgstr "" -#: admin/views/settings.php:348 +#: admin/views/settings.php:369 msgid "Scan Frequency" msgstr "Učestalost skeniranja" -#: admin/views/settings.php:350 +#: admin/views/settings.php:371 msgid "Daily" msgstr "Dnevno" -#: admin/views/settings.php:351 includes/class-activator.php:712 +#: admin/views/settings.php:372 includes/class-activator.php:712 msgid "Weekly" msgstr "Tjedno" -#: admin/views/settings.php:352 +#: admin/views/settings.php:373 msgid "Monthly" msgstr "Mjesečno" -#: admin/views/settings.php:354 +#: admin/views/settings.php:375 msgid "How often the scanner runs automatically. Weekly is recommended for most sites." msgstr "Koliko često se skener automatski pokreće. Tjedno je preporučeno za većinu stranica." -#: admin/views/settings.php:361 +#: admin/views/settings.php:382 msgid "Microsoft Consent APIs" msgstr "Microsoft Consent API-ji" -#: admin/views/settings.php:368 +#: admin/views/settings.php:389 msgid "Microsoft UET Consent Mode" msgstr "Microsoft UET Consent Mode" -#: admin/views/settings.php:370 +#: admin/views/settings.php:391 msgid "Signals consent status to Microsoft Advertising (Bing Ads) via the UET tag. Enable if you use Microsoft Advertising and need to respect consent for ad tracking." msgstr "Signalizira status privole Microsoft Advertisingu (Bing Ads) putem UET taga. Omogućite ako koristite Microsoft Advertising i trebate poštovati privolu za praćenje oglasa." -#: admin/views/settings.php:376 +#: admin/views/settings.php:397 msgid "Microsoft Clarity Consent API" msgstr "Microsoft Clarity Consent API" -#: admin/views/settings.php:378 +#: admin/views/settings.php:399 msgid "Signals consent status to Microsoft Clarity (heatmaps and session recordings). Enable if you use Clarity and want it to pause tracking until consent is given." msgstr "Signalizira status privole Microsoft Clarityju (heatmapovi i snimke sesija). Omogućite ako koristite Clarity i želite pauzirati praćenje dok privola nije dana." -#: admin/views/settings.php:385 +#: admin/views/settings.php:406 msgid "Age Verification" msgstr "Provjera dobi" -#: admin/views/settings.php:392 +#: admin/views/settings.php:413 msgid "Require age verification for consent" msgstr "Zahtijevaj provjeru dobi za privolu" -#: admin/views/settings.php:394 +#: admin/views/settings.php:415 msgid "Under GDPR Art. 8, children below the minimum age cannot give valid consent for data processing. When enabled, the visitor sees an age-confirmation checkbox directly above the Accept/Reject buttons; it gates only the Accept path — Reject stays available and is never blocked, and the checkbox is never pre-ticked." msgstr "Prema čl. 8. GDPR-a, djeca ispod minimalne dobi ne mogu dati valjanu privolu za obradu podataka. Kada je omogućeno, posjetitelj vidi potvrdni okvir za potvrdu dobi izravno iznad gumba Prihvati/Odbij; on uvjetuje samo put Prihvati — Odbij ostaje dostupan i nikada nije blokiran, a potvrdni okvir nikada nije unaprijed označen." -#: admin/views/settings.php:395 +#: admin/views/settings.php:416 msgid "This is a self-declared age affirmation only. It is NOT a substitute for verifying parental consent for under-age children under GDPR Art. 8(2), which requires separate reasonable-efforts verification this feature does not provide." msgstr "Ovo je samo samodeklarirana potvrda dobi. NIJE zamjena za provjeru roditeljske privole za maloljetnu djecu prema čl. 8. st. 2. GDPR-a, koji zahtijeva zasebnu provjeru razumnim naporima koju ova značajka ne pruža." -#: admin/views/settings.php:398 +#: admin/views/settings.php:419 msgid "Minimum Age" msgstr "Minimalna dob" -#: admin/views/settings.php:400 +#: admin/views/settings.php:421 msgid "GDPR default is 16. Some EU member states allow 13-15 (e.g. Italy 14, Spain 14, France 15, Germany 16). Check your local law." msgstr "Zadana vrijednost GDPR-a je 16. Neke države članice EU-a dopuštaju 13-15 (npr. Italija 14, Španjolska 14, Francuska 15, Njemačka 16). Provjerite svoj lokalni zakon." -#: admin/views/settings.php:407 admin/views/setup.php:201 +#: admin/views/settings.php:428 admin/views/setup.php:201 msgid "IAB TCF" msgstr "IAB TCF" -#: admin/views/settings.php:414 +#: admin/views/settings.php:435 msgid "Enable IAB TCF v2.3" msgstr "Omogući IAB TCF v2.3" -#: admin/views/settings.php:416 +#: admin/views/settings.php:437 msgid "Enables the IAB Transparency & Consent Framework. Required if you work with ad-tech vendors that need a standardised TC String for programmatic advertising in the EU." msgstr "Omogućuje IAB Transparency & Consent Framework. Potrebno ako radite s ad-tech dobavljačima kojima je potreban standardizirani TC String za programatsko oglašavanje u EU-u." -#: admin/views/settings.php:419 +#: admin/views/settings.php:440 msgid "Publisher Country Code" msgstr "Kod države izdavača" -#: admin/views/settings.php:421 +#: admin/views/settings.php:442 msgid "ISO 3166-1 alpha-2 code of the publisher's country (e.g. IT, DE, FR). Used in the TCF consent string." msgstr "ISO 3166-1 alpha-2 kod države izdavača (npr. IT, DE, FR). Koristi se u TCF stringu privole." -#: admin/views/settings.php:424 admin/views/setup.php:348 +#: admin/views/settings.php:445 admin/views/setup.php:348 msgid "CMP ID" msgstr "CMP ID" -#: admin/views/settings.php:426 +#: admin/views/settings.php:447 msgid "Your registered IAB CMP ID (IAB CMP List). With ID 0 the banner and cookie blocking work normally, but ad-tech vendors will ignore the TC String. Google Consent Mode v2 works regardless of CMP registration." msgstr "Vaš registrirani IAB CMP ID (IAB CMP popis). S ID-jem 0 banner i blokiranje kolačića rade normalno, ali ad-tech dobavljači ignorirat će TC String. Google Consent Mode v2 radi neovisno o CMP registraciji." -#: admin/views/settings.php:432 +#: admin/views/settings.php:453 msgid "Purpose One Treatment" msgstr "Purpose One Treatment" -#: admin/views/settings.php:434 +#: admin/views/settings.php:455 msgid "Set to true if Purpose 1 consent was NOT disclosed (e.g. publisher in a country where Purpose 1 is not required)." msgstr "Postavite na true ako privola za Purpose 1 NIJE objavljena (npr. izdavač u zemlji u kojoj Purpose 1 nije potreban)." -#: admin/views/settings.php:438 +#: admin/views/settings.php:459 msgid "Loading GVL status..." msgstr "Učitavanje GVL statusa..." -#: admin/views/settings.php:447 +#: admin/views/settings.php:468 msgid "Jurisdiction & Geo-routing" msgstr "Nadležnost i geo-usmjeravanje" -#: admin/views/settings.php:454 +#: admin/views/settings.php:475 msgid "Apply jurisdiction rules by visitor location" msgstr "Primijeni pravila nadležnosti prema lokaciji posjetitelja" -#: admin/views/settings.php:456 +#: admin/views/settings.php:477 msgid "Recommended and enabled by default. Detect each visitor's location to enforce the matching jurisdiction rules and mandatory controls, and optionally limit banner display to selected regions. Turning this off means the law saved on the active banner applies to every visitor; for example, a CCPA banner will no longer gain GDPR blocking for an EEA visitor. Location requires a MaxMind GeoLite2 database (configured below), or a trusted country signal such as Cloudflare CF-IPCountry." msgstr "Preporučeno i uključeno prema zadanim postavkama. Otkriva lokaciju svakog posjetitelja radi provedbe odgovarajućih pravila nadležnosti i obveznih kontrola te, po želji, ograničava prikaz bannera na odabrane regije. Isključivanje znači da se zakon spremljen u aktivnom banneru primjenjuje na svakog posjetitelja; primjerice, CCPA banner više neće dobiti GDPR blokiranje za posjetitelja iz EGP-a. Za lokaciju je potrebna MaxMind GeoLite2 baza konfigurirana u nastavku ili pouzdan signal zemlje poput Cloudflare CF-IPCountry." -#: admin/views/settings.php:462 admin/views/setup.php:376 +#: admin/views/settings.php:483 admin/views/setup.php:376 msgid "Cache-safe jurisdiction bootstrap" msgstr "Bootstrap nadležnosti siguran za predmemoriju" -#: admin/views/settings.php:464 +#: admin/views/settings.php:485 msgid "Allows compatible full-page caches and CDNs to share one strict GDPR shell. The browser resolves the live jurisdiction through a no-store endpoint before mounting the banner or releasing optional scripts. If the configuration is unsupported or the endpoint fails, FAZ keeps the stricter shell and preserves the normal page-cache bypass." msgstr "Omogućuje kompatibilnim predmemorijama cijele stranice i CDN-ovima dijeljenje jedne stroge GDPR ljuske. Preglednik određuje stvarnu nadležnost putem no-store krajnje točke prije postavljanja bannera ili oslobađanja neobaveznih skripti. Ako konfiguracija nije podržana ili krajnja točka ne uspije, FAZ zadržava strožu ljusku i uobičajeno zaobilaženje predmemorije stranice." -#: admin/views/settings.php:466 +#: admin/views/settings.php:487 msgid "Checking cache-safe bootstrap readiness..." msgstr "Provjera spremnosti bootstrapa sigurnog za predmemoriju..." -#: admin/views/settings.php:468 +#: admin/views/settings.php:489 msgid "Currently excluded: AMP, IAB TCF, country-based language fallback, country-targeted banner rows, hiding the banner outside selected regions, and custom country-dependent output. Excluded configurations remain protected but bypass full-page caching." msgstr "Trenutačno isključeno: AMP, IAB TCF, pričuvni jezik prema zemlji, banneri ciljani na zemlje, skrivanje bannera izvan odabranih regija i prilagođeni izlaz ovisan o zemlji. Isključene konfiguracije ostaju zaštićene, ali zaobilaze predmemoriju cijele stranice." -#: admin/views/settings.php:471 +#: admin/views/settings.php:492 msgid "Target Regions" msgstr "Ciljne regije" -#: admin/views/settings.php:475 admin/views/setup.php:184 +#: admin/views/settings.php:496 admin/views/setup.php:184 msgid "EU / EEA" msgstr "EU / EGP" -#: admin/views/settings.php:476 admin/views/setup.php:185 +#: admin/views/settings.php:497 admin/views/setup.php:185 msgid "United Kingdom" msgstr "Ujedinjeno Kraljevstvo" -#: admin/views/settings.php:477 admin/views/setup.php:186 +#: admin/views/settings.php:498 admin/views/setup.php:186 msgid "United States" msgstr "Sjedinjene Američke Države" -#: admin/views/settings.php:478 admin/views/setup.php:187 +#: admin/views/settings.php:499 admin/views/setup.php:187 msgid "Canada" msgstr "Kanada" -#: admin/views/settings.php:479 admin/views/setup.php:188 +#: admin/views/settings.php:500 admin/views/setup.php:188 msgid "Brazil" msgstr "Brazil" -#: admin/views/settings.php:481 admin/views/setup.php:190 +#: admin/views/settings.php:502 admin/views/setup.php:190 msgid "Japan" msgstr "Japan" -#: admin/views/settings.php:482 admin/views/setup.php:191 +#: admin/views/settings.php:503 admin/views/setup.php:191 msgid "Switzerland" msgstr "Švicarska" -#: admin/views/settings.php:483 admin/views/setup.php:192 +#: admin/views/settings.php:504 admin/views/setup.php:192 msgid "South Africa" msgstr "Južnoafrička Republika" -#: admin/views/settings.php:493 +#: admin/views/settings.php:514 msgid "Select which regions should see the cookie banner. Visitors from other regions will not see it (if \"Hide banner\" is selected below)." msgstr "Odaberite koje regije trebaju vidjeti banner za kolačiće. Posjetitelji iz drugih regija neće ga vidjeti (ako je dolje odabrano „Sakrij banner”)." -#: admin/views/settings.php:496 +#: admin/views/settings.php:517 msgid "Non-target visitors" msgstr "Posjetitelji izvan ciljanih regija" -#: admin/views/settings.php:498 +#: admin/views/settings.php:519 msgid "Show banner anyway (safest)" msgstr "Svejedno prikaži banner (najsigurnije)" -#: admin/views/settings.php:499 +#: admin/views/settings.php:520 msgid "Hide banner (scripts load normally)" msgstr "Sakrij banner (skripte se učitavaju normalno)" -#: admin/views/settings.php:501 +#: admin/views/settings.php:522 msgid "What happens when a visitor is from outside the target regions. \"Show banner anyway\" is the safest option and recommended for sites with global audiences." msgstr "Što se događa kada je posjetitelj izvan ciljanih regija. „Svejedno prikaži banner” najsigurnija je opcija i preporučuje se za stranice s globalnom publikom." -#: admin/views/settings.php:508 +#: admin/views/settings.php:529 msgid "GeoIP Database (MaxMind GeoLite2)" msgstr "GeoIP baza podataka (MaxMind GeoLite2)" -#: admin/views/settings.php:512 +#: admin/views/settings.php:533 msgid "Geo-targeting requires a MaxMind GeoLite2 database. Get a free license key." msgstr "Geociljanje zahtijeva MaxMind GeoLite2 bazu podataka. Nabavite besplatni licencni ključ." -#: admin/views/settings.php:515 +#: admin/views/settings.php:536 msgid "Database edition" msgstr "Izdanje baze podataka" -#: admin/views/settings.php:517 +#: admin/views/settings.php:538 msgid "Country — country-level only (recommended)" msgstr "Country — samo na razini države (preporučeno)" -#: admin/views/settings.php:518 +#: admin/views/settings.php:539 msgid "City — adds region / state detection" msgstr "City — dodaje otkrivanje regije/savezne države" -#: admin/views/settings.php:521 +#: admin/views/settings.php:542 msgid "Country (~10 MB) resolves the visitor’s country only — enough for country-based banner targeting and most per-jurisdiction rules. City (~60–110 MB) additionally resolves the region / province / state, which a few rules need: sub-national regimes such as Quebec Law 25 apply only inside one region of a country, so without City (or a Cloudflare CF-Region-Code header) the plugin can only see “Canada” and cannot route that visitor to the Quebec ruleset. Choose City only if you rely on region-level routing — it is a much larger download. Changing this and clicking “Update Database” replaces the installed database." msgstr "Country (~10 MB) razlučuje samo državu posjetitelja — dovoljno za ciljanje banera po državi i većinu pravila po jurisdikciji. City (~60–110 MB) dodatno razlučuje regiju / pokrajinu / saveznu državu, što je potrebno za nekoliko pravila: subnacionalni režimi poput Zakona 25 iz Quebeca primjenjuju se samo unutar jedne regije države, pa bez Cityja (ili Cloudflareova zaglavlja CF-Region-Code) dodatak vidi samo “Kanadu” i ne može usmjeriti tog posjetitelja na ruleset Quebeca. Odaberite City samo ako se oslanjate na usmjeravanje na razini regije — riječ je o znatno većem preuzimanju. Promjena ove postavke i klik na “Ažuriraj bazu podataka” zamjenjuje instaliranu bazu." -#: admin/views/settings.php:525 +#: admin/views/settings.php:546 msgid "MaxMind License Key" msgstr "MaxMind licencni ključ" -#: admin/views/settings.php:526 +#: admin/views/settings.php:547 msgid "Enter your MaxMind license key" msgstr "Unesite svoj MaxMind licencni ključ" -#: admin/views/settings.php:530 +#: admin/views/settings.php:551 msgid "Update Database" msgstr "Ažuriraj bazu podataka" -#: admin/views/settings.php:536 +#: admin/views/settings.php:557 msgid "Data Management" msgstr "Upravljanje podacima" -#: admin/views/settings.php:543 +#: admin/views/settings.php:564 msgid "Remove all data on uninstall" msgstr "Ukloni sve podatke pri deinstalaciji" -#: admin/views/settings.php:545 +#: admin/views/settings.php:566 msgid "When enabled, deleting the plugin will permanently remove ALL data: cookies, categories, consent logs, pageviews, banner settings, and scan history. Keep this OFF if you plan to reinstall or update the plugin." msgstr "Kada je omogućeno, brisanje dodatka trajno će ukloniti SVE podatke: kolačiće, kategorije, zapisnike pristanka, preglede stranica, postavke bannera i povijest skeniranja. Ostavite ovo ISKLJUČENO ako planirate reinstalirati ili ažurirati dodatak." -#: admin/views/settings.php:548 +#: admin/views/settings.php:569 msgid "Privacy Request Retention Period (months)" msgstr "Razdoblje čuvanja zahtjeva za privatnost (mjeseci)" -#: admin/views/settings.php:550 +#: admin/views/settings.php:571 msgid "How long completed privacy (DSAR) request records are kept before automatic deletion. They are the evidence that a data-subject request was answered, so a minimum of 12–24 months is recommended. Default is 24 months." msgstr "Koliko dugo se zapisi dovršenih zahtjeva za privatnost (DSAR) čuvaju prije automatskog brisanja. Oni su dokaz da je odgovoreno na zahtjev ispitanika, pa se preporučuje najmanje 12–24 mjeseca. Zadano je 24 mjeseca." -#: admin/views/settings.php:558 +#: admin/views/settings.php:579 msgid "Paid Memberships Pro integration" msgstr "Integracija Paid Memberships Pro" -#: admin/views/settings.php:562 +#: admin/views/settings.php:583 msgid "Offer selected Paid Memberships Pro levels a privacy-preserving membership alternative: logged-in members skip the cookie banner, necessary storage remains available, and all optional purposes stay denied until the member explicitly changes them in the preference center. Other visitors continue to use the standard consent flow." msgstr "Ponudite odabranim razinama Paid Memberships Pro alternativu članstva koja čuva privatnost: prijavljeni članovi preskaču banner za kolačiće, nužna pohrana ostaje dostupna, a sve neobavezne svrhe ostaju odbijene dok ih član izričito ne promijeni u centru postavki. Ostali posjetitelji nastavljaju koristiti standardni tijek privole." -#: admin/views/settings.php:565 +#: admin/views/settings.php:586 msgid "Legal note:" msgstr "Pravna napomena:" -#: admin/views/settings.php:566 +#: admin/views/settings.php:587 msgid "This option does not grant consent on the member's behalf. Disclose the privacy-preserving membership alternative in your Terms and Privacy Policy, keep the paid service genuinely equivalent, and leave the standard preference control available so members can change any optional purpose at any time. Assess your specific model with qualified counsel; EDPB Opinion 08/2024 does not make every consent-or-pay implementation lawful." msgstr "Ova opcija ne daje privolu u ime člana. Objavite alternativu članstva koja čuva privatnost u svojim Uvjetima korištenja i Pravilima o privatnosti, održavajte plaćenu uslugu istinski jednakovrijednom te ostavite dostupnom standardnu kontrolu postavki kako bi članovi mogli promijeniti bilo koju neobaveznu svrhu u bilo kojem trenutku. Procijenite svoj specifični model uz kvalificirano pravno savjetovanje; Mišljenje EDPB-a 08/2024 ne čini svaku implementaciju consent-or-pay zakonitom." -#: admin/views/settings.php:572 +#: admin/views/settings.php:593 msgid "Enable PMP integration" msgstr "Omogući PMP integraciju" -#: admin/views/settings.php:576 +#: admin/views/settings.php:597 msgid "Exempt membership level IDs" msgstr "ID-ovi razina članstva koji su izuzeti" -#: admin/views/settings.php:577 +#: admin/views/settings.php:598 msgid "e.g. 2, 3, 5" msgstr "npr. 2, 3, 5" -#: admin/views/settings.php:579 +#: admin/views/settings.php:600 msgid "Comma-separated PMP level IDs whose members should be exempted. Find level IDs in Memberships → Settings → Levels. Leave empty to disable exemption." msgstr "ID-ovi PMP razina odvojeni zarezima čiji bi članovi trebali biti izuzeti. ID-ove razina pronađite u Memberships → Settings → Levels. Ostavite prazno za onemogućavanje izuzeća." -#: admin/views/settings.php:588 +#: admin/views/settings.php:609 msgid "Footer legal links" msgstr "Pravne poveznice u podnožju" -#: admin/views/settings.php:595 +#: admin/views/settings.php:616 msgid "Show legal links in the footer" msgstr "Prikaži pravne poveznice u podnožju" -#: admin/views/settings.php:597 +#: admin/views/settings.php:618 msgid "Off by default. When enabled, the pages you select below are printed as a small navigation block in your theme footer (via wp_footer). The markup is identical for every visitor — it does not depend on consent, login state or country — so it stays safe to serve from a page cache." msgstr "Zadano isključeno. Kada je omogućeno, stranice koje odaberete u nastavku ispisuju se kao mali navigacijski blok u podnožju vaše teme (putem wp_footer). Oznake su identične za svakog posjetitelja — ne ovise o privoli, statusu prijave ili državi — pa je sigurno poslužiti ih iz predmemorije stranice." -#: admin/views/settings.php:600 +#: admin/views/settings.php:621 msgid "Pages to link" msgstr "Stranice za povezivanje" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:638 +#: admin/views/settings.php:659 #, php-format msgid "Page #%d (unavailable)" msgstr "Stranica #%d (nedostupno)" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:644 +#: admin/views/settings.php:665 #, php-format msgid "Page #%d (untitled)" msgstr "Stranica #%d (bez naslova)" -#: admin/views/settings.php:674 +#: admin/views/settings.php:695 msgid "No published pages yet. Publish your Cookie Policy or Privacy Policy page first." msgstr "Još nema objavljenih stranica. Najprije objavite svoju stranicu Pravila o kolačićima ili Pravila o privatnosti." -#: admin/views/settings.php:683 +#: admin/views/settings.php:704 msgid "Custom label (optional)" msgstr "Prilagođena oznaka (neobavezno)" -#: admin/views/settings.php:687 +#: admin/views/settings.php:708 msgid "Selected links appear first in their saved order. Leave the label empty to use the page title. Unpublished or unavailable selections stay visible here so you can remove them; they are never printed in the footer." msgstr "Odabrane poveznice prikazuju se prvo, prema spremljenom redoslijedu. Ostavite oznaku praznom kako biste koristili naslov stranice. Neobjavljeni ili nedostupni odabiri ostaju vidljivi ovdje kako biste ih mogli ukloniti; nikada se ne ispisuju u podnožju." -#: admin/views/settings.php:695 +#: admin/views/settings.php:716 msgid "Force re-consent" msgstr "Prisilno zatražiti novi pristanak" -#: admin/views/settings.php:699 +#: admin/views/settings.php:720 msgid "Show the cookie banner again to all returning visitors. Useful when you change which cookies or services are used on your site (e.g. new AdSense tags, added analytics) and want prior visitors to renew their consent before those services run." msgstr "Prikaži banner s kolačićima ponovo svim povratnim posjetiteljima. Korisno kada promijenite koji se kolačići ili usluge koriste na vašoj web-stranici (npr. novi AdSense oznake, dodana analitika) i želite da prethodni posjetitelji obnove svoju privolu prije nego što te usluge budu pokrenute." -#: admin/views/settings.php:702 +#: admin/views/settings.php:723 msgid "Current consent revision" msgstr "Trenutna revizija pristanka" -#: admin/views/settings.php:706 +#: admin/views/settings.php:727 msgid "Invalidate all consents" msgstr "Poništi sve pristanke" -#: admin/views/settings.php:709 +#: admin/views/settings.php:730 msgid "Visitors whose stored consent has a lower revision will see the banner again on their next visit. This does not affect the current page load." msgstr "Posjetitelji čija pohranjena suglasnost ima nižu reviziju vidjet æe banner ponovo pri sljedećem posjetu. Ovo ne utječe na trenutno učitavanje stranice." -#: admin/views/settings.php:717 +#: admin/views/settings.php:738 msgid "Save Settings" msgstr "Spremi postavke" @@ -7097,59 +7123,59 @@ msgid "Manage cookie preferences" msgstr "Upravljanje postavkama kolačića" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:908 +#: frontend/class-frontend.php:902 msgid "{name} enabled, disable {name}" msgstr "{name} omogućen, onemogći {name}" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:910 +#: frontend/class-frontend.php:904 msgid "{name} disabled, enable {name}" msgstr "{name} onemogćen, omogući {name}" -#: frontend/class-frontend.php:2882 +#: frontend/class-frontend.php:2876 #: frontend/modules/banner-rest/class-banner-rest.php:594 msgid "Your cookie preferences have been saved." msgstr "Vaše preferencije kolačića su spremljene." -#: frontend/class-frontend.php:2884 +#: frontend/class-frontend.php:2878 #: frontend/modules/banner-rest/class-banner-rest.php:596 msgid "Customise Consent Preferences" msgstr "Prilagodi postavke pristanka" -#: frontend/class-frontend.php:2885 +#: frontend/class-frontend.php:2879 #: frontend/modules/banner-rest/class-banner-rest.php:597 msgid "Service consent" msgstr "Privola za uslugu" -#: frontend/class-frontend.php:2887 +#: frontend/class-frontend.php:2881 #: frontend/modules/banner-rest/class-banner-rest.php:599 msgid "Cookie consent" msgstr "Privola za kolačiće" -#: frontend/class-frontend.php:2888 +#: frontend/class-frontend.php:2882 #: frontend/modules/banner-rest/class-banner-rest.php:600 msgid "Vendor consent" msgstr "Suglasnost dobavljača" -#: frontend/class-frontend.php:2889 +#: frontend/class-frontend.php:2883 #: frontend/modules/banner-rest/class-banner-rest.php:601 msgid "These cookies are set by the embedded service on its own domain and are controlled by allowing or blocking the embed above — they cannot be removed individually." msgstr "Ove kolačiće postavlja ugrađena usluga na vlastitoj domeni i njima se upravlja dopuštanjem ili blokiranjem ugradnje iznad — ne mogu se ukloniti pojedinačno." #. translators: %d is the minimum digital age of consent. -#: frontend/class-frontend.php:2893 +#: frontend/class-frontend.php:2887 #: frontend/modules/banner-rest/class-banner-rest.php:606 #, php-format msgid "I confirm I am at least %d years old" msgstr "Potvrđujem da imam najmanje %d godina" -#: frontend/class-frontend.php:2894 +#: frontend/class-frontend.php:2888 #: frontend/modules/banner-rest/class-banner-rest.php:607 msgid "Please confirm you meet the minimum age to accept optional cookies." msgstr "Potvrdite da ispunjavate najnižu dob za prihvaćanje neobveznih kolačića." #. translators: %d is a number of seconds. -#: frontend/class-frontend.php:2901 +#: frontend/class-frontend.php:2895 #: frontend/modules/banner-rest/class-banner-rest.php:609 #, php-format msgid "Banner closes automatically in %d s..." diff --git a/languages/faz-cookie-manager-it_IT.mo b/languages/faz-cookie-manager-it_IT.mo index 14a4b9d641107409e5ad75ec8b27cba8cffbecfa..07c76725250af4787c00365075c4db21f07ae04a 100644 GIT binary patch delta 38638 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 delta 37078 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 L?MIjRo`3#73_{3& diff --git a/languages/faz-cookie-manager-it_IT.po b/languages/faz-cookie-manager-it_IT.po index ace861e5..c7de33df 100644 --- a/languages/faz-cookie-manager-it_IT.po +++ b/languages/faz-cookie-manager-it_IT.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: FAZ Cookie Manager 1.26.0\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/faz-cookie-manager\n" -"POT-Creation-Date: 2026-09-29T10:34:49+00:00\n" +"POT-Creation-Date: 2026-10-01T06:43:53+00:00\n" "PO-Revision-Date: 2026-07-31 20:48+0200\n" "Last-Translator: Fabio D'Alessandro\n" "Language-Team: Italian\n" @@ -49,13 +49,13 @@ msgid "Cookie Banner" msgstr "Banner cookie" #: admin/class-admin.php:233 admin/views/base.php:21 -#: frontend/class-frontend.php:2886 +#: frontend/class-frontend.php:2880 #: frontend/modules/banner-rest/class-banner-rest.php:598 msgid "Cookies" msgstr "Cookie" #: admin/class-admin.php:238 admin/views/base.php:22 -#: admin/views/dashboard.php:247 admin/views/settings.php:268 +#: admin/views/dashboard.php:247 admin/views/settings.php:289 msgid "Consent Logs" msgstr "Registri di consenso" @@ -3988,7 +3988,7 @@ msgstr "Lingua:" msgid "Notice Title" msgstr "Titolo dell'avviso" -#: admin/views/banner.php:341 frontend/class-frontend.php:2881 +#: admin/views/banner.php:341 frontend/class-frontend.php:2875 #: frontend/modules/banner-rest/class-banner-rest.php:593 msgid "We value your privacy" msgstr "La tua privacy è importante" @@ -4327,7 +4327,7 @@ msgstr "Testo opt-out (Do Not Sell)" msgid "Text for the \"Opt-out Preferences\" modal a visitor sees after clicking the \"Do Not Sell or Share My Personal Information\" link. Shown only on CCPA / US State Laws (and Both) banners. Follows the language selected above." msgstr "Testo del modale «Preferenze di opt-out» che il visitatore vede dopo aver cliccato il link «Do Not Sell or Share My Personal Information». Mostrato solo sui banner CCPA / US State Laws (ed Entrambi). Segue la lingua selezionata qui sopra." -#: admin/views/banner.php:833 frontend/class-frontend.php:2883 +#: admin/views/banner.php:833 frontend/class-frontend.php:2877 #: frontend/modules/banner-rest/class-banner-rest.php:595 msgid "Opt-out Preferences" msgstr "Preferenze di opt-out" @@ -4482,7 +4482,7 @@ msgstr "Canada (PIPEDA)" msgid "Brazil (LGPD)" msgstr "Brasile (LGPD)" -#: admin/views/banner.php:1054 admin/views/settings.php:480 +#: admin/views/banner.php:1054 admin/views/settings.php:501 #: admin/views/setup.php:189 msgid "Australia" msgstr "Australia" @@ -5557,7 +5557,7 @@ msgstr "Quando il plugin instrada i visitatori dalla Cina (si applica il PIPL), msgid "Global Vendor List (IAB TCF 2.3)" msgstr "Lista globale dei fornitori (IAB TCF 2.3)" -#: admin/views/gvl.php:15 admin/views/settings.php:440 +#: admin/views/gvl.php:15 admin/views/settings.php:461 msgid "Update GVL Now" msgstr "Aggiorna GVL ora" @@ -5865,476 +5865,500 @@ msgid "Defaults: H2 for the banner and preferences titles, H3 for category title msgstr "Valori predefiniti: H2 per i titoli del banner e delle preferenze, H3 per i titoli delle categorie. Dimensione del testo e colori restano governati dal design del banner." #: admin/views/settings.php:218 +msgid "Mobile Layout" +msgstr "Layout su dispositivi mobili" + +#: admin/views/settings.php:222 +msgid "Banner layout on phones" +msgstr "Layout del banner sugli smartphone" + +#: admin/views/settings.php:224 +msgid "Comfortable (default) — buttons stacked" +msgstr "Comodo (predefinito) — pulsanti impilati" + +#: admin/views/settings.php:225 +msgid "Compact — buttons on one row" +msgstr "Compatto — pulsanti su una riga" + +#: admin/views/settings.php:228 +msgid "Below 440px the comfortable layout gives each button its own full-width row, which makes the banner about 44% of a 390px screen. The compact layout puts them on a shared row and brings the same banner to about 29%. Desktop is not affected." +msgstr "Sotto i 440px il layout comodo assegna a ogni pulsante una riga intera, e questo porta il banner a occupare circa il 44% di uno schermo da 390px. Il layout compatto li dispone su una riga condivisa e riduce lo stesso banner a circa il 29%. Il desktop non viene modificato." + +#: admin/views/settings.php:232 +msgid "Compact keeps every button at least 44px tall so it stays comfortable to tap, and keeps the accept and reject buttons exactly the same size as each other, as equal prominence requires. On screens narrower than 360px accept and reject stay side by side and the customise button moves to its own row." +msgstr "Il layout compatto mantiene ogni pulsante alto almeno 44px, perché resti comodo da toccare, e mantiene i pulsanti di accettazione e rifiuto esattamente della stessa dimensione, come richiede la parità di evidenza. Sugli schermi più stretti di 360px accettazione e rifiuto restano affiancati e il pulsante di personalizzazione passa a una riga propria." + +#: admin/views/settings.php:239 msgid "Script Blocking" msgstr "Blocco script" -#: admin/views/settings.php:222 +#: admin/views/settings.php:243 msgid "Pages Excluded from Script Blocking" msgstr "Pagine escluse dal blocco script" -#: admin/views/settings.php:223 +#: admin/views/settings.php:244 msgid "One per line: /checkout/* or /cart/*" msgstr "Uno per riga: /checkout/* o /cart/*" -#: admin/views/settings.php:224 +#: admin/views/settings.php:245 msgid "URL patterns where script blocking is disabled (banner still shows). One per line, supports wildcards (e.g. /checkout/*)." msgstr "Pattern URL in cui il blocco script è disattivato (il banner viene comunque visualizzato). Uno per riga, supporta i caratteri jolly (ad es. /checkout/*)." -#: admin/views/settings.php:227 +#: admin/views/settings.php:248 msgid "Script Blocking Exceptions" msgstr "Eccezioni al blocco script" -#: admin/views/settings.php:228 +#: admin/views/settings.php:249 msgid "One per line: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" msgstr "Uno per riga: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" -#: admin/views/settings.php:229 +#: admin/views/settings.php:250 msgid "Scripts that should never be blocked, even before consent. One per line. Accepts three types of pattern:
- URL fragment (contains . or /): matched against the script's src or related URL attribute, e.g. googleapis.com/youtube/v3.
- Script ID (no dots/slashes): matched against the id attribute of the script tag, e.g. my-product-form-data.
- CSS class (no dots/slashes): matched against the script's class attribute, e.g. recaptcha.
- How IDs and classes match: whole words, plus their hyphen or underscore children. recaptcha matches recaptcha, recaptcha-badge and recaptcha_frame, but not myrecaptcha. Ending a pattern with - or _ (e.g. wp-) matches every word starting with it, which is much broader — prefer the exact ID or class wherever you can.
These exceptions bypass blocking entirely. Use them only for scripts that genuinely do not set tracking cookies. Be specific to avoid accidentally unblocking trackers.
Tip: You can also add class=\"faz-skip\" directly to any script tag to exclude it without adding anything here — no configuration needed." msgstr "Script che non devono mai essere bloccati, nemmeno prima del consenso. Uno per riga. Accetta tre tipi di pattern:
- Frammento di URL (contiene . o /): confrontato con l'attributo src dello script o con l'attributo URL corrispondente, ad es. googleapis.com/youtube/v3.
- ID dello script (senza punti né barre): confrontato con l'attributo id del tag script, ad es. my-product-form-data.
- Classe CSS (senza punti né barre): confrontata con l'attributo class dello script, ad es. recaptcha.
- Come vengono confrontati ID e classi: parole intere, più i loro figli separati da trattino o underscore. recaptcha corrisponde a recaptcha, recaptcha-badge e recaptcha_frame, ma non a myrecaptcha. Terminare un pattern con - o _ (ad es. wp-) fa corrispondere ogni parola che inizia così, ed è molto più ampio: preferisci l'ID o la classe esatti quando puoi.
Queste eccezioni aggirano completamente il blocco. Usale solo per script che davvero non impostano cookie di tracciamento. Sii specifico per evitare di sbloccare accidentalmente dei tracker.
Suggerimento: puoi anche aggiungere class=\"faz-skip\" direttamente a qualsiasi tag script per escluderlo senza aggiungere nulla qui — nessuna configurazione necessaria." -#: admin/views/settings.php:235 +#: admin/views/settings.php:256 msgid "Advanced inline CSS URL blocking" msgstr "Blocco avanzato degli URL nel CSS inline" -#: admin/views/settings.php:237 +#: admin/views/settings.php:258 msgid "Optional high-coverage mode for CSS-based third-party loads. The default blocker already handles server-rendered <style> tags and direct HTMLStyleElement updates. Enable this only if you have confirmed that a theme, page builder, or CSS-in-JS library injects blocked url() or @import rules through broader runtime channels such as Element.innerHTML, insertAdjacentHTML, CharacterData edits inside a style tag, or Constructable Stylesheets. This strengthens pre-consent blocking but hooks global browser APIs and may affect builders, editors, icon fonts, or CSS-in-JS libraries. Test the site before enabling in production." msgstr "Modalità opzionale ad ampia copertura per i caricamenti di terze parti tramite CSS. Il blocco predefinito gestisce già i tag <style> resi dal server e gli aggiornamenti diretti di HTMLStyleElement. Abilitala solo se hai verificato che un tema, un page builder o una libreria CSS-in-JS inietta regole url() o @import bloccate attraverso canali runtime più ampi come Element.innerHTML, insertAdjacentHTML, modifiche a CharacterData dentro un tag style o i Constructable Stylesheets. Rafforza il blocco prima del consenso ma si aggancia ad API globali del browser e può interferire con builder, editor, icon font o librerie CSS-in-JS. Prova il sito prima di abilitarla in produzione." -#: admin/views/settings.php:243 +#: admin/views/settings.php:264 msgid "Block non-consented cookies emitted by PHP" msgstr "Blocca i cookie non consentiti inviati da PHP" -#: admin/views/settings.php:245 +#: admin/views/settings.php:266 msgid "Advanced, off by default. Filters outgoing Set-Cookie headers from pages, AJAX, REST and redirects, including HttpOnly cookies that JavaScript cannot remove. Necessary, WordPress-internal, security and checkout cookies are preserved, and deletion headers always pass. Enable only after testing login, forms, cart and checkout; unknown cookies fail permissive until the scanner classifies them." msgstr "Avanzata, disattivata per impostazione predefinita. Filtra gli header Set-Cookie in uscita da pagine, AJAX, REST e reindirizzamenti, inclusi i cookie HttpOnly che JavaScript non può rimuovere. I cookie necessari, interni di WordPress, di sicurezza e del checkout vengono preservati e gli header di eliminazione passano sempre. Abilitala solo dopo aver verificato accesso, moduli, carrello e checkout; i cookie sconosciuti restano consentiti finché lo scanner non li classifica." -#: admin/views/settings.php:249 +#: admin/views/settings.php:270 msgid "Payment gateway scripts (e-commerce)" msgstr "Script dei gateway di pagamento (e-commerce)" -#: admin/views/settings.php:250 +#: admin/views/settings.php:271 msgid "Only enable a gateway if your site takes payments. A payment provider's SDK (PayPal, Stripe, …) can set cookies and fingerprint the visitor, so it is blocked until consent by default. Enabling a gateway here loads its payment scripts before consent across your site — needed for payment forms that live outside a WooCommerce checkout (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). This is a compliance decision and your responsibility for your jurisdiction. A real WooCommerce checkout/cart page already loads these automatically as strictly necessary; a gateway's marketing pixel (e.g. PayPal's pptm.js) stays blocked regardless." msgstr "Abilita un gateway solo se il tuo sito accetta pagamenti. L'SDK di un provider di pagamento (PayPal, Stripe, …) può impostare cookie e profilare il visitatore, quindi per impostazione predefinita è bloccato fino al consenso. Abilitare qui un gateway carica i suoi script di pagamento prima del consenso su tutto il sito — necessario per i moduli di pagamento che stanno fuori da un checkout WooCommerce (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). È una decisione di conformità e una tua responsabilità per la tua giurisdizione. Una pagina di checkout/carrello WooCommerce reale li carica già automaticamente come strettamente necessari; il pixel di marketing di un gateway (per esempio pptm.js di PayPal) resta comunque bloccato." #. translators: %s: payment gateway name, e.g. PayPal. -#: admin/views/settings.php:257 +#: admin/views/settings.php:278 #, php-format msgid "Allow %s payment scripts before consent" msgstr "Consenti gli script di pagamento %s prima del consenso" -#: admin/views/settings.php:275 +#: admin/views/settings.php:296 msgid "Enable consent logging" msgstr "Attiva la registrazione del consenso" -#: admin/views/settings.php:277 +#: admin/views/settings.php:298 msgid "Records each visitor's consent choice (accepted, rejected, or partial) for GDPR accountability. Required by Art. 7(1) GDPR to demonstrate that consent was given." msgstr "Registra la scelta di consenso di ogni visitatore (accettato, rifiutato o parziale) ai fini della responsabilizzazione GDPR. Richiesto dall'Art. 7(1) GDPR per dimostrare che il consenso è stato prestato." -#: admin/views/settings.php:280 +#: admin/views/settings.php:301 msgid "Consent log retention (months)" msgstr "Conservazione del registro dei consensi (mesi)" -#: admin/views/settings.php:282 +#: admin/views/settings.php:303 msgid "How long consent records are kept before automatic deletion. Choose a documented period appropriate to your accountability obligations. Logs older than this period are purged daily." msgstr "Per quanto tempo vengono conservate le registrazioni dei consensi prima della cancellazione automatica. Scegli un periodo documentato e adeguato ai tuoi obblighi di rendicontazione." -#: admin/views/settings.php:289 +#: admin/views/settings.php:310 msgid "Data Subject Requests" msgstr "Richieste degli interessati" -#: admin/views/settings.php:293 +#: admin/views/settings.php:314 msgid "Data subject request retention (months)" msgstr "Conservazione delle richieste degli interessati (mesi)" -#: admin/views/settings.php:295 +#: admin/views/settings.php:316 msgid "How long completed data-subject request records are kept before automatic deletion. Keep a period that supports your ability to demonstrate and manage requests." msgstr "Per quanto tempo vengono conservate le richieste degli interessati già evase prima della cancellazione automatica. Mantieni un periodo che sostenga i tuoi obblighi di rendicontazione." -#: admin/views/settings.php:302 +#: admin/views/settings.php:323 msgid "Scanner" msgstr "Scanner" -#: admin/views/settings.php:306 +#: admin/views/settings.php:327 msgid "Max Pages to Scan" msgstr "Numero massimo di pagine da scansionare" -#: admin/views/settings.php:308 +#: admin/views/settings.php:329 msgid "Maximum number of pages the cookie scanner will crawl. Higher values find more cookies but take longer. 100 pages is sufficient for most sites." msgstr "Numero massimo di pagine che lo scanner cookie analizzerà. Valori più alti trovano più cookie ma richiedono più tempo. 100 pagine sono sufficienti per la maggior parte dei siti." -#: admin/views/settings.php:311 +#: admin/views/settings.php:332 msgid "Static public IP (optional)" msgstr "IP pubblico statico (facoltativo)" -#: admin/views/settings.php:313 +#: admin/views/settings.php:334 msgid "Pin every server-side scanner request — sitemap discovery and page fetches — to this site IP while preserving the hostname, HTTPS certificate validation and SNI. Only public IPv4/IPv6 addresses are accepted; requires the WordPress cURL transport. Leave blank to use DNS." msgstr "Ancora tutte le richieste dello scanner lato server — individuazione della sitemap e recupero delle pagine — a questo IP del sito, preservando il nome host, la convalida del certificato HTTPS e SNI. Sono accettati solo indirizzi IPv4/IPv6 pubblici; richiede il trasporto cURL di WordPress. Lascia vuoto per usare il DNS." -#: admin/views/settings.php:319 +#: admin/views/settings.php:340 msgid "Scanner Debug Mode" msgstr "Modalità debug dello scanner" -#: admin/views/settings.php:321 +#: admin/views/settings.php:342 msgid "When enabled, the scanner logs every categorization decision. Download logs from the Cookies page." msgstr "Se abilitato, lo scanner registra ogni decisione di categorizzazione. Scarica i log dalla pagina Cookie." -#: admin/views/settings.php:328 +#: admin/views/settings.php:349 msgid "Automatic Scanning" msgstr "Scansione automatica" -#: admin/views/settings.php:335 +#: admin/views/settings.php:356 msgid "Enable automatic cookie scanning" msgstr "Abilita la scansione automatica dei cookie" -#: admin/views/settings.php:337 +#: admin/views/settings.php:358 msgid "Automatically scan your site for new cookies on a schedule. You will receive an email notification if new uncategorized cookies are found." msgstr "Esegui automaticamente la scansione del tuo sito alla ricerca di nuovi cookie secondo una pianificazione. Riceverai una notifica via e-mail se vengono trovati nuovi cookie non categorizzati." -#: admin/views/settings.php:343 +#: admin/views/settings.php:364 msgid "Update cookie definitions weekly" msgstr "Aggiorna le definizioni dei cookie ogni settimana" -#: admin/views/settings.php:345 +#: admin/views/settings.php:366 msgid "Optional: downloads the Open Cookie Database from raw.githubusercontent.com once a week. Off by default. Without this option, the bundled database is updated with plugin releases. A failed download keeps the existing definitions." msgstr "Facoltativo: scarica Open Cookie Database da raw.githubusercontent.com una volta alla settimana. Disattivato per default. Senza questa opzione, il database incluso viene aggiornato con le nuove versioni del plugin. Se il download fallisce, le definizioni esistenti vengono conservate." -#: admin/views/settings.php:348 +#: admin/views/settings.php:369 msgid "Scan Frequency" msgstr "Frequenza di scansione" -#: admin/views/settings.php:350 +#: admin/views/settings.php:371 msgid "Daily" msgstr "Giornaliero" -#: admin/views/settings.php:351 includes/class-activator.php:712 +#: admin/views/settings.php:372 includes/class-activator.php:712 msgid "Weekly" msgstr "Settimanale" -#: admin/views/settings.php:352 +#: admin/views/settings.php:373 msgid "Monthly" msgstr "Mensile" -#: admin/views/settings.php:354 +#: admin/views/settings.php:375 msgid "How often the scanner runs automatically. Weekly is recommended for most sites." msgstr "Con quale frequenza lo scanner viene eseguito automaticamente. Si consiglia cadenza settimanale per la maggior parte dei siti." -#: admin/views/settings.php:361 +#: admin/views/settings.php:382 msgid "Microsoft Consent APIs" msgstr "API di consenso Microsoft" -#: admin/views/settings.php:368 +#: admin/views/settings.php:389 msgid "Microsoft UET Consent Mode" msgstr "Microsoft UET Consent Mode" -#: admin/views/settings.php:370 +#: admin/views/settings.php:391 msgid "Signals consent status to Microsoft Advertising (Bing Ads) via the UET tag. Enable if you use Microsoft Advertising and need to respect consent for ad tracking." msgstr "Segnala lo stato del consenso a Microsoft Advertising (Bing Ads) tramite il tag UET. Attivare se si utilizza Microsoft Advertising e si deve rispettare il consenso per il tracciamento pubblicitario." -#: admin/views/settings.php:376 +#: admin/views/settings.php:397 msgid "Microsoft Clarity Consent API" msgstr "API di consenso Microsoft Clarity" -#: admin/views/settings.php:378 +#: admin/views/settings.php:399 msgid "Signals consent status to Microsoft Clarity (heatmaps and session recordings). Enable if you use Clarity and want it to pause tracking until consent is given." msgstr "Segnala lo stato del consenso a Microsoft Clarity (mappe di calore e registrazioni delle sessioni). Attivare se si utilizza Clarity e si desidera sospendere il tracciamento fino alla prestazione del consenso." -#: admin/views/settings.php:385 +#: admin/views/settings.php:406 msgid "Age Verification" msgstr "Verifica dell'età" -#: admin/views/settings.php:392 +#: admin/views/settings.php:413 msgid "Require age verification for consent" msgstr "Richiedi la verifica dell'età per il consenso" -#: admin/views/settings.php:394 +#: admin/views/settings.php:415 msgid "Under GDPR Art. 8, children below the minimum age cannot give valid consent for data processing. When enabled, the visitor sees an age-confirmation checkbox directly above the Accept/Reject buttons; it gates only the Accept path — Reject stays available and is never blocked, and the checkbox is never pre-ticked." msgstr "Ai sensi dell’art. 8 del GDPR, i minori al di sotto dell’età minima non possono fornire un consenso valido al trattamento dei dati. Quando è attiva, il visitatore vede una casella di conferma dell’età direttamente sopra i pulsanti Accetta/Rifiuta; essa vincola solo il percorso di accettazione — Rifiuta resta sempre disponibile e non viene mai bloccato, e la casella non è mai pre-selezionata." -#: admin/views/settings.php:395 +#: admin/views/settings.php:416 msgid "This is a self-declared age affirmation only. It is NOT a substitute for verifying parental consent for under-age children under GDPR Art. 8(2), which requires separate reasonable-efforts verification this feature does not provide." msgstr "Si tratta esclusivamente di un’autodichiarazione dell’età. NON sostituisce la verifica del consenso dei genitori per i minori ai sensi dell’art. 8(2) del GDPR, che richiede una verifica separata con sforzi ragionevoli che questa funzione non fornisce." -#: admin/views/settings.php:398 +#: admin/views/settings.php:419 msgid "Minimum Age" msgstr "Età minima" -#: admin/views/settings.php:400 +#: admin/views/settings.php:421 msgid "GDPR default is 16. Some EU member states allow 13-15 (e.g. Italy 14, Spain 14, France 15, Germany 16). Check your local law." msgstr "Il valore predefinito del GDPR è 16 anni. Alcuni Stati membri dell’UE consentono 13-15 (ad es. Italia 14, Spagna 14, Francia 15, Germania 16). Verifica la normativa locale." -#: admin/views/settings.php:407 admin/views/setup.php:201 +#: admin/views/settings.php:428 admin/views/setup.php:201 msgid "IAB TCF" msgstr "IAB TCF" -#: admin/views/settings.php:414 +#: admin/views/settings.php:435 msgid "Enable IAB TCF v2.3" msgstr "Attiva IAB TCF v2.3" -#: admin/views/settings.php:416 +#: admin/views/settings.php:437 msgid "Enables the IAB Transparency & Consent Framework. Required if you work with ad-tech vendors that need a standardised TC String for programmatic advertising in the EU." msgstr "Attiva il framework IAB Transparency & Consent. Necessario se si collabora con fornitori ad-tech che richiedono una stringa TC standardizzata per la pubblicità programmatica nell'UE." -#: admin/views/settings.php:419 +#: admin/views/settings.php:440 msgid "Publisher Country Code" msgstr "Codice paese dell'editore" -#: admin/views/settings.php:421 +#: admin/views/settings.php:442 msgid "ISO 3166-1 alpha-2 code of the publisher's country (e.g. IT, DE, FR). Used in the TCF consent string." msgstr "Codice ISO 3166-1 alpha-2 del paese dell'editore (ad es. IT, DE, FR). Utilizzato nella stringa di consenso TCF." -#: admin/views/settings.php:424 admin/views/setup.php:348 +#: admin/views/settings.php:445 admin/views/setup.php:348 msgid "CMP ID" msgstr "ID CMP" -#: admin/views/settings.php:426 +#: admin/views/settings.php:447 msgid "Your registered IAB CMP ID (IAB CMP List). With ID 0 the banner and cookie blocking work normally, but ad-tech vendors will ignore the TC String. Google Consent Mode v2 works regardless of CMP registration." msgstr "Il proprio ID CMP IAB registrato (Lista CMP IAB). Con ID 0 il banner e il blocco cookie funzionano normalmente, ma i fornitori ad-tech ignoreranno la stringa TC. Google Consent Mode v2 funziona indipendentemente dalla registrazione CMP." -#: admin/views/settings.php:432 +#: admin/views/settings.php:453 msgid "Purpose One Treatment" msgstr "Trattamento della Finalità Uno" -#: admin/views/settings.php:434 +#: admin/views/settings.php:455 msgid "Set to true if Purpose 1 consent was NOT disclosed (e.g. publisher in a country where Purpose 1 is not required)." msgstr "Impostare su vero se il consenso per la Finalità 1 NON è stato dichiarato (ad es. editore in un paese in cui la Finalità 1 non è richiesta)." -#: admin/views/settings.php:438 +#: admin/views/settings.php:459 msgid "Loading GVL status..." msgstr "Caricamento stato GVL..." -#: admin/views/settings.php:447 +#: admin/views/settings.php:468 msgid "Jurisdiction & Geo-routing" msgstr "Giurisdizione e Geo-routing" -#: admin/views/settings.php:454 +#: admin/views/settings.php:475 msgid "Apply jurisdiction rules by visitor location" msgstr "Applica le regole giurisdizionali in base alla posizione del visitatore" -#: admin/views/settings.php:456 +#: admin/views/settings.php:477 msgid "Recommended and enabled by default. Detect each visitor's location to enforce the matching jurisdiction rules and mandatory controls, and optionally limit banner display to selected regions. Turning this off means the law saved on the active banner applies to every visitor; for example, a CCPA banner will no longer gain GDPR blocking for an EEA visitor. Location requires a MaxMind GeoLite2 database (configured below), or a trusted country signal such as Cloudflare CF-IPCountry." msgstr "Consigliato e attivo per impostazione predefinita. Rileva la posizione di ogni visitatore per applicare le regole giurisdizionali e i controlli obbligatori corrispondenti e, facoltativamente, limitare il banner alle regioni selezionate. Disattivandolo, la legge salvata nel banner attivo si applica a ogni visitatore; ad esempio, un banner CCPA non acquisirà più il blocco GDPR per un visitatore SEE. La posizione richiede un database MaxMind GeoLite2 (configurato sotto) o un segnale paese attendibile come Cloudflare CF-IPCountry." -#: admin/views/settings.php:462 admin/views/setup.php:376 +#: admin/views/settings.php:483 admin/views/setup.php:376 msgid "Cache-safe jurisdiction bootstrap" msgstr "Bootstrap giurisdizionale cache-safe" -#: admin/views/settings.php:464 +#: admin/views/settings.php:485 msgid "Allows compatible full-page caches and CDNs to share one strict GDPR shell. The browser resolves the live jurisdiction through a no-store endpoint before mounting the banner or releasing optional scripts. If the configuration is unsupported or the endpoint fails, FAZ keeps the stricter shell and preserves the normal page-cache bypass." msgstr "Consente alle cache full-page e alle CDN compatibili di condividere un'unica shell GDPR rigorosa. Il browser risolve la giurisdizione effettiva tramite un endpoint no-store prima di montare il banner o rilasciare gli script opzionali. Se la configurazione non è supportata o l'endpoint fallisce, FAZ mantiene la shell più rigorosa e il normale bypass della cache di pagina." -#: admin/views/settings.php:466 +#: admin/views/settings.php:487 msgid "Checking cache-safe bootstrap readiness..." msgstr "Verifica della disponibilità del bootstrap cache-safe..." -#: admin/views/settings.php:468 +#: admin/views/settings.php:489 msgid "Currently excluded: AMP, IAB TCF, country-based language fallback, country-targeted banner rows, hiding the banner outside selected regions, and custom country-dependent output. Excluded configurations remain protected but bypass full-page caching." msgstr "Attualmente esclusi: AMP, IAB TCF, fallback della lingua basato sul paese, banner destinati a paesi specifici, banner nascosto fuori dalle regioni selezionate e output personalizzato dipendente dal paese. Le configurazioni escluse restano protette ma non usano la cache full-page." -#: admin/views/settings.php:471 +#: admin/views/settings.php:492 msgid "Target Regions" msgstr "Regioni di destinazione" -#: admin/views/settings.php:475 admin/views/setup.php:184 +#: admin/views/settings.php:496 admin/views/setup.php:184 msgid "EU / EEA" msgstr "UE / SEE" -#: admin/views/settings.php:476 admin/views/setup.php:185 +#: admin/views/settings.php:497 admin/views/setup.php:185 msgid "United Kingdom" msgstr "Regno Unito" -#: admin/views/settings.php:477 admin/views/setup.php:186 +#: admin/views/settings.php:498 admin/views/setup.php:186 msgid "United States" msgstr "Stati Uniti" -#: admin/views/settings.php:478 admin/views/setup.php:187 +#: admin/views/settings.php:499 admin/views/setup.php:187 msgid "Canada" msgstr "Canada" -#: admin/views/settings.php:479 admin/views/setup.php:188 +#: admin/views/settings.php:500 admin/views/setup.php:188 msgid "Brazil" msgstr "Brasile" -#: admin/views/settings.php:481 admin/views/setup.php:190 +#: admin/views/settings.php:502 admin/views/setup.php:190 msgid "Japan" msgstr "Giappone" -#: admin/views/settings.php:482 admin/views/setup.php:191 +#: admin/views/settings.php:503 admin/views/setup.php:191 msgid "Switzerland" msgstr "Svizzera" -#: admin/views/settings.php:483 admin/views/setup.php:192 +#: admin/views/settings.php:504 admin/views/setup.php:192 msgid "South Africa" msgstr "Sudafrica" -#: admin/views/settings.php:493 +#: admin/views/settings.php:514 msgid "Select which regions should see the cookie banner. Visitors from other regions will not see it (if \"Hide banner\" is selected below)." msgstr "Seleziona le regioni che devono visualizzare il banner sui cookie. I visitatori provenienti da altre regioni non lo vedranno (se è selezionato «Nascondi banner» in basso)." -#: admin/views/settings.php:496 +#: admin/views/settings.php:517 msgid "Non-target visitors" msgstr "Visitatori non target" -#: admin/views/settings.php:498 +#: admin/views/settings.php:519 msgid "Show banner anyway (safest)" msgstr "Mostra comunque il banner (più sicuro)" -#: admin/views/settings.php:499 +#: admin/views/settings.php:520 msgid "Hide banner (scripts load normally)" msgstr "Nascondi banner (gli script si caricano normalmente)" -#: admin/views/settings.php:501 +#: admin/views/settings.php:522 msgid "What happens when a visitor is from outside the target regions. \"Show banner anyway\" is the safest option and recommended for sites with global audiences." msgstr "Cosa accade quando un visitatore proviene da fuori le regioni di destinazione. \"Mostra comunque il banner\" è l'opzione più sicura e consigliata per i siti con un pubblico globale." -#: admin/views/settings.php:508 +#: admin/views/settings.php:529 msgid "GeoIP Database (MaxMind GeoLite2)" msgstr "Database GeoIP (MaxMind GeoLite2)" -#: admin/views/settings.php:512 +#: admin/views/settings.php:533 msgid "Geo-targeting requires a MaxMind GeoLite2 database. Get a free license key." msgstr "Il geo-targeting richiede un database MaxMind GeoLite2. Ottieni una chiave di licenza gratuita." -#: admin/views/settings.php:515 +#: admin/views/settings.php:536 msgid "Database edition" msgstr "Edizione del database" -#: admin/views/settings.php:517 +#: admin/views/settings.php:538 msgid "Country — country-level only (recommended)" msgstr "Country — solo a livello di paese (consigliato)" -#: admin/views/settings.php:518 +#: admin/views/settings.php:539 msgid "City — adds region / state detection" msgstr "City — aggiunge il rilevamento di regione / stato" -#: admin/views/settings.php:521 +#: admin/views/settings.php:542 msgid "Country (~10 MB) resolves the visitor’s country only — enough for country-based banner targeting and most per-jurisdiction rules. City (~60–110 MB) additionally resolves the region / province / state, which a few rules need: sub-national regimes such as Quebec Law 25 apply only inside one region of a country, so without City (or a Cloudflare CF-Region-Code header) the plugin can only see “Canada” and cannot route that visitor to the Quebec ruleset. Choose City only if you rely on region-level routing — it is a much larger download. Changing this and clicking “Update Database” replaces the installed database." msgstr "Country (~10 MB) rileva solo il paese del visitatore — sufficiente per il targeting del banner per paese e per la maggior parte delle regole per giurisdizione. City (~60–110 MB) rileva inoltre la regione / provincia / stato, di cui alcune regole hanno bisogno: regimi sub-nazionali come la Legge 25 del Quebec si applicano solo all’interno di una regione di un paese, quindi senza City (o un’intestazione Cloudflare CF-Region-Code) il plugin vede solo “Canada” e non può instradare quel visitatore al ruleset del Quebec. Scegli City solo se ti affidi all’instradamento a livello di regione — è un download molto più grande. Modificando questa impostazione e facendo clic su “Aggiorna database” il database installato viene sostituito." -#: admin/views/settings.php:525 +#: admin/views/settings.php:546 msgid "MaxMind License Key" msgstr "Chiave di licenza MaxMind" -#: admin/views/settings.php:526 +#: admin/views/settings.php:547 msgid "Enter your MaxMind license key" msgstr "Inserire la chiave di licenza MaxMind" -#: admin/views/settings.php:530 +#: admin/views/settings.php:551 msgid "Update Database" msgstr "Aggiorna database" -#: admin/views/settings.php:536 +#: admin/views/settings.php:557 msgid "Data Management" msgstr "Gestione dei dati" -#: admin/views/settings.php:543 +#: admin/views/settings.php:564 msgid "Remove all data on uninstall" msgstr "Rimuovi tutti i dati alla disinstallazione" -#: admin/views/settings.php:545 +#: admin/views/settings.php:566 msgid "When enabled, deleting the plugin will permanently remove ALL data: cookies, categories, consent logs, pageviews, banner settings, and scan history. Keep this OFF if you plan to reinstall or update the plugin." msgstr "Se abilitato, l’eliminazione del plugin rimuoverà definitivamente TUTTI i dati: cookie, categorie, log dei consensi, visualizzazioni di pagina, impostazioni del banner e cronologia delle scansioni. Tieni questa opzione DISATTIVATA se prevedi di reinstallare o aggiornare il plugin." -#: admin/views/settings.php:548 +#: admin/views/settings.php:569 msgid "Privacy Request Retention Period (months)" msgstr "Periodo di conservazione delle richieste privacy (mesi)" -#: admin/views/settings.php:550 +#: admin/views/settings.php:571 msgid "How long completed privacy (DSAR) request records are kept before automatic deletion. They are the evidence that a data-subject request was answered, so a minimum of 12–24 months is recommended. Default is 24 months." msgstr "Per quanto tempo vengono conservate le richieste privacy (DSAR) già evase prima della cancellazione automatica. Sono la prova che a una richiesta dell'interessato è stata data risposta, quindi si consiglia un minimo di 12-24 mesi. Il valore predefinito è 24 mesi." -#: admin/views/settings.php:558 +#: admin/views/settings.php:579 msgid "Paid Memberships Pro integration" msgstr "Integrazione Paid Memberships Pro" -#: admin/views/settings.php:562 +#: admin/views/settings.php:583 msgid "Offer selected Paid Memberships Pro levels a privacy-preserving membership alternative: logged-in members skip the cookie banner, necessary storage remains available, and all optional purposes stay denied until the member explicitly changes them in the preference center. Other visitors continue to use the standard consent flow." msgstr "Offri ai livelli Paid Memberships Pro selezionati un'alternativa di iscrizione che tutela la privacy: i membri autenticati non vedono il banner cookie, l'archiviazione necessaria resta disponibile e tutte le finalità facoltative restano negate finché il membro non le modifica esplicitamente nel centro preferenze. Gli altri visitatori continuano a usare il normale flusso di consenso." -#: admin/views/settings.php:565 +#: admin/views/settings.php:586 msgid "Legal note:" msgstr "Nota legale:" -#: admin/views/settings.php:566 +#: admin/views/settings.php:587 msgid "This option does not grant consent on the member's behalf. Disclose the privacy-preserving membership alternative in your Terms and Privacy Policy, keep the paid service genuinely equivalent, and leave the standard preference control available so members can change any optional purpose at any time. Assess your specific model with qualified counsel; EDPB Opinion 08/2024 does not make every consent-or-pay implementation lawful." msgstr "Questa opzione non concede il consenso per conto del membro. Descrivi l'alternativa di iscrizione rispettosa della privacy nei Termini e nella Privacy Policy, mantieni il servizio a pagamento realmente equivalente e lascia disponibile il normale controllo delle preferenze affinché i membri possano modificare in qualsiasi momento ogni finalità facoltativa. Valuta il tuo modello specifico con un consulente qualificato: il Parere EDPB 08/2024 non rende lecito ogni modello «consenso o pagamento»." -#: admin/views/settings.php:572 +#: admin/views/settings.php:593 msgid "Enable PMP integration" msgstr "Abilita integrazione PMP" -#: admin/views/settings.php:576 +#: admin/views/settings.php:597 msgid "Exempt membership level IDs" msgstr "ID livello di iscrizione esenti" -#: admin/views/settings.php:577 +#: admin/views/settings.php:598 msgid "e.g. 2, 3, 5" msgstr "es. 2, 3, 5" -#: admin/views/settings.php:579 +#: admin/views/settings.php:600 msgid "Comma-separated PMP level IDs whose members should be exempted. Find level IDs in Memberships → Settings → Levels. Leave empty to disable exemption." msgstr "ID livello PMP separati da virgola i cui membri devono essere esenti. Trova gli ID livello in Memberships → Settings → Levels. Lascia vuoto per disabilitare l'esenzione." -#: admin/views/settings.php:588 +#: admin/views/settings.php:609 msgid "Footer legal links" msgstr "Link legali nel footer" -#: admin/views/settings.php:595 +#: admin/views/settings.php:616 msgid "Show legal links in the footer" msgstr "Mostra i link legali nel footer" -#: admin/views/settings.php:597 +#: admin/views/settings.php:618 msgid "Off by default. When enabled, the pages you select below are printed as a small navigation block in your theme footer (via wp_footer). The markup is identical for every visitor — it does not depend on consent, login state or country — so it stays safe to serve from a page cache." msgstr "Disattivato per impostazione predefinita. Se attivato, le pagine selezionate qui sotto vengono mostrate come un piccolo blocco di navigazione nel footer del tema (tramite wp_footer). Il markup è identico per ogni visitatore — non dipende dal consenso, dallo stato di accesso o dal Paese — quindi può essere servito in sicurezza dalla cache delle pagine." -#: admin/views/settings.php:600 +#: admin/views/settings.php:621 msgid "Pages to link" msgstr "Pagine da collegare" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:638 +#: admin/views/settings.php:659 #, php-format msgid "Page #%d (unavailable)" msgstr "Pagina #%d (non disponibile)" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:644 +#: admin/views/settings.php:665 #, php-format msgid "Page #%d (untitled)" msgstr "Pagina #%d (senza titolo)" -#: admin/views/settings.php:674 +#: admin/views/settings.php:695 msgid "No published pages yet. Publish your Cookie Policy or Privacy Policy page first." msgstr "Non ci sono ancora pagine pubblicate. Pubblica prima la pagina della Cookie Policy o della Privacy Policy." -#: admin/views/settings.php:683 +#: admin/views/settings.php:704 msgid "Custom label (optional)" msgstr "Etichetta personalizzata (facoltativa)" -#: admin/views/settings.php:687 +#: admin/views/settings.php:708 msgid "Selected links appear first in their saved order. Leave the label empty to use the page title. Unpublished or unavailable selections stay visible here so you can remove them; they are never printed in the footer." msgstr "I link selezionati appaiono per primi nell'ordine salvato. Lascia vuota l'etichetta per usare il titolo della pagina. Le selezioni non pubblicate o non disponibili restano visibili qui per poterle rimuovere; non vengono mai mostrate nel footer." -#: admin/views/settings.php:695 +#: admin/views/settings.php:716 msgid "Force re-consent" msgstr "Forza nuovo consenso" -#: admin/views/settings.php:699 +#: admin/views/settings.php:720 msgid "Show the cookie banner again to all returning visitors. Useful when you change which cookies or services are used on your site (e.g. new AdSense tags, added analytics) and want prior visitors to renew their consent before those services run." msgstr "Mostra nuovamente il banner sui cookie a tutti i visitatori di ritorno. Utile quando si cambia quali cookie o servizi sono utilizzati sul sito (es. nuovi tag AdSense, analisi aggiunte) e si desidera che i visitatori precedenti rinnovino il consenso prima che tali servizi vengano eseguiti." -#: admin/views/settings.php:702 +#: admin/views/settings.php:723 msgid "Current consent revision" msgstr "Revisione del consenso attuale" -#: admin/views/settings.php:706 +#: admin/views/settings.php:727 msgid "Invalidate all consents" msgstr "Invalida tutti i consensi" -#: admin/views/settings.php:709 +#: admin/views/settings.php:730 msgid "Visitors whose stored consent has a lower revision will see the banner again on their next visit. This does not affect the current page load." msgstr "I visitatori il cui consenso memorizzato ha una revisione inferiore vedranno nuovamente il banner alla loro prossima visita. Questo non influisce sul caricamento della pagina corrente." -#: admin/views/settings.php:717 +#: admin/views/settings.php:738 msgid "Save Settings" msgstr "Salva impostazioni" @@ -7084,59 +7108,59 @@ msgid "Manage cookie preferences" msgstr "Gestisci le preferenze sui cookie" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:908 +#: frontend/class-frontend.php:902 msgid "{name} enabled, disable {name}" msgstr "{name} abilitato, disabilita {name}" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:910 +#: frontend/class-frontend.php:904 msgid "{name} disabled, enable {name}" msgstr "{name} disabilitato, abilita {name}" -#: frontend/class-frontend.php:2882 +#: frontend/class-frontend.php:2876 #: frontend/modules/banner-rest/class-banner-rest.php:594 msgid "Your cookie preferences have been saved." msgstr "Le tue preferenze sui cookie sono state salvate." -#: frontend/class-frontend.php:2884 +#: frontend/class-frontend.php:2878 #: frontend/modules/banner-rest/class-banner-rest.php:596 msgid "Customise Consent Preferences" msgstr "Personalizza le preferenze di consenso" -#: frontend/class-frontend.php:2885 +#: frontend/class-frontend.php:2879 #: frontend/modules/banner-rest/class-banner-rest.php:597 msgid "Service consent" msgstr "Consenso al servizio" -#: frontend/class-frontend.php:2887 +#: frontend/class-frontend.php:2881 #: frontend/modules/banner-rest/class-banner-rest.php:599 msgid "Cookie consent" msgstr "Consenso ai cookie" -#: frontend/class-frontend.php:2888 +#: frontend/class-frontend.php:2882 #: frontend/modules/banner-rest/class-banner-rest.php:600 msgid "Vendor consent" msgstr "Consenso fornitore" -#: frontend/class-frontend.php:2889 +#: frontend/class-frontend.php:2883 #: frontend/modules/banner-rest/class-banner-rest.php:601 msgid "These cookies are set by the embedded service on its own domain and are controlled by allowing or blocking the embed above — they cannot be removed individually." msgstr "Questi cookie sono impostati dal servizio incorporato sul proprio dominio e si controllano consentendo o bloccando l'embed qui sopra — non possono essere rimossi singolarmente." #. translators: %d is the minimum digital age of consent. -#: frontend/class-frontend.php:2893 +#: frontend/class-frontend.php:2887 #: frontend/modules/banner-rest/class-banner-rest.php:606 #, php-format msgid "I confirm I am at least %d years old" msgstr "Confermo di avere almeno %d anni" -#: frontend/class-frontend.php:2894 +#: frontend/class-frontend.php:2888 #: frontend/modules/banner-rest/class-banner-rest.php:607 msgid "Please confirm you meet the minimum age to accept optional cookies." msgstr "Conferma di avere l’età minima per accettare i cookie facoltativi." #. translators: %d is a number of seconds. -#: frontend/class-frontend.php:2901 +#: frontend/class-frontend.php:2895 #: frontend/modules/banner-rest/class-banner-rest.php:609 #, php-format msgid "Banner closes automatically in %d s..." diff --git a/languages/faz-cookie-manager-nl_NL.po b/languages/faz-cookie-manager-nl_NL.po index b0b2f3fa..6b324d91 100644 --- a/languages/faz-cookie-manager-nl_NL.po +++ b/languages/faz-cookie-manager-nl_NL.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: FAZ Cookie Manager 1.7.0\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/faz-cookie-manager\n" -"POT-Creation-Date: 2026-09-29T10:34:49+00:00\n" +"POT-Creation-Date: 2026-10-01T06:43:53+00:00\n" "PO-Revision-Date: 2026-04-02 13:06+0200\n" "Last-Translator: Yannic van Veen (Yard Digital Agency)\n" "Language-Team: Dutch\n" @@ -49,13 +49,13 @@ msgid "Cookie Banner" msgstr "Cookie Banner" #: admin/class-admin.php:233 admin/views/base.php:21 -#: frontend/class-frontend.php:2886 +#: frontend/class-frontend.php:2880 #: frontend/modules/banner-rest/class-banner-rest.php:598 msgid "Cookies" msgstr "Cookies" #: admin/class-admin.php:238 admin/views/base.php:22 -#: admin/views/dashboard.php:247 admin/views/settings.php:268 +#: admin/views/dashboard.php:247 admin/views/settings.php:289 msgid "Consent Logs" msgstr "Toestemmingslogs" @@ -3988,7 +3988,7 @@ msgstr "Taal:" msgid "Notice Title" msgstr "Mededeling titel" -#: admin/views/banner.php:341 frontend/class-frontend.php:2881 +#: admin/views/banner.php:341 frontend/class-frontend.php:2875 #: frontend/modules/banner-rest/class-banner-rest.php:593 msgid "We value your privacy" msgstr "Wij hechten waarde aan je privacy" @@ -4327,7 +4327,7 @@ msgstr "Opt-out-tekst (Do Not Sell)" msgid "Text for the \"Opt-out Preferences\" modal a visitor sees after clicking the \"Do Not Sell or Share My Personal Information\" link. Shown only on CCPA / US State Laws (and Both) banners. Follows the language selected above." msgstr "Tekst voor het venster «Opt-outvoorkeuren» dat een bezoeker ziet na het klikken op de link «Do Not Sell or Share My Personal Information». Wordt alleen weergegeven op CCPA-/US State Laws-banners (en Beide). Volgt de hierboven geselecteerde taal." -#: admin/views/banner.php:833 frontend/class-frontend.php:2883 +#: admin/views/banner.php:833 frontend/class-frontend.php:2877 #: frontend/modules/banner-rest/class-banner-rest.php:595 msgid "Opt-out Preferences" msgstr "Opt-outvoorkeuren" @@ -4482,7 +4482,7 @@ msgstr "Canada (PIPEDA)" msgid "Brazil (LGPD)" msgstr "Brazilië (LGPD)" -#: admin/views/banner.php:1054 admin/views/settings.php:480 +#: admin/views/banner.php:1054 admin/views/settings.php:501 #: admin/views/setup.php:189 msgid "Australia" msgstr "Australië" @@ -5557,7 +5557,7 @@ msgstr "Wanneer de plugin bezoekers uit China doorstuurt (PIPL is van toepassing msgid "Global Vendor List (IAB TCF 2.3)" msgstr "Globale leverancierslijst (IAB TCF 2.3)" -#: admin/views/gvl.php:15 admin/views/settings.php:440 +#: admin/views/gvl.php:15 admin/views/settings.php:461 msgid "Update GVL Now" msgstr "GVL nu bijwerken" @@ -5875,476 +5875,502 @@ msgid "Defaults: H2 for the banner and preferences titles, H3 for category title msgstr "" #: admin/views/settings.php:218 +#, fuzzy +msgid "Mobile Layout" +msgstr "Banner Indeling" + +#: admin/views/settings.php:222 +#, fuzzy +msgid "Banner layout on phones" +msgstr "Banner Indeling" + +#: admin/views/settings.php:224 +msgid "Comfortable (default) — buttons stacked" +msgstr "" + +#: admin/views/settings.php:225 +msgid "Compact — buttons on one row" +msgstr "" + +#: admin/views/settings.php:228 +msgid "Below 440px the comfortable layout gives each button its own full-width row, which makes the banner about 44% of a 390px screen. The compact layout puts them on a shared row and brings the same banner to about 29%. Desktop is not affected." +msgstr "" + +#: admin/views/settings.php:232 +msgid "Compact keeps every button at least 44px tall so it stays comfortable to tap, and keeps the accept and reject buttons exactly the same size as each other, as equal prominence requires. On screens narrower than 360px accept and reject stay side by side and the customise button moves to its own row." +msgstr "" + +#: admin/views/settings.php:239 msgid "Script Blocking" msgstr "Scriptblokkering" -#: admin/views/settings.php:222 +#: admin/views/settings.php:243 msgid "Pages Excluded from Script Blocking" msgstr "Pagina's uitgesloten van scriptblokkering" -#: admin/views/settings.php:223 +#: admin/views/settings.php:244 msgid "One per line: /checkout/* or /cart/*" msgstr "Eén per regel: /checkout/* of /cart/*" -#: admin/views/settings.php:224 +#: admin/views/settings.php:245 msgid "URL patterns where script blocking is disabled (banner still shows). One per line, supports wildcards (e.g. /checkout/*)." msgstr "URL-patronen waar het blokkeren van scripts is uitgeschakeld (banner wordt nog steeds getoond). Eén per regel, ondersteunt jokers (bijv. /checkout/*)." -#: admin/views/settings.php:227 +#: admin/views/settings.php:248 msgid "Script Blocking Exceptions" msgstr "Uitzonderingen voor script blokkeren" -#: admin/views/settings.php:228 +#: admin/views/settings.php:249 msgid "One per line: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" msgstr "Één per regel: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" -#: admin/views/settings.php:229 +#: admin/views/settings.php:250 msgid "Scripts that should never be blocked, even before consent. One per line. Accepts three types of pattern:
- URL fragment (contains . or /): matched against the script's src or related URL attribute, e.g. googleapis.com/youtube/v3.
- Script ID (no dots/slashes): matched against the id attribute of the script tag, e.g. my-product-form-data.
- CSS class (no dots/slashes): matched against the script's class attribute, e.g. recaptcha.
- How IDs and classes match: whole words, plus their hyphen or underscore children. recaptcha matches recaptcha, recaptcha-badge and recaptcha_frame, but not myrecaptcha. Ending a pattern with - or _ (e.g. wp-) matches every word starting with it, which is much broader — prefer the exact ID or class wherever you can.
These exceptions bypass blocking entirely. Use them only for scripts that genuinely do not set tracking cookies. Be specific to avoid accidentally unblocking trackers.
Tip: You can also add class=\"faz-skip\" directly to any script tag to exclude it without adding anything here — no configuration needed." msgstr "Scripts die nooit mogen worden geblokkeerd, zelfs niet vóór toestemming. Eén per regel. Accepteert drie soorten patronen:
- URL-fragment (bevat . of /): wordt vergeleken met het src-attribuut van het script of een gerelateerd URL-attribuut, bijv. googleapis.com/youtube/v3.
- Script-ID (geen punten/schuine strepen): wordt vergeleken met het id-attribuut van de scripttag, bijv. my-product-form-data.
- CSS-klasse (geen punten/schuine strepen): wordt vergeleken met het class-attribuut van het script, bijv. recaptcha.
- Hoe ID's en klassen overeenkomen: hele woorden, plus hun onderliggende delen met een koppelteken of underscore. recaptcha komt overeen met recaptcha, recaptcha-badge en recaptcha_frame, maar niet met myrecaptcha. Als een patroon eindigt op - of _ (bijv. wp-), komt het overeen met elk woord dat ermee begint, wat veel breder is — geef waar mogelijk de voorkeur aan het exacte ID of de exacte klasse.
Deze uitzonderingen omzeilen blokkering volledig. Gebruik ze alleen voor scripts die daadwerkelijk geen trackingcookies plaatsen. Wees specifiek om te voorkomen dat je per ongeluk trackers deblokkeert.
Tip: Je kunt ook class=\"faz-skip\" rechtstreeks aan een scripttag toevoegen om deze uit te sluiten zonder hier iets toe te voegen — geen configuratie nodig." -#: admin/views/settings.php:235 +#: admin/views/settings.php:256 msgid "Advanced inline CSS URL blocking" msgstr "Geavanceerde blokkering van inline CSS-URL's" -#: admin/views/settings.php:237 +#: admin/views/settings.php:258 msgid "Optional high-coverage mode for CSS-based third-party loads. The default blocker already handles server-rendered <style> tags and direct HTMLStyleElement updates. Enable this only if you have confirmed that a theme, page builder, or CSS-in-JS library injects blocked url() or @import rules through broader runtime channels such as Element.innerHTML, insertAdjacentHTML, CharacterData edits inside a style tag, or Constructable Stylesheets. This strengthens pre-consent blocking but hooks global browser APIs and may affect builders, editors, icon fonts, or CSS-in-JS libraries. Test the site before enabling in production." msgstr "Optionele modus met hoge dekking voor CSS-gebaseerde laadacties van derden. De standaardblokkering verwerkt al server-gerenderde <style>-tags en directe HTMLStyleElement-updates. Schakel dit alleen in als je hebt bevestigd dat een thema, paginabouwer of CSS-in-JS-bibliotheek geblokkeerde url()- of @import-regels injecteert via bredere runtimekanalen zoals Element.innerHTML, insertAdjacentHTML, CharacterData-bewerkingen binnen een style-tag, of Constructable Stylesheets. Dit versterkt blokkering vóór toestemming, maar haakt in op globale browser-API's en kan van invloed zijn op bouwers, editors, icoonlettertypen of CSS-in-JS-bibliotheken. Test de site voordat je dit in productie inschakelt." -#: admin/views/settings.php:243 +#: admin/views/settings.php:264 msgid "Block non-consented cookies emitted by PHP" msgstr "Niet-toegestemde cookies afkomstig van PHP blokkeren" -#: admin/views/settings.php:245 +#: admin/views/settings.php:266 msgid "Advanced, off by default. Filters outgoing Set-Cookie headers from pages, AJAX, REST and redirects, including HttpOnly cookies that JavaScript cannot remove. Necessary, WordPress-internal, security and checkout cookies are preserved, and deletion headers always pass. Enable only after testing login, forms, cart and checkout; unknown cookies fail permissive until the scanner classifies them." msgstr "Geavanceerd, standaard uitgeschakeld. Filtert uitgaande Set-Cookie-headers van pagina's, AJAX, REST en omleidingen, inclusief HttpOnly-cookies die JavaScript niet kan verwijderen. Noodzakelijke, WordPress-interne, beveiligings- en checkoutcookies blijven behouden, en verwijderingsheaders komen altijd door. Alleen inschakelen na het testen van inloggen, formulieren, winkelwagen en checkout; onbekende cookies worden bij twijfel toegestaan totdat de scanner ze classificeert." -#: admin/views/settings.php:249 +#: admin/views/settings.php:270 msgid "Payment gateway scripts (e-commerce)" msgstr "Scripts van betalingsgateways (e-commerce)" -#: admin/views/settings.php:250 +#: admin/views/settings.php:271 msgid "Only enable a gateway if your site takes payments. A payment provider's SDK (PayPal, Stripe, …) can set cookies and fingerprint the visitor, so it is blocked until consent by default. Enabling a gateway here loads its payment scripts before consent across your site — needed for payment forms that live outside a WooCommerce checkout (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). This is a compliance decision and your responsibility for your jurisdiction. A real WooCommerce checkout/cart page already loads these automatically as strictly necessary; a gateway's marketing pixel (e.g. PayPal's pptm.js) stays blocked regardless." msgstr "Schakel een gateway alleen in als je site betalingen verwerkt. De SDK van een betalingsprovider (PayPal, Stripe, …) kan cookies plaatsen en de bezoeker fingerprinten, dus wordt deze standaard geblokkeerd tot er toestemming is. Het hier inschakelen van een gateway laadt de betalingsscripts ervan vóór toestemming op je hele site — nodig voor betalingsformulieren die buiten een WooCommerce-checkout bestaan (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). Dit is een compliance-beslissing en jouw verantwoordelijkheid voor jouw jurisdictie. Een echte WooCommerce-checkout-/winkelwagenpagina laadt deze al automatisch als strikt noodzakelijk; de marketingpixel van een gateway (bijv. PayPal's pptm.js) blijft sowieso geblokkeerd." #. translators: %s: payment gateway name, e.g. PayPal. -#: admin/views/settings.php:257 +#: admin/views/settings.php:278 #, php-format msgid "Allow %s payment scripts before consent" msgstr "%s-betalingsscripts toestaan vóór toestemming" -#: admin/views/settings.php:275 +#: admin/views/settings.php:296 msgid "Enable consent logging" msgstr "Logboek voor toestemming inschakelen" -#: admin/views/settings.php:277 +#: admin/views/settings.php:298 msgid "Records each visitor's consent choice (accepted, rejected, or partial) for GDPR accountability. Required by Art. 7(1) GDPR to demonstrate that consent was given." msgstr "Registreert de keuze van elke bezoeker (geaccepteerd, geweigerd of gedeeltelijk) voor GDPR-verantwoording. Vereist volgens artikel 7(1) GDPR om aan te tonen dat toestemming is gegeven." -#: admin/views/settings.php:280 +#: admin/views/settings.php:301 msgid "Consent log retention (months)" msgstr "Bewaartermijn toestemmingslogboek (maanden)" -#: admin/views/settings.php:282 +#: admin/views/settings.php:303 msgid "How long consent records are kept before automatic deletion. Choose a documented period appropriate to your accountability obligations. Logs older than this period are purged daily." msgstr "Hoe lang toestemmingsrecords worden bewaard vóór automatische verwijdering. Kies een gedocumenteerde termijn die past bij je verantwoordingsplicht. Logboeken die ouder zijn dan deze termijn worden dagelijks opgeruimd." -#: admin/views/settings.php:289 +#: admin/views/settings.php:310 msgid "Data Subject Requests" msgstr "Verzoeken van betrokkenen" -#: admin/views/settings.php:293 +#: admin/views/settings.php:314 msgid "Data subject request retention (months)" msgstr "Bewaartermijn verzoeken van betrokkenen (maanden)" -#: admin/views/settings.php:295 +#: admin/views/settings.php:316 msgid "How long completed data-subject request records are kept before automatic deletion. Keep a period that supports your ability to demonstrate and manage requests." msgstr "Hoe lang records van afgehandelde verzoeken van betrokkenen worden bewaard vóór automatische verwijdering. Kies een termijn die je in staat stelt verzoeken aan te tonen en te beheren." -#: admin/views/settings.php:302 +#: admin/views/settings.php:323 msgid "Scanner" msgstr "Scanner" -#: admin/views/settings.php:306 +#: admin/views/settings.php:327 msgid "Max Pages to Scan" msgstr "Maximum aantal pagina's om te scannen" -#: admin/views/settings.php:308 +#: admin/views/settings.php:329 msgid "Maximum number of pages the cookie scanner will crawl. Higher values find more cookies but take longer. 100 pages is sufficient for most sites." msgstr "Het maximum aantal pagina's dat de cookie scanner doorzoekt. Hogere waarden vinden meer cookies maar nemen langer in beslag. 100 pagina's is voldoende voor de meeste sites." -#: admin/views/settings.php:311 +#: admin/views/settings.php:332 msgid "Static public IP (optional)" msgstr "Statisch openbaar IP-adres (optioneel)" -#: admin/views/settings.php:313 +#: admin/views/settings.php:334 msgid "Pin every server-side scanner request — sitemap discovery and page fetches — to this site IP while preserving the hostname, HTTPS certificate validation and SNI. Only public IPv4/IPv6 addresses are accepted; requires the WordPress cURL transport. Leave blank to use DNS." msgstr "Pin elk server-side scannerverzoek — het ontdekken van de sitemap en het ophalen van pagina's — aan het IP-adres van deze site, met behoud van de hostnaam, HTTPS-certificaatvalidatie en SNI. Alleen openbare IPv4/IPv6-adressen worden geaccepteerd; vereist het WordPress cURL-transport. Laat leeg om DNS te gebruiken." -#: admin/views/settings.php:319 +#: admin/views/settings.php:340 msgid "Scanner Debug Mode" msgstr "Foutopsporingsmodus scanner" -#: admin/views/settings.php:321 +#: admin/views/settings.php:342 msgid "When enabled, the scanner logs every categorization decision. Download logs from the Cookies page." msgstr "Wanneer ingeschakeld, registreert de scanner elke categorisatiebeslissing. Download logs van de Cookies-pagina." -#: admin/views/settings.php:328 +#: admin/views/settings.php:349 msgid "Automatic Scanning" msgstr "Automatisch scannen" -#: admin/views/settings.php:335 +#: admin/views/settings.php:356 msgid "Enable automatic cookie scanning" msgstr "Activeer automatisch cookie-scannen" -#: admin/views/settings.php:337 +#: admin/views/settings.php:358 msgid "Automatically scan your site for new cookies on a schedule. You will receive an email notification if new uncategorized cookies are found." msgstr "Je site wordt automatisch op nieuwe cookies gescand volgens een schema. Je ontvangt een e-mailmelding als er nieuwe niet-gecategoriseerde cookies worden gevonden." -#: admin/views/settings.php:343 +#: admin/views/settings.php:364 msgid "Update cookie definitions weekly" msgstr "" -#: admin/views/settings.php:345 +#: admin/views/settings.php:366 msgid "Optional: downloads the Open Cookie Database from raw.githubusercontent.com once a week. Off by default. Without this option, the bundled database is updated with plugin releases. A failed download keeps the existing definitions." msgstr "" -#: admin/views/settings.php:348 +#: admin/views/settings.php:369 msgid "Scan Frequency" msgstr "Scan Frequentie" -#: admin/views/settings.php:350 +#: admin/views/settings.php:371 msgid "Daily" msgstr "Dagelijks" -#: admin/views/settings.php:351 includes/class-activator.php:712 +#: admin/views/settings.php:372 includes/class-activator.php:712 msgid "Weekly" msgstr "Wekelijks" -#: admin/views/settings.php:352 +#: admin/views/settings.php:373 msgid "Monthly" msgstr "Maandelijks" -#: admin/views/settings.php:354 +#: admin/views/settings.php:375 msgid "How often the scanner runs automatically. Weekly is recommended for most sites." msgstr "Hoe vaak de scanner automatisch wordt uitgevoerd. Wekelijks wordt aanbevolen voor de meeste sites." -#: admin/views/settings.php:361 +#: admin/views/settings.php:382 msgid "Microsoft Consent APIs" msgstr "Microsoft Consent API's" -#: admin/views/settings.php:368 +#: admin/views/settings.php:389 msgid "Microsoft UET Consent Mode" msgstr "Microsoft UET Consent Modus" -#: admin/views/settings.php:370 +#: admin/views/settings.php:391 msgid "Signals consent status to Microsoft Advertising (Bing Ads) via the UET tag. Enable if you use Microsoft Advertising and need to respect consent for ad tracking." msgstr "Geeft de toestemmingsstatus door aan Microsoft Advertising (Bing Ads) via de UET-tag. Schakel dit in als je Microsoft Advertising gebruikt en toestemming voor advertentietracering moet respecteren." -#: admin/views/settings.php:376 +#: admin/views/settings.php:397 msgid "Microsoft Clarity Consent API" msgstr "Microsoft Clarity toestemmings-API" -#: admin/views/settings.php:378 +#: admin/views/settings.php:399 msgid "Signals consent status to Microsoft Clarity (heatmaps and session recordings). Enable if you use Clarity and want it to pause tracking until consent is given." msgstr "Geeft de toestemmingsstatus door aan Microsoft Clarity (heatmap en sessieopnamen). Schakel dit in als je Clarity gebruikt en wilt dat het de tracking pauzeert tot toestemming is gegeven." -#: admin/views/settings.php:385 +#: admin/views/settings.php:406 msgid "Age Verification" msgstr "Leeftijdsverificatie" -#: admin/views/settings.php:392 +#: admin/views/settings.php:413 msgid "Require age verification for consent" msgstr "Vereist leeftijdsverificatie voor toestemming" -#: admin/views/settings.php:394 +#: admin/views/settings.php:415 msgid "Under GDPR Art. 8, children below the minimum age cannot give valid consent for data processing. When enabled, the visitor sees an age-confirmation checkbox directly above the Accept/Reject buttons; it gates only the Accept path — Reject stays available and is never blocked, and the checkbox is never pre-ticked." msgstr "Onder AVG art. 8 kunnen kinderen onder de minimumleeftijd geen geldige toestemming geven voor gegevensverwerking. Indien ingeschakeld, ziet de bezoeker een selectievakje voor leeftijdsbevestiging direct boven de knoppen Accepteren/Weigeren; dit blokkeert alleen het pad Accepteren — Weigeren blijft beschikbaar en wordt nooit geblokkeerd, en het selectievakje is nooit vooraf aangevinkt." -#: admin/views/settings.php:395 +#: admin/views/settings.php:416 msgid "This is a self-declared age affirmation only. It is NOT a substitute for verifying parental consent for under-age children under GDPR Art. 8(2), which requires separate reasonable-efforts verification this feature does not provide." msgstr "Dit is uitsluitend een zelfverklaarde leeftijdsbevestiging. Het is GEEN vervanging voor het verifiëren van ouderlijke toestemming voor minderjarige kinderen onder AVG art. 8, lid 2, waarvoor een aparte, redelijke verificatie-inspanning vereist is die deze functie niet biedt." -#: admin/views/settings.php:398 +#: admin/views/settings.php:419 msgid "Minimum Age" msgstr "Minimumleeftijd" -#: admin/views/settings.php:400 +#: admin/views/settings.php:421 msgid "GDPR default is 16. Some EU member states allow 13-15 (e.g. Italy 14, Spain 14, France 15, Germany 16). Check your local law." msgstr "De AVG-standaard is 16. Sommige EU-lidstaten staan 13-15 toe (bijv. Italië 14, Spanje 14, Frankrijk 15, Duitsland 16). Controleer je lokale wetgeving." -#: admin/views/settings.php:407 admin/views/setup.php:201 +#: admin/views/settings.php:428 admin/views/setup.php:201 msgid "IAB TCF" msgstr "IAB TCF" -#: admin/views/settings.php:414 +#: admin/views/settings.php:435 msgid "Enable IAB TCF v2.3" msgstr "IAB TCF v2.3 inschakelen" -#: admin/views/settings.php:416 +#: admin/views/settings.php:437 msgid "Enables the IAB Transparency & Consent Framework. Required if you work with ad-tech vendors that need a standardised TC String for programmatic advertising in the EU." msgstr "Het IAB Transparency & Consent Framework inschakelen. Vereist als je werkt met ad-tech leveranciers die een gestandaardiseerde TC String nodig hebben voor programmatische adverteren in de EU." -#: admin/views/settings.php:419 +#: admin/views/settings.php:440 msgid "Publisher Country Code" msgstr "Landcode uitgever" -#: admin/views/settings.php:421 +#: admin/views/settings.php:442 msgid "ISO 3166-1 alpha-2 code of the publisher's country (e.g. IT, DE, FR). Used in the TCF consent string." msgstr "ISO 3166-1 alpha-2 code van het land van de uitgever (bijv. IT, DE, FR). Wordt gebruikt in de TCF toestemmingsreeks." -#: admin/views/settings.php:424 admin/views/setup.php:348 +#: admin/views/settings.php:445 admin/views/setup.php:348 msgid "CMP ID" msgstr "CMP ID" -#: admin/views/settings.php:426 +#: admin/views/settings.php:447 msgid "Your registered IAB CMP ID (IAB CMP List). With ID 0 the banner and cookie blocking work normally, but ad-tech vendors will ignore the TC String. Google Consent Mode v2 works regardless of CMP registration." msgstr "Je geregistreerde IAB CMP ID (IAB CMP List). Met ID 0 werkt de banner en cookieblokkering normaal, maar ad-tech leveranciers negeren de TC String. Google Consent Mode v2 werkt ongeacht CMP registratie." -#: admin/views/settings.php:432 +#: admin/views/settings.php:453 msgid "Purpose One Treatment" msgstr "Doel Een Behandeling" -#: admin/views/settings.php:434 +#: admin/views/settings.php:455 msgid "Set to true if Purpose 1 consent was NOT disclosed (e.g. publisher in a country where Purpose 1 is not required)." msgstr "Ingesteld op waar als toestemming voor Doel 1 NIET is vrijgegeven (bijvoorbeeld uitgever in een land waar Doel 1 niet vereist is)." -#: admin/views/settings.php:438 +#: admin/views/settings.php:459 msgid "Loading GVL status..." msgstr "GVL-status laden..." -#: admin/views/settings.php:447 +#: admin/views/settings.php:468 msgid "Jurisdiction & Geo-routing" msgstr "Rechtsgebied en geo-routering" -#: admin/views/settings.php:454 +#: admin/views/settings.php:475 msgid "Apply jurisdiction rules by visitor location" msgstr "Regels per rechtsgebied toepassen op basis van de bezoekerslocatie" -#: admin/views/settings.php:456 +#: admin/views/settings.php:477 msgid "Recommended and enabled by default. Detect each visitor's location to enforce the matching jurisdiction rules and mandatory controls, and optionally limit banner display to selected regions. Turning this off means the law saved on the active banner applies to every visitor; for example, a CCPA banner will no longer gain GDPR blocking for an EEA visitor. Location requires a MaxMind GeoLite2 database (configured below), or a trusted country signal such as Cloudflare CF-IPCountry." msgstr "Aanbevolen en standaard ingeschakeld. Bepaalt de locatie van iedere bezoeker om de bijbehorende rechtsgebiedregels en verplichte controles af te dwingen en beperkt desgewenst de banner tot geselecteerde regio's. Als u dit uitschakelt, geldt de wet die in de actieve banner is opgeslagen voor iedere bezoeker; een CCPA-banner krijgt dan bijvoorbeeld geen AVG-blokkering meer voor een bezoeker uit de EER. Locatiebepaling vereist een hieronder ingestelde MaxMind GeoLite2-database of een vertrouwd landsignaal zoals Cloudflare CF-IPCountry." -#: admin/views/settings.php:462 admin/views/setup.php:376 +#: admin/views/settings.php:483 admin/views/setup.php:376 msgid "Cache-safe jurisdiction bootstrap" msgstr "Cacheveilige bootstrap voor rechtsgebieden" -#: admin/views/settings.php:464 +#: admin/views/settings.php:485 msgid "Allows compatible full-page caches and CDNs to share one strict GDPR shell. The browser resolves the live jurisdiction through a no-store endpoint before mounting the banner or releasing optional scripts. If the configuration is unsupported or the endpoint fails, FAZ keeps the stricter shell and preserves the normal page-cache bypass." msgstr "Hiermee kunnen compatibele volledige-paginacaches en CDN's één strikte AVG-shell delen. De browser bepaalt het actuele rechtsgebied via een no-store-eindpunt voordat de banner wordt geplaatst of optionele scripts worden vrijgegeven. Als de configuratie niet wordt ondersteund of het eindpunt faalt, behoudt FAZ de strengere shell en de normale omzeiling van de paginacache." -#: admin/views/settings.php:466 +#: admin/views/settings.php:487 msgid "Checking cache-safe bootstrap readiness..." msgstr "Gereedheid van de cacheveilige bootstrap controleren..." -#: admin/views/settings.php:468 +#: admin/views/settings.php:489 msgid "Currently excluded: AMP, IAB TCF, country-based language fallback, country-targeted banner rows, hiding the banner outside selected regions, and custom country-dependent output. Excluded configurations remain protected but bypass full-page caching." msgstr "Momenteel uitgesloten: AMP, IAB TCF, taalkeuze op basis van land, banners gericht op landen, verbergen van de banner buiten geselecteerde regio's en aangepaste landsafhankelijke uitvoer. Uitgesloten configuraties blijven beschermd maar omzeilen de volledige-paginacache." -#: admin/views/settings.php:471 +#: admin/views/settings.php:492 msgid "Target Regions" msgstr "Doelregioën" -#: admin/views/settings.php:475 admin/views/setup.php:184 +#: admin/views/settings.php:496 admin/views/setup.php:184 msgid "EU / EEA" msgstr "EU / EER" -#: admin/views/settings.php:476 admin/views/setup.php:185 +#: admin/views/settings.php:497 admin/views/setup.php:185 msgid "United Kingdom" msgstr "Verenigd Koninkrijk" -#: admin/views/settings.php:477 admin/views/setup.php:186 +#: admin/views/settings.php:498 admin/views/setup.php:186 msgid "United States" msgstr "Verenigde Staten" -#: admin/views/settings.php:478 admin/views/setup.php:187 +#: admin/views/settings.php:499 admin/views/setup.php:187 msgid "Canada" msgstr "Canada" -#: admin/views/settings.php:479 admin/views/setup.php:188 +#: admin/views/settings.php:500 admin/views/setup.php:188 msgid "Brazil" msgstr "Brazilië" -#: admin/views/settings.php:481 admin/views/setup.php:190 +#: admin/views/settings.php:502 admin/views/setup.php:190 msgid "Japan" msgstr "Japan" -#: admin/views/settings.php:482 admin/views/setup.php:191 +#: admin/views/settings.php:503 admin/views/setup.php:191 msgid "Switzerland" msgstr "Zwitserland" -#: admin/views/settings.php:483 admin/views/setup.php:192 +#: admin/views/settings.php:504 admin/views/setup.php:192 msgid "South Africa" msgstr "Zuid-Afrika" -#: admin/views/settings.php:493 +#: admin/views/settings.php:514 msgid "Select which regions should see the cookie banner. Visitors from other regions will not see it (if \"Hide banner\" is selected below)." msgstr "Selecteer welke regioén de cookiewaarschuwing moeten zien. Bezoekers uit andere regioén zien deze niet (als \"Waarschuwing verbergen\" hieronder is geselecteerd)." -#: admin/views/settings.php:496 +#: admin/views/settings.php:517 msgid "Non-target visitors" msgstr "Bezoekers die niet als doelgroep zijn gekozen" -#: admin/views/settings.php:498 +#: admin/views/settings.php:519 msgid "Show banner anyway (safest)" msgstr "Toon banner toch (veiligste)" -#: admin/views/settings.php:499 +#: admin/views/settings.php:520 msgid "Hide banner (scripts load normally)" msgstr "Verberg banner (scripts laden normaal)" -#: admin/views/settings.php:501 +#: admin/views/settings.php:522 msgid "What happens when a visitor is from outside the target regions. \"Show banner anyway\" is the safest option and recommended for sites with global audiences." msgstr "Wat er gebeurt wanneer een bezoeker vandaan komt buiten de doelgebieden. \"Toon banner toch\" is de veiligste optie en wordt aanbevolen voor sites met wereldwijde publieken." -#: admin/views/settings.php:508 +#: admin/views/settings.php:529 msgid "GeoIP Database (MaxMind GeoLite2)" msgstr "GeoIP-database (MaxMind GeoLite2)" -#: admin/views/settings.php:512 +#: admin/views/settings.php:533 msgid "Geo-targeting requires a MaxMind GeoLite2 database. Get a free license key." msgstr "Geo-targeting vereist een MaxMind GeoLite2-database. Vraag een gratis licentiesleutel aan." -#: admin/views/settings.php:515 +#: admin/views/settings.php:536 msgid "Database edition" msgstr "Database-editie" -#: admin/views/settings.php:517 +#: admin/views/settings.php:538 msgid "Country — country-level only (recommended)" msgstr "Country — alleen op landniveau (aanbevolen)" -#: admin/views/settings.php:518 +#: admin/views/settings.php:539 msgid "City — adds region / state detection" msgstr "City — voegt detectie van regio/staat toe" -#: admin/views/settings.php:521 +#: admin/views/settings.php:542 msgid "Country (~10 MB) resolves the visitor’s country only — enough for country-based banner targeting and most per-jurisdiction rules. City (~60–110 MB) additionally resolves the region / province / state, which a few rules need: sub-national regimes such as Quebec Law 25 apply only inside one region of a country, so without City (or a Cloudflare CF-Region-Code header) the plugin can only see “Canada” and cannot route that visitor to the Quebec ruleset. Choose City only if you rely on region-level routing — it is a much larger download. Changing this and clicking “Update Database” replaces the installed database." msgstr "Country (~10 MB) bepaalt alleen het land van de bezoeker — voldoende voor landgebaseerde bannertargeting en de meeste regels per rechtsgebied. City (~60–110 MB) bepaalt daarnaast de regio / provincie / staat, wat enkele regels nodig hebben: subnationale regimes zoals de Quebec Wet 25 gelden alleen binnen één regio van een land, dus zonder City (of een Cloudflare-header CF-Region-Code) ziet de plug-in alleen “Canada” en kan die bezoeker niet naar de Quebec-ruleset routeren. Kies City alleen als u afhankelijk bent van routing op regioniveau — het is een veel grotere download. Door dit te wijzigen en op “Database bijwerken” te klikken, wordt de geïnstalleerde database vervangen." -#: admin/views/settings.php:525 +#: admin/views/settings.php:546 msgid "MaxMind License Key" msgstr "MaxMind Licentiesleutel" -#: admin/views/settings.php:526 +#: admin/views/settings.php:547 msgid "Enter your MaxMind license key" msgstr "Voer je MaxMind licentiesleutel in" -#: admin/views/settings.php:530 +#: admin/views/settings.php:551 msgid "Update Database" msgstr "Database bijwerken" -#: admin/views/settings.php:536 +#: admin/views/settings.php:557 msgid "Data Management" msgstr "Gegevensbeheer" -#: admin/views/settings.php:543 +#: admin/views/settings.php:564 msgid "Remove all data on uninstall" msgstr "Alle gegevens verwijderen bij verwijdering" -#: admin/views/settings.php:545 +#: admin/views/settings.php:566 msgid "When enabled, deleting the plugin will permanently remove ALL data: cookies, categories, consent logs, pageviews, banner settings, and scan history. Keep this OFF if you plan to reinstall or update the plugin." msgstr "Wanneer ingeschakeld, worden bij het verwijderen van de plugin ALLE gegevens definitief verwijderd: cookies, categorieën, toestemmingslogs, paginaweergaven, bannerinstellingen en scangeschiedenis. Houd deze optie UIT als u de plugin opnieuw wilt installeren of bijwerken." -#: admin/views/settings.php:548 +#: admin/views/settings.php:569 msgid "Privacy Request Retention Period (months)" msgstr "Bewaartermijn privacyverzoeken (maanden)" -#: admin/views/settings.php:550 +#: admin/views/settings.php:571 msgid "How long completed privacy (DSAR) request records are kept before automatic deletion. They are the evidence that a data-subject request was answered, so a minimum of 12–24 months is recommended. Default is 24 months." msgstr "Hoe lang records van afgehandelde privacyverzoeken (DSAR) worden bewaard vóór automatische verwijdering. Ze vormen het bewijs dat een verzoek van een betrokkene is beantwoord, dus wordt een minimum van 12–24 maanden aanbevolen. Standaard is 24 maanden." -#: admin/views/settings.php:558 +#: admin/views/settings.php:579 msgid "Paid Memberships Pro integration" msgstr "Paid Memberships Pro-integratie" -#: admin/views/settings.php:562 +#: admin/views/settings.php:583 msgid "Offer selected Paid Memberships Pro levels a privacy-preserving membership alternative: logged-in members skip the cookie banner, necessary storage remains available, and all optional purposes stay denied until the member explicitly changes them in the preference center. Other visitors continue to use the standard consent flow." msgstr "Bied geselecteerde Paid Memberships Pro-niveaus een privacyvriendelijk lidmaatschapsalternatief: ingelogde leden slaan de cookiebanner over, noodzakelijke opslag blijft beschikbaar, en alle optionele doeleinden blijven geweigerd totdat het lid deze expliciet wijzigt in het voorkeurscentrum. Andere bezoekers blijven de standaard toestemmingsflow gebruiken." -#: admin/views/settings.php:565 +#: admin/views/settings.php:586 msgid "Legal note:" msgstr "Juridische opmerking:" -#: admin/views/settings.php:566 +#: admin/views/settings.php:587 msgid "This option does not grant consent on the member's behalf. Disclose the privacy-preserving membership alternative in your Terms and Privacy Policy, keep the paid service genuinely equivalent, and leave the standard preference control available so members can change any optional purpose at any time. Assess your specific model with qualified counsel; EDPB Opinion 08/2024 does not make every consent-or-pay implementation lawful." msgstr "Deze optie geeft geen toestemming namens het lid. Vermeld het privacyvriendelijke lidmaatschapsalternatief in je Algemene Voorwaarden en Privacybeleid, houd de betaalde dienst daadwerkelijk gelijkwaardig, en laat het standaard voorkeursbeheer beschikbaar zodat leden op elk moment elk optioneel doel kunnen wijzigen. Beoordeel je specifieke model met gekwalificeerd juridisch advies; EDPB Opinion 08/2024 maakt niet elke consent-or-pay-implementatie rechtmatig." -#: admin/views/settings.php:572 +#: admin/views/settings.php:593 msgid "Enable PMP integration" msgstr "PMP-integratie inschakelen" -#: admin/views/settings.php:576 +#: admin/views/settings.php:597 msgid "Exempt membership level IDs" msgstr "Vrijgestelde lidmaatschapsniveau-ID's" -#: admin/views/settings.php:577 +#: admin/views/settings.php:598 msgid "e.g. 2, 3, 5" msgstr "bijv. 2, 3, 5" -#: admin/views/settings.php:579 +#: admin/views/settings.php:600 msgid "Comma-separated PMP level IDs whose members should be exempted. Find level IDs in Memberships → Settings → Levels. Leave empty to disable exemption." msgstr "Kommagescheiden PMP-niveau-ID's waarvan de leden vrijgesteld moeten worden. Vind niveau-ID's in Memberships → Settings → Levels. Laat leeg om vrijstelling uit te schakelen." -#: admin/views/settings.php:588 +#: admin/views/settings.php:609 msgid "Footer legal links" msgstr "Juridische links in de footer" -#: admin/views/settings.php:595 +#: admin/views/settings.php:616 msgid "Show legal links in the footer" msgstr "Juridische links in de footer tonen" -#: admin/views/settings.php:597 +#: admin/views/settings.php:618 msgid "Off by default. When enabled, the pages you select below are printed as a small navigation block in your theme footer (via wp_footer). The markup is identical for every visitor — it does not depend on consent, login state or country — so it stays safe to serve from a page cache." msgstr "Standaard uitgeschakeld. Indien ingeschakeld, worden de pagina's die je hieronder selecteert weergegeven als een klein navigatieblok in de footer van je thema (via wp_footer). De markup is voor elke bezoeker identiek — deze is niet afhankelijk van toestemming, inlogstatus of land — dus blijft het veilig om vanuit een paginacache te serveren." -#: admin/views/settings.php:600 +#: admin/views/settings.php:621 msgid "Pages to link" msgstr "Pagina's om te koppelen" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:638 +#: admin/views/settings.php:659 #, php-format msgid "Page #%d (unavailable)" msgstr "Pagina #%d (niet beschikbaar)" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:644 +#: admin/views/settings.php:665 #, php-format msgid "Page #%d (untitled)" msgstr "Pagina #%d (zonder titel)" -#: admin/views/settings.php:674 +#: admin/views/settings.php:695 msgid "No published pages yet. Publish your Cookie Policy or Privacy Policy page first." msgstr "Nog geen gepubliceerde pagina's. Publiceer eerst je pagina Cookiebeleid of Privacybeleid." -#: admin/views/settings.php:683 +#: admin/views/settings.php:704 msgid "Custom label (optional)" msgstr "Aangepast label (optioneel)" -#: admin/views/settings.php:687 +#: admin/views/settings.php:708 msgid "Selected links appear first in their saved order. Leave the label empty to use the page title. Unpublished or unavailable selections stay visible here so you can remove them; they are never printed in the footer." msgstr "Geselecteerde links verschijnen eerst, in hun opgeslagen volgorde. Laat het label leeg om de paginatitel te gebruiken. Niet-gepubliceerde of niet-beschikbare selecties blijven hier zichtbaar zodat je ze kunt verwijderen; ze worden nooit in de footer weergegeven." -#: admin/views/settings.php:695 +#: admin/views/settings.php:716 msgid "Force re-consent" msgstr "Nieuwe toestemming afdwingen" -#: admin/views/settings.php:699 +#: admin/views/settings.php:720 msgid "Show the cookie banner again to all returning visitors. Useful when you change which cookies or services are used on your site (e.g. new AdSense tags, added analytics) and want prior visitors to renew their consent before those services run." msgstr "Toon de cookiebanner opnieuw aan alle terugkerende bezoekers. Handig wanneer u wijzigt welke cookies of services op uw site worden gebruikt (bijv. nieuwe AdSense-tags, toegevoegde analyses) en wilt dat eerdere bezoekers hun toestemming vernieuwen voordat die services worden uitgevoerd." -#: admin/views/settings.php:702 +#: admin/views/settings.php:723 msgid "Current consent revision" msgstr "Huidige toestemmingsrevisie" -#: admin/views/settings.php:706 +#: admin/views/settings.php:727 msgid "Invalidate all consents" msgstr "Alle toestemmingen ongeldig maken" -#: admin/views/settings.php:709 +#: admin/views/settings.php:730 msgid "Visitors whose stored consent has a lower revision will see the banner again on their next visit. This does not affect the current page load." msgstr "Bezoekers wiens opgeslagen toestemming een lagere revisie heeft, zien de banner opnieuw bij hun volgende bezoek. Dit heeft geen invloed op het laden van de huidige pagina." -#: admin/views/settings.php:717 +#: admin/views/settings.php:738 msgid "Save Settings" msgstr "Instellingen opslaan" @@ -7094,59 +7120,59 @@ msgid "Manage cookie preferences" msgstr "Beheer cookie-voorkeuren" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:908 +#: frontend/class-frontend.php:902 msgid "{name} enabled, disable {name}" msgstr "{name} ingeschakeld, {name} uitschakelen" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:910 +#: frontend/class-frontend.php:904 msgid "{name} disabled, enable {name}" msgstr "{name} uitgeschakeld, {name} inschakelen" -#: frontend/class-frontend.php:2882 +#: frontend/class-frontend.php:2876 #: frontend/modules/banner-rest/class-banner-rest.php:594 msgid "Your cookie preferences have been saved." msgstr "Je cookievoorkeuren zijn opgeslagen." -#: frontend/class-frontend.php:2884 +#: frontend/class-frontend.php:2878 #: frontend/modules/banner-rest/class-banner-rest.php:596 msgid "Customise Consent Preferences" msgstr "Toestemmingsvoorkeuren aanpassen" -#: frontend/class-frontend.php:2885 +#: frontend/class-frontend.php:2879 #: frontend/modules/banner-rest/class-banner-rest.php:597 msgid "Service consent" msgstr "Servicetoestemming" -#: frontend/class-frontend.php:2887 +#: frontend/class-frontend.php:2881 #: frontend/modules/banner-rest/class-banner-rest.php:599 msgid "Cookie consent" msgstr "Cookie-toestemming" -#: frontend/class-frontend.php:2888 +#: frontend/class-frontend.php:2882 #: frontend/modules/banner-rest/class-banner-rest.php:600 msgid "Vendor consent" msgstr "Leverancierstoestemming" -#: frontend/class-frontend.php:2889 +#: frontend/class-frontend.php:2883 #: frontend/modules/banner-rest/class-banner-rest.php:601 msgid "These cookies are set by the embedded service on its own domain and are controlled by allowing or blocking the embed above — they cannot be removed individually." msgstr "Deze cookies worden geplaatst door de ingesloten dienst op het eigen domein en worden beheerd door de insluiting hierboven toe te staan of te blokkeren — ze kunnen niet afzonderlijk worden verwijderd." #. translators: %d is the minimum digital age of consent. -#: frontend/class-frontend.php:2893 +#: frontend/class-frontend.php:2887 #: frontend/modules/banner-rest/class-banner-rest.php:606 #, php-format msgid "I confirm I am at least %d years old" msgstr "Ik bevestig dat ik minstens %d jaar oud ben" -#: frontend/class-frontend.php:2894 +#: frontend/class-frontend.php:2888 #: frontend/modules/banner-rest/class-banner-rest.php:607 msgid "Please confirm you meet the minimum age to accept optional cookies." msgstr "Bevestig dat je de minimumleeftijd hebt om optionele cookies te accepteren." #. translators: %d is a number of seconds. -#: frontend/class-frontend.php:2901 +#: frontend/class-frontend.php:2895 #: frontend/modules/banner-rest/class-banner-rest.php:609 #, php-format msgid "Banner closes automatically in %d s..." diff --git a/languages/faz-cookie-manager.pot b/languages/faz-cookie-manager.pot index d899b6fe..6e2d6fa5 100644 --- a/languages/faz-cookie-manager.pot +++ b/languages/faz-cookie-manager.pot @@ -2,14 +2,14 @@ # This file is distributed under the GPL-3.0-or-later. msgid "" msgstr "" -"Project-Id-Version: FAZ Cookie Manager 1.32.1\n" +"Project-Id-Version: FAZ Cookie Manager 1.33.0\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/faz-cookie-manager\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2026-09-29T10:34:49+00:00\n" +"POT-Creation-Date: 2026-10-01T06:43:53+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: faz-cookie-manager\n" @@ -49,13 +49,13 @@ msgid "Cookie Banner" msgstr "" #: admin/class-admin.php:233 admin/views/base.php:21 -#: frontend/class-frontend.php:2886 +#: frontend/class-frontend.php:2880 #: frontend/modules/banner-rest/class-banner-rest.php:598 msgid "Cookies" msgstr "" #: admin/class-admin.php:238 admin/views/base.php:22 -#: admin/views/dashboard.php:247 admin/views/settings.php:268 +#: admin/views/dashboard.php:247 admin/views/settings.php:289 msgid "Consent Logs" msgstr "" @@ -3738,7 +3738,7 @@ msgstr "" msgid "Notice Title" msgstr "" -#: admin/views/banner.php:341 frontend/class-frontend.php:2881 +#: admin/views/banner.php:341 frontend/class-frontend.php:2875 #: frontend/modules/banner-rest/class-banner-rest.php:593 msgid "We value your privacy" msgstr "" @@ -4077,7 +4077,7 @@ msgstr "" msgid "Text for the \"Opt-out Preferences\" modal a visitor sees after clicking the \"Do Not Sell or Share My Personal Information\" link. Shown only on CCPA / US State Laws (and Both) banners. Follows the language selected above." msgstr "" -#: admin/views/banner.php:833 frontend/class-frontend.php:2883 +#: admin/views/banner.php:833 frontend/class-frontend.php:2877 #: frontend/modules/banner-rest/class-banner-rest.php:595 msgid "Opt-out Preferences" msgstr "" @@ -4232,7 +4232,7 @@ msgstr "" msgid "Brazil (LGPD)" msgstr "" -#: admin/views/banner.php:1054 admin/views/settings.php:480 +#: admin/views/banner.php:1054 admin/views/settings.php:501 #: admin/views/setup.php:189 msgid "Australia" msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "Global Vendor List (IAB TCF 2.3)" msgstr "" -#: admin/views/gvl.php:15 admin/views/settings.php:440 +#: admin/views/gvl.php:15 admin/views/settings.php:461 msgid "Update GVL Now" msgstr "" @@ -5615,476 +5615,500 @@ msgid "Defaults: H2 for the banner and preferences titles, H3 for category title msgstr "" #: admin/views/settings.php:218 -msgid "Script Blocking" +msgid "Mobile Layout" msgstr "" #: admin/views/settings.php:222 +msgid "Banner layout on phones" +msgstr "" + +#: admin/views/settings.php:224 +msgid "Comfortable (default) — buttons stacked" +msgstr "" + +#: admin/views/settings.php:225 +msgid "Compact — buttons on one row" +msgstr "" + +#: admin/views/settings.php:228 +msgid "Below 440px the comfortable layout gives each button its own full-width row, which makes the banner about 44% of a 390px screen. The compact layout puts them on a shared row and brings the same banner to about 29%. Desktop is not affected." +msgstr "" + +#: admin/views/settings.php:232 +msgid "Compact keeps every button at least 44px tall so it stays comfortable to tap, and keeps the accept and reject buttons exactly the same size as each other, as equal prominence requires. On screens narrower than 360px accept and reject stay side by side and the customise button moves to its own row." +msgstr "" + +#: admin/views/settings.php:239 +msgid "Script Blocking" +msgstr "" + +#: admin/views/settings.php:243 msgid "Pages Excluded from Script Blocking" msgstr "" -#: admin/views/settings.php:223 +#: admin/views/settings.php:244 msgid "One per line: /checkout/* or /cart/*" msgstr "" -#: admin/views/settings.php:224 +#: admin/views/settings.php:245 msgid "URL patterns where script blocking is disabled (banner still shows). One per line, supports wildcards (e.g. /checkout/*)." msgstr "" -#: admin/views/settings.php:227 +#: admin/views/settings.php:248 msgid "Script Blocking Exceptions" msgstr "" -#: admin/views/settings.php:228 +#: admin/views/settings.php:249 msgid "One per line: googleapis.com/youtube/v3, recaptcha, my-inline-script-id" msgstr "" -#: admin/views/settings.php:229 +#: admin/views/settings.php:250 msgid "Scripts that should never be blocked, even before consent. One per line. Accepts three types of pattern:
- URL fragment (contains . or /): matched against the script's src or related URL attribute, e.g. googleapis.com/youtube/v3.
- Script ID (no dots/slashes): matched against the id attribute of the script tag, e.g. my-product-form-data.
- CSS class (no dots/slashes): matched against the script's class attribute, e.g. recaptcha.
- How IDs and classes match: whole words, plus their hyphen or underscore children. recaptcha matches recaptcha, recaptcha-badge and recaptcha_frame, but not myrecaptcha. Ending a pattern with - or _ (e.g. wp-) matches every word starting with it, which is much broader — prefer the exact ID or class wherever you can.
These exceptions bypass blocking entirely. Use them only for scripts that genuinely do not set tracking cookies. Be specific to avoid accidentally unblocking trackers.
Tip: You can also add class=\"faz-skip\" directly to any script tag to exclude it without adding anything here — no configuration needed." msgstr "" -#: admin/views/settings.php:235 +#: admin/views/settings.php:256 msgid "Advanced inline CSS URL blocking" msgstr "" -#: admin/views/settings.php:237 +#: admin/views/settings.php:258 msgid "Optional high-coverage mode for CSS-based third-party loads. The default blocker already handles server-rendered <style> tags and direct HTMLStyleElement updates. Enable this only if you have confirmed that a theme, page builder, or CSS-in-JS library injects blocked url() or @import rules through broader runtime channels such as Element.innerHTML, insertAdjacentHTML, CharacterData edits inside a style tag, or Constructable Stylesheets. This strengthens pre-consent blocking but hooks global browser APIs and may affect builders, editors, icon fonts, or CSS-in-JS libraries. Test the site before enabling in production." msgstr "" -#: admin/views/settings.php:243 +#: admin/views/settings.php:264 msgid "Block non-consented cookies emitted by PHP" msgstr "" -#: admin/views/settings.php:245 +#: admin/views/settings.php:266 msgid "Advanced, off by default. Filters outgoing Set-Cookie headers from pages, AJAX, REST and redirects, including HttpOnly cookies that JavaScript cannot remove. Necessary, WordPress-internal, security and checkout cookies are preserved, and deletion headers always pass. Enable only after testing login, forms, cart and checkout; unknown cookies fail permissive until the scanner classifies them." msgstr "" -#: admin/views/settings.php:249 +#: admin/views/settings.php:270 msgid "Payment gateway scripts (e-commerce)" msgstr "" -#: admin/views/settings.php:250 +#: admin/views/settings.php:271 msgid "Only enable a gateway if your site takes payments. A payment provider's SDK (PayPal, Stripe, …) can set cookies and fingerprint the visitor, so it is blocked until consent by default. Enabling a gateway here loads its payment scripts before consent across your site — needed for payment forms that live outside a WooCommerce checkout (Forminator, Paid Memberships Pro, Easy Digital Downloads, Give, …). This is a compliance decision and your responsibility for your jurisdiction. A real WooCommerce checkout/cart page already loads these automatically as strictly necessary; a gateway's marketing pixel (e.g. PayPal's pptm.js) stays blocked regardless." msgstr "" #. translators: %s: payment gateway name, e.g. PayPal. -#: admin/views/settings.php:257 +#: admin/views/settings.php:278 #, php-format msgid "Allow %s payment scripts before consent" msgstr "" -#: admin/views/settings.php:275 +#: admin/views/settings.php:296 msgid "Enable consent logging" msgstr "" -#: admin/views/settings.php:277 +#: admin/views/settings.php:298 msgid "Records each visitor's consent choice (accepted, rejected, or partial) for GDPR accountability. Required by Art. 7(1) GDPR to demonstrate that consent was given." msgstr "" -#: admin/views/settings.php:280 +#: admin/views/settings.php:301 msgid "Consent log retention (months)" msgstr "" -#: admin/views/settings.php:282 +#: admin/views/settings.php:303 msgid "How long consent records are kept before automatic deletion. Choose a documented period appropriate to your accountability obligations. Logs older than this period are purged daily." msgstr "" -#: admin/views/settings.php:289 +#: admin/views/settings.php:310 msgid "Data Subject Requests" msgstr "" -#: admin/views/settings.php:293 +#: admin/views/settings.php:314 msgid "Data subject request retention (months)" msgstr "" -#: admin/views/settings.php:295 +#: admin/views/settings.php:316 msgid "How long completed data-subject request records are kept before automatic deletion. Keep a period that supports your ability to demonstrate and manage requests." msgstr "" -#: admin/views/settings.php:302 +#: admin/views/settings.php:323 msgid "Scanner" msgstr "" -#: admin/views/settings.php:306 +#: admin/views/settings.php:327 msgid "Max Pages to Scan" msgstr "" -#: admin/views/settings.php:308 +#: admin/views/settings.php:329 msgid "Maximum number of pages the cookie scanner will crawl. Higher values find more cookies but take longer. 100 pages is sufficient for most sites." msgstr "" -#: admin/views/settings.php:311 +#: admin/views/settings.php:332 msgid "Static public IP (optional)" msgstr "" -#: admin/views/settings.php:313 +#: admin/views/settings.php:334 msgid "Pin every server-side scanner request — sitemap discovery and page fetches — to this site IP while preserving the hostname, HTTPS certificate validation and SNI. Only public IPv4/IPv6 addresses are accepted; requires the WordPress cURL transport. Leave blank to use DNS." msgstr "" -#: admin/views/settings.php:319 +#: admin/views/settings.php:340 msgid "Scanner Debug Mode" msgstr "" -#: admin/views/settings.php:321 +#: admin/views/settings.php:342 msgid "When enabled, the scanner logs every categorization decision. Download logs from the Cookies page." msgstr "" -#: admin/views/settings.php:328 +#: admin/views/settings.php:349 msgid "Automatic Scanning" msgstr "" -#: admin/views/settings.php:335 +#: admin/views/settings.php:356 msgid "Enable automatic cookie scanning" msgstr "" -#: admin/views/settings.php:337 +#: admin/views/settings.php:358 msgid "Automatically scan your site for new cookies on a schedule. You will receive an email notification if new uncategorized cookies are found." msgstr "" -#: admin/views/settings.php:343 +#: admin/views/settings.php:364 msgid "Update cookie definitions weekly" msgstr "" -#: admin/views/settings.php:345 +#: admin/views/settings.php:366 msgid "Optional: downloads the Open Cookie Database from raw.githubusercontent.com once a week. Off by default. Without this option, the bundled database is updated with plugin releases. A failed download keeps the existing definitions." msgstr "" -#: admin/views/settings.php:348 +#: admin/views/settings.php:369 msgid "Scan Frequency" msgstr "" -#: admin/views/settings.php:350 +#: admin/views/settings.php:371 msgid "Daily" msgstr "" -#: admin/views/settings.php:351 includes/class-activator.php:712 +#: admin/views/settings.php:372 includes/class-activator.php:712 msgid "Weekly" msgstr "" -#: admin/views/settings.php:352 +#: admin/views/settings.php:373 msgid "Monthly" msgstr "" -#: admin/views/settings.php:354 +#: admin/views/settings.php:375 msgid "How often the scanner runs automatically. Weekly is recommended for most sites." msgstr "" -#: admin/views/settings.php:361 +#: admin/views/settings.php:382 msgid "Microsoft Consent APIs" msgstr "" -#: admin/views/settings.php:368 +#: admin/views/settings.php:389 msgid "Microsoft UET Consent Mode" msgstr "" -#: admin/views/settings.php:370 +#: admin/views/settings.php:391 msgid "Signals consent status to Microsoft Advertising (Bing Ads) via the UET tag. Enable if you use Microsoft Advertising and need to respect consent for ad tracking." msgstr "" -#: admin/views/settings.php:376 +#: admin/views/settings.php:397 msgid "Microsoft Clarity Consent API" msgstr "" -#: admin/views/settings.php:378 +#: admin/views/settings.php:399 msgid "Signals consent status to Microsoft Clarity (heatmaps and session recordings). Enable if you use Clarity and want it to pause tracking until consent is given." msgstr "" -#: admin/views/settings.php:385 +#: admin/views/settings.php:406 msgid "Age Verification" msgstr "" -#: admin/views/settings.php:392 +#: admin/views/settings.php:413 msgid "Require age verification for consent" msgstr "" -#: admin/views/settings.php:394 +#: admin/views/settings.php:415 msgid "Under GDPR Art. 8, children below the minimum age cannot give valid consent for data processing. When enabled, the visitor sees an age-confirmation checkbox directly above the Accept/Reject buttons; it gates only the Accept path — Reject stays available and is never blocked, and the checkbox is never pre-ticked." msgstr "" -#: admin/views/settings.php:395 +#: admin/views/settings.php:416 msgid "This is a self-declared age affirmation only. It is NOT a substitute for verifying parental consent for under-age children under GDPR Art. 8(2), which requires separate reasonable-efforts verification this feature does not provide." msgstr "" -#: admin/views/settings.php:398 +#: admin/views/settings.php:419 msgid "Minimum Age" msgstr "" -#: admin/views/settings.php:400 +#: admin/views/settings.php:421 msgid "GDPR default is 16. Some EU member states allow 13-15 (e.g. Italy 14, Spain 14, France 15, Germany 16). Check your local law." msgstr "" -#: admin/views/settings.php:407 admin/views/setup.php:201 +#: admin/views/settings.php:428 admin/views/setup.php:201 msgid "IAB TCF" msgstr "" -#: admin/views/settings.php:414 +#: admin/views/settings.php:435 msgid "Enable IAB TCF v2.3" msgstr "" -#: admin/views/settings.php:416 +#: admin/views/settings.php:437 msgid "Enables the IAB Transparency & Consent Framework. Required if you work with ad-tech vendors that need a standardised TC String for programmatic advertising in the EU." msgstr "" -#: admin/views/settings.php:419 +#: admin/views/settings.php:440 msgid "Publisher Country Code" msgstr "" -#: admin/views/settings.php:421 +#: admin/views/settings.php:442 msgid "ISO 3166-1 alpha-2 code of the publisher's country (e.g. IT, DE, FR). Used in the TCF consent string." msgstr "" -#: admin/views/settings.php:424 admin/views/setup.php:348 +#: admin/views/settings.php:445 admin/views/setup.php:348 msgid "CMP ID" msgstr "" -#: admin/views/settings.php:426 +#: admin/views/settings.php:447 msgid "Your registered IAB CMP ID (IAB CMP List). With ID 0 the banner and cookie blocking work normally, but ad-tech vendors will ignore the TC String. Google Consent Mode v2 works regardless of CMP registration." msgstr "" -#: admin/views/settings.php:432 +#: admin/views/settings.php:453 msgid "Purpose One Treatment" msgstr "" -#: admin/views/settings.php:434 +#: admin/views/settings.php:455 msgid "Set to true if Purpose 1 consent was NOT disclosed (e.g. publisher in a country where Purpose 1 is not required)." msgstr "" -#: admin/views/settings.php:438 +#: admin/views/settings.php:459 msgid "Loading GVL status..." msgstr "" -#: admin/views/settings.php:447 +#: admin/views/settings.php:468 msgid "Jurisdiction & Geo-routing" msgstr "" -#: admin/views/settings.php:454 +#: admin/views/settings.php:475 msgid "Apply jurisdiction rules by visitor location" msgstr "" -#: admin/views/settings.php:456 +#: admin/views/settings.php:477 msgid "Recommended and enabled by default. Detect each visitor's location to enforce the matching jurisdiction rules and mandatory controls, and optionally limit banner display to selected regions. Turning this off means the law saved on the active banner applies to every visitor; for example, a CCPA banner will no longer gain GDPR blocking for an EEA visitor. Location requires a MaxMind GeoLite2 database (configured below), or a trusted country signal such as Cloudflare CF-IPCountry." msgstr "" -#: admin/views/settings.php:462 admin/views/setup.php:376 +#: admin/views/settings.php:483 admin/views/setup.php:376 msgid "Cache-safe jurisdiction bootstrap" msgstr "" -#: admin/views/settings.php:464 +#: admin/views/settings.php:485 msgid "Allows compatible full-page caches and CDNs to share one strict GDPR shell. The browser resolves the live jurisdiction through a no-store endpoint before mounting the banner or releasing optional scripts. If the configuration is unsupported or the endpoint fails, FAZ keeps the stricter shell and preserves the normal page-cache bypass." msgstr "" -#: admin/views/settings.php:466 +#: admin/views/settings.php:487 msgid "Checking cache-safe bootstrap readiness..." msgstr "" -#: admin/views/settings.php:468 +#: admin/views/settings.php:489 msgid "Currently excluded: AMP, IAB TCF, country-based language fallback, country-targeted banner rows, hiding the banner outside selected regions, and custom country-dependent output. Excluded configurations remain protected but bypass full-page caching." msgstr "" -#: admin/views/settings.php:471 +#: admin/views/settings.php:492 msgid "Target Regions" msgstr "" -#: admin/views/settings.php:475 admin/views/setup.php:184 +#: admin/views/settings.php:496 admin/views/setup.php:184 msgid "EU / EEA" msgstr "" -#: admin/views/settings.php:476 admin/views/setup.php:185 +#: admin/views/settings.php:497 admin/views/setup.php:185 msgid "United Kingdom" msgstr "" -#: admin/views/settings.php:477 admin/views/setup.php:186 +#: admin/views/settings.php:498 admin/views/setup.php:186 msgid "United States" msgstr "" -#: admin/views/settings.php:478 admin/views/setup.php:187 +#: admin/views/settings.php:499 admin/views/setup.php:187 msgid "Canada" msgstr "" -#: admin/views/settings.php:479 admin/views/setup.php:188 +#: admin/views/settings.php:500 admin/views/setup.php:188 msgid "Brazil" msgstr "" -#: admin/views/settings.php:481 admin/views/setup.php:190 +#: admin/views/settings.php:502 admin/views/setup.php:190 msgid "Japan" msgstr "" -#: admin/views/settings.php:482 admin/views/setup.php:191 +#: admin/views/settings.php:503 admin/views/setup.php:191 msgid "Switzerland" msgstr "" -#: admin/views/settings.php:483 admin/views/setup.php:192 +#: admin/views/settings.php:504 admin/views/setup.php:192 msgid "South Africa" msgstr "" -#: admin/views/settings.php:493 +#: admin/views/settings.php:514 msgid "Select which regions should see the cookie banner. Visitors from other regions will not see it (if \"Hide banner\" is selected below)." msgstr "" -#: admin/views/settings.php:496 +#: admin/views/settings.php:517 msgid "Non-target visitors" msgstr "" -#: admin/views/settings.php:498 +#: admin/views/settings.php:519 msgid "Show banner anyway (safest)" msgstr "" -#: admin/views/settings.php:499 +#: admin/views/settings.php:520 msgid "Hide banner (scripts load normally)" msgstr "" -#: admin/views/settings.php:501 +#: admin/views/settings.php:522 msgid "What happens when a visitor is from outside the target regions. \"Show banner anyway\" is the safest option and recommended for sites with global audiences." msgstr "" -#: admin/views/settings.php:508 +#: admin/views/settings.php:529 msgid "GeoIP Database (MaxMind GeoLite2)" msgstr "" -#: admin/views/settings.php:512 +#: admin/views/settings.php:533 msgid "Geo-targeting requires a MaxMind GeoLite2 database. Get a free license key." msgstr "" -#: admin/views/settings.php:515 +#: admin/views/settings.php:536 msgid "Database edition" msgstr "" -#: admin/views/settings.php:517 +#: admin/views/settings.php:538 msgid "Country — country-level only (recommended)" msgstr "" -#: admin/views/settings.php:518 +#: admin/views/settings.php:539 msgid "City — adds region / state detection" msgstr "" -#: admin/views/settings.php:521 +#: admin/views/settings.php:542 msgid "Country (~10 MB) resolves the visitor’s country only — enough for country-based banner targeting and most per-jurisdiction rules. City (~60–110 MB) additionally resolves the region / province / state, which a few rules need: sub-national regimes such as Quebec Law 25 apply only inside one region of a country, so without City (or a Cloudflare CF-Region-Code header) the plugin can only see “Canada” and cannot route that visitor to the Quebec ruleset. Choose City only if you rely on region-level routing — it is a much larger download. Changing this and clicking “Update Database” replaces the installed database." msgstr "" -#: admin/views/settings.php:525 +#: admin/views/settings.php:546 msgid "MaxMind License Key" msgstr "" -#: admin/views/settings.php:526 +#: admin/views/settings.php:547 msgid "Enter your MaxMind license key" msgstr "" -#: admin/views/settings.php:530 +#: admin/views/settings.php:551 msgid "Update Database" msgstr "" -#: admin/views/settings.php:536 +#: admin/views/settings.php:557 msgid "Data Management" msgstr "" -#: admin/views/settings.php:543 +#: admin/views/settings.php:564 msgid "Remove all data on uninstall" msgstr "" -#: admin/views/settings.php:545 +#: admin/views/settings.php:566 msgid "When enabled, deleting the plugin will permanently remove ALL data: cookies, categories, consent logs, pageviews, banner settings, and scan history. Keep this OFF if you plan to reinstall or update the plugin." msgstr "" -#: admin/views/settings.php:548 +#: admin/views/settings.php:569 msgid "Privacy Request Retention Period (months)" msgstr "" -#: admin/views/settings.php:550 +#: admin/views/settings.php:571 msgid "How long completed privacy (DSAR) request records are kept before automatic deletion. They are the evidence that a data-subject request was answered, so a minimum of 12–24 months is recommended. Default is 24 months." msgstr "" -#: admin/views/settings.php:558 +#: admin/views/settings.php:579 msgid "Paid Memberships Pro integration" msgstr "" -#: admin/views/settings.php:562 +#: admin/views/settings.php:583 msgid "Offer selected Paid Memberships Pro levels a privacy-preserving membership alternative: logged-in members skip the cookie banner, necessary storage remains available, and all optional purposes stay denied until the member explicitly changes them in the preference center. Other visitors continue to use the standard consent flow." msgstr "" -#: admin/views/settings.php:565 +#: admin/views/settings.php:586 msgid "Legal note:" msgstr "" -#: admin/views/settings.php:566 +#: admin/views/settings.php:587 msgid "This option does not grant consent on the member's behalf. Disclose the privacy-preserving membership alternative in your Terms and Privacy Policy, keep the paid service genuinely equivalent, and leave the standard preference control available so members can change any optional purpose at any time. Assess your specific model with qualified counsel; EDPB Opinion 08/2024 does not make every consent-or-pay implementation lawful." msgstr "" -#: admin/views/settings.php:572 +#: admin/views/settings.php:593 msgid "Enable PMP integration" msgstr "" -#: admin/views/settings.php:576 +#: admin/views/settings.php:597 msgid "Exempt membership level IDs" msgstr "" -#: admin/views/settings.php:577 +#: admin/views/settings.php:598 msgid "e.g. 2, 3, 5" msgstr "" -#: admin/views/settings.php:579 +#: admin/views/settings.php:600 msgid "Comma-separated PMP level IDs whose members should be exempted. Find level IDs in Memberships → Settings → Levels. Leave empty to disable exemption." msgstr "" -#: admin/views/settings.php:588 +#: admin/views/settings.php:609 msgid "Footer legal links" msgstr "" -#: admin/views/settings.php:595 +#: admin/views/settings.php:616 msgid "Show legal links in the footer" msgstr "" -#: admin/views/settings.php:597 +#: admin/views/settings.php:618 msgid "Off by default. When enabled, the pages you select below are printed as a small navigation block in your theme footer (via wp_footer). The markup is identical for every visitor — it does not depend on consent, login state or country — so it stays safe to serve from a page cache." msgstr "" -#: admin/views/settings.php:600 +#: admin/views/settings.php:621 msgid "Pages to link" msgstr "" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:638 +#: admin/views/settings.php:659 #, php-format msgid "Page #%d (unavailable)" msgstr "" #. translators: %d: WordPress page ID. -#: admin/views/settings.php:644 +#: admin/views/settings.php:665 #, php-format msgid "Page #%d (untitled)" msgstr "" -#: admin/views/settings.php:674 +#: admin/views/settings.php:695 msgid "No published pages yet. Publish your Cookie Policy or Privacy Policy page first." msgstr "" -#: admin/views/settings.php:683 +#: admin/views/settings.php:704 msgid "Custom label (optional)" msgstr "" -#: admin/views/settings.php:687 +#: admin/views/settings.php:708 msgid "Selected links appear first in their saved order. Leave the label empty to use the page title. Unpublished or unavailable selections stay visible here so you can remove them; they are never printed in the footer." msgstr "" -#: admin/views/settings.php:695 +#: admin/views/settings.php:716 msgid "Force re-consent" msgstr "" -#: admin/views/settings.php:699 +#: admin/views/settings.php:720 msgid "Show the cookie banner again to all returning visitors. Useful when you change which cookies or services are used on your site (e.g. new AdSense tags, added analytics) and want prior visitors to renew their consent before those services run." msgstr "" -#: admin/views/settings.php:702 +#: admin/views/settings.php:723 msgid "Current consent revision" msgstr "" -#: admin/views/settings.php:706 +#: admin/views/settings.php:727 msgid "Invalidate all consents" msgstr "" -#: admin/views/settings.php:709 +#: admin/views/settings.php:730 msgid "Visitors whose stored consent has a lower revision will see the banner again on their next visit. This does not affect the current page load." msgstr "" -#: admin/views/settings.php:717 +#: admin/views/settings.php:738 msgid "Save Settings" msgstr "" @@ -6834,59 +6858,59 @@ msgid "Manage cookie preferences" msgstr "" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:908 +#: frontend/class-frontend.php:902 msgid "{name} enabled, disable {name}" msgstr "" #. translators: {name} is replaced with the cookie category name (appears twice, do not translate {name}) -#: frontend/class-frontend.php:910 +#: frontend/class-frontend.php:904 msgid "{name} disabled, enable {name}" msgstr "" -#: frontend/class-frontend.php:2882 +#: frontend/class-frontend.php:2876 #: frontend/modules/banner-rest/class-banner-rest.php:594 msgid "Your cookie preferences have been saved." msgstr "" -#: frontend/class-frontend.php:2884 +#: frontend/class-frontend.php:2878 #: frontend/modules/banner-rest/class-banner-rest.php:596 msgid "Customise Consent Preferences" msgstr "" -#: frontend/class-frontend.php:2885 +#: frontend/class-frontend.php:2879 #: frontend/modules/banner-rest/class-banner-rest.php:597 msgid "Service consent" msgstr "" -#: frontend/class-frontend.php:2887 +#: frontend/class-frontend.php:2881 #: frontend/modules/banner-rest/class-banner-rest.php:599 msgid "Cookie consent" msgstr "" -#: frontend/class-frontend.php:2888 +#: frontend/class-frontend.php:2882 #: frontend/modules/banner-rest/class-banner-rest.php:600 msgid "Vendor consent" msgstr "" -#: frontend/class-frontend.php:2889 +#: frontend/class-frontend.php:2883 #: frontend/modules/banner-rest/class-banner-rest.php:601 msgid "These cookies are set by the embedded service on its own domain and are controlled by allowing or blocking the embed above — they cannot be removed individually." msgstr "" #. translators: %d is the minimum digital age of consent. -#: frontend/class-frontend.php:2893 +#: frontend/class-frontend.php:2887 #: frontend/modules/banner-rest/class-banner-rest.php:606 #, php-format msgid "I confirm I am at least %d years old" msgstr "" -#: frontend/class-frontend.php:2894 +#: frontend/class-frontend.php:2888 #: frontend/modules/banner-rest/class-banner-rest.php:607 msgid "Please confirm you meet the minimum age to accept optional cookies." msgstr "" #. translators: %d is a number of seconds. -#: frontend/class-frontend.php:2901 +#: frontend/class-frontend.php:2895 #: frontend/modules/banner-rest/class-banner-rest.php:609 #, php-format msgid "Banner closes automatically in %d s..." diff --git a/tests/e2e/specs/mobile-compact-layout.spec.ts b/tests/e2e/specs/mobile-compact-layout.spec.ts new file mode 100644 index 00000000..776aa06c --- /dev/null +++ b/tests/e2e/specs/mobile-compact-layout.spec.ts @@ -0,0 +1,160 @@ +import { expect, test } from '../fixtures/wp-fixture'; +import type { Page } from '@playwright/test'; +import { wpEval } from '../utils/wp-env'; + +/** + * Compact phone layout for the notice buttons (banner_control.mobile_layout). + * + * What this guards is not "the banner looks nicer". It is three properties that + * a later CSS edit can silently break, and that no other spec asserts: + * + * 1. The compact layout actually makes the notice materially shorter. Without + * a measured ceiling, a rule that stops applying leaves the setting present + * in the UI and doing nothing — the exact failure shape this plugin keeps + * producing (a filter on a hook that does not exist, a guard with no + * writer). A setting that silently does nothing is worse than no setting. + * 2. Accept and reject stay exactly the same size as each other, on the same + * row. EDPB Guidelines 03/2022 require equal prominence between accepting + * and refusing; a compact layout is precisely where that is easy to lose, + * because the pressure is to shrink something. + * 3. Every button stays at least 44px tall. Reclaiming height by shrinking the + * tap target would trade one usability problem for a worse one. + * + * Reported by a user whose banner took more than half of a 375x667 screen. + */ + +const PHONE = { width: 390, height: 844 }; + +type ButtonBox = { label: string; width: number; height: number; top: number }; + +async function setLayout(value: 'comfortable' | 'compact'): Promise { + wpEval( + `$s = get_option('faz_settings', array());` + + `if (!is_array($s)) { $s = array(); }` + + `if (!isset($s['banner_control']) || !is_array($s['banner_control'])) { $s['banner_control'] = array(); }` + + `$s['banner_control']['mobile_layout'] = '${value}';` + + `update_option('faz_settings', $s);`, + ); +} + +async function readButtons(page: Page): Promise { + return page.evaluate(() => + [...document.querySelectorAll('.faz-consent-container .faz-notice-btn-wrapper .faz-btn')] + .map((el) => { + const r = el.getBoundingClientRect(); + return { + label: (el.textContent ?? '').trim().toLowerCase(), + width: Math.round(r.width), + height: Math.round(r.height), + top: Math.round(r.top), + }; + }) + .filter((b) => b.height > 0), + ); +} + +async function readNoticeRatio(page: Page): Promise { + return page.evaluate(() => { + const container = document.querySelector('.faz-consent-container'); + if (!container) return -1; + const bar = container.querySelector('.faz-consent-bar') ?? container; + return bar.getBoundingClientRect().height / window.innerHeight; + }); +} + +async function openBannerOnPhone(page: Page): Promise { + await page.context().clearCookies(); + await page.setViewportSize(PHONE); + await page.goto('/', { waitUntil: 'domcontentloaded' }); + await page.waitForSelector('.faz-consent-container .faz-notice-btn-wrapper .faz-btn', { + state: 'visible', + timeout: 20_000, + }); +} + +test.describe('Compact phone layout', () => { + test.use({ viewport: PHONE }); + + test.afterAll(async () => { + await setLayout('comfortable'); + }); + + test('compact lays the notice buttons on one row and keeps accept and reject equal', async ({ page }) => { + await setLayout('comfortable'); + await openBannerOnPhone(page); + + const roomyButtons = await readButtons(page); + const roomyRatio = await readNoticeRatio(page); + expect(roomyButtons.length, 'the notice must render its buttons').toBeGreaterThanOrEqual(2); + + // Baseline: the shipped layout gives each button a row of its own. Asserted + // rather than assumed, so that if the default ever changes this test says + // so instead of quietly comparing compact against compact. + const roomyRows = new Set(roomyButtons.map((b) => b.top)).size; + expect(roomyRows, 'the comfortable layout stacks the buttons').toBe(roomyButtons.length); + + await setLayout('compact'); + await openBannerOnPhone(page); + + const compactButtons = await readButtons(page); + expect(compactButtons.length).toBe(roomyButtons.length); + + // 1. Materially shorter, and shorter than a third of the screen. + const compactRatio = await readNoticeRatio(page); + expect(compactRatio, 'compact must actually shorten the notice').toBeLessThan(roomyRatio); + expect(compactRatio, 'compact must keep the notice under a third of the phone screen').toBeLessThan(0.35); + + // The buttons are the block being reclaimed: on a 390px screen all three + // share a single row. + const compactRows = new Set(compactButtons.map((b) => b.top)).size; + expect(compactRows, 'compact puts the buttons on one row at 390px').toBe(1); + + // 2. Equal prominence between accepting and refusing. + const accept = compactButtons.find((b) => /accept/.test(b.label)); + const reject = compactButtons.find((b) => /reject|decline|refuse/.test(b.label)); + expect(accept, 'the notice must offer an accept button').toBeTruthy(); + expect(reject, 'the notice must offer a reject button').toBeTruthy(); + expect(reject!.width, 'reject must be exactly as wide as accept').toBe(accept!.width); + expect(reject!.height, 'reject must be exactly as tall as accept').toBe(accept!.height); + expect(reject!.top, 'reject must sit on the same row as accept').toBe(accept!.top); + + // 3. Tap targets survive the compaction. + for (const button of compactButtons) { + expect(button.height, `"${button.label}" must stay comfortable to tap`).toBeGreaterThanOrEqual(44); + } + + // No label may be clipped by the narrower buttons. + const clipped = await page.evaluate(() => + [...document.querySelectorAll('.faz-consent-container .faz-notice-btn-wrapper .faz-btn')] + .filter((el) => el.scrollWidth > el.clientWidth + 1) + .map((el) => (el.textContent ?? '').trim()), + ); + expect(clipped, 'no button label may be cut off').toEqual([]); + }); + + test('narrow phones keep accept and reject paired and drop customise below', async ({ page }) => { + await setLayout('compact'); + await page.context().clearCookies(); + await page.setViewportSize({ width: 320, height: 720 }); + await page.goto('/', { waitUntil: 'domcontentloaded' }); + await page.waitForSelector('.faz-consent-container .faz-notice-btn-wrapper .faz-btn', { + state: 'visible', + timeout: 20_000, + }); + + const buttons = await readButtons(page); + const accept = buttons.find((b) => /accept/.test(b.label)); + const reject = buttons.find((b) => /reject|decline|refuse/.test(b.label)); + expect(accept).toBeTruthy(); + expect(reject).toBeTruthy(); + + // Under 360px three buttons do not fit side by side. The pair that the + // equal-prominence rule compares stays together; the customise button, which + // takes no part in that comparison, is the one that gets its own row. + expect(reject!.top, 'accept and reject stay paired on narrow phones').toBe(accept!.top); + expect(reject!.width, 'accept and reject stay equal on narrow phones').toBe(accept!.width); + for (const button of buttons) { + expect(button.height, `"${button.label}" must stay comfortable to tap`).toBeGreaterThanOrEqual(44); + } + }); +}); diff --git a/tests/unit/test-settings-sanitize.php b/tests/unit/test-settings-sanitize.php index df149904..7adb19e5 100644 --- a/tests/unit/test-settings-sanitize.php +++ b/tests/unit/test-settings-sanitize.php @@ -295,6 +295,28 @@ function faz_assert_same( $actual, $expected, $label ) { faz_assert_same( Settings::sanitize_option( $key, ' H4 ', 'banner_control' ), 'h4', "$key normalizes case and whitespace" ); } + // Mobile layout. The stored value decides which CSS the frontend emits, so + // anything outside the two known layouts has to collapse to the default + // rather than reach the stylesheet. + faz_assert_same( Settings::sanitize_option( 'mobile_layout', 'compact', 'banner_control' ), 'compact', 'mobile_layout permits compact' ); + faz_assert_same( Settings::sanitize_option( 'mobile_layout', 'comfortable', 'banner_control' ), 'comfortable', 'mobile_layout permits comfortable' ); + faz_assert_same( Settings::sanitize_option( 'mobile_layout', ' COMPACT ', 'banner_control' ), 'compact', 'mobile_layout normalizes case and whitespace' ); + foreach ( array( 'tiny', '', 'compact;}body{display:none', '