feat: UI-feinschliff, scan-vorlagenerkennung, einmal-laden, DE/EN-sprachen

UI:
- Ein-/Ausklappen jetzt mit grossem +/- Icon statt kleinem Pfeil.
- "Entfernen" ist ein Papierkorb-Symbol (dashicon).
- Aktiver Tab klar gekennzeichnet (Akzent-Unterstrich + Farbe).
- 20px Abstand zwischen Tabs und Inhalt.

Funktionen:
- Scan erkennt Anbieter, fuer die es eine Vorlage gibt ("Vorlage verfuegbar"),
  und "Vorlage uebernehmen" fuellt die komplette Vorlage statt nur Host/Pattern.
- Platzhalter: Checkbox "Diesen Dienst kuenftig immer laden" (Standard AN).
  Abgewaehlt -> Inhalt wird nur einmal geladen, keine dauerhafte Einwilligung.

i18n:
- Sprachumschaltung: Deutsch fuer alle de_* Locales, Englisch fuer alle anderen
  (plugin_locale-Filter). Vollstaendige englische Uebersetzung (126 Strings,
  inkl. Vorlagentexte/Empfaenger) als gdpr-content-blocker-en_US.po/.mo.
- Helper-Skripte (extract/build) in hilfsdaten/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
s4luorth
2026-06-07 15:06:16 +02:00
parent ecb5e1bd22
commit 3c37bf63cc
10 changed files with 752 additions and 16 deletions

View File

@@ -0,0 +1,29 @@
#!/usr/bin/env python3
"""Extract translatable strings (text-domain gdpr-content-blocker) from the plugin PHP."""
import re, sys, os, glob
FUNCS = r"(?:esc_html__|esc_html_e|esc_attr__|esc_attr_e|esc_attr_e|__|_e|esc_attr_e)"
# capture first single-quoted arg
PAT = re.compile(FUNCS + r"\s*\(\s*'((?:[^'\\]|\\.)*)'\s*,\s*'gdpr-content-blocker'")
def unescape(s):
return s.replace("\\'", "'").replace('\\\\', '\\')
base = sys.argv[1]
seen = []
seenset = set()
for path in glob.glob(os.path.join(base, '**', '*.php'), recursive=True):
with open(path, encoding='utf-8') as f:
txt = f.read()
for m in PAT.finditer(txt):
s = unescape(m.group(1))
if s not in seenset:
seenset.add(s)
seen.append(s)
out = sys.argv[2] if len(sys.argv) > 2 else 'strings.txt'
with open(out, 'w', encoding='utf-8') as f:
f.write(f"# {len(seen)} unique strings\n")
for s in seen:
f.write("MSGID\t" + s + "\n")
print(f"{len(seen)} strings written to {out}")