i18n: drop the keys this branch orphaned

Cleaning up after our own changes, not pre-existing dead keys.

- gallery.feedback.* (10 keys) -- StoryFeedbackSheet was their only consumer
  and it was removed in 3ef4bd8c as an unreachable duplicate of the lightbox.
- cssTemplates.title and settings.moderation.wordFilters -- orphaned by
  b80ce73e, which removed the component-side heading on the tabs that rendered
  a heading identical to the shell's.
- settings.analytics.customCspWarningText -- superseded by
  customOnlyCspWarningText in 9251745a, which was deliberately a new key so the
  stale pre-proxy string could not win over the new inline default. The sibling
  customCspWarning title is still in use and stays.

Each verified to have zero t() references in src before removal. Key-diff
against HEAD: en/de -13, the six partial locales -12 (they never had
customCspWarningText), 0 changed and 0 added in any of the eight.
removeUnusedKeys is false by design, so this had to be a deliberate pass.
This commit is contained in:
Paul Nothaft
2026-09-02 09:43:10 +02:00
parent 4c6ca49b17
commit 4646d5de69
8 changed files with 4 additions and 122 deletions
+2 -19
View File
@@ -196,8 +196,8 @@
"processing": "Fotos werden verarbeitet...",
"processingHint": "Dateien sind hochgeladen. PicPeak erstellt jetzt Thumbnails und liest Metadaten. Sie können diese Seite verlassen — die Verarbeitung läuft im Hintergrund weiter.",
"processingProgress": "{{complete}} von {{total}} fertig",
"processingFailed_one": "{{count}} Foto konnte nicht verarbeitet werden und erscheint nicht in der Galerie.",
"processingFailed_other": "{{count}} Fotos konnten nicht verarbeitet werden und erscheinen nicht in der Galerie.",
"processingFailed_one": "{{count}} Foto konnte nicht verarbeitet werden",
"processingFailed_other": "{{count}} Fotos konnten nicht verarbeitet werden",
"processingStillRunning": "Ihr Upload wird noch verarbeitet — er erscheint in Kürze in der Galerie.",
"retryFailed": "Fehlgeschlagene erneut versuchen",
"uploadComplete": "Upload abgeschlossen!",
@@ -227,8 +227,6 @@
"limitReached": "Upload-Limit erreicht ({{limit}} Dateien pro Vorgang)",
"replacedFiles_one": "{{count}} Foto ersetzt",
"replacedFiles_other": "{{count}} Fotos ersetzt",
"processingFailed_one": "{{count}} Foto konnte nicht verarbeitet werden",
"processingFailed_other": "{{count}} Fotos konnten nicht verarbeitet werden",
"uploadingChunks_one": "{{count}} Teil wird hochgeladen",
"uploadingChunks_other": "{{count}} Teile werden hochgeladen",
"fileTooLarge": "Datei zu groß: {{name}} (max. {{limit}}MB)"
@@ -1079,18 +1077,6 @@
"searchMemories": "Erinnerungen suchen...",
"thankYou": "Vielen Dank",
"thankYouMessage": "Dass Sie Teil unserer Geschichte waren und unseren besonderen Tag unvergesslich gemacht haben.",
"feedback": {
"title": "Feedback",
"shareThoughts": "Teilen Sie Ihre Gedanken zu \"{{name}}\"",
"rateThisMoment": "Bewerten Sie diesen Moment",
"comments": "Kommentare",
"noComments": "Noch keine Kommentare. Seien Sie der Erste!",
"yourName": "Ihr Name",
"yourEmail": "Ihre E-Mail",
"writeLovelyNote": "Schreiben Sie eine nette Nachricht...",
"postComment": "Kommentar posten",
"anonymous": "Anonym"
},
"favorites": "Favoriten",
"expiresIn_one": "Galerie läuft in {{count}} Tag ab",
"expiresIn_other": "Galerie läuft in {{count}} Tagen ab",
@@ -1992,7 +1978,6 @@
},
"moderation": {
"title": "Moderation",
"wordFilters": "Wortfilter",
"description": "Verwalten Sie Wörter, die in Kommentaren gefiltert oder blockiert werden sollen",
"addFilter": "Neuen Filter hinzufügen",
"enterWord": "Wort zum Filtern eingeben",
@@ -2046,7 +2031,6 @@
"customHeadHtml": "Eigenes <head>-HTML",
"customHeadHtmlHelp": "Tracker-`<head>`-Snippet einfügen (Plausible, Matomo, Pirsch, GA4, GoatCounter, Fathom, Cloudflare Web Analytics, …). Beim Speichern bereinigt: nur `<script>`, `<noscript>`, `<link rel=\"preconnect|dns-prefetch\">` und `<meta>` bleiben erhalten; Event-Handler-Attribute werden entfernt. Das Geräte-Diagramm fällt in diesem Modus auf eine serverseitige User-Agent-Heuristik zurück — für tracker-seitige Zahlen Umami oder Rybbit wählen.",
"customCspWarning": "Hinweis zur Content-Security-Policy",
"customCspWarningText": "PicPeak setzt eine strikte CSP (`script-src 'self'`) ein. Wenn Ihr Tracker von einer anderen Domain lädt, müssen Sie diese Domain in Ihrer Reverse-Proxy- oder nginx-CSP-Konfiguration zulassen — sonst blockiert der Browser das Skript stillschweigend.",
"umamiIntegration": "Umami Analytics Integration",
"enableUmami": "Umami Analytics aktivieren",
"umamiUrl": "Umami URL",
@@ -4521,7 +4505,6 @@
}
},
"cssTemplates": {
"title": "Benutzerdefinierte CSS-Vorlagen",
"template": "Vorlage",
"templateName": "Vorlagenname",
"enableTemplate": "Diese Vorlage aktivieren",
+2 -19
View File
@@ -196,8 +196,8 @@
"processing": "Processing photos...",
"processingHint": "Files are uploaded. PicPeak is now generating thumbnails and reading metadata. You can leave this page — work continues in the background.",
"processingProgress": "{{complete}} of {{total}} done",
"processingFailed_one": "{{count}} photo could not be processed and will not appear in the gallery.",
"processingFailed_other": "{{count}} photos could not be processed and will not appear in the gallery.",
"processingFailed_one": "{{count}} photo failed to process",
"processingFailed_other": "{{count}} photos failed to process",
"processingStillRunning": "Your upload is still being processed — it will appear in the gallery shortly.",
"retryFailed": "Retry failed",
"uploadComplete": "Upload complete!",
@@ -227,8 +227,6 @@
"limitReached": "Upload limit reached ({{limit}} files per batch)",
"replacedFiles_one": "{{count}} photo replaced",
"replacedFiles_other": "{{count}} photos replaced",
"processingFailed_one": "{{count}} photo failed to process",
"processingFailed_other": "{{count}} photos failed to process",
"uploadingChunks_one": "{{count}} chunk uploading",
"uploadingChunks_other": "{{count}} chunks uploading",
"fileTooLarge": "File too large: {{name}} (max {{limit}}MB)"
@@ -576,18 +574,6 @@
"searchMemories": "Search memories...",
"thankYou": "Thank You",
"thankYouMessage": "For being part of our story and making our special day unforgettable.",
"feedback": {
"title": "Feedback",
"shareThoughts": "Share your thoughts on \"{{name}}\"",
"rateThisMoment": "Rate this moment",
"comments": "Comments",
"noComments": "No comments yet. Be the first!",
"yourName": "Your name",
"yourEmail": "Your email",
"writeLovelyNote": "Write a lovely note...",
"postComment": "Post Comment",
"anonymous": "Anonymous"
},
"rated": "Rated",
"commented": "Commented",
"expiresIn_one": "Gallery expires in {{count}} day",
@@ -1425,7 +1411,6 @@
},
"moderation": {
"title": "Moderation",
"wordFilters": "Word Filters",
"description": "Manage words that should be filtered or blocked in comments",
"addFilter": "Add New Filter",
"enterWord": "Enter word to filter",
@@ -1544,7 +1529,6 @@
"customHeadHtml": "Custom <head> HTML",
"customHeadHtmlHelp": "Paste your tracker's `<head>` snippet (Plausible, Matomo, Pirsch, GA4, GoatCounter, Fathom, Cloudflare Web Analytics, …). Sanitised on save: only `<script>`, `<noscript>`, `<link rel=\"preconnect|dns-prefetch\">` and `<meta>` tags survive, and event-handler attributes are stripped. The admin dashboard's device-breakdown chart falls back to a server-side user-agent heuristic in this mode — pick Umami or Rybbit if you want the tracker-side numbers.",
"customCspWarning": "Content-Security-Policy reminder",
"customCspWarningText": "PicPeak ships with a strict CSP (`script-src 'self'`). If your tracker loads from another domain, add that domain to your reverse-proxy or nginx CSP config — otherwise the browser silently blocks the script.",
"umamiIntegration": "Umami Analytics Integration",
"enableUmami": "Enable Umami Analytics",
"umamiUrl": "Umami URL",
@@ -3961,7 +3945,6 @@
}
},
"cssTemplates": {
"title": "Custom CSS Templates",
"template": "Template",
"templateName": "Template Name",
"enableTemplate": "Enable this template",
-14
View File
@@ -305,18 +305,6 @@
"searchMemories": "Buscar recuerdos...",
"thankYou": "Gracias",
"thankYouMessage": "Gracias por ser parte de nuestra historia y hacer nuestro día inolvidable.",
"feedback": {
"title": "Comentarios",
"shareThoughts": "Comparte tus pensamientos sobre \"{{name}}\"",
"rateThisMoment": "Valora este momento",
"comments": "Comentarios",
"noComments": "No hay comentarios aún. ¡Sé el primero!",
"yourName": "Tu nombre",
"yourEmail": "Tu correo",
"writeLovelyNote": "Escribe una nota agradable...",
"postComment": "Publicar comentario",
"anonymous": "Anónimo"
},
"rated": "Valorado",
"commented": "Comentado",
"colorFilter": "Color",
@@ -972,7 +960,6 @@
},
"moderation": {
"title": "Moderación",
"wordFilters": "Filtros de palabras",
"description": "Gestiona palabras que deben filtrarse o bloquearse en comentarios",
"addFilter": "Agregar nuevo filtro",
"enterWord": "Introduce palabra a filtrar",
@@ -2320,7 +2307,6 @@
}
},
"cssTemplates": {
"title": "Plantillas CSS personalizadas",
"template": "Plantilla",
"templateName": "Nombre de la plantilla",
"enableTemplate": "Habilitar esta plantilla",
-14
View File
@@ -280,18 +280,6 @@
"searchMemories": "Rechercher des souvenirs...",
"thankYou": "Merci",
"thankYouMessage": "D'avoir fait partie de notre histoire et rendu notre journée spéciale inoubliable.",
"feedback": {
"title": "Commentaires",
"shareThoughts": "Partagez vos impressions sur \"{{name}}\"",
"rateThisMoment": "Notez ce moment",
"comments": "Commentaires",
"noComments": "Aucun commentaire pour l'instant. Soyez le premier !",
"yourName": "Votre nom",
"yourEmail": "Votre e-mail",
"writeLovelyNote": "Écrivez un joli message...",
"postComment": "Publier le commentaire",
"anonymous": "Anonyme"
},
"rated": "Noté",
"commented": "Commenté",
"expiresIn_one": "La galerie expire dans {{count}} jour",
@@ -942,7 +930,6 @@
},
"moderation": {
"title": "Modération",
"wordFilters": "Filtres de mots",
"description": "Gérer les mots qui doivent être filtrés ou bloqués dans les commentaires",
"addFilter": "Ajouter un nouveau filtre",
"enterWord": "Entrez le mot à filtrer",
@@ -2495,7 +2482,6 @@
}
},
"cssTemplates": {
"title": "Modèles CSS personnalisés",
"template": "Modèle",
"templateName": "Nom du modèle",
"enableTemplate": "Activer ce modèle",
-14
View File
@@ -282,18 +282,6 @@
"thankYouMessage": "Dat u deel uitmaakte van ons verhaal en onze bijzondere dag onvergetelijk maakte.",
"rated": "Beoordeeld",
"commented": "Becommentarieerd",
"feedback": {
"title": "Feedback",
"shareThoughts": "Deel uw gedachten over \"{{name}}\"",
"rateThisMoment": "Beoordeel dit moment",
"comments": "Opmerkingen",
"noComments": "Nog geen opmerkingen. Wees de eerste!",
"yourName": "Uw naam",
"yourEmail": "Uw e-mail",
"writeLovelyNote": "Schrijf een mooi bericht...",
"postComment": "Opmerking plaatsen",
"anonymous": "Anoniem"
},
"expiresIn_one": "Galerij verloopt over {{count}} dag",
"expiresIn_other": "Galerij verloopt over {{count}} dagen",
"downloading_one": "1 foto downloaden…",
@@ -938,7 +926,6 @@
},
"moderation": {
"title": "Moderatie",
"wordFilters": "Woordfilters",
"description": "Beheer woorden die gefilterd of geblokkeerd moeten worden in opmerkingen",
"addFilter": "Nieuw filter toevoegen",
"enterWord": "Voer woord in om te filteren",
@@ -2464,7 +2451,6 @@
}
},
"cssTemplates": {
"title": "Aangepaste CSS-sjablonen",
"template": "Sjabloon",
"templateName": "Sjabloonnaam",
"enableTemplate": "Dit sjabloon inschakelen",
-14
View File
@@ -283,18 +283,6 @@
"searchMemories": "Buscar lembranças...",
"thankYou": "Obrigado",
"thankYouMessage": "Por fazer parte da nossa história e tornar nosso dia especial inesquecível.",
"feedback": {
"title": "Feedback",
"shareThoughts": "Compartilhe sua opinião sobre \"{{name}}\"",
"rateThisMoment": "Avalie este momento",
"comments": "Comentários",
"noComments": "Ainda sem comentários. Seja o primeiro!",
"yourName": "Seu nome",
"yourEmail": "Seu e-mail",
"writeLovelyNote": "Escreva uma mensagem carinhosa...",
"postComment": "Postar Comentário",
"anonymous": "Anônimo"
},
"rated": "Avaliado",
"commented": "Comentado",
"expiresIn_many": "A galeria expira em {{count}} dias",
@@ -955,7 +943,6 @@
},
"moderation": {
"title": "Moderação",
"wordFilters": "Filtros de Palavras",
"description": "Gerencie palavras que devem ser filtradas ou bloqueadas nos comentários",
"addFilter": "Adicionar Novo Filtro",
"enterWord": "Digite a palavra para filtrar",
@@ -2489,7 +2476,6 @@
}
},
"cssTemplates": {
"title": "Modelos CSS Personalizados",
"template": "Modelo",
"templateName": "Nome do Modelo",
"enableTemplate": "Ativar este modelo",
-14
View File
@@ -286,18 +286,6 @@
"searchMemories": "Поиск воспоминаний...",
"thankYou": "Спасибо",
"thankYouMessage": "За то, что были частью нашей истории и сделали этот особый день незабываемым.",
"feedback": {
"title": "Отзыв",
"shareThoughts": "Поделитесь мнением о «{{name}}»",
"rateThisMoment": "Оцените этот момент",
"comments": "Комментарии",
"noComments": "Комментариев пока нет. Будьте первым!",
"yourName": "Ваше имя",
"yourEmail": "Ваш email",
"writeLovelyNote": "Напишите тёплые слова...",
"postComment": "Оставить комментарий",
"anonymous": "Аноним"
},
"rated": "Оценено",
"commented": "Прокомментировано",
"expiresIn_few": "Галерея истекает через {{count}} дня",
@@ -961,7 +949,6 @@
},
"moderation": {
"title": "Модерация",
"wordFilters": "Фильтры слов",
"description": "Управление словами, которые должны быть отфильтрованы в комментариях",
"addFilter": "Добавить фильтр",
"enterWord": "Введите слово для фильтрации",
@@ -2514,7 +2501,6 @@
}
},
"cssTemplates": {
"title": "Пользовательские CSS-шаблоны",
"template": "Шаблон",
"templateName": "Название шаблона",
"enableTemplate": "Включить этот шаблон",
-14
View File
@@ -280,18 +280,6 @@
"searchMemories": "Iskanje spominov...",
"thankYou": "Hvala",
"thankYouMessage": "Ker ste bili del naše zgodbe in naš poseben dan naredili nepozaben.",
"feedback": {
"title": "Povratne informacije",
"shareThoughts": "Delite svoje mnenje o »{{name}}«",
"rateThisMoment": "Ocenite ta trenutek",
"comments": "Komentarji",
"noComments": "Komentarjev še ni. Bodite prvi!",
"yourName": "Vaše ime",
"yourEmail": "Vaša e-pošta",
"writeLovelyNote": "Napišite prijazno sporočilo...",
"postComment": "Objavi komentar",
"anonymous": "Anonimno"
},
"rated": "Ocenjeno",
"commented": "Komentirano",
"expiresIn_one": "Galerija poteče čez {{count}} dan",
@@ -942,7 +930,6 @@
},
"moderation": {
"title": "Moderiranje",
"wordFilters": "Filtri besed",
"description": "Upravljajte besede, ki naj se v komentarjih filtrirajo ali blokirajo",
"addFilter": "Dodaj nov filter",
"enterWord": "Vnesite besedo za filtriranje",
@@ -2484,7 +2471,6 @@
}
},
"cssTemplates": {
"title": "CSS predloge po meri",
"template": "Predloga",
"templateName": "Ime predloge",
"enableTemplate": "Omogoči to predlogo",