diff --git a/includes/class-everyalt.php b/includes/class-everyalt.php
index 9982715..5353dc3 100644
--- a/includes/class-everyalt.php
+++ b/includes/class-everyalt.php
@@ -171,6 +171,7 @@ private function define_admin_hooks() {
//settings
$this->loader->add_action( 'admin_menu', $plugin_admin, 'add_options_page' );
+ $this->loader->add_filter( 'admin_title', $plugin_admin, 'every_alt_admin_title', 10, 2 );
$this->loader->add_action( 'admin_init', $plugin_admin, 'register_setting' );
$this->loader->add_action( 'admin_init', $plugin_admin, 'every_alt_save_settings' );
$this->loader->add_action( 'admin_init', $plugin_admin, 'every_alt_maybe_export_logs_csv', 5 );
diff --git a/languages/everyalt-de_DE.mo b/languages/everyalt-de_DE.mo
index 97c4d26..34c4775 100644
Binary files a/languages/everyalt-de_DE.mo and b/languages/everyalt-de_DE.mo differ
diff --git a/languages/everyalt-de_DE.po b/languages/everyalt-de_DE.po
index 47c3de3..674cc9c 100644
--- a/languages/everyalt-de_DE.po
+++ b/languages/everyalt-de_DE.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EveryAlt 1.1.0\n"
"Report-Msgid-Bugs-To: https://hdc.net\n"
-"POT-Creation-Date: 2026-09-27 16:34+0000\n"
+"POT-Creation-Date: 2026-09-27 16:47+0000\n"
"PO-Revision-Date: 2026-09-27 00:00+0000\n"
"Last-Translator: HDC \n"
"Language-Team: Deutsch \n"
@@ -24,7 +24,7 @@ msgid "Skipped: monthly spending limit of %s reached. Generation resumes next mo
msgstr "Übersprungen: Monatliches Ausgabenlimit von %s erreicht. Die Generierung wird im nächsten Monat fortgesetzt, oder erhöhe das Limit in den Einstellungen."
#: admin/class-everyalt-admin.php:164
-#: admin/partials/everyalt-options-display.php:541
+#: admin/partials/everyalt-options-display.php:548
msgid "Time"
msgstr "Zeit"
@@ -33,17 +33,17 @@ msgid "Attachment ID"
msgstr "Anhang-ID"
#: admin/class-everyalt-admin.php:166
-#: admin/partials/everyalt-options-display.php:543
+#: admin/partials/everyalt-options-display.php:550
msgid "Status"
msgstr "Status"
#: admin/class-everyalt-admin.php:167
-#: admin/partials/everyalt-options-display.php:544
+#: admin/partials/everyalt-options-display.php:551
msgid "Model"
msgstr "Modell"
#: admin/class-everyalt-admin.php:168
-#: admin/partials/everyalt-options-display.php:545
+#: admin/partials/everyalt-options-display.php:552
msgid "Message / Alt text"
msgstr "Meldung / Alt-Text"
@@ -52,17 +52,18 @@ msgid "Cost (USD)"
msgstr "Kosten (USD)"
#: admin/class-everyalt-admin.php:170
-#: admin/partials/everyalt-options-display.php:547
+#: admin/partials/everyalt-options-display.php:554
+#: admin/partials/everyalt-options-display.php:598
msgid "Details"
msgstr "Details"
-#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432
-#: admin/partials/everyalt-options-display.php:583
+#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:434
+#: admin/partials/everyalt-options-display.php:590
msgid "Error"
msgstr "Fehler"
#: admin/class-everyalt-admin.php:174
-#: admin/partials/everyalt-options-display.php:581
+#: admin/partials/everyalt-options-display.php:588
msgid "Success"
msgstr "Erfolg"
@@ -137,111 +138,140 @@ msgstr "Warteschlange geleert."
msgid "Marked as decorative (alt text left empty on purpose)"
msgstr "Als dekorativ markiert (Alt-Text absichtlich leer gelassen)"
-#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458
+#. translators: %d: number of images finished in this batch
+#: admin/class-everyalt-admin.php:433
+#, php-format
+msgid "%d finished."
+msgstr "%d fertig."
+
+#: admin/class-everyalt-admin.php:435 admin/class-everyalt-admin.php:460
msgid "Error:"
msgstr "Fehler:"
-#: admin/class-everyalt-admin.php:434
+#: admin/class-everyalt-admin.php:436
msgid "Request failed"
msgstr "Anfrage fehlgeschlagen"
-#: admin/class-everyalt-admin.php:435
+#: admin/class-everyalt-admin.php:437
msgid "Saved!"
msgstr "Gespeichert!"
-#: admin/class-everyalt-admin.php:436
+#: admin/class-everyalt-admin.php:438
msgid "Save failed"
msgstr "Speichern fehlgeschlagen"
-#: admin/class-everyalt-admin.php:437
+#: admin/class-everyalt-admin.php:439
msgid "Regenerated!"
msgstr "Neu erzeugt!"
-#: admin/class-everyalt-admin.php:438
+#: admin/class-everyalt-admin.php:440
msgid "Regenerate failed"
msgstr "Neu erzeugen fehlgeschlagen"
-#: admin/class-everyalt-admin.php:451 admin/class-everyalt-admin.php:1052
-#: admin/class-everyalt-admin.php:1053
-#: admin/partials/everyalt-options-display.php:11
+#: admin/class-everyalt-admin.php:453 admin/class-everyalt-admin.php:1054
+#: admin/class-everyalt-admin.php:1055
+#: admin/partials/everyalt-options-display.php:13
msgid "EveryAlt"
msgstr "EveryAlt"
-#: admin/class-everyalt-admin.php:452
+#: admin/class-everyalt-admin.php:454
msgid "Generate alt text with EveryAlt"
msgstr "Alt-Text mit EveryAlt erzeugen"
-#: admin/class-everyalt-admin.php:453
+#: admin/class-everyalt-admin.php:455
msgid "Select or upload an image to generate alt text."
msgstr "Wähle ein Bild aus oder lade eines hoch, um Alt-Text zu erzeugen."
-#: admin/class-everyalt-admin.php:454
+#: admin/class-everyalt-admin.php:456
msgid "Generating…"
msgstr "Wird erzeugt…"
-#: admin/class-everyalt-admin.php:455
+#: admin/class-everyalt-admin.php:457
msgid "Alt text generated."
msgstr "Alt-Text erzeugt."
-#: admin/class-everyalt-admin.php:456
+#: admin/class-everyalt-admin.php:458
msgid "Could not generate alt text."
msgstr "Alt-Text konnte nicht erzeugt werden."
-#: admin/class-everyalt-admin.php:457
+#: admin/class-everyalt-admin.php:459
msgid "Marked as decorative: alt text left empty on purpose."
msgstr "Als dekorativ markiert: Alt-Text absichtlich leer gelassen."
-#: admin/class-everyalt-admin.php:578
+#: admin/class-everyalt-admin.php:580
msgid "Skipped: no API key or auto-generate disabled."
msgstr "Übersprungen: Kein API-Schlüssel oder Auto-Generierung deaktiviert."
-#: admin/class-everyalt-admin.php:583
+#: admin/class-everyalt-admin.php:585
msgid "Skipped: API key validation failed."
msgstr "Übersprungen: API-Schlüssel-Prüfung fehlgeschlagen."
-#: admin/class-everyalt-admin.php:593
+#: admin/class-everyalt-admin.php:595
msgid "Skipped: not a valid image or file exceeds 4MB."
msgstr "Übersprungen: Kein gültiges Bild oder Datei größer als 4 MB."
-#: admin/class-everyalt-admin.php:616
+#: admin/class-everyalt-admin.php:618
msgid "Marked as decorative (alt text left empty on purpose)."
msgstr "Als dekorativ markiert (Alt-Text absichtlich leer gelassen)."
-#: admin/class-everyalt-admin.php:623
+#: admin/class-everyalt-admin.php:625
msgid "No alt text returned from API."
msgstr "Die API hat keinen Alt-Text zurückgegeben."
-#: admin/class-everyalt-admin.php:649
+#: admin/class-everyalt-admin.php:651
msgid "[Title] Skipped: no API key or auto-generate disabled."
msgstr "[Titel] Übersprungen: Kein API-Schlüssel oder Auto-Generierung deaktiviert."
-#: admin/class-everyalt-admin.php:654
+#: admin/class-everyalt-admin.php:656
msgid "[Title] Skipped: API key validation failed."
msgstr "[Titel] Übersprungen: API-Schlüssel-Prüfung fehlgeschlagen."
-#: admin/class-everyalt-admin.php:664
+#: admin/class-everyalt-admin.php:666
msgid "[Title] Skipped: not a valid image or file exceeds 4MB."
msgstr "[Titel] Übersprungen: Kein gültiges Bild oder Datei größer als 4 MB."
-#: admin/class-everyalt-admin.php:687
+#: admin/class-everyalt-admin.php:689
msgid "[Title] No title returned from API."
msgstr "[Titel] Die API hat keinen Titel zurückgegeben."
-#: admin/class-everyalt-admin.php:1033
-#: admin/partials/everyalt-options-display.php:14
-#: admin/partials/everyalt-options-display.php:61
+#: admin/class-everyalt-admin.php:1035 admin/class-everyalt-admin.php:1077
+#: admin/partials/everyalt-options-display.php:63
msgid "Settings"
msgstr "Einstellungen"
-#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377
+#: admin/class-everyalt-admin.php:1078
+#: admin/partials/everyalt-options-display.php:295
+msgid "Bulk Alt Text Generator"
+msgstr "Massen-Alt-Text-Generator"
+
+#: admin/class-everyalt-admin.php:1079
+#: admin/partials/everyalt-options-display.php:343
+msgid "Review Alt Text"
+msgstr "Alt-Text prüfen"
+
+#: admin/class-everyalt-admin.php:1080
+#: admin/partials/everyalt-options-display.php:391
+msgid "Bulk Image Title Generator"
+msgstr "Massen-Bildtitel-Generator"
+
+#: admin/class-everyalt-admin.php:1081
+#: admin/partials/everyalt-options-display.php:439
+msgid "Review Image Titles"
+msgstr "Bildtitel prüfen"
+
+#: admin/class-everyalt-admin.php:1082
+msgid "Logs"
+msgstr "Protokolle"
+
+#: admin/class-everyalt-admin.php:1396 admin/class-everyalt-admin.php:1421
msgid "Generation failed."
msgstr "Generierung fehlgeschlagen."
-#: admin/class-everyalt-admin.php:1450
+#: admin/class-everyalt-admin.php:1494
msgid "Alt successfully updated."
msgstr "Alt-Text erfolgreich aktualisiert."
-#: admin/class-everyalt-admin.php:1466
+#: admin/class-everyalt-admin.php:1510
msgid "Title successfully updated."
msgstr "Titel erfolgreich aktualisiert."
@@ -253,335 +283,315 @@ msgstr "Das Bild konnte nicht für die API kodiert werden. Auf einigen Servern s
msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this."
msgstr "Die Antwort wurde abgeschnitten (Token-Limit erreicht). Erhöhe „Max. Abschluss-Tokens“ in den Einstellungen."
-#: admin/partials/everyalt-options-display.php:13
+#: admin/partials/everyalt-options-display.php:15
msgid "Secondary menu"
msgstr "Sekundäres Menü"
-#: admin/partials/everyalt-options-display.php:15
-#: admin/partials/everyalt-options-display.php:293
-msgid "Bulk Alt Text Generator"
-msgstr "Massen-Alt-Text-Generator"
-
-#: admin/partials/everyalt-options-display.php:16
-#: admin/partials/everyalt-options-display.php:341
-msgid "Review Alt Text"
-msgstr "Alt-Text prüfen"
-
-#: admin/partials/everyalt-options-display.php:17
-#: admin/partials/everyalt-options-display.php:387
-msgid "Bulk Image Title Generator"
-msgstr "Massen-Bildtitel-Generator"
-
-#: admin/partials/everyalt-options-display.php:18
-#: admin/partials/everyalt-options-display.php:435
-msgid "Review Image Titles"
-msgstr "Bildtitel prüfen"
-
-#: admin/partials/everyalt-options-display.php:19
-msgid "Logs"
-msgstr "Protokolle"
-
#. translators: 1: opening link to everyalt.com, 2: closing link tag, 3: opening link to hdc.net, 4: closing link tag
-#: admin/partials/everyalt-options-display.php:28
+#: admin/partials/everyalt-options-display.php:27
#, php-format
msgid "%1$sEveryAlt%2$s is a free, open-source project created by %3$sHDC%4$s, a web dev firm for high-stakes projects and AI builds."
msgstr "%1$sEveryAlt%2$s ist ein kostenloses Open-Source-Projekt von %3$sHDC%4$s, einer Webentwicklungsfirma für anspruchsvolle Projekte und KI-Lösungen."
-#: admin/partials/everyalt-options-display.php:41
+#: admin/partials/everyalt-options-display.php:43
msgid "Settings saved."
msgstr "Einstellungen gespeichert."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:47
+#: admin/partials/everyalt-options-display.php:49
#, php-format
msgid "The %s API key you entered could not be validated. Please check the key and try again. No settings were saved."
msgstr "Der eingegebene %s-API-Schlüssel konnte nicht geprüft werden. Prüfe den Schlüssel und versuche es erneut. Es wurden keine Einstellungen gespeichert."
-#: admin/partials/everyalt-options-display.php:54
+#: admin/partials/everyalt-options-display.php:56
msgid "Clear queue"
msgstr "Warteschlange leeren"
-#: admin/partials/everyalt-options-display.php:74
-#: admin/partials/everyalt-options-display.php:77
+#: admin/partials/everyalt-options-display.php:58
+msgid "Recent results"
+msgstr "Letzte Ergebnisse"
+
+#: admin/partials/everyalt-options-display.php:76
+#: admin/partials/everyalt-options-display.php:79
msgid "AI model"
msgstr "KI-Modell"
#. translators: 1: input price in USD, 2: output price in USD
-#: admin/partials/everyalt-options-display.php:90
+#: admin/partials/everyalt-options-display.php:92
#, php-format
msgid "$%1$s input · $%2$s output per 1M tokens"
msgstr "$%1$s Eingabe · $%2$s Ausgabe pro 1 Mio. Tokens"
-#: admin/partials/everyalt-options-display.php:101
+#: admin/partials/everyalt-options-display.php:103
msgid "All models read the image and write alt text and titles the same way. Prices are each provider’s published rates as of September 2026 and may change. You pay the provider directly; EveryAlt never bills you. The actual cost of each image is recorded on the Logs tab."
msgstr "Alle Modelle lesen das Bild und schreiben Alt-Text und Titel auf dieselbe Weise. Die Preise sind die veröffentlichten Tarife des jeweiligen Anbieters (Stand: September 2026) und können sich ändern. Du bezahlst den Anbieter direkt; EveryAlt stellt dir nie etwas in Rechnung. Die tatsächlichen Kosten jedes Bildes werden im Tab „Protokolle“ erfasst."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:108
+#: admin/partials/everyalt-options-display.php:110
#, php-format
msgid "%s pricing"
msgstr "%s-Preise"
-#: admin/partials/everyalt-options-display.php:116
+#: admin/partials/everyalt-options-display.php:118
msgid "API key"
msgstr "API-Schlüssel"
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:127
+#: admin/partials/everyalt-options-display.php:129
#, php-format
msgid "%s API key"
msgstr "%s-API-Schlüssel"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "Key saved"
msgstr "Schlüssel gespeichert"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "No key saved"
msgstr "Kein Schlüssel gespeichert"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Leave blank to keep existing key"
msgstr "Leer lassen, um den bestehenden Schlüssel zu behalten"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Paste your API key"
msgstr "API-Schlüssel einfügen"
-#: admin/partials/everyalt-options-display.php:136
+#: admin/partials/everyalt-options-display.php:138
msgid "Validate key"
msgstr "Schlüssel prüfen"
#. translators: %s: link to OpenAI API keys page
-#: admin/partials/everyalt-options-display.php:142
+#: admin/partials/everyalt-options-display.php:144
#, php-format
msgid "Sign in at %s."
msgstr "Melde dich unter %s an."
-#: admin/partials/everyalt-options-display.php:143
+#: admin/partials/everyalt-options-display.php:145
msgid "Click “Create new secret key”, give it a name (e.g. “EveryAlt”), and copy the key. It is only shown once."
msgstr "Klicke auf “Create new secret key”, gib ihm einen Namen (z. B. “EveryAlt”) und kopiere den Schlüssel. Er wird nur einmal angezeigt."
-#: admin/partials/everyalt-options-display.php:144
+#: admin/partials/everyalt-options-display.php:146
msgid "Add a payment method or prepaid credits in your OpenAI billing settings; generation fails until your account has credit."
msgstr "Hinterlege in deinen OpenAI-Abrechnungseinstellungen eine Zahlungsmethode oder Prepaid-Guthaben; ohne Guthaben schlägt die Generierung fehl."
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
msgid "OpenAI API data usage"
msgstr "Datennutzung der OpenAI-API"
#. translators: %s: link to OpenAI data usage policy
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
#, php-format
msgid "OpenAI does not use API data to train its models by default. See %s."
msgstr "OpenAI verwendet API-Daten standardmäßig nicht zum Trainieren seiner Modelle. Siehe %s."
#. translators: %s: link to Google AI Studio API keys page
-#: admin/partials/everyalt-options-display.php:149
+#: admin/partials/everyalt-options-display.php:151
#, php-format
msgid "Sign in to Google AI Studio at %s."
msgstr "Melde dich unter %s bei Google AI Studio an."
-#: admin/partials/everyalt-options-display.php:150
+#: admin/partials/everyalt-options-display.php:152
msgid "Click “Create API key”, choose or create a Google Cloud project, and copy the key."
msgstr "Klicke auf “Create API key”, wähle ein Google-Cloud-Projekt aus oder erstelle eines und kopiere den Schlüssel."
-#: admin/partials/everyalt-options-display.php:151
+#: admin/partials/everyalt-options-display.php:153
msgid "Optional: set up billing on the project to move from the free tier to the paid tier."
msgstr "Optional: Richte für das Projekt die Abrechnung ein, um von der kostenlosen zur kostenpflichtigen Stufe zu wechseln."
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
msgid "Gemini API terms"
msgstr "Nutzungsbedingungen der Gemini-API"
#. translators: %s: link to Gemini API terms
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
#, php-format
msgid "Gemini has a free tier, but Google may use free-tier prompts and images to improve its products. On the paid tier (billing enabled), your content is not used that way. See the %s."
msgstr "Gemini hat eine kostenlose Stufe, aber Google darf Prompts und Bilder aus der kostenlosen Stufe zur Verbesserung seiner Produkte verwenden. In der kostenpflichtigen Stufe (Abrechnung aktiviert) werden deine Inhalte nicht so verwendet. Siehe %s."
#. translators: %s: link to DeepInfra API keys page
-#: admin/partials/everyalt-options-display.php:156
+#: admin/partials/everyalt-options-display.php:158
#, php-format
msgid "Sign in or create an account at %s."
msgstr "Melde dich unter %s an oder erstelle ein Konto."
-#: admin/partials/everyalt-options-display.php:157
+#: admin/partials/everyalt-options-display.php:159
msgid "Click “New API key”, name it (e.g. “EveryAlt”), and copy the key."
msgstr "Klicke auf “New API key”, gib ihm einen Namen (z. B. “EveryAlt”) und kopiere den Schlüssel."
-#: admin/partials/everyalt-options-display.php:158
+#: admin/partials/everyalt-options-display.php:160
msgid "Add a payment method or credits in your DeepInfra billing settings. One DeepInfra key works for both DeepSeek V4.1 Flash and GLM-5.3-Flash."
msgstr "Hinterlege in deinen DeepInfra-Abrechnungseinstellungen eine Zahlungsmethode oder Guthaben. Ein DeepInfra-Schlüssel funktioniert sowohl für DeepSeek V4.1 Flash als auch für GLM-5.3-Flash."
-#: admin/partials/everyalt-options-display.php:162
+#: admin/partials/everyalt-options-display.php:164
msgid "Your images stay private."
msgstr "Deine Bilder bleiben privat."
-#: admin/partials/everyalt-options-display.php:163
+#: admin/partials/everyalt-options-display.php:165
msgid "DeepInfra runs these models on its own infrastructure in data centers in the US and Canada, with a zero data retention policy: your images and the generated text are processed in memory and not stored, the content of requests is not logged, and your data is never used to train models."
msgstr "DeepInfra betreibt diese Modelle auf eigener Infrastruktur in Rechenzentren in den USA und Kanada, ohne Datenspeicherung: Deine Bilder und der erzeugte Text werden nur im Arbeitsspeicher verarbeitet und nicht gespeichert, der Inhalt von Anfragen wird nicht protokolliert und deine Daten werden nie zum Trainieren von Modellen verwendet."
-#: admin/partials/everyalt-options-display.php:168
+#: admin/partials/everyalt-options-display.php:170
msgid "DeepInfra data privacy"
msgstr "Datenschutz bei DeepInfra"
-#: admin/partials/everyalt-options-display.php:169
+#: admin/partials/everyalt-options-display.php:171
msgid "Privacy policy"
msgstr "Datenschutzerklärung"
-#: admin/partials/everyalt-options-display.php:170
+#: admin/partials/everyalt-options-display.php:172
msgid "Trust center (SOC 2, ISO 27001)"
msgstr "Trust Center (SOC 2, ISO 27001)"
-#: admin/partials/everyalt-options-display.php:179
+#: admin/partials/everyalt-options-display.php:181
msgid "Keys are stored encrypted in your WordPress database. The image is sent to the provider as base64, so generation works on localhost and behind HTTP auth."
msgstr "Schlüssel werden verschlüsselt in deiner WordPress-Datenbank gespeichert. Das Bild wird als Base64 an den Anbieter gesendet, daher funktioniert die Generierung auch auf localhost und hinter HTTP-Authentifizierung."
-#: admin/partials/everyalt-options-display.php:183
+#: admin/partials/everyalt-options-display.php:185
msgid "Auto-generate on upload"
msgstr "Beim Hochladen automatisch erzeugen"
-#: admin/partials/everyalt-options-display.php:185
+#: admin/partials/everyalt-options-display.php:187
msgid "Automatically generate alt text when images are uploaded"
msgstr "Alt-Text automatisch erzeugen, wenn Bilder hochgeladen werden"
-#: admin/partials/everyalt-options-display.php:187
+#: admin/partials/everyalt-options-display.php:189
msgid "Automatically generate image titles when images are uploaded"
msgstr "Bildtitel automatisch erzeugen, wenn Bilder hochgeladen werden"
-#: admin/partials/everyalt-options-display.php:191
-#: admin/partials/everyalt-options-display.php:194
+#: admin/partials/everyalt-options-display.php:193
+#: admin/partials/everyalt-options-display.php:196
msgid "New uploads"
msgstr "Neue Uploads"
-#: admin/partials/everyalt-options-display.php:195
+#: admin/partials/everyalt-options-display.php:197
msgid "Generate in the background (recommended): uploads finish right away"
msgstr "Im Hintergrund erzeugen (empfohlen): Uploads sind sofort fertig"
-#: admin/partials/everyalt-options-display.php:196
+#: admin/partials/everyalt-options-display.php:198
msgid "Generate during the upload: alt text is ready when the upload finishes, but each upload waits for the AI"
msgstr "Während des Uploads erzeugen: Der Alt-Text ist fertig, wenn der Upload abgeschlossen ist, aber jeder Upload wartet auf die KI"
-#: admin/partials/everyalt-options-display.php:198
+#: admin/partials/everyalt-options-display.php:200
msgid "Background jobs usually finish within a minute. They run on WordPress’s scheduler (WP-Cron), and also whenever an EveryAlt page is open, so they still work on sites where WP-Cron is blocked, such as sites behind a password."
msgstr "Hintergrundaufgaben sind meist innerhalb einer Minute erledigt. Sie laufen über den Zeitplaner von WordPress (WP-Cron) und zusätzlich, solange eine EveryAlt-Seite geöffnet ist. So funktionieren sie auch auf Websites, auf denen WP-Cron blockiert ist, etwa bei passwortgeschützten Websites."
-#: admin/partials/everyalt-options-display.php:202
+#: admin/partials/everyalt-options-display.php:204
msgid "Decorative images"
msgstr "Dekorative Bilder"
-#: admin/partials/everyalt-options-display.php:204
+#: admin/partials/everyalt-options-display.php:206
msgid "Leave alt text empty for purely decorative images"
msgstr "Alt-Text bei rein dekorativen Bildern leer lassen"
-#: admin/partials/everyalt-options-display.php:205
+#: admin/partials/everyalt-options-display.php:207
msgid "Accessibility guidelines (WCAG) say decorative images such as dividers, spacers, and background patterns should have empty alt text so screen readers skip them. When the AI judges an image clearly decorative, EveryAlt leaves its alt text empty and marks it on the Review Alt Text tab, where you can ask for a description instead. When in doubt, the AI describes the image."
msgstr "Laut den Richtlinien zur Barrierefreiheit (WCAG) sollen dekorative Bilder wie Trennlinien, Abstandshalter und Hintergrundmuster einen leeren Alt-Text haben, damit Screenreader sie überspringen. Hält die KI ein Bild eindeutig für dekorativ, lässt EveryAlt den Alt-Text leer und markiert das Bild im Tab „Alt-Text prüfen“, wo du stattdessen eine Beschreibung anfordern kannst. Im Zweifel beschreibt die KI das Bild."
-#: admin/partials/everyalt-options-display.php:209
+#: admin/partials/everyalt-options-display.php:211
msgid "Monthly spending limit"
msgstr "Monatliches Ausgabenlimit"
-#: admin/partials/everyalt-options-display.php:212
+#: admin/partials/everyalt-options-display.php:214
msgid "None"
msgstr "Keines"
-#: admin/partials/everyalt-options-display.php:213
+#: admin/partials/everyalt-options-display.php:215
msgid "USD per month"
msgstr "USD pro Monat"
#. translators: %s: estimated amount spent this month, e.g. $0.42
-#: admin/partials/everyalt-options-display.php:219
+#: admin/partials/everyalt-options-display.php:221
#, php-format
msgid "Estimated spend this month: %s. When the limit is reached, generation pauses until next month (queued images wait). Leave empty for no limit. Estimates use each provider’s published prices; your provider’s invoice is authoritative."
msgstr "Geschätzte Ausgaben diesen Monat: %s. Ist das Limit erreicht, pausiert die Generierung bis zum nächsten Monat (Bilder in der Warteschlange warten). Leer lassen für kein Limit. Die Schätzungen beruhen auf den veröffentlichten Preisen des jeweiligen Anbieters; maßgeblich ist die Rechnung deines Anbieters."
-#: admin/partials/everyalt-options-display.php:228
+#: admin/partials/everyalt-options-display.php:230
msgid "Existing posts"
msgstr "Bestehende Beiträge"
-#: admin/partials/everyalt-options-display.php:230
+#: admin/partials/everyalt-options-display.php:232
msgid "Show Media Library alt text on images already in posts that have none"
msgstr "Alt-Text aus der Mediathek bei Bildern in bestehenden Beiträgen anzeigen, die keinen haben"
-#: admin/partials/everyalt-options-display.php:231
+#: admin/partials/everyalt-options-display.php:233
msgid "When an image is added to a post, WordPress copies its alt text into the post at that moment, so alt text generated later doesn’t appear in older posts. With this on, empty alt text in posts is filled in from the Media Library when the page is displayed. Your posts are not modified, and alt text written in a post is never replaced. Requires WordPress 6.0 or later."
msgstr "Wenn ein Bild in einen Beitrag eingefügt wird, kopiert WordPress den Alt-Text in diesem Moment in den Beitrag. Später erzeugter Alt-Text erscheint daher nicht in älteren Beiträgen. Ist diese Option aktiv, wird leerer Alt-Text in Beiträgen beim Anzeigen der Seite aus der Mediathek ergänzt. Deine Beiträge werden nicht verändert, und im Beitrag geschriebener Alt-Text wird nie ersetzt. Erfordert WordPress 6.0 oder neuer."
-#: admin/partials/everyalt-options-display.php:235
+#: admin/partials/everyalt-options-display.php:237
msgid "Language"
msgstr "Sprache"
#. translators: %s: site language name in English, e.g. German
-#: admin/partials/everyalt-options-display.php:242
+#: admin/partials/everyalt-options-display.php:244
#, php-format
msgid "Automatic (site language: %s)"
msgstr "Automatisch (Website-Sprache: %s)"
-#: admin/partials/everyalt-options-display.php:249
+#: admin/partials/everyalt-options-display.php:251
msgid "Language for generated alt text and titles. Automatic uses your site language, or each image’s own language on multilingual sites using Polylang or WPML."
msgstr "Sprache für erzeugte Alt-Texte und Titel. „Automatisch“ verwendet die Sprache deiner Website bzw. auf mehrsprachigen Websites mit Polylang oder WPML die Sprache des jeweiligen Bildes."
-#: admin/partials/everyalt-options-display.php:253
+#: admin/partials/everyalt-options-display.php:255
msgid "Max completion tokens"
msgstr "Max. Abschluss-Tokens"
-#: admin/partials/everyalt-options-display.php:256
+#: admin/partials/everyalt-options-display.php:258
msgid "Maximum tokens the model can use for its response, including any reasoning. Default 1024. Leave empty to use default."
msgstr "Maximale Anzahl an Tokens, die das Modell für seine Antwort verwenden kann, einschließlich Reasoning. Standard: 1024. Leer lassen für den Standardwert."
-#: admin/partials/everyalt-options-display.php:260
+#: admin/partials/everyalt-options-display.php:262
msgid "Alt text prompt"
msgstr "Alt-Text-Prompt"
-#: admin/partials/everyalt-options-display.php:268
+#: admin/partials/everyalt-options-display.php:270
msgid "Instruction sent to the AI with each image. Edit as needed. The model should return only the alt text, no extra wording."
msgstr "Anweisung, die mit jedem Bild an die KI geht. Bei Bedarf anpassen. Das Modell soll nur den Alt-Text zurückgeben, ohne Zusatztext."
-#: admin/partials/everyalt-options-display.php:272
+#: admin/partials/everyalt-options-display.php:274
msgid "Image title prompt"
msgstr "Bildtitel-Prompt"
-#: admin/partials/everyalt-options-display.php:280
+#: admin/partials/everyalt-options-display.php:282
msgid "Instruction sent to the AI when generating image titles. Titles are usually short (a few words). The model should return only the title, no extra wording."
msgstr "Anweisung, die beim Erzeugen von Bildtiteln an die KI geht. Titel sind meist kurz (wenige Wörter). Das Modell soll nur den Titel zurückgeben, ohne Zusatztext."
-#: admin/partials/everyalt-options-display.php:285
+#: admin/partials/everyalt-options-display.php:287
msgid "Save Settings"
msgstr "Einstellungen speichern"
-#: admin/partials/everyalt-options-display.php:294
+#: admin/partials/everyalt-options-display.php:296
#, php-format
msgid "This page finds all images in your media library that do not currently have alt text and lets you generate new alt text with EveryAlt quickly. To see existing images that already have alt text, go to the Review Alt Text tab."
msgstr "Diese Seite findet alle Bilder in deiner Mediathek ohne Alt-Text und lässt dich schnell mit EveryAlt welchen erzeugen. Für Bilder mit Alt-Text gehe zum Tab Alt-Text prüfen."
-#: admin/partials/everyalt-options-display.php:296
-#: admin/partials/everyalt-options-display.php:390
+#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:394
msgid "Please add an API key for the selected AI model in the Settings tab first."
msgstr "Füge zuerst im Tab „Einstellungen“ einen API-Schlüssel für das ausgewählte KI-Modell hinzu."
-#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:300
msgid "No images without alt text found."
msgstr "Keine Bilder ohne Alt-Text gefunden."
-#: admin/partials/everyalt-options-display.php:301
-#: admin/partials/everyalt-options-display.php:395
+#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:399
msgid "Select all"
msgstr "Alle auswählen"
-#: admin/partials/everyalt-options-display.php:302
-#: admin/partials/everyalt-options-display.php:396
+#: admin/partials/everyalt-options-display.php:304
+#: admin/partials/everyalt-options-display.php:400
msgid "Select none"
msgstr "Keine auswählen"
-#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:305
msgid "Generate alt text for selected"
msgstr "Alt-Text für Auswahl erzeugen"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:307
-#: admin/partials/everyalt-options-display.php:401
+#: admin/partials/everyalt-options-display.php:309
+#: admin/partials/everyalt-options-display.php:405
#, php-format
msgid "Generate for all %s image"
msgid_plural "Generate for all %s images"
@@ -589,10 +599,10 @@ msgstr[0] "Für %s Bild erzeugen"
msgstr[1] "Für alle %s Bilder erzeugen"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:311
-#: admin/partials/everyalt-options-display.php:349
-#: admin/partials/everyalt-options-display.php:405
-#: admin/partials/everyalt-options-display.php:443
+#: admin/partials/everyalt-options-display.php:313
+#: admin/partials/everyalt-options-display.php:351
+#: admin/partials/everyalt-options-display.php:409
+#: admin/partials/everyalt-options-display.php:447
#, php-format
msgid "%s image"
msgid_plural "%s images"
@@ -600,136 +610,158 @@ msgstr[0] "%s Bild"
msgstr[1] "%s Bilder"
#. translators: %s: image title
-#: admin/partials/everyalt-options-display.php:319
-#: admin/partials/everyalt-options-display.php:413
+#: admin/partials/everyalt-options-display.php:321
+#: admin/partials/everyalt-options-display.php:417
#, php-format
msgid "Select “%s”"
msgstr "„%s“ auswählen"
-#: admin/partials/everyalt-options-display.php:326
-#: admin/partials/everyalt-options-display.php:363
-#: admin/partials/everyalt-options-display.php:420
-#: admin/partials/everyalt-options-display.php:453
+#: admin/partials/everyalt-options-display.php:328
+#: admin/partials/everyalt-options-display.php:365
+#: admin/partials/everyalt-options-display.php:424
+#: admin/partials/everyalt-options-display.php:457
msgid "Edit"
msgstr "Bearbeiten"
-#: admin/partials/everyalt-options-display.php:342
+#: admin/partials/everyalt-options-display.php:344
msgid "Images that already have alt text, plus images marked decorative (alt text left empty on purpose). Edit and save, or regenerate with EveryAlt."
msgstr "Bilder, die bereits Alt-Text haben, sowie als dekorativ markierte Bilder (Alt-Text absichtlich leer gelassen). Bearbeiten und speichern oder mit EveryAlt neu erzeugen."
-#: admin/partials/everyalt-options-display.php:344
-#: admin/partials/everyalt-options-display.php:438
+#: admin/partials/everyalt-options-display.php:346
+#: admin/partials/everyalt-options-display.php:442
msgid "Please add an API key for the selected AI model in the Settings tab to use Regenerate."
msgstr "Füge im Tab „Einstellungen“ einen API-Schlüssel für das ausgewählte KI-Modell hinzu, um „Neu erzeugen“ zu nutzen."
-#: admin/partials/everyalt-options-display.php:347
+#: admin/partials/everyalt-options-display.php:349
msgid "No images with alt text found."
msgstr "Keine Bilder mit Alt-Text gefunden."
-#: admin/partials/everyalt-options-display.php:360
+#: admin/partials/everyalt-options-display.php:362
msgid "Decorative"
msgstr "Dekorativ"
-#: admin/partials/everyalt-options-display.php:365
+#. translators: %s: image title
+#: admin/partials/everyalt-options-display.php:367
+#, php-format
+msgid "Alt text for “%s”"
+msgstr "Alt-Text für „%s“"
+
+#: admin/partials/everyalt-options-display.php:368
msgid "Empty on purpose: screen readers skip this image."
msgstr "Absichtlich leer: Screenreader überspringen dieses Bild."
-#: admin/partials/everyalt-options-display.php:367
-#: admin/partials/everyalt-options-display.php:457
+#: admin/partials/everyalt-options-display.php:370
+#: admin/partials/everyalt-options-display.php:463
msgid "Save"
msgstr "Speichern"
-#: admin/partials/everyalt-options-display.php:369
+#: admin/partials/everyalt-options-display.php:372
msgid "Describe anyway"
msgstr "Trotzdem beschreiben"
-#: admin/partials/everyalt-options-display.php:371
-#: admin/partials/everyalt-options-display.php:458
+#: admin/partials/everyalt-options-display.php:374
+#: admin/partials/everyalt-options-display.php:464
msgid "Regenerate"
msgstr "Neu erzeugen"
-#: admin/partials/everyalt-options-display.php:388
+#: admin/partials/everyalt-options-display.php:392
#, php-format
msgid "This page finds images whose title is still the raw upload filename (e.g. \"IMG_1234\") and lets you generate descriptive titles with EveryAlt quickly. To see images that already have a custom title, go to the Review Image Titles tab."
msgstr "Diese Seite findet Bilder, deren Titel noch der ursprüngliche Dateiname ist (z. B. „IMG_1234“), und lässt dich schnell mit EveryAlt aussagekräftige Titel erzeugen. Für Bilder mit eigenem Titel gehe zum Tab Bildtitel prüfen."
-#: admin/partials/everyalt-options-display.php:392
+#: admin/partials/everyalt-options-display.php:396
msgid "No images needing a title found."
msgstr "Keine Bilder ohne Titel gefunden."
-#: admin/partials/everyalt-options-display.php:397
+#: admin/partials/everyalt-options-display.php:401
msgid "Generate titles for selected"
msgstr "Titel für Auswahl erzeugen"
-#: admin/partials/everyalt-options-display.php:436
+#: admin/partials/everyalt-options-display.php:440
msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt."
msgstr "Bilder, die bereits einen eigenen Titel haben. Bearbeiten und speichern oder mit EveryAlt neu erzeugen."
-#: admin/partials/everyalt-options-display.php:441
+#: admin/partials/everyalt-options-display.php:445
msgid "No images with a custom title found."
msgstr "Keine Bilder mit eigenem Titel gefunden."
-#: admin/partials/everyalt-options-display.php:473
+#. translators: %s: image file name
+#: admin/partials/everyalt-options-display.php:460
+#, php-format
+msgid "Title for image file “%s”"
+msgstr "Bildtitel für Datei „%s“"
+
+#: admin/partials/everyalt-options-display.php:480
msgid "Spending"
msgstr "Ausgaben"
#. translators: 1: spent this month, 2: monthly limit
-#: admin/partials/everyalt-options-display.php:484
+#: admin/partials/everyalt-options-display.php:491
#, php-format
msgid "This month: %1$s of your %2$s limit."
msgstr "Diesen Monat: %1$s von deinem Limit von %2$s."
#. translators: %s: spent this month
-#: admin/partials/everyalt-options-display.php:487
+#: admin/partials/everyalt-options-display.php:494
#, php-format
msgid "This month: %s (no limit set)."
msgstr "Diesen Monat: %s (kein Limit festgelegt)."
-#: admin/partials/everyalt-options-display.php:499
+#. translators: 1: spent this month, 2: monthly limit
+#: admin/partials/everyalt-options-display.php:500
+#, php-format
+msgid "%1$s of %2$s"
+msgstr "%1$s von %2$s"
+
+#: admin/partials/everyalt-options-display.php:500
+msgid "Monthly spending limit used"
+msgstr "Genutztes monatliches Ausgabenlimit"
+
+#: admin/partials/everyalt-options-display.php:506
msgid "Month"
msgstr "Monat"
-#: admin/partials/everyalt-options-display.php:500
+#: admin/partials/everyalt-options-display.php:507
msgid "Requests"
msgstr "Anfragen"
-#: admin/partials/everyalt-options-display.php:501
+#: admin/partials/everyalt-options-display.php:508
msgid "Estimated cost"
msgstr "Geschätzte Kosten"
-#: admin/partials/everyalt-options-display.php:502
+#: admin/partials/everyalt-options-display.php:509
msgid "By model"
msgstr "Nach Modell"
-#: admin/partials/everyalt-options-display.php:526
+#: admin/partials/everyalt-options-display.php:533
msgid "No spending recorded yet."
msgstr "Noch keine Ausgaben erfasst."
-#: admin/partials/everyalt-options-display.php:528
+#: admin/partials/everyalt-options-display.php:535
msgid "Estimated from the tokens each request used and the provider’s published prices. Your provider’s invoice is authoritative."
msgstr "Geschätzt anhand der pro Anfrage verbrauchten Tokens und der veröffentlichten Preise des Anbieters. Maßgeblich ist die Rechnung deines Anbieters."
-#: admin/partials/everyalt-options-display.php:530
+#: admin/partials/everyalt-options-display.php:537
msgid "Generation Log"
msgstr "Generierungsprotokoll"
-#: admin/partials/everyalt-options-display.php:531
+#: admin/partials/everyalt-options-display.php:538
msgid "Last 100 alt text generation attempts (successes and failures)."
msgstr "Letzte 100 Alt-Text-Generierungen (Erfolge und Fehler)."
-#: admin/partials/everyalt-options-display.php:534
+#: admin/partials/everyalt-options-display.php:541
msgid "Export as CSV"
msgstr "Als CSV exportieren"
-#: admin/partials/everyalt-options-display.php:542
+#: admin/partials/everyalt-options-display.php:549
msgid "Attachment"
msgstr "Anhang"
-#: admin/partials/everyalt-options-display.php:546
+#: admin/partials/everyalt-options-display.php:553
msgid "Cost"
msgstr "Kosten"
-#: admin/partials/everyalt-options-display.php:598
+#: admin/partials/everyalt-options-display.php:605
msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log."
msgstr "Noch keine Einträge. Erzeuge Alt-Text im Tab Massen oder beim Hochladen, um dieses Protokoll zu füllen."
diff --git a/languages/everyalt-es_ES.mo b/languages/everyalt-es_ES.mo
index 948eace..dbbf803 100644
Binary files a/languages/everyalt-es_ES.mo and b/languages/everyalt-es_ES.mo differ
diff --git a/languages/everyalt-es_ES.po b/languages/everyalt-es_ES.po
index 50fceb0..e3835e0 100644
--- a/languages/everyalt-es_ES.po
+++ b/languages/everyalt-es_ES.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EveryAlt 1.1.0\n"
"Report-Msgid-Bugs-To: https://hdc.net\n"
-"POT-Creation-Date: 2026-09-27 16:34+0000\n"
+"POT-Creation-Date: 2026-09-27 16:47+0000\n"
"PO-Revision-Date: 2026-09-27 00:00+0000\n"
"Last-Translator: HDC \n"
"Language-Team: Español \n"
@@ -24,7 +24,7 @@ msgid "Skipped: monthly spending limit of %s reached. Generation resumes next mo
msgstr "Omitido: se alcanzó el límite de gasto mensual de %s. La generación se reanudará el mes que viene, o puedes aumentar el límite en Ajustes."
#: admin/class-everyalt-admin.php:164
-#: admin/partials/everyalt-options-display.php:541
+#: admin/partials/everyalt-options-display.php:548
msgid "Time"
msgstr "Hora"
@@ -33,17 +33,17 @@ msgid "Attachment ID"
msgstr "ID del adjunto"
#: admin/class-everyalt-admin.php:166
-#: admin/partials/everyalt-options-display.php:543
+#: admin/partials/everyalt-options-display.php:550
msgid "Status"
msgstr "Estado"
#: admin/class-everyalt-admin.php:167
-#: admin/partials/everyalt-options-display.php:544
+#: admin/partials/everyalt-options-display.php:551
msgid "Model"
msgstr "Modelo"
#: admin/class-everyalt-admin.php:168
-#: admin/partials/everyalt-options-display.php:545
+#: admin/partials/everyalt-options-display.php:552
msgid "Message / Alt text"
msgstr "Mensaje / Texto alternativo"
@@ -52,17 +52,18 @@ msgid "Cost (USD)"
msgstr "Coste (USD)"
#: admin/class-everyalt-admin.php:170
-#: admin/partials/everyalt-options-display.php:547
+#: admin/partials/everyalt-options-display.php:554
+#: admin/partials/everyalt-options-display.php:598
msgid "Details"
msgstr "Detalles"
-#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432
-#: admin/partials/everyalt-options-display.php:583
+#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:434
+#: admin/partials/everyalt-options-display.php:590
msgid "Error"
msgstr "Error"
#: admin/class-everyalt-admin.php:174
-#: admin/partials/everyalt-options-display.php:581
+#: admin/partials/everyalt-options-display.php:588
msgid "Success"
msgstr "Éxito"
@@ -137,111 +138,140 @@ msgstr "Cola vaciada."
msgid "Marked as decorative (alt text left empty on purpose)"
msgstr "Marcada como decorativa (texto alternativo vacío a propósito)"
-#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458
+#. translators: %d: number of images finished in this batch
+#: admin/class-everyalt-admin.php:433
+#, php-format
+msgid "%d finished."
+msgstr "%d completadas."
+
+#: admin/class-everyalt-admin.php:435 admin/class-everyalt-admin.php:460
msgid "Error:"
msgstr "Error:"
-#: admin/class-everyalt-admin.php:434
+#: admin/class-everyalt-admin.php:436
msgid "Request failed"
msgstr "La solicitud falló"
-#: admin/class-everyalt-admin.php:435
+#: admin/class-everyalt-admin.php:437
msgid "Saved!"
msgstr "¡Guardado!"
-#: admin/class-everyalt-admin.php:436
+#: admin/class-everyalt-admin.php:438
msgid "Save failed"
msgstr "Error al guardar"
-#: admin/class-everyalt-admin.php:437
+#: admin/class-everyalt-admin.php:439
msgid "Regenerated!"
msgstr "¡Regenerado!"
-#: admin/class-everyalt-admin.php:438
+#: admin/class-everyalt-admin.php:440
msgid "Regenerate failed"
msgstr "Error al regenerar"
-#: admin/class-everyalt-admin.php:451 admin/class-everyalt-admin.php:1052
-#: admin/class-everyalt-admin.php:1053
-#: admin/partials/everyalt-options-display.php:11
+#: admin/class-everyalt-admin.php:453 admin/class-everyalt-admin.php:1054
+#: admin/class-everyalt-admin.php:1055
+#: admin/partials/everyalt-options-display.php:13
msgid "EveryAlt"
msgstr "EveryAlt"
-#: admin/class-everyalt-admin.php:452
+#: admin/class-everyalt-admin.php:454
msgid "Generate alt text with EveryAlt"
msgstr "Generar texto alternativo con EveryAlt"
-#: admin/class-everyalt-admin.php:453
+#: admin/class-everyalt-admin.php:455
msgid "Select or upload an image to generate alt text."
msgstr "Selecciona o sube una imagen para generar el texto alternativo."
-#: admin/class-everyalt-admin.php:454
+#: admin/class-everyalt-admin.php:456
msgid "Generating…"
msgstr "Generando…"
-#: admin/class-everyalt-admin.php:455
+#: admin/class-everyalt-admin.php:457
msgid "Alt text generated."
msgstr "Texto alternativo generado."
-#: admin/class-everyalt-admin.php:456
+#: admin/class-everyalt-admin.php:458
msgid "Could not generate alt text."
msgstr "No se pudo generar el texto alternativo."
-#: admin/class-everyalt-admin.php:457
+#: admin/class-everyalt-admin.php:459
msgid "Marked as decorative: alt text left empty on purpose."
msgstr "Marcada como decorativa: texto alternativo vacío a propósito."
-#: admin/class-everyalt-admin.php:578
+#: admin/class-everyalt-admin.php:580
msgid "Skipped: no API key or auto-generate disabled."
msgstr "Omitido: no hay clave API o la generación automática está desactivada."
-#: admin/class-everyalt-admin.php:583
+#: admin/class-everyalt-admin.php:585
msgid "Skipped: API key validation failed."
msgstr "Omitido: la validación de la clave API falló."
-#: admin/class-everyalt-admin.php:593
+#: admin/class-everyalt-admin.php:595
msgid "Skipped: not a valid image or file exceeds 4MB."
msgstr "Omitido: no es una imagen válida o el archivo supera 4 MB."
-#: admin/class-everyalt-admin.php:616
+#: admin/class-everyalt-admin.php:618
msgid "Marked as decorative (alt text left empty on purpose)."
msgstr "Marcada como decorativa (texto alternativo vacío a propósito)."
-#: admin/class-everyalt-admin.php:623
+#: admin/class-everyalt-admin.php:625
msgid "No alt text returned from API."
msgstr "La API no devolvió texto alternativo."
-#: admin/class-everyalt-admin.php:649
+#: admin/class-everyalt-admin.php:651
msgid "[Title] Skipped: no API key or auto-generate disabled."
msgstr "[Título] Omitido: no hay clave API o la generación automática está desactivada."
-#: admin/class-everyalt-admin.php:654
+#: admin/class-everyalt-admin.php:656
msgid "[Title] Skipped: API key validation failed."
msgstr "[Título] Omitido: la validación de la clave API falló."
-#: admin/class-everyalt-admin.php:664
+#: admin/class-everyalt-admin.php:666
msgid "[Title] Skipped: not a valid image or file exceeds 4MB."
msgstr "[Título] Omitido: no es una imagen válida o el archivo supera 4 MB."
-#: admin/class-everyalt-admin.php:687
+#: admin/class-everyalt-admin.php:689
msgid "[Title] No title returned from API."
msgstr "[Título] La API no devolvió ningún título."
-#: admin/class-everyalt-admin.php:1033
-#: admin/partials/everyalt-options-display.php:14
-#: admin/partials/everyalt-options-display.php:61
+#: admin/class-everyalt-admin.php:1035 admin/class-everyalt-admin.php:1077
+#: admin/partials/everyalt-options-display.php:63
msgid "Settings"
msgstr "Ajustes"
-#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377
+#: admin/class-everyalt-admin.php:1078
+#: admin/partials/everyalt-options-display.php:295
+msgid "Bulk Alt Text Generator"
+msgstr "Generador masivo de texto alternativo"
+
+#: admin/class-everyalt-admin.php:1079
+#: admin/partials/everyalt-options-display.php:343
+msgid "Review Alt Text"
+msgstr "Revisar texto alternativo"
+
+#: admin/class-everyalt-admin.php:1080
+#: admin/partials/everyalt-options-display.php:391
+msgid "Bulk Image Title Generator"
+msgstr "Generador masivo de títulos de imagen"
+
+#: admin/class-everyalt-admin.php:1081
+#: admin/partials/everyalt-options-display.php:439
+msgid "Review Image Titles"
+msgstr "Revisar títulos de imagen"
+
+#: admin/class-everyalt-admin.php:1082
+msgid "Logs"
+msgstr "Registros"
+
+#: admin/class-everyalt-admin.php:1396 admin/class-everyalt-admin.php:1421
msgid "Generation failed."
msgstr "La generación falló."
-#: admin/class-everyalt-admin.php:1450
+#: admin/class-everyalt-admin.php:1494
msgid "Alt successfully updated."
msgstr "Texto alternativo actualizado correctamente."
-#: admin/class-everyalt-admin.php:1466
+#: admin/class-everyalt-admin.php:1510
msgid "Title successfully updated."
msgstr "Título actualizado correctamente."
@@ -253,335 +283,315 @@ msgstr "No se pudo codificar la imagen para la API. En algunos servidores, la co
msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this."
msgstr "La respuesta se cortó (se alcanzó el máximo de tokens). Aumenta los tokens de finalización máximos en Ajustes para solucionarlo."
-#: admin/partials/everyalt-options-display.php:13
+#: admin/partials/everyalt-options-display.php:15
msgid "Secondary menu"
msgstr "Menú secundario"
-#: admin/partials/everyalt-options-display.php:15
-#: admin/partials/everyalt-options-display.php:293
-msgid "Bulk Alt Text Generator"
-msgstr "Generador masivo de texto alternativo"
-
-#: admin/partials/everyalt-options-display.php:16
-#: admin/partials/everyalt-options-display.php:341
-msgid "Review Alt Text"
-msgstr "Revisar texto alternativo"
-
-#: admin/partials/everyalt-options-display.php:17
-#: admin/partials/everyalt-options-display.php:387
-msgid "Bulk Image Title Generator"
-msgstr "Generador masivo de títulos de imagen"
-
-#: admin/partials/everyalt-options-display.php:18
-#: admin/partials/everyalt-options-display.php:435
-msgid "Review Image Titles"
-msgstr "Revisar títulos de imagen"
-
-#: admin/partials/everyalt-options-display.php:19
-msgid "Logs"
-msgstr "Registros"
-
#. translators: 1: opening link to everyalt.com, 2: closing link tag, 3: opening link to hdc.net, 4: closing link tag
-#: admin/partials/everyalt-options-display.php:28
+#: admin/partials/everyalt-options-display.php:27
#, php-format
msgid "%1$sEveryAlt%2$s is a free, open-source project created by %3$sHDC%4$s, a web dev firm for high-stakes projects and AI builds."
msgstr "%1$sEveryAlt%2$s es un proyecto gratuito y de código abierto creado por %3$sHDC%4$s, una empresa de desarrollo web para proyectos críticos y soluciones de IA."
-#: admin/partials/everyalt-options-display.php:41
+#: admin/partials/everyalt-options-display.php:43
msgid "Settings saved."
msgstr "Ajustes guardados."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:47
+#: admin/partials/everyalt-options-display.php:49
#, php-format
msgid "The %s API key you entered could not be validated. Please check the key and try again. No settings were saved."
msgstr "No se pudo validar la clave API de %s que has introducido. Comprueba la clave e inténtalo de nuevo. No se ha guardado ningún ajuste."
-#: admin/partials/everyalt-options-display.php:54
+#: admin/partials/everyalt-options-display.php:56
msgid "Clear queue"
msgstr "Vaciar cola"
-#: admin/partials/everyalt-options-display.php:74
-#: admin/partials/everyalt-options-display.php:77
+#: admin/partials/everyalt-options-display.php:58
+msgid "Recent results"
+msgstr "Resultados recientes"
+
+#: admin/partials/everyalt-options-display.php:76
+#: admin/partials/everyalt-options-display.php:79
msgid "AI model"
msgstr "Modelo de IA"
#. translators: 1: input price in USD, 2: output price in USD
-#: admin/partials/everyalt-options-display.php:90
+#: admin/partials/everyalt-options-display.php:92
#, php-format
msgid "$%1$s input · $%2$s output per 1M tokens"
msgstr "$%1$s entrada · $%2$s salida por 1M de tokens"
-#: admin/partials/everyalt-options-display.php:101
+#: admin/partials/everyalt-options-display.php:103
msgid "All models read the image and write alt text and titles the same way. Prices are each provider’s published rates as of September 2026 and may change. You pay the provider directly; EveryAlt never bills you. The actual cost of each image is recorded on the Logs tab."
msgstr "Todos los modelos leen la imagen y escriben el texto alternativo y los títulos de la misma forma. Los precios son las tarifas publicadas por cada proveedor a septiembre de 2026 y pueden cambiar. Pagas directamente al proveedor; EveryAlt nunca te cobra. El coste real de cada imagen se registra en la pestaña Registros."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:108
+#: admin/partials/everyalt-options-display.php:110
#, php-format
msgid "%s pricing"
msgstr "Precios de %s"
-#: admin/partials/everyalt-options-display.php:116
+#: admin/partials/everyalt-options-display.php:118
msgid "API key"
msgstr "Clave API"
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:127
+#: admin/partials/everyalt-options-display.php:129
#, php-format
msgid "%s API key"
msgstr "Clave API de %s"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "Key saved"
msgstr "Clave guardada"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "No key saved"
msgstr "No hay ninguna clave guardada"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Leave blank to keep existing key"
msgstr "Deja en blanco para mantener la clave actual"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Paste your API key"
msgstr "Pega tu clave API"
-#: admin/partials/everyalt-options-display.php:136
+#: admin/partials/everyalt-options-display.php:138
msgid "Validate key"
msgstr "Validar clave"
#. translators: %s: link to OpenAI API keys page
-#: admin/partials/everyalt-options-display.php:142
+#: admin/partials/everyalt-options-display.php:144
#, php-format
msgid "Sign in at %s."
msgstr "Inicia sesión en %s."
-#: admin/partials/everyalt-options-display.php:143
+#: admin/partials/everyalt-options-display.php:145
msgid "Click “Create new secret key”, give it a name (e.g. “EveryAlt”), and copy the key. It is only shown once."
msgstr "Haz clic en “Create new secret key”, ponle un nombre (p. ej., «EveryAlt») y copia la clave. Solo se muestra una vez."
-#: admin/partials/everyalt-options-display.php:144
+#: admin/partials/everyalt-options-display.php:146
msgid "Add a payment method or prepaid credits in your OpenAI billing settings; generation fails until your account has credit."
msgstr "Añade un método de pago o créditos de prepago en los ajustes de facturación de OpenAI; la generación fallará hasta que tu cuenta tenga saldo."
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
msgid "OpenAI API data usage"
msgstr "Uso de datos de la API de OpenAI"
#. translators: %s: link to OpenAI data usage policy
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
#, php-format
msgid "OpenAI does not use API data to train its models by default. See %s."
msgstr "De forma predeterminada, OpenAI no usa los datos de la API para entrenar sus modelos. Consulta %s."
#. translators: %s: link to Google AI Studio API keys page
-#: admin/partials/everyalt-options-display.php:149
+#: admin/partials/everyalt-options-display.php:151
#, php-format
msgid "Sign in to Google AI Studio at %s."
msgstr "Inicia sesión en Google AI Studio en %s."
-#: admin/partials/everyalt-options-display.php:150
+#: admin/partials/everyalt-options-display.php:152
msgid "Click “Create API key”, choose or create a Google Cloud project, and copy the key."
msgstr "Haz clic en “Create API key”, elige o crea un proyecto de Google Cloud y copia la clave."
-#: admin/partials/everyalt-options-display.php:151
+#: admin/partials/everyalt-options-display.php:153
msgid "Optional: set up billing on the project to move from the free tier to the paid tier."
msgstr "Opcional: configura la facturación en el proyecto para pasar del nivel gratuito al de pago."
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
msgid "Gemini API terms"
msgstr "Términos de la API de Gemini"
#. translators: %s: link to Gemini API terms
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
#, php-format
msgid "Gemini has a free tier, but Google may use free-tier prompts and images to improve its products. On the paid tier (billing enabled), your content is not used that way. See the %s."
msgstr "Gemini tiene un nivel gratuito, pero Google puede usar las instrucciones y las imágenes del nivel gratuito para mejorar sus productos. En el nivel de pago (con la facturación activada), tu contenido no se usa de esa forma. Consulta los %s."
#. translators: %s: link to DeepInfra API keys page
-#: admin/partials/everyalt-options-display.php:156
+#: admin/partials/everyalt-options-display.php:158
#, php-format
msgid "Sign in or create an account at %s."
msgstr "Inicia sesión o crea una cuenta en %s."
-#: admin/partials/everyalt-options-display.php:157
+#: admin/partials/everyalt-options-display.php:159
msgid "Click “New API key”, name it (e.g. “EveryAlt”), and copy the key."
msgstr "Haz clic en “New API key”, ponle un nombre (p. ej., «EveryAlt») y copia la clave."
-#: admin/partials/everyalt-options-display.php:158
+#: admin/partials/everyalt-options-display.php:160
msgid "Add a payment method or credits in your DeepInfra billing settings. One DeepInfra key works for both DeepSeek V4.1 Flash and GLM-5.3-Flash."
msgstr "Añade un método de pago o créditos en los ajustes de facturación de DeepInfra. Una sola clave de DeepInfra sirve tanto para DeepSeek V4.1 Flash como para GLM-5.3-Flash."
-#: admin/partials/everyalt-options-display.php:162
+#: admin/partials/everyalt-options-display.php:164
msgid "Your images stay private."
msgstr "Tus imágenes siguen siendo privadas."
-#: admin/partials/everyalt-options-display.php:163
+#: admin/partials/everyalt-options-display.php:165
msgid "DeepInfra runs these models on its own infrastructure in data centers in the US and Canada, with a zero data retention policy: your images and the generated text are processed in memory and not stored, the content of requests is not logged, and your data is never used to train models."
msgstr "DeepInfra ejecuta estos modelos en su propia infraestructura, en centros de datos de EE. UU. y Canadá, con una política de retención de datos cero: tus imágenes y el texto generado se procesan en memoria y no se almacenan, el contenido de las solicitudes no se registra y tus datos nunca se usan para entrenar modelos."
-#: admin/partials/everyalt-options-display.php:168
+#: admin/partials/everyalt-options-display.php:170
msgid "DeepInfra data privacy"
msgstr "Privacidad de datos de DeepInfra"
-#: admin/partials/everyalt-options-display.php:169
+#: admin/partials/everyalt-options-display.php:171
msgid "Privacy policy"
msgstr "Política de privacidad"
-#: admin/partials/everyalt-options-display.php:170
+#: admin/partials/everyalt-options-display.php:172
msgid "Trust center (SOC 2, ISO 27001)"
msgstr "Centro de confianza (SOC 2, ISO 27001)"
-#: admin/partials/everyalt-options-display.php:179
+#: admin/partials/everyalt-options-display.php:181
msgid "Keys are stored encrypted in your WordPress database. The image is sent to the provider as base64, so generation works on localhost and behind HTTP auth."
msgstr "Las claves se guardan cifradas en tu base de datos de WordPress. La imagen se envía al proveedor en base64, por lo que la generación funciona en localhost y detrás de autenticación HTTP."
-#: admin/partials/everyalt-options-display.php:183
+#: admin/partials/everyalt-options-display.php:185
msgid "Auto-generate on upload"
msgstr "Generar automáticamente al subir"
-#: admin/partials/everyalt-options-display.php:185
+#: admin/partials/everyalt-options-display.php:187
msgid "Automatically generate alt text when images are uploaded"
msgstr "Generar automáticamente el texto alternativo cuando se suban imágenes"
-#: admin/partials/everyalt-options-display.php:187
+#: admin/partials/everyalt-options-display.php:189
msgid "Automatically generate image titles when images are uploaded"
msgstr "Generar automáticamente los títulos de imagen cuando se suban imágenes"
-#: admin/partials/everyalt-options-display.php:191
-#: admin/partials/everyalt-options-display.php:194
+#: admin/partials/everyalt-options-display.php:193
+#: admin/partials/everyalt-options-display.php:196
msgid "New uploads"
msgstr "Nuevas subidas"
-#: admin/partials/everyalt-options-display.php:195
+#: admin/partials/everyalt-options-display.php:197
msgid "Generate in the background (recommended): uploads finish right away"
msgstr "Generar en segundo plano (recomendado): las subidas terminan al instante"
-#: admin/partials/everyalt-options-display.php:196
+#: admin/partials/everyalt-options-display.php:198
msgid "Generate during the upload: alt text is ready when the upload finishes, but each upload waits for the AI"
msgstr "Generar durante la subida: el texto alternativo está listo al terminar la subida, pero cada subida espera a la IA"
-#: admin/partials/everyalt-options-display.php:198
+#: admin/partials/everyalt-options-display.php:200
msgid "Background jobs usually finish within a minute. They run on WordPress’s scheduler (WP-Cron), and also whenever an EveryAlt page is open, so they still work on sites where WP-Cron is blocked, such as sites behind a password."
msgstr "Las tareas en segundo plano suelen terminar en menos de un minuto. Se ejecutan con el programador de WordPress (WP-Cron) y también siempre que haya una página de EveryAlt abierta, así que funcionan incluso en sitios donde WP-Cron está bloqueado, como los sitios protegidos con contraseña."
-#: admin/partials/everyalt-options-display.php:202
+#: admin/partials/everyalt-options-display.php:204
msgid "Decorative images"
msgstr "Imágenes decorativas"
-#: admin/partials/everyalt-options-display.php:204
+#: admin/partials/everyalt-options-display.php:206
msgid "Leave alt text empty for purely decorative images"
msgstr "Dejar vacío el texto alternativo de las imágenes puramente decorativas"
-#: admin/partials/everyalt-options-display.php:205
+#: admin/partials/everyalt-options-display.php:207
msgid "Accessibility guidelines (WCAG) say decorative images such as dividers, spacers, and background patterns should have empty alt text so screen readers skip them. When the AI judges an image clearly decorative, EveryAlt leaves its alt text empty and marks it on the Review Alt Text tab, where you can ask for a description instead. When in doubt, the AI describes the image."
msgstr "Las pautas de accesibilidad (WCAG) indican que las imágenes decorativas, como separadores, espaciadores y fondos con patrones, deben tener el texto alternativo vacío para que los lectores de pantalla las omitan. Cuando la IA considera que una imagen es claramente decorativa, EveryAlt deja su texto alternativo vacío y la marca en la pestaña Revisar texto alternativo, donde puedes pedir una descripción. En caso de duda, la IA describe la imagen."
-#: admin/partials/everyalt-options-display.php:209
+#: admin/partials/everyalt-options-display.php:211
msgid "Monthly spending limit"
msgstr "Límite de gasto mensual"
-#: admin/partials/everyalt-options-display.php:212
+#: admin/partials/everyalt-options-display.php:214
msgid "None"
msgstr "Ninguno"
-#: admin/partials/everyalt-options-display.php:213
+#: admin/partials/everyalt-options-display.php:215
msgid "USD per month"
msgstr "USD al mes"
#. translators: %s: estimated amount spent this month, e.g. $0.42
-#: admin/partials/everyalt-options-display.php:219
+#: admin/partials/everyalt-options-display.php:221
#, php-format
msgid "Estimated spend this month: %s. When the limit is reached, generation pauses until next month (queued images wait). Leave empty for no limit. Estimates use each provider’s published prices; your provider’s invoice is authoritative."
msgstr "Gasto estimado este mes: %s. Al alcanzar el límite, la generación se pausa hasta el mes que viene (las imágenes en cola esperan). Déjalo vacío para no tener límite. Las estimaciones usan los precios publicados por cada proveedor; la factura de tu proveedor es la referencia válida."
-#: admin/partials/everyalt-options-display.php:228
+#: admin/partials/everyalt-options-display.php:230
msgid "Existing posts"
msgstr "Entradas existentes"
-#: admin/partials/everyalt-options-display.php:230
+#: admin/partials/everyalt-options-display.php:232
msgid "Show Media Library alt text on images already in posts that have none"
msgstr "Mostrar el texto alternativo de la biblioteca de medios en las imágenes ya incluidas en entradas que no lo tengan"
-#: admin/partials/everyalt-options-display.php:231
+#: admin/partials/everyalt-options-display.php:233
msgid "When an image is added to a post, WordPress copies its alt text into the post at that moment, so alt text generated later doesn’t appear in older posts. With this on, empty alt text in posts is filled in from the Media Library when the page is displayed. Your posts are not modified, and alt text written in a post is never replaced. Requires WordPress 6.0 or later."
msgstr "Cuando se añade una imagen a una entrada, WordPress copia su texto alternativo en la entrada en ese momento, por lo que el texto alternativo generado después no aparece en las entradas antiguas. Con esta opción activada, el texto alternativo vacío de las entradas se completa desde la biblioteca de medios al mostrar la página. Tus entradas no se modifican y el texto alternativo escrito en una entrada nunca se sustituye. Requiere WordPress 6.0 o posterior."
-#: admin/partials/everyalt-options-display.php:235
+#: admin/partials/everyalt-options-display.php:237
msgid "Language"
msgstr "Idioma"
#. translators: %s: site language name in English, e.g. German
-#: admin/partials/everyalt-options-display.php:242
+#: admin/partials/everyalt-options-display.php:244
#, php-format
msgid "Automatic (site language: %s)"
msgstr "Automático (idioma del sitio: %s)"
-#: admin/partials/everyalt-options-display.php:249
+#: admin/partials/everyalt-options-display.php:251
msgid "Language for generated alt text and titles. Automatic uses your site language, or each image’s own language on multilingual sites using Polylang or WPML."
msgstr "Idioma del texto alternativo y los títulos generados. «Automático» usa el idioma de tu sitio o, en sitios multilingües con Polylang o WPML, el idioma de cada imagen."
-#: admin/partials/everyalt-options-display.php:253
+#: admin/partials/everyalt-options-display.php:255
msgid "Max completion tokens"
msgstr "Tokens de finalización máximos"
-#: admin/partials/everyalt-options-display.php:256
+#: admin/partials/everyalt-options-display.php:258
msgid "Maximum tokens the model can use for its response, including any reasoning. Default 1024. Leave empty to use default."
msgstr "Número máximo de tokens que el modelo puede usar en su respuesta, incluido el razonamiento. Valor predeterminado: 1024. Déjalo vacío para usar el valor predeterminado."
-#: admin/partials/everyalt-options-display.php:260
+#: admin/partials/everyalt-options-display.php:262
msgid "Alt text prompt"
msgstr "Instrucción para el texto alternativo"
-#: admin/partials/everyalt-options-display.php:268
+#: admin/partials/everyalt-options-display.php:270
msgid "Instruction sent to the AI with each image. Edit as needed. The model should return only the alt text, no extra wording."
msgstr "Instrucción enviada a la IA con cada imagen. Edítala según necesites. El modelo debe devolver solo el texto alternativo, sin texto adicional."
-#: admin/partials/everyalt-options-display.php:272
+#: admin/partials/everyalt-options-display.php:274
msgid "Image title prompt"
msgstr "Instrucción para el título de imagen"
-#: admin/partials/everyalt-options-display.php:280
+#: admin/partials/everyalt-options-display.php:282
msgid "Instruction sent to the AI when generating image titles. Titles are usually short (a few words). The model should return only the title, no extra wording."
msgstr "Instrucción enviada a la IA al generar títulos de imagen. Los títulos suelen ser cortos (unas pocas palabras). El modelo debe devolver solo el título, sin texto adicional."
-#: admin/partials/everyalt-options-display.php:285
+#: admin/partials/everyalt-options-display.php:287
msgid "Save Settings"
msgstr "Guardar ajustes"
-#: admin/partials/everyalt-options-display.php:294
+#: admin/partials/everyalt-options-display.php:296
#, php-format
msgid "This page finds all images in your media library that do not currently have alt text and lets you generate new alt text with EveryAlt quickly. To see existing images that already have alt text, go to the Review Alt Text tab."
msgstr "Esta página encuentra todas las imágenes de tu biblioteca de medios que aún no tienen texto alternativo y te permite generar uno con EveryAlt rápidamente. Para ver las imágenes que ya tienen texto alternativo, ve a la pestaña Revisar texto alternativo."
-#: admin/partials/everyalt-options-display.php:296
-#: admin/partials/everyalt-options-display.php:390
+#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:394
msgid "Please add an API key for the selected AI model in the Settings tab first."
msgstr "Primero añade una clave API para el modelo de IA seleccionado en la pestaña Ajustes."
-#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:300
msgid "No images without alt text found."
msgstr "No se encontraron imágenes sin texto alternativo."
-#: admin/partials/everyalt-options-display.php:301
-#: admin/partials/everyalt-options-display.php:395
+#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:399
msgid "Select all"
msgstr "Seleccionar todo"
-#: admin/partials/everyalt-options-display.php:302
-#: admin/partials/everyalt-options-display.php:396
+#: admin/partials/everyalt-options-display.php:304
+#: admin/partials/everyalt-options-display.php:400
msgid "Select none"
msgstr "No seleccionar ninguna"
-#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:305
msgid "Generate alt text for selected"
msgstr "Generar texto alternativo para los seleccionados"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:307
-#: admin/partials/everyalt-options-display.php:401
+#: admin/partials/everyalt-options-display.php:309
+#: admin/partials/everyalt-options-display.php:405
#, php-format
msgid "Generate for all %s image"
msgid_plural "Generate for all %s images"
@@ -589,10 +599,10 @@ msgstr[0] "Generar para %s imagen"
msgstr[1] "Generar para las %s imágenes"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:311
-#: admin/partials/everyalt-options-display.php:349
-#: admin/partials/everyalt-options-display.php:405
-#: admin/partials/everyalt-options-display.php:443
+#: admin/partials/everyalt-options-display.php:313
+#: admin/partials/everyalt-options-display.php:351
+#: admin/partials/everyalt-options-display.php:409
+#: admin/partials/everyalt-options-display.php:447
#, php-format
msgid "%s image"
msgid_plural "%s images"
@@ -600,136 +610,158 @@ msgstr[0] "%s imagen"
msgstr[1] "%s imágenes"
#. translators: %s: image title
-#: admin/partials/everyalt-options-display.php:319
-#: admin/partials/everyalt-options-display.php:413
+#: admin/partials/everyalt-options-display.php:321
+#: admin/partials/everyalt-options-display.php:417
#, php-format
msgid "Select “%s”"
msgstr "Seleccionar «%s»"
-#: admin/partials/everyalt-options-display.php:326
-#: admin/partials/everyalt-options-display.php:363
-#: admin/partials/everyalt-options-display.php:420
-#: admin/partials/everyalt-options-display.php:453
+#: admin/partials/everyalt-options-display.php:328
+#: admin/partials/everyalt-options-display.php:365
+#: admin/partials/everyalt-options-display.php:424
+#: admin/partials/everyalt-options-display.php:457
msgid "Edit"
msgstr "Editar"
-#: admin/partials/everyalt-options-display.php:342
+#: admin/partials/everyalt-options-display.php:344
msgid "Images that already have alt text, plus images marked decorative (alt text left empty on purpose). Edit and save, or regenerate with EveryAlt."
msgstr "Imágenes que ya tienen texto alternativo, además de las imágenes marcadas como decorativas (texto alternativo vacío a propósito). Edita y guarda, o regenera con EveryAlt."
-#: admin/partials/everyalt-options-display.php:344
-#: admin/partials/everyalt-options-display.php:438
+#: admin/partials/everyalt-options-display.php:346
+#: admin/partials/everyalt-options-display.php:442
msgid "Please add an API key for the selected AI model in the Settings tab to use Regenerate."
msgstr "Añade una clave API para el modelo de IA seleccionado en la pestaña Ajustes para usar Regenerar."
-#: admin/partials/everyalt-options-display.php:347
+#: admin/partials/everyalt-options-display.php:349
msgid "No images with alt text found."
msgstr "No se encontraron imágenes con texto alternativo."
-#: admin/partials/everyalt-options-display.php:360
+#: admin/partials/everyalt-options-display.php:362
msgid "Decorative"
msgstr "Decorativa"
-#: admin/partials/everyalt-options-display.php:365
+#. translators: %s: image title
+#: admin/partials/everyalt-options-display.php:367
+#, php-format
+msgid "Alt text for “%s”"
+msgstr "Texto alternativo de «%s»"
+
+#: admin/partials/everyalt-options-display.php:368
msgid "Empty on purpose: screen readers skip this image."
msgstr "Vacío a propósito: los lectores de pantalla omiten esta imagen."
-#: admin/partials/everyalt-options-display.php:367
-#: admin/partials/everyalt-options-display.php:457
+#: admin/partials/everyalt-options-display.php:370
+#: admin/partials/everyalt-options-display.php:463
msgid "Save"
msgstr "Guardar"
-#: admin/partials/everyalt-options-display.php:369
+#: admin/partials/everyalt-options-display.php:372
msgid "Describe anyway"
msgstr "Describir de todos modos"
-#: admin/partials/everyalt-options-display.php:371
-#: admin/partials/everyalt-options-display.php:458
+#: admin/partials/everyalt-options-display.php:374
+#: admin/partials/everyalt-options-display.php:464
msgid "Regenerate"
msgstr "Regenerar"
-#: admin/partials/everyalt-options-display.php:388
+#: admin/partials/everyalt-options-display.php:392
#, php-format
msgid "This page finds images whose title is still the raw upload filename (e.g. \"IMG_1234\") and lets you generate descriptive titles with EveryAlt quickly. To see images that already have a custom title, go to the Review Image Titles tab."
msgstr "Esta página encuentra las imágenes cuyo título sigue siendo el nombre de archivo original de la subida (p. ej., «IMG_1234») y te permite generar títulos descriptivos con EveryAlt rápidamente. Para ver las imágenes que ya tienen un título personalizado, ve a la pestaña Revisar títulos de imagen."
-#: admin/partials/everyalt-options-display.php:392
+#: admin/partials/everyalt-options-display.php:396
msgid "No images needing a title found."
msgstr "No se encontraron imágenes que necesiten título."
-#: admin/partials/everyalt-options-display.php:397
+#: admin/partials/everyalt-options-display.php:401
msgid "Generate titles for selected"
msgstr "Generar títulos para los seleccionados"
-#: admin/partials/everyalt-options-display.php:436
+#: admin/partials/everyalt-options-display.php:440
msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt."
msgstr "Imágenes que ya tienen un título personalizado. Edita y guarda, o regenera con EveryAlt."
-#: admin/partials/everyalt-options-display.php:441
+#: admin/partials/everyalt-options-display.php:445
msgid "No images with a custom title found."
msgstr "No se encontraron imágenes con título personalizado."
-#: admin/partials/everyalt-options-display.php:473
+#. translators: %s: image file name
+#: admin/partials/everyalt-options-display.php:460
+#, php-format
+msgid "Title for image file “%s”"
+msgstr "Título de imagen para el archivo «%s»"
+
+#: admin/partials/everyalt-options-display.php:480
msgid "Spending"
msgstr "Gasto"
#. translators: 1: spent this month, 2: monthly limit
-#: admin/partials/everyalt-options-display.php:484
+#: admin/partials/everyalt-options-display.php:491
#, php-format
msgid "This month: %1$s of your %2$s limit."
msgstr "Este mes: %1$s de tu límite de %2$s."
#. translators: %s: spent this month
-#: admin/partials/everyalt-options-display.php:487
+#: admin/partials/everyalt-options-display.php:494
#, php-format
msgid "This month: %s (no limit set)."
msgstr "Este mes: %s (sin límite establecido)."
-#: admin/partials/everyalt-options-display.php:499
+#. translators: 1: spent this month, 2: monthly limit
+#: admin/partials/everyalt-options-display.php:500
+#, php-format
+msgid "%1$s of %2$s"
+msgstr "%1$s de %2$s"
+
+#: admin/partials/everyalt-options-display.php:500
+msgid "Monthly spending limit used"
+msgstr "Límite de gasto mensual utilizado"
+
+#: admin/partials/everyalt-options-display.php:506
msgid "Month"
msgstr "Mes"
-#: admin/partials/everyalt-options-display.php:500
+#: admin/partials/everyalt-options-display.php:507
msgid "Requests"
msgstr "Solicitudes"
-#: admin/partials/everyalt-options-display.php:501
+#: admin/partials/everyalt-options-display.php:508
msgid "Estimated cost"
msgstr "Coste estimado"
-#: admin/partials/everyalt-options-display.php:502
+#: admin/partials/everyalt-options-display.php:509
msgid "By model"
msgstr "Por modelo"
-#: admin/partials/everyalt-options-display.php:526
+#: admin/partials/everyalt-options-display.php:533
msgid "No spending recorded yet."
msgstr "Aún no se ha registrado ningún gasto."
-#: admin/partials/everyalt-options-display.php:528
+#: admin/partials/everyalt-options-display.php:535
msgid "Estimated from the tokens each request used and the provider’s published prices. Your provider’s invoice is authoritative."
msgstr "Estimado a partir de los tokens de cada solicitud y los precios publicados por el proveedor. La factura de tu proveedor es la referencia válida."
-#: admin/partials/everyalt-options-display.php:530
+#: admin/partials/everyalt-options-display.php:537
msgid "Generation Log"
msgstr "Registro de generación"
-#: admin/partials/everyalt-options-display.php:531
+#: admin/partials/everyalt-options-display.php:538
msgid "Last 100 alt text generation attempts (successes and failures)."
msgstr "Últimos 100 intentos de generación de texto alternativo (éxitos y fallos)."
-#: admin/partials/everyalt-options-display.php:534
+#: admin/partials/everyalt-options-display.php:541
msgid "Export as CSV"
msgstr "Exportar como CSV"
-#: admin/partials/everyalt-options-display.php:542
+#: admin/partials/everyalt-options-display.php:549
msgid "Attachment"
msgstr "Adjunto"
-#: admin/partials/everyalt-options-display.php:546
+#: admin/partials/everyalt-options-display.php:553
msgid "Cost"
msgstr "Coste"
-#: admin/partials/everyalt-options-display.php:598
+#: admin/partials/everyalt-options-display.php:605
msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log."
msgstr "Aún no hay entradas en el registro. Genera texto alternativo desde la pestaña Masivo o al subir imágenes para completar este registro."
diff --git a/languages/everyalt-fr_FR.mo b/languages/everyalt-fr_FR.mo
index 447f676..16ebba0 100644
Binary files a/languages/everyalt-fr_FR.mo and b/languages/everyalt-fr_FR.mo differ
diff --git a/languages/everyalt-fr_FR.po b/languages/everyalt-fr_FR.po
index 6a01d37..cebcd43 100644
--- a/languages/everyalt-fr_FR.po
+++ b/languages/everyalt-fr_FR.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EveryAlt 1.1.0\n"
"Report-Msgid-Bugs-To: https://hdc.net\n"
-"POT-Creation-Date: 2026-09-27 16:34+0000\n"
+"POT-Creation-Date: 2026-09-27 16:47+0000\n"
"PO-Revision-Date: 2026-09-27 00:00+0000\n"
"Last-Translator: HDC \n"
"Language-Team: Français \n"
@@ -24,7 +24,7 @@ msgid "Skipped: monthly spending limit of %s reached. Generation resumes next mo
msgstr "Ignoré : limite de dépenses mensuelle de %s atteinte. La génération reprendra le mois prochain, ou augmentez la limite dans Réglages."
#: admin/class-everyalt-admin.php:164
-#: admin/partials/everyalt-options-display.php:541
+#: admin/partials/everyalt-options-display.php:548
msgid "Time"
msgstr "Heure"
@@ -33,17 +33,17 @@ msgid "Attachment ID"
msgstr "ID de la pièce jointe"
#: admin/class-everyalt-admin.php:166
-#: admin/partials/everyalt-options-display.php:543
+#: admin/partials/everyalt-options-display.php:550
msgid "Status"
msgstr "Statut"
#: admin/class-everyalt-admin.php:167
-#: admin/partials/everyalt-options-display.php:544
+#: admin/partials/everyalt-options-display.php:551
msgid "Model"
msgstr "Modèle"
#: admin/class-everyalt-admin.php:168
-#: admin/partials/everyalt-options-display.php:545
+#: admin/partials/everyalt-options-display.php:552
msgid "Message / Alt text"
msgstr "Message / Texte alternatif"
@@ -52,17 +52,18 @@ msgid "Cost (USD)"
msgstr "Coût (USD)"
#: admin/class-everyalt-admin.php:170
-#: admin/partials/everyalt-options-display.php:547
+#: admin/partials/everyalt-options-display.php:554
+#: admin/partials/everyalt-options-display.php:598
msgid "Details"
msgstr "Détails"
-#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432
-#: admin/partials/everyalt-options-display.php:583
+#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:434
+#: admin/partials/everyalt-options-display.php:590
msgid "Error"
msgstr "Erreur"
#: admin/class-everyalt-admin.php:174
-#: admin/partials/everyalt-options-display.php:581
+#: admin/partials/everyalt-options-display.php:588
msgid "Success"
msgstr "Succès"
@@ -137,111 +138,140 @@ msgstr "File d'attente vidée."
msgid "Marked as decorative (alt text left empty on purpose)"
msgstr "Marquée comme décorative (texte alternatif laissé vide volontairement)"
-#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458
+#. translators: %d: number of images finished in this batch
+#: admin/class-everyalt-admin.php:433
+#, php-format
+msgid "%d finished."
+msgstr "%d terminée(s)."
+
+#: admin/class-everyalt-admin.php:435 admin/class-everyalt-admin.php:460
msgid "Error:"
msgstr "Erreur :"
-#: admin/class-everyalt-admin.php:434
+#: admin/class-everyalt-admin.php:436
msgid "Request failed"
msgstr "La requête a échoué"
-#: admin/class-everyalt-admin.php:435
+#: admin/class-everyalt-admin.php:437
msgid "Saved!"
msgstr "Enregistré !"
-#: admin/class-everyalt-admin.php:436
+#: admin/class-everyalt-admin.php:438
msgid "Save failed"
msgstr "L'enregistrement a échoué"
-#: admin/class-everyalt-admin.php:437
+#: admin/class-everyalt-admin.php:439
msgid "Regenerated!"
msgstr "Régénéré !"
-#: admin/class-everyalt-admin.php:438
+#: admin/class-everyalt-admin.php:440
msgid "Regenerate failed"
msgstr "La régénération a échoué"
-#: admin/class-everyalt-admin.php:451 admin/class-everyalt-admin.php:1052
-#: admin/class-everyalt-admin.php:1053
-#: admin/partials/everyalt-options-display.php:11
+#: admin/class-everyalt-admin.php:453 admin/class-everyalt-admin.php:1054
+#: admin/class-everyalt-admin.php:1055
+#: admin/partials/everyalt-options-display.php:13
msgid "EveryAlt"
msgstr "EveryAlt"
-#: admin/class-everyalt-admin.php:452
+#: admin/class-everyalt-admin.php:454
msgid "Generate alt text with EveryAlt"
msgstr "Générer le texte alternatif avec EveryAlt"
-#: admin/class-everyalt-admin.php:453
+#: admin/class-everyalt-admin.php:455
msgid "Select or upload an image to generate alt text."
msgstr "Sélectionnez ou téléversez une image pour générer le texte alternatif."
-#: admin/class-everyalt-admin.php:454
+#: admin/class-everyalt-admin.php:456
msgid "Generating…"
msgstr "Génération…"
-#: admin/class-everyalt-admin.php:455
+#: admin/class-everyalt-admin.php:457
msgid "Alt text generated."
msgstr "Texte alternatif généré."
-#: admin/class-everyalt-admin.php:456
+#: admin/class-everyalt-admin.php:458
msgid "Could not generate alt text."
msgstr "Impossible de générer le texte alternatif."
-#: admin/class-everyalt-admin.php:457
+#: admin/class-everyalt-admin.php:459
msgid "Marked as decorative: alt text left empty on purpose."
msgstr "Marquée comme décorative : texte alternatif laissé vide volontairement."
-#: admin/class-everyalt-admin.php:578
+#: admin/class-everyalt-admin.php:580
msgid "Skipped: no API key or auto-generate disabled."
msgstr "Ignoré : pas de clé API ou génération automatique désactivée."
-#: admin/class-everyalt-admin.php:583
+#: admin/class-everyalt-admin.php:585
msgid "Skipped: API key validation failed."
msgstr "Ignoré : la validation de la clé API a échoué."
-#: admin/class-everyalt-admin.php:593
+#: admin/class-everyalt-admin.php:595
msgid "Skipped: not a valid image or file exceeds 4MB."
msgstr "Ignoré : image non valide ou fichier supérieur à 4 Mo."
-#: admin/class-everyalt-admin.php:616
+#: admin/class-everyalt-admin.php:618
msgid "Marked as decorative (alt text left empty on purpose)."
msgstr "Marquée comme décorative (texte alternatif laissé vide volontairement)."
-#: admin/class-everyalt-admin.php:623
+#: admin/class-everyalt-admin.php:625
msgid "No alt text returned from API."
msgstr "L'API n'a renvoyé aucun texte alternatif."
-#: admin/class-everyalt-admin.php:649
+#: admin/class-everyalt-admin.php:651
msgid "[Title] Skipped: no API key or auto-generate disabled."
msgstr "[Titre] Ignoré : pas de clé API ou génération automatique désactivée."
-#: admin/class-everyalt-admin.php:654
+#: admin/class-everyalt-admin.php:656
msgid "[Title] Skipped: API key validation failed."
msgstr "[Titre] Ignoré : la validation de la clé API a échoué."
-#: admin/class-everyalt-admin.php:664
+#: admin/class-everyalt-admin.php:666
msgid "[Title] Skipped: not a valid image or file exceeds 4MB."
msgstr "[Titre] Ignoré : image non valide ou fichier supérieur à 4 Mo."
-#: admin/class-everyalt-admin.php:687
+#: admin/class-everyalt-admin.php:689
msgid "[Title] No title returned from API."
msgstr "[Titre] L'API n'a renvoyé aucun titre."
-#: admin/class-everyalt-admin.php:1033
-#: admin/partials/everyalt-options-display.php:14
-#: admin/partials/everyalt-options-display.php:61
+#: admin/class-everyalt-admin.php:1035 admin/class-everyalt-admin.php:1077
+#: admin/partials/everyalt-options-display.php:63
msgid "Settings"
msgstr "Réglages"
-#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377
+#: admin/class-everyalt-admin.php:1078
+#: admin/partials/everyalt-options-display.php:295
+msgid "Bulk Alt Text Generator"
+msgstr "Générateur en masse de texte alternatif"
+
+#: admin/class-everyalt-admin.php:1079
+#: admin/partials/everyalt-options-display.php:343
+msgid "Review Alt Text"
+msgstr "Réviser le texte alternatif"
+
+#: admin/class-everyalt-admin.php:1080
+#: admin/partials/everyalt-options-display.php:391
+msgid "Bulk Image Title Generator"
+msgstr "Générateur en masse de titres d'image"
+
+#: admin/class-everyalt-admin.php:1081
+#: admin/partials/everyalt-options-display.php:439
+msgid "Review Image Titles"
+msgstr "Réviser les titres d'image"
+
+#: admin/class-everyalt-admin.php:1082
+msgid "Logs"
+msgstr "Journaux"
+
+#: admin/class-everyalt-admin.php:1396 admin/class-everyalt-admin.php:1421
msgid "Generation failed."
msgstr "La génération a échoué."
-#: admin/class-everyalt-admin.php:1450
+#: admin/class-everyalt-admin.php:1494
msgid "Alt successfully updated."
msgstr "Texte alternatif mis à jour avec succès."
-#: admin/class-everyalt-admin.php:1466
+#: admin/class-everyalt-admin.php:1510
msgid "Title successfully updated."
msgstr "Titre mis à jour avec succès."
@@ -253,335 +283,315 @@ msgstr "L'image n'a pas pu être encodée pour l'API. Sur certains serveurs, l'e
msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this."
msgstr "La réponse a été tronquée (limite de jetons atteinte). Augmentez les jetons de complétion max dans Réglages pour corriger."
-#: admin/partials/everyalt-options-display.php:13
+#: admin/partials/everyalt-options-display.php:15
msgid "Secondary menu"
msgstr "Menu secondaire"
-#: admin/partials/everyalt-options-display.php:15
-#: admin/partials/everyalt-options-display.php:293
-msgid "Bulk Alt Text Generator"
-msgstr "Générateur en masse de texte alternatif"
-
-#: admin/partials/everyalt-options-display.php:16
-#: admin/partials/everyalt-options-display.php:341
-msgid "Review Alt Text"
-msgstr "Réviser le texte alternatif"
-
-#: admin/partials/everyalt-options-display.php:17
-#: admin/partials/everyalt-options-display.php:387
-msgid "Bulk Image Title Generator"
-msgstr "Générateur en masse de titres d'image"
-
-#: admin/partials/everyalt-options-display.php:18
-#: admin/partials/everyalt-options-display.php:435
-msgid "Review Image Titles"
-msgstr "Réviser les titres d'image"
-
-#: admin/partials/everyalt-options-display.php:19
-msgid "Logs"
-msgstr "Journaux"
-
#. translators: 1: opening link to everyalt.com, 2: closing link tag, 3: opening link to hdc.net, 4: closing link tag
-#: admin/partials/everyalt-options-display.php:28
+#: admin/partials/everyalt-options-display.php:27
#, php-format
msgid "%1$sEveryAlt%2$s is a free, open-source project created by %3$sHDC%4$s, a web dev firm for high-stakes projects and AI builds."
msgstr "%1$sEveryAlt%2$s est un projet gratuit et open source créé par %3$sHDC%4$s, une agence de développement web spécialisée dans les projets à fort enjeu et les solutions d'IA."
-#: admin/partials/everyalt-options-display.php:41
+#: admin/partials/everyalt-options-display.php:43
msgid "Settings saved."
msgstr "Réglages enregistrés."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:47
+#: admin/partials/everyalt-options-display.php:49
#, php-format
msgid "The %s API key you entered could not be validated. Please check the key and try again. No settings were saved."
msgstr "La clé API %s que vous avez saisie n'a pas pu être validée. Vérifiez la clé et réessayez. Aucun réglage n'a été enregistré."
-#: admin/partials/everyalt-options-display.php:54
+#: admin/partials/everyalt-options-display.php:56
msgid "Clear queue"
msgstr "Vider la file d'attente"
-#: admin/partials/everyalt-options-display.php:74
-#: admin/partials/everyalt-options-display.php:77
+#: admin/partials/everyalt-options-display.php:58
+msgid "Recent results"
+msgstr "Résultats récents"
+
+#: admin/partials/everyalt-options-display.php:76
+#: admin/partials/everyalt-options-display.php:79
msgid "AI model"
msgstr "Modèle d'IA"
#. translators: 1: input price in USD, 2: output price in USD
-#: admin/partials/everyalt-options-display.php:90
+#: admin/partials/everyalt-options-display.php:92
#, php-format
msgid "$%1$s input · $%2$s output per 1M tokens"
msgstr "%1$s $ en entrée · %2$s $ en sortie par million de jetons"
-#: admin/partials/everyalt-options-display.php:101
+#: admin/partials/everyalt-options-display.php:103
msgid "All models read the image and write alt text and titles the same way. Prices are each provider’s published rates as of September 2026 and may change. You pay the provider directly; EveryAlt never bills you. The actual cost of each image is recorded on the Logs tab."
msgstr "Tous les modèles analysent l'image et rédigent le texte alternatif et les titres de la même manière. Les prix correspondent aux tarifs publiés par chaque fournisseur en septembre 2026 et peuvent changer. Vous payez directement le fournisseur ; EveryAlt ne vous facture jamais rien. Le coût réel de chaque image est enregistré dans l'onglet Journaux."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:108
+#: admin/partials/everyalt-options-display.php:110
#, php-format
msgid "%s pricing"
msgstr "Tarifs %s"
-#: admin/partials/everyalt-options-display.php:116
+#: admin/partials/everyalt-options-display.php:118
msgid "API key"
msgstr "Clé API"
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:127
+#: admin/partials/everyalt-options-display.php:129
#, php-format
msgid "%s API key"
msgstr "Clé API %s"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "Key saved"
msgstr "Clé enregistrée"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "No key saved"
msgstr "Aucune clé enregistrée"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Leave blank to keep existing key"
msgstr "Laisser vide pour conserver la clé actuelle"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Paste your API key"
msgstr "Collez votre clé API"
-#: admin/partials/everyalt-options-display.php:136
+#: admin/partials/everyalt-options-display.php:138
msgid "Validate key"
msgstr "Valider la clé"
#. translators: %s: link to OpenAI API keys page
-#: admin/partials/everyalt-options-display.php:142
+#: admin/partials/everyalt-options-display.php:144
#, php-format
msgid "Sign in at %s."
msgstr "Connectez-vous sur %s."
-#: admin/partials/everyalt-options-display.php:143
+#: admin/partials/everyalt-options-display.php:145
msgid "Click “Create new secret key”, give it a name (e.g. “EveryAlt”), and copy the key. It is only shown once."
msgstr "Cliquez sur “Create new secret key”, donnez-lui un nom (par ex. “EveryAlt”) et copiez la clé. Elle n'est affichée qu'une seule fois."
-#: admin/partials/everyalt-options-display.php:144
+#: admin/partials/everyalt-options-display.php:146
msgid "Add a payment method or prepaid credits in your OpenAI billing settings; generation fails until your account has credit."
msgstr "Ajoutez un moyen de paiement ou des crédits prépayés dans les paramètres de facturation OpenAI ; la génération échouera tant que votre compte n'aura pas de crédit."
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
msgid "OpenAI API data usage"
msgstr "Utilisation des données de l'API OpenAI"
#. translators: %s: link to OpenAI data usage policy
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
#, php-format
msgid "OpenAI does not use API data to train its models by default. See %s."
msgstr "Par défaut, OpenAI n'utilise pas les données de l'API pour entraîner ses modèles. Voir %s."
#. translators: %s: link to Google AI Studio API keys page
-#: admin/partials/everyalt-options-display.php:149
+#: admin/partials/everyalt-options-display.php:151
#, php-format
msgid "Sign in to Google AI Studio at %s."
msgstr "Connectez-vous à Google AI Studio sur %s."
-#: admin/partials/everyalt-options-display.php:150
+#: admin/partials/everyalt-options-display.php:152
msgid "Click “Create API key”, choose or create a Google Cloud project, and copy the key."
msgstr "Cliquez sur “Create API key”, choisissez ou créez un projet Google Cloud, puis copiez la clé."
-#: admin/partials/everyalt-options-display.php:151
+#: admin/partials/everyalt-options-display.php:153
msgid "Optional: set up billing on the project to move from the free tier to the paid tier."
msgstr "Facultatif : activez la facturation sur le projet pour passer de l'offre gratuite à l'offre payante."
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
msgid "Gemini API terms"
msgstr "Conditions de l'API Gemini"
#. translators: %s: link to Gemini API terms
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
#, php-format
msgid "Gemini has a free tier, but Google may use free-tier prompts and images to improve its products. On the paid tier (billing enabled), your content is not used that way. See the %s."
msgstr "Gemini propose une offre gratuite, mais Google peut utiliser les invites et les images de l'offre gratuite pour améliorer ses produits. Avec l'offre payante (facturation activée), votre contenu n'est pas utilisé de cette façon. Voir les %s."
#. translators: %s: link to DeepInfra API keys page
-#: admin/partials/everyalt-options-display.php:156
+#: admin/partials/everyalt-options-display.php:158
#, php-format
msgid "Sign in or create an account at %s."
msgstr "Connectez-vous ou créez un compte sur %s."
-#: admin/partials/everyalt-options-display.php:157
+#: admin/partials/everyalt-options-display.php:159
msgid "Click “New API key”, name it (e.g. “EveryAlt”), and copy the key."
msgstr "Cliquez sur “New API key”, donnez-lui un nom (par ex. “EveryAlt”) et copiez la clé."
-#: admin/partials/everyalt-options-display.php:158
+#: admin/partials/everyalt-options-display.php:160
msgid "Add a payment method or credits in your DeepInfra billing settings. One DeepInfra key works for both DeepSeek V4.1 Flash and GLM-5.3-Flash."
msgstr "Ajoutez un moyen de paiement ou des crédits dans les paramètres de facturation DeepInfra. Une seule clé DeepInfra fonctionne pour DeepSeek V4.1 Flash et GLM-5.3-Flash."
-#: admin/partials/everyalt-options-display.php:162
+#: admin/partials/everyalt-options-display.php:164
msgid "Your images stay private."
msgstr "Vos images restent privées."
-#: admin/partials/everyalt-options-display.php:163
+#: admin/partials/everyalt-options-display.php:165
msgid "DeepInfra runs these models on its own infrastructure in data centers in the US and Canada, with a zero data retention policy: your images and the generated text are processed in memory and not stored, the content of requests is not logged, and your data is never used to train models."
msgstr "DeepInfra exécute ces modèles sur sa propre infrastructure, dans des centres de données situés aux États-Unis et au Canada, avec une politique de conservation zéro des données : vos images et le texte généré sont traités en mémoire sans être stockés, le contenu des requêtes n'est pas journalisé et vos données ne sont jamais utilisées pour entraîner des modèles."
-#: admin/partials/everyalt-options-display.php:168
+#: admin/partials/everyalt-options-display.php:170
msgid "DeepInfra data privacy"
msgstr "Confidentialité des données chez DeepInfra"
-#: admin/partials/everyalt-options-display.php:169
+#: admin/partials/everyalt-options-display.php:171
msgid "Privacy policy"
msgstr "Politique de confidentialité"
-#: admin/partials/everyalt-options-display.php:170
+#: admin/partials/everyalt-options-display.php:172
msgid "Trust center (SOC 2, ISO 27001)"
msgstr "Centre de confiance (SOC 2, ISO 27001)"
-#: admin/partials/everyalt-options-display.php:179
+#: admin/partials/everyalt-options-display.php:181
msgid "Keys are stored encrypted in your WordPress database. The image is sent to the provider as base64, so generation works on localhost and behind HTTP auth."
msgstr "Les clés sont stockées chiffrées dans votre base de données WordPress. L'image est envoyée au fournisseur en base64, la génération fonctionne donc en localhost et derrière une authentification HTTP."
-#: admin/partials/everyalt-options-display.php:183
+#: admin/partials/everyalt-options-display.php:185
msgid "Auto-generate on upload"
msgstr "Générer automatiquement à l'upload"
-#: admin/partials/everyalt-options-display.php:185
+#: admin/partials/everyalt-options-display.php:187
msgid "Automatically generate alt text when images are uploaded"
msgstr "Générer automatiquement le texte alternatif lors du téléchargement des images"
-#: admin/partials/everyalt-options-display.php:187
+#: admin/partials/everyalt-options-display.php:189
msgid "Automatically generate image titles when images are uploaded"
msgstr "Générer automatiquement les titres d'image lors du téléversement des images"
-#: admin/partials/everyalt-options-display.php:191
-#: admin/partials/everyalt-options-display.php:194
+#: admin/partials/everyalt-options-display.php:193
+#: admin/partials/everyalt-options-display.php:196
msgid "New uploads"
msgstr "Nouveaux téléversements"
-#: admin/partials/everyalt-options-display.php:195
+#: admin/partials/everyalt-options-display.php:197
msgid "Generate in the background (recommended): uploads finish right away"
msgstr "Générer en arrière-plan (recommandé) : les téléversements se terminent immédiatement"
-#: admin/partials/everyalt-options-display.php:196
+#: admin/partials/everyalt-options-display.php:198
msgid "Generate during the upload: alt text is ready when the upload finishes, but each upload waits for the AI"
msgstr "Générer pendant le téléversement : le texte alternatif est prêt à la fin du téléversement, mais chaque téléversement attend l'IA"
-#: admin/partials/everyalt-options-display.php:198
+#: admin/partials/everyalt-options-display.php:200
msgid "Background jobs usually finish within a minute. They run on WordPress’s scheduler (WP-Cron), and also whenever an EveryAlt page is open, so they still work on sites where WP-Cron is blocked, such as sites behind a password."
msgstr "Les tâches en arrière-plan se terminent généralement en moins d'une minute. Elles s'exécutent via le planificateur de WordPress (WP-Cron), ainsi qu'à chaque fois qu'une page EveryAlt est ouverte : elles fonctionnent donc même sur les sites où WP-Cron est bloqué, comme les sites protégés par mot de passe."
-#: admin/partials/everyalt-options-display.php:202
+#: admin/partials/everyalt-options-display.php:204
msgid "Decorative images"
msgstr "Images décoratives"
-#: admin/partials/everyalt-options-display.php:204
+#: admin/partials/everyalt-options-display.php:206
msgid "Leave alt text empty for purely decorative images"
msgstr "Laisser le texte alternatif vide pour les images purement décoratives"
-#: admin/partials/everyalt-options-display.php:205
+#: admin/partials/everyalt-options-display.php:207
msgid "Accessibility guidelines (WCAG) say decorative images such as dividers, spacers, and background patterns should have empty alt text so screen readers skip them. When the AI judges an image clearly decorative, EveryAlt leaves its alt text empty and marks it on the Review Alt Text tab, where you can ask for a description instead. When in doubt, the AI describes the image."
msgstr "Les règles d'accessibilité (WCAG) indiquent que les images décoratives, comme les séparateurs, les espaceurs et les motifs d'arrière-plan, doivent avoir un texte alternatif vide pour que les lecteurs d'écran les ignorent. Lorsque l'IA juge qu'une image est clairement décorative, EveryAlt laisse son texte alternatif vide et la signale dans l'onglet Réviser le texte alternatif, où vous pouvez demander une description à la place. En cas de doute, l'IA décrit l'image."
-#: admin/partials/everyalt-options-display.php:209
+#: admin/partials/everyalt-options-display.php:211
msgid "Monthly spending limit"
msgstr "Limite de dépenses mensuelle"
-#: admin/partials/everyalt-options-display.php:212
+#: admin/partials/everyalt-options-display.php:214
msgid "None"
msgstr "Aucune"
-#: admin/partials/everyalt-options-display.php:213
+#: admin/partials/everyalt-options-display.php:215
msgid "USD per month"
msgstr "USD par mois"
#. translators: %s: estimated amount spent this month, e.g. $0.42
-#: admin/partials/everyalt-options-display.php:219
+#: admin/partials/everyalt-options-display.php:221
#, php-format
msgid "Estimated spend this month: %s. When the limit is reached, generation pauses until next month (queued images wait). Leave empty for no limit. Estimates use each provider’s published prices; your provider’s invoice is authoritative."
msgstr "Dépenses estimées ce mois-ci : %s. Lorsque la limite est atteinte, la génération est suspendue jusqu'au mois prochain (les images en file d'attente patientent). Laissez vide pour ne fixer aucune limite. Les estimations reposent sur les prix publiés par chaque fournisseur ; seule la facture de votre fournisseur fait foi."
-#: admin/partials/everyalt-options-display.php:228
+#: admin/partials/everyalt-options-display.php:230
msgid "Existing posts"
msgstr "Publications existantes"
-#: admin/partials/everyalt-options-display.php:230
+#: admin/partials/everyalt-options-display.php:232
msgid "Show Media Library alt text on images already in posts that have none"
msgstr "Afficher le texte alternatif de la médiathèque sur les images déjà présentes dans les publications qui n'en ont pas"
-#: admin/partials/everyalt-options-display.php:231
+#: admin/partials/everyalt-options-display.php:233
msgid "When an image is added to a post, WordPress copies its alt text into the post at that moment, so alt text generated later doesn’t appear in older posts. With this on, empty alt text in posts is filled in from the Media Library when the page is displayed. Your posts are not modified, and alt text written in a post is never replaced. Requires WordPress 6.0 or later."
msgstr "Lorsqu'une image est ajoutée à une publication, WordPress copie son texte alternatif dans la publication à ce moment-là : un texte alternatif généré plus tard n'apparaît donc pas dans les publications plus anciennes. Avec cette option activée, les textes alternatifs vides des publications sont complétés à partir de la médiathèque lors de l'affichage de la page. Vos publications ne sont pas modifiées, et un texte alternatif rédigé dans une publication n'est jamais remplacé. Nécessite WordPress 6.0 ou version ultérieure."
-#: admin/partials/everyalt-options-display.php:235
+#: admin/partials/everyalt-options-display.php:237
msgid "Language"
msgstr "Langue"
#. translators: %s: site language name in English, e.g. German
-#: admin/partials/everyalt-options-display.php:242
+#: admin/partials/everyalt-options-display.php:244
#, php-format
msgid "Automatic (site language: %s)"
msgstr "Automatique (langue du site : %s)"
-#: admin/partials/everyalt-options-display.php:249
+#: admin/partials/everyalt-options-display.php:251
msgid "Language for generated alt text and titles. Automatic uses your site language, or each image’s own language on multilingual sites using Polylang or WPML."
msgstr "Langue des textes alternatifs et des titres générés. « Automatique » utilise la langue de votre site, ou la langue propre à chaque image sur les sites multilingues utilisant Polylang ou WPML."
-#: admin/partials/everyalt-options-display.php:253
+#: admin/partials/everyalt-options-display.php:255
msgid "Max completion tokens"
msgstr "Jetons de complétion max"
-#: admin/partials/everyalt-options-display.php:256
+#: admin/partials/everyalt-options-display.php:258
msgid "Maximum tokens the model can use for its response, including any reasoning. Default 1024. Leave empty to use default."
msgstr "Nombre maximal de jetons que le modèle peut utiliser pour sa réponse, raisonnement compris. Par défaut : 1024. Laissez vide pour utiliser la valeur par défaut."
-#: admin/partials/everyalt-options-display.php:260
+#: admin/partials/everyalt-options-display.php:262
msgid "Alt text prompt"
msgstr "Invite pour le texte alternatif"
-#: admin/partials/everyalt-options-display.php:268
+#: admin/partials/everyalt-options-display.php:270
msgid "Instruction sent to the AI with each image. Edit as needed. The model should return only the alt text, no extra wording."
msgstr "Instruction envoyée à l'IA avec chaque image. Modifiez si besoin. Le modèle doit renvoyer uniquement le texte alternatif, sans formulation supplémentaire."
-#: admin/partials/everyalt-options-display.php:272
+#: admin/partials/everyalt-options-display.php:274
msgid "Image title prompt"
msgstr "Invite pour le titre d'image"
-#: admin/partials/everyalt-options-display.php:280
+#: admin/partials/everyalt-options-display.php:282
msgid "Instruction sent to the AI when generating image titles. Titles are usually short (a few words). The model should return only the title, no extra wording."
msgstr "Instruction envoyée à l'IA lors de la génération des titres d'image. Les titres sont généralement courts (quelques mots). Le modèle doit renvoyer uniquement le titre, sans formulation supplémentaire."
-#: admin/partials/everyalt-options-display.php:285
+#: admin/partials/everyalt-options-display.php:287
msgid "Save Settings"
msgstr "Enregistrer les réglages"
-#: admin/partials/everyalt-options-display.php:294
+#: admin/partials/everyalt-options-display.php:296
#, php-format
msgid "This page finds all images in your media library that do not currently have alt text and lets you generate new alt text with EveryAlt quickly. To see existing images that already have alt text, go to the Review Alt Text tab."
msgstr "Cette page trouve toutes les images de votre médiathèque sans texte alternatif et vous permet d'en générer rapidement avec EveryAlt. Pour voir les images qui en ont déjà un, allez dans l'onglet Réviser le texte alternatif."
-#: admin/partials/everyalt-options-display.php:296
-#: admin/partials/everyalt-options-display.php:390
+#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:394
msgid "Please add an API key for the selected AI model in the Settings tab first."
msgstr "Veuillez d'abord ajouter une clé API pour le modèle d'IA sélectionné dans l'onglet Réglages."
-#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:300
msgid "No images without alt text found."
msgstr "Aucune image sans texte alternatif trouvée."
-#: admin/partials/everyalt-options-display.php:301
-#: admin/partials/everyalt-options-display.php:395
+#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:399
msgid "Select all"
msgstr "Tout sélectionner"
-#: admin/partials/everyalt-options-display.php:302
-#: admin/partials/everyalt-options-display.php:396
+#: admin/partials/everyalt-options-display.php:304
+#: admin/partials/everyalt-options-display.php:400
msgid "Select none"
msgstr "Tout désélectionner"
-#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:305
msgid "Generate alt text for selected"
msgstr "Générer le texte alternatif pour la sélection"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:307
-#: admin/partials/everyalt-options-display.php:401
+#: admin/partials/everyalt-options-display.php:309
+#: admin/partials/everyalt-options-display.php:405
#, php-format
msgid "Generate for all %s image"
msgid_plural "Generate for all %s images"
@@ -589,10 +599,10 @@ msgstr[0] "Générer pour %s image"
msgstr[1] "Générer pour les %s images"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:311
-#: admin/partials/everyalt-options-display.php:349
-#: admin/partials/everyalt-options-display.php:405
-#: admin/partials/everyalt-options-display.php:443
+#: admin/partials/everyalt-options-display.php:313
+#: admin/partials/everyalt-options-display.php:351
+#: admin/partials/everyalt-options-display.php:409
+#: admin/partials/everyalt-options-display.php:447
#, php-format
msgid "%s image"
msgid_plural "%s images"
@@ -600,136 +610,158 @@ msgstr[0] "%s image"
msgstr[1] "%s images"
#. translators: %s: image title
-#: admin/partials/everyalt-options-display.php:319
-#: admin/partials/everyalt-options-display.php:413
+#: admin/partials/everyalt-options-display.php:321
+#: admin/partials/everyalt-options-display.php:417
#, php-format
msgid "Select “%s”"
msgstr "Sélectionner « %s »"
-#: admin/partials/everyalt-options-display.php:326
-#: admin/partials/everyalt-options-display.php:363
-#: admin/partials/everyalt-options-display.php:420
-#: admin/partials/everyalt-options-display.php:453
+#: admin/partials/everyalt-options-display.php:328
+#: admin/partials/everyalt-options-display.php:365
+#: admin/partials/everyalt-options-display.php:424
+#: admin/partials/everyalt-options-display.php:457
msgid "Edit"
msgstr "Modifier"
-#: admin/partials/everyalt-options-display.php:342
+#: admin/partials/everyalt-options-display.php:344
msgid "Images that already have alt text, plus images marked decorative (alt text left empty on purpose). Edit and save, or regenerate with EveryAlt."
msgstr "Images qui ont déjà un texte alternatif, ainsi que les images marquées comme décoratives (texte alternatif laissé vide volontairement). Modifiez et enregistrez, ou régénérez avec EveryAlt."
-#: admin/partials/everyalt-options-display.php:344
-#: admin/partials/everyalt-options-display.php:438
+#: admin/partials/everyalt-options-display.php:346
+#: admin/partials/everyalt-options-display.php:442
msgid "Please add an API key for the selected AI model in the Settings tab to use Regenerate."
msgstr "Veuillez ajouter une clé API pour le modèle d'IA sélectionné dans l'onglet Réglages pour utiliser Régénérer."
-#: admin/partials/everyalt-options-display.php:347
+#: admin/partials/everyalt-options-display.php:349
msgid "No images with alt text found."
msgstr "Aucune image avec texte alternatif trouvée."
-#: admin/partials/everyalt-options-display.php:360
+#: admin/partials/everyalt-options-display.php:362
msgid "Decorative"
msgstr "Décorative"
-#: admin/partials/everyalt-options-display.php:365
+#. translators: %s: image title
+#: admin/partials/everyalt-options-display.php:367
+#, php-format
+msgid "Alt text for “%s”"
+msgstr "Texte alternatif pour « %s »"
+
+#: admin/partials/everyalt-options-display.php:368
msgid "Empty on purpose: screen readers skip this image."
msgstr "Vide volontairement : les lecteurs d'écran ignorent cette image."
-#: admin/partials/everyalt-options-display.php:367
-#: admin/partials/everyalt-options-display.php:457
+#: admin/partials/everyalt-options-display.php:370
+#: admin/partials/everyalt-options-display.php:463
msgid "Save"
msgstr "Enregistrer"
-#: admin/partials/everyalt-options-display.php:369
+#: admin/partials/everyalt-options-display.php:372
msgid "Describe anyway"
msgstr "Décrire quand même"
-#: admin/partials/everyalt-options-display.php:371
-#: admin/partials/everyalt-options-display.php:458
+#: admin/partials/everyalt-options-display.php:374
+#: admin/partials/everyalt-options-display.php:464
msgid "Regenerate"
msgstr "Régénérer"
-#: admin/partials/everyalt-options-display.php:388
+#: admin/partials/everyalt-options-display.php:392
#, php-format
msgid "This page finds images whose title is still the raw upload filename (e.g. \"IMG_1234\") and lets you generate descriptive titles with EveryAlt quickly. To see images that already have a custom title, go to the Review Image Titles tab."
msgstr "Cette page trouve les images dont le titre est encore le nom de fichier brut du téléversement (par ex. « IMG_1234 ») et vous permet de générer rapidement des titres descriptifs avec EveryAlt. Pour voir les images qui ont déjà un titre personnalisé, allez dans l'onglet Réviser les titres d'image."
-#: admin/partials/everyalt-options-display.php:392
+#: admin/partials/everyalt-options-display.php:396
msgid "No images needing a title found."
msgstr "Aucune image nécessitant un titre trouvée."
-#: admin/partials/everyalt-options-display.php:397
+#: admin/partials/everyalt-options-display.php:401
msgid "Generate titles for selected"
msgstr "Générer les titres pour la sélection"
-#: admin/partials/everyalt-options-display.php:436
+#: admin/partials/everyalt-options-display.php:440
msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt."
msgstr "Images qui ont déjà un titre personnalisé. Modifiez et enregistrez, ou régénérez avec EveryAlt."
-#: admin/partials/everyalt-options-display.php:441
+#: admin/partials/everyalt-options-display.php:445
msgid "No images with a custom title found."
msgstr "Aucune image avec un titre personnalisé trouvée."
-#: admin/partials/everyalt-options-display.php:473
+#. translators: %s: image file name
+#: admin/partials/everyalt-options-display.php:460
+#, php-format
+msgid "Title for image file “%s”"
+msgstr "Titre d'image pour le fichier « %s »"
+
+#: admin/partials/everyalt-options-display.php:480
msgid "Spending"
msgstr "Dépenses"
#. translators: 1: spent this month, 2: monthly limit
-#: admin/partials/everyalt-options-display.php:484
+#: admin/partials/everyalt-options-display.php:491
#, php-format
msgid "This month: %1$s of your %2$s limit."
msgstr "Ce mois-ci : %1$s sur votre limite de %2$s."
#. translators: %s: spent this month
-#: admin/partials/everyalt-options-display.php:487
+#: admin/partials/everyalt-options-display.php:494
#, php-format
msgid "This month: %s (no limit set)."
msgstr "Ce mois-ci : %s (aucune limite définie)."
-#: admin/partials/everyalt-options-display.php:499
+#. translators: 1: spent this month, 2: monthly limit
+#: admin/partials/everyalt-options-display.php:500
+#, php-format
+msgid "%1$s of %2$s"
+msgstr "%1$s sur %2$s"
+
+#: admin/partials/everyalt-options-display.php:500
+msgid "Monthly spending limit used"
+msgstr "Limite de dépenses mensuelle utilisée"
+
+#: admin/partials/everyalt-options-display.php:506
msgid "Month"
msgstr "Mois"
-#: admin/partials/everyalt-options-display.php:500
+#: admin/partials/everyalt-options-display.php:507
msgid "Requests"
msgstr "Requêtes"
-#: admin/partials/everyalt-options-display.php:501
+#: admin/partials/everyalt-options-display.php:508
msgid "Estimated cost"
msgstr "Coût estimé"
-#: admin/partials/everyalt-options-display.php:502
+#: admin/partials/everyalt-options-display.php:509
msgid "By model"
msgstr "Par modèle"
-#: admin/partials/everyalt-options-display.php:526
+#: admin/partials/everyalt-options-display.php:533
msgid "No spending recorded yet."
msgstr "Aucune dépense enregistrée pour l'instant."
-#: admin/partials/everyalt-options-display.php:528
+#: admin/partials/everyalt-options-display.php:535
msgid "Estimated from the tokens each request used and the provider’s published prices. Your provider’s invoice is authoritative."
msgstr "Estimation basée sur les jetons utilisés par chaque requête et sur les prix publiés par le fournisseur. Seule la facture de votre fournisseur fait foi."
-#: admin/partials/everyalt-options-display.php:530
+#: admin/partials/everyalt-options-display.php:537
msgid "Generation Log"
msgstr "Journal des générations"
-#: admin/partials/everyalt-options-display.php:531
+#: admin/partials/everyalt-options-display.php:538
msgid "Last 100 alt text generation attempts (successes and failures)."
msgstr "Dernières 100 tentatives de génération de texte alternatif (succès et échecs)."
-#: admin/partials/everyalt-options-display.php:534
+#: admin/partials/everyalt-options-display.php:541
msgid "Export as CSV"
msgstr "Exporter en CSV"
-#: admin/partials/everyalt-options-display.php:542
+#: admin/partials/everyalt-options-display.php:549
msgid "Attachment"
msgstr "Pièce jointe"
-#: admin/partials/everyalt-options-display.php:546
+#: admin/partials/everyalt-options-display.php:553
msgid "Cost"
msgstr "Coût"
-#: admin/partials/everyalt-options-display.php:598
+#: admin/partials/everyalt-options-display.php:605
msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log."
msgstr "Aucune entrée dans le journal pour l'instant. Générez du texte alternatif depuis l'onglet En masse ou en téléchargeant des images pour remplir ce journal."
diff --git a/languages/everyalt-it_IT.mo b/languages/everyalt-it_IT.mo
index c08445e..eb4bbfd 100644
Binary files a/languages/everyalt-it_IT.mo and b/languages/everyalt-it_IT.mo differ
diff --git a/languages/everyalt-it_IT.po b/languages/everyalt-it_IT.po
index 62f7b07..3465e6f 100644
--- a/languages/everyalt-it_IT.po
+++ b/languages/everyalt-it_IT.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EveryAlt 1.1.0\n"
"Report-Msgid-Bugs-To: https://hdc.net\n"
-"POT-Creation-Date: 2026-09-27 16:34+0000\n"
+"POT-Creation-Date: 2026-09-27 16:47+0000\n"
"PO-Revision-Date: 2026-09-27 00:00+0000\n"
"Last-Translator: HDC \n"
"Language-Team: Italiano \n"
@@ -24,7 +24,7 @@ msgid "Skipped: monthly spending limit of %s reached. Generation resumes next mo
msgstr "Saltato: raggiunto il limite di spesa mensile di %s. La generazione riprende il mese prossimo, oppure aumenta il limite in Impostazioni."
#: admin/class-everyalt-admin.php:164
-#: admin/partials/everyalt-options-display.php:541
+#: admin/partials/everyalt-options-display.php:548
msgid "Time"
msgstr "Ora"
@@ -33,17 +33,17 @@ msgid "Attachment ID"
msgstr "ID allegato"
#: admin/class-everyalt-admin.php:166
-#: admin/partials/everyalt-options-display.php:543
+#: admin/partials/everyalt-options-display.php:550
msgid "Status"
msgstr "Stato"
#: admin/class-everyalt-admin.php:167
-#: admin/partials/everyalt-options-display.php:544
+#: admin/partials/everyalt-options-display.php:551
msgid "Model"
msgstr "Modello"
#: admin/class-everyalt-admin.php:168
-#: admin/partials/everyalt-options-display.php:545
+#: admin/partials/everyalt-options-display.php:552
msgid "Message / Alt text"
msgstr "Messaggio / Testo alternativo"
@@ -52,17 +52,18 @@ msgid "Cost (USD)"
msgstr "Costo (USD)"
#: admin/class-everyalt-admin.php:170
-#: admin/partials/everyalt-options-display.php:547
+#: admin/partials/everyalt-options-display.php:554
+#: admin/partials/everyalt-options-display.php:598
msgid "Details"
msgstr "Dettagli"
-#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432
-#: admin/partials/everyalt-options-display.php:583
+#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:434
+#: admin/partials/everyalt-options-display.php:590
msgid "Error"
msgstr "Errore"
#: admin/class-everyalt-admin.php:174
-#: admin/partials/everyalt-options-display.php:581
+#: admin/partials/everyalt-options-display.php:588
msgid "Success"
msgstr "Successo"
@@ -137,111 +138,140 @@ msgstr "Coda svuotata."
msgid "Marked as decorative (alt text left empty on purpose)"
msgstr "Contrassegnata come decorativa (testo alternativo lasciato vuoto di proposito)"
-#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458
+#. translators: %d: number of images finished in this batch
+#: admin/class-everyalt-admin.php:433
+#, php-format
+msgid "%d finished."
+msgstr "%d completate."
+
+#: admin/class-everyalt-admin.php:435 admin/class-everyalt-admin.php:460
msgid "Error:"
msgstr "Errore:"
-#: admin/class-everyalt-admin.php:434
+#: admin/class-everyalt-admin.php:436
msgid "Request failed"
msgstr "Richiesta non riuscita"
-#: admin/class-everyalt-admin.php:435
+#: admin/class-everyalt-admin.php:437
msgid "Saved!"
msgstr "Salvato!"
-#: admin/class-everyalt-admin.php:436
+#: admin/class-everyalt-admin.php:438
msgid "Save failed"
msgstr "Salvataggio non riuscito"
-#: admin/class-everyalt-admin.php:437
+#: admin/class-everyalt-admin.php:439
msgid "Regenerated!"
msgstr "Rigenerato!"
-#: admin/class-everyalt-admin.php:438
+#: admin/class-everyalt-admin.php:440
msgid "Regenerate failed"
msgstr "Rigenerazione non riuscita"
-#: admin/class-everyalt-admin.php:451 admin/class-everyalt-admin.php:1052
-#: admin/class-everyalt-admin.php:1053
-#: admin/partials/everyalt-options-display.php:11
+#: admin/class-everyalt-admin.php:453 admin/class-everyalt-admin.php:1054
+#: admin/class-everyalt-admin.php:1055
+#: admin/partials/everyalt-options-display.php:13
msgid "EveryAlt"
msgstr "EveryAlt"
-#: admin/class-everyalt-admin.php:452
+#: admin/class-everyalt-admin.php:454
msgid "Generate alt text with EveryAlt"
msgstr "Genera testo alternativo con EveryAlt"
-#: admin/class-everyalt-admin.php:453
+#: admin/class-everyalt-admin.php:455
msgid "Select or upload an image to generate alt text."
msgstr "Seleziona o carica un'immagine per generare il testo alternativo."
-#: admin/class-everyalt-admin.php:454
+#: admin/class-everyalt-admin.php:456
msgid "Generating…"
msgstr "Generazione in corso…"
-#: admin/class-everyalt-admin.php:455
+#: admin/class-everyalt-admin.php:457
msgid "Alt text generated."
msgstr "Testo alternativo generato."
-#: admin/class-everyalt-admin.php:456
+#: admin/class-everyalt-admin.php:458
msgid "Could not generate alt text."
msgstr "Impossibile generare il testo alternativo."
-#: admin/class-everyalt-admin.php:457
+#: admin/class-everyalt-admin.php:459
msgid "Marked as decorative: alt text left empty on purpose."
msgstr "Contrassegnata come decorativa: testo alternativo lasciato vuoto di proposito."
-#: admin/class-everyalt-admin.php:578
+#: admin/class-everyalt-admin.php:580
msgid "Skipped: no API key or auto-generate disabled."
msgstr "Saltato: nessuna chiave API o generazione automatica disattivata."
-#: admin/class-everyalt-admin.php:583
+#: admin/class-everyalt-admin.php:585
msgid "Skipped: API key validation failed."
msgstr "Saltato: validazione della chiave API fallita."
-#: admin/class-everyalt-admin.php:593
+#: admin/class-everyalt-admin.php:595
msgid "Skipped: not a valid image or file exceeds 4MB."
msgstr "Saltato: immagine non valida o file superiore a 4 MB."
-#: admin/class-everyalt-admin.php:616
+#: admin/class-everyalt-admin.php:618
msgid "Marked as decorative (alt text left empty on purpose)."
msgstr "Contrassegnata come decorativa (testo alternativo lasciato vuoto di proposito)."
-#: admin/class-everyalt-admin.php:623
+#: admin/class-everyalt-admin.php:625
msgid "No alt text returned from API."
msgstr "L'API non ha restituito testo alternativo."
-#: admin/class-everyalt-admin.php:649
+#: admin/class-everyalt-admin.php:651
msgid "[Title] Skipped: no API key or auto-generate disabled."
msgstr "[Titolo] Saltato: nessuna chiave API o generazione automatica disattivata."
-#: admin/class-everyalt-admin.php:654
+#: admin/class-everyalt-admin.php:656
msgid "[Title] Skipped: API key validation failed."
msgstr "[Titolo] Saltato: validazione della chiave API fallita."
-#: admin/class-everyalt-admin.php:664
+#: admin/class-everyalt-admin.php:666
msgid "[Title] Skipped: not a valid image or file exceeds 4MB."
msgstr "[Titolo] Saltato: immagine non valida o file superiore a 4 MB."
-#: admin/class-everyalt-admin.php:687
+#: admin/class-everyalt-admin.php:689
msgid "[Title] No title returned from API."
msgstr "[Titolo] L'API non ha restituito alcun titolo."
-#: admin/class-everyalt-admin.php:1033
-#: admin/partials/everyalt-options-display.php:14
-#: admin/partials/everyalt-options-display.php:61
+#: admin/class-everyalt-admin.php:1035 admin/class-everyalt-admin.php:1077
+#: admin/partials/everyalt-options-display.php:63
msgid "Settings"
msgstr "Impostazioni"
-#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377
+#: admin/class-everyalt-admin.php:1078
+#: admin/partials/everyalt-options-display.php:295
+msgid "Bulk Alt Text Generator"
+msgstr "Generatore massivo di testo alternativo"
+
+#: admin/class-everyalt-admin.php:1079
+#: admin/partials/everyalt-options-display.php:343
+msgid "Review Alt Text"
+msgstr "Rivedi testo alternativo"
+
+#: admin/class-everyalt-admin.php:1080
+#: admin/partials/everyalt-options-display.php:391
+msgid "Bulk Image Title Generator"
+msgstr "Generatore massivo di titoli immagine"
+
+#: admin/class-everyalt-admin.php:1081
+#: admin/partials/everyalt-options-display.php:439
+msgid "Review Image Titles"
+msgstr "Rivedi titoli immagine"
+
+#: admin/class-everyalt-admin.php:1082
+msgid "Logs"
+msgstr "Registri"
+
+#: admin/class-everyalt-admin.php:1396 admin/class-everyalt-admin.php:1421
msgid "Generation failed."
msgstr "Generazione non riuscita."
-#: admin/class-everyalt-admin.php:1450
+#: admin/class-everyalt-admin.php:1494
msgid "Alt successfully updated."
msgstr "Testo alternativo aggiornato correttamente."
-#: admin/class-everyalt-admin.php:1466
+#: admin/class-everyalt-admin.php:1510
msgid "Title successfully updated."
msgstr "Titolo aggiornato correttamente."
@@ -253,335 +283,315 @@ msgstr "Impossibile codificare l'immagine per l'API. Su alcuni server la codific
msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this."
msgstr "La risposta è stata troncata (limite token raggiunto). Aumenta i token di completamento massimi in Impostazioni per risolvere."
-#: admin/partials/everyalt-options-display.php:13
+#: admin/partials/everyalt-options-display.php:15
msgid "Secondary menu"
msgstr "Menu secondario"
-#: admin/partials/everyalt-options-display.php:15
-#: admin/partials/everyalt-options-display.php:293
-msgid "Bulk Alt Text Generator"
-msgstr "Generatore massivo di testo alternativo"
-
-#: admin/partials/everyalt-options-display.php:16
-#: admin/partials/everyalt-options-display.php:341
-msgid "Review Alt Text"
-msgstr "Rivedi testo alternativo"
-
-#: admin/partials/everyalt-options-display.php:17
-#: admin/partials/everyalt-options-display.php:387
-msgid "Bulk Image Title Generator"
-msgstr "Generatore massivo di titoli immagine"
-
-#: admin/partials/everyalt-options-display.php:18
-#: admin/partials/everyalt-options-display.php:435
-msgid "Review Image Titles"
-msgstr "Rivedi titoli immagine"
-
-#: admin/partials/everyalt-options-display.php:19
-msgid "Logs"
-msgstr "Registri"
-
#. translators: 1: opening link to everyalt.com, 2: closing link tag, 3: opening link to hdc.net, 4: closing link tag
-#: admin/partials/everyalt-options-display.php:28
+#: admin/partials/everyalt-options-display.php:27
#, php-format
msgid "%1$sEveryAlt%2$s is a free, open-source project created by %3$sHDC%4$s, a web dev firm for high-stakes projects and AI builds."
msgstr "%1$sEveryAlt%2$s è un progetto gratuito e open source creato da %3$sHDC%4$s, un'agenzia di sviluppo web per progetti ad alta posta in gioco e soluzioni di IA."
-#: admin/partials/everyalt-options-display.php:41
+#: admin/partials/everyalt-options-display.php:43
msgid "Settings saved."
msgstr "Impostazioni salvate."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:47
+#: admin/partials/everyalt-options-display.php:49
#, php-format
msgid "The %s API key you entered could not be validated. Please check the key and try again. No settings were saved."
msgstr "Impossibile validare la chiave API %s che hai inserito. Verifica la chiave e riprova. Nessuna impostazione è stata salvata."
-#: admin/partials/everyalt-options-display.php:54
+#: admin/partials/everyalt-options-display.php:56
msgid "Clear queue"
msgstr "Svuota coda"
-#: admin/partials/everyalt-options-display.php:74
-#: admin/partials/everyalt-options-display.php:77
+#: admin/partials/everyalt-options-display.php:58
+msgid "Recent results"
+msgstr "Risultati recenti"
+
+#: admin/partials/everyalt-options-display.php:76
+#: admin/partials/everyalt-options-display.php:79
msgid "AI model"
msgstr "Modello IA"
#. translators: 1: input price in USD, 2: output price in USD
-#: admin/partials/everyalt-options-display.php:90
+#: admin/partials/everyalt-options-display.php:92
#, php-format
msgid "$%1$s input · $%2$s output per 1M tokens"
msgstr "$%1$s input · $%2$s output per 1M di token"
-#: admin/partials/everyalt-options-display.php:101
+#: admin/partials/everyalt-options-display.php:103
msgid "All models read the image and write alt text and titles the same way. Prices are each provider’s published rates as of September 2026 and may change. You pay the provider directly; EveryAlt never bills you. The actual cost of each image is recorded on the Logs tab."
msgstr "Tutti i modelli leggono l'immagine e scrivono testo alternativo e titoli allo stesso modo. I prezzi sono le tariffe pubblicate da ciascun provider a settembre 2026 e possono cambiare. Paghi direttamente il provider; EveryAlt non ti addebita mai nulla. Il costo effettivo di ogni immagine è registrato nella scheda Registri."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:108
+#: admin/partials/everyalt-options-display.php:110
#, php-format
msgid "%s pricing"
msgstr "Prezzi %s"
-#: admin/partials/everyalt-options-display.php:116
+#: admin/partials/everyalt-options-display.php:118
msgid "API key"
msgstr "Chiave API"
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:127
+#: admin/partials/everyalt-options-display.php:129
#, php-format
msgid "%s API key"
msgstr "Chiave API %s"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "Key saved"
msgstr "Chiave salvata"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "No key saved"
msgstr "Nessuna chiave salvata"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Leave blank to keep existing key"
msgstr "Lascia vuoto per mantenere la chiave attuale"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Paste your API key"
msgstr "Incolla la tua chiave API"
-#: admin/partials/everyalt-options-display.php:136
+#: admin/partials/everyalt-options-display.php:138
msgid "Validate key"
msgstr "Valida chiave"
#. translators: %s: link to OpenAI API keys page
-#: admin/partials/everyalt-options-display.php:142
+#: admin/partials/everyalt-options-display.php:144
#, php-format
msgid "Sign in at %s."
msgstr "Accedi su %s."
-#: admin/partials/everyalt-options-display.php:143
+#: admin/partials/everyalt-options-display.php:145
msgid "Click “Create new secret key”, give it a name (e.g. “EveryAlt”), and copy the key. It is only shown once."
msgstr "Fai clic su “Create new secret key”, assegnale un nome (ad es. “EveryAlt”) e copia la chiave. Viene mostrata una sola volta."
-#: admin/partials/everyalt-options-display.php:144
+#: admin/partials/everyalt-options-display.php:146
msgid "Add a payment method or prepaid credits in your OpenAI billing settings; generation fails until your account has credit."
msgstr "Aggiungi un metodo di pagamento o crediti prepagati nelle impostazioni di fatturazione di OpenAI; la generazione non funziona finché il tuo account non ha credito."
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
msgid "OpenAI API data usage"
msgstr "Utilizzo dei dati dell'API di OpenAI"
#. translators: %s: link to OpenAI data usage policy
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
#, php-format
msgid "OpenAI does not use API data to train its models by default. See %s."
msgstr "Per impostazione predefinita, OpenAI non usa i dati dell'API per addestrare i propri modelli. Vedi %s."
#. translators: %s: link to Google AI Studio API keys page
-#: admin/partials/everyalt-options-display.php:149
+#: admin/partials/everyalt-options-display.php:151
#, php-format
msgid "Sign in to Google AI Studio at %s."
msgstr "Accedi a Google AI Studio su %s."
-#: admin/partials/everyalt-options-display.php:150
+#: admin/partials/everyalt-options-display.php:152
msgid "Click “Create API key”, choose or create a Google Cloud project, and copy the key."
msgstr "Fai clic su “Create API key”, scegli o crea un progetto Google Cloud e copia la chiave."
-#: admin/partials/everyalt-options-display.php:151
+#: admin/partials/everyalt-options-display.php:153
msgid "Optional: set up billing on the project to move from the free tier to the paid tier."
msgstr "Facoltativo: configura la fatturazione sul progetto per passare dal piano gratuito a quello a pagamento."
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
msgid "Gemini API terms"
msgstr "Termini dell'API Gemini"
#. translators: %s: link to Gemini API terms
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
#, php-format
msgid "Gemini has a free tier, but Google may use free-tier prompts and images to improve its products. On the paid tier (billing enabled), your content is not used that way. See the %s."
msgstr "Gemini ha un piano gratuito, ma Google può usare i prompt e le immagini del piano gratuito per migliorare i propri prodotti. Con il piano a pagamento (fatturazione attiva), i tuoi contenuti non vengono usati in questo modo. Consulta i %s."
#. translators: %s: link to DeepInfra API keys page
-#: admin/partials/everyalt-options-display.php:156
+#: admin/partials/everyalt-options-display.php:158
#, php-format
msgid "Sign in or create an account at %s."
msgstr "Accedi o crea un account su %s."
-#: admin/partials/everyalt-options-display.php:157
+#: admin/partials/everyalt-options-display.php:159
msgid "Click “New API key”, name it (e.g. “EveryAlt”), and copy the key."
msgstr "Fai clic su “New API key”, assegnale un nome (ad es. “EveryAlt”) e copia la chiave."
-#: admin/partials/everyalt-options-display.php:158
+#: admin/partials/everyalt-options-display.php:160
msgid "Add a payment method or credits in your DeepInfra billing settings. One DeepInfra key works for both DeepSeek V4.1 Flash and GLM-5.3-Flash."
msgstr "Aggiungi un metodo di pagamento o dei crediti nelle impostazioni di fatturazione di DeepInfra. Una sola chiave DeepInfra funziona sia per DeepSeek V4.1 Flash sia per GLM-5.3-Flash."
-#: admin/partials/everyalt-options-display.php:162
+#: admin/partials/everyalt-options-display.php:164
msgid "Your images stay private."
msgstr "Le tue immagini restano private."
-#: admin/partials/everyalt-options-display.php:163
+#: admin/partials/everyalt-options-display.php:165
msgid "DeepInfra runs these models on its own infrastructure in data centers in the US and Canada, with a zero data retention policy: your images and the generated text are processed in memory and not stored, the content of requests is not logged, and your data is never used to train models."
msgstr "DeepInfra esegue questi modelli sulla propria infrastruttura, in data center negli Stati Uniti e in Canada, con una politica di conservazione zero dei dati: le tue immagini e il testo generato vengono elaborati in memoria e non salvati, il contenuto delle richieste non viene registrato e i tuoi dati non vengono mai usati per addestrare modelli."
-#: admin/partials/everyalt-options-display.php:168
+#: admin/partials/everyalt-options-display.php:170
msgid "DeepInfra data privacy"
msgstr "Privacy dei dati di DeepInfra"
-#: admin/partials/everyalt-options-display.php:169
+#: admin/partials/everyalt-options-display.php:171
msgid "Privacy policy"
msgstr "Informativa sulla privacy"
-#: admin/partials/everyalt-options-display.php:170
+#: admin/partials/everyalt-options-display.php:172
msgid "Trust center (SOC 2, ISO 27001)"
msgstr "Trust center (SOC 2, ISO 27001)"
-#: admin/partials/everyalt-options-display.php:179
+#: admin/partials/everyalt-options-display.php:181
msgid "Keys are stored encrypted in your WordPress database. The image is sent to the provider as base64, so generation works on localhost and behind HTTP auth."
msgstr "Le chiavi sono salvate in forma crittografata nel database di WordPress. L'immagine viene inviata al provider in base64, quindi la generazione funziona anche su localhost e dietro autenticazione HTTP."
-#: admin/partials/everyalt-options-display.php:183
+#: admin/partials/everyalt-options-display.php:185
msgid "Auto-generate on upload"
msgstr "Genera automaticamente in upload"
-#: admin/partials/everyalt-options-display.php:185
+#: admin/partials/everyalt-options-display.php:187
msgid "Automatically generate alt text when images are uploaded"
msgstr "Genera automaticamente il testo alternativo quando le immagini vengono caricate"
-#: admin/partials/everyalt-options-display.php:187
+#: admin/partials/everyalt-options-display.php:189
msgid "Automatically generate image titles when images are uploaded"
msgstr "Genera automaticamente i titoli delle immagini quando le immagini vengono caricate"
-#: admin/partials/everyalt-options-display.php:191
-#: admin/partials/everyalt-options-display.php:194
+#: admin/partials/everyalt-options-display.php:193
+#: admin/partials/everyalt-options-display.php:196
msgid "New uploads"
msgstr "Nuovi caricamenti"
-#: admin/partials/everyalt-options-display.php:195
+#: admin/partials/everyalt-options-display.php:197
msgid "Generate in the background (recommended): uploads finish right away"
msgstr "Genera in background (consigliato): i caricamenti terminano subito"
-#: admin/partials/everyalt-options-display.php:196
+#: admin/partials/everyalt-options-display.php:198
msgid "Generate during the upload: alt text is ready when the upload finishes, but each upload waits for the AI"
msgstr "Genera durante il caricamento: il testo alternativo è pronto al termine del caricamento, ma ogni caricamento attende l'IA"
-#: admin/partials/everyalt-options-display.php:198
+#: admin/partials/everyalt-options-display.php:200
msgid "Background jobs usually finish within a minute. They run on WordPress’s scheduler (WP-Cron), and also whenever an EveryAlt page is open, so they still work on sites where WP-Cron is blocked, such as sites behind a password."
msgstr "Le operazioni in background di solito terminano entro un minuto. Vengono eseguite dallo scheduler di WordPress (WP-Cron) e anche ogni volta che è aperta una pagina di EveryAlt, quindi funzionano anche sui siti in cui WP-Cron è bloccato, come i siti protetti da password."
-#: admin/partials/everyalt-options-display.php:202
+#: admin/partials/everyalt-options-display.php:204
msgid "Decorative images"
msgstr "Immagini decorative"
-#: admin/partials/everyalt-options-display.php:204
+#: admin/partials/everyalt-options-display.php:206
msgid "Leave alt text empty for purely decorative images"
msgstr "Lascia vuoto il testo alternativo per le immagini puramente decorative"
-#: admin/partials/everyalt-options-display.php:205
+#: admin/partials/everyalt-options-display.php:207
msgid "Accessibility guidelines (WCAG) say decorative images such as dividers, spacers, and background patterns should have empty alt text so screen readers skip them. When the AI judges an image clearly decorative, EveryAlt leaves its alt text empty and marks it on the Review Alt Text tab, where you can ask for a description instead. When in doubt, the AI describes the image."
msgstr "Le linee guida sull'accessibilità (WCAG) indicano che le immagini decorative, come separatori, spaziatori e motivi di sfondo, devono avere il testo alternativo vuoto, così gli screen reader le ignorano. Quando l'IA giudica un'immagine chiaramente decorativa, EveryAlt lascia vuoto il testo alternativo e la contrassegna nella scheda Rivedi testo alternativo, dove puoi invece richiedere una descrizione. In caso di dubbio, l'IA descrive l'immagine."
-#: admin/partials/everyalt-options-display.php:209
+#: admin/partials/everyalt-options-display.php:211
msgid "Monthly spending limit"
msgstr "Limite di spesa mensile"
-#: admin/partials/everyalt-options-display.php:212
+#: admin/partials/everyalt-options-display.php:214
msgid "None"
msgstr "Nessuno"
-#: admin/partials/everyalt-options-display.php:213
+#: admin/partials/everyalt-options-display.php:215
msgid "USD per month"
msgstr "USD al mese"
#. translators: %s: estimated amount spent this month, e.g. $0.42
-#: admin/partials/everyalt-options-display.php:219
+#: admin/partials/everyalt-options-display.php:221
#, php-format
msgid "Estimated spend this month: %s. When the limit is reached, generation pauses until next month (queued images wait). Leave empty for no limit. Estimates use each provider’s published prices; your provider’s invoice is authoritative."
msgstr "Spesa stimata questo mese: %s. Quando il limite viene raggiunto, la generazione si interrompe fino al mese prossimo (le immagini in coda restano in attesa). Lascia vuoto per nessun limite. Le stime si basano sui prezzi pubblicati da ciascun provider; fa fede la fattura del tuo provider."
-#: admin/partials/everyalt-options-display.php:228
+#: admin/partials/everyalt-options-display.php:230
msgid "Existing posts"
msgstr "Articoli esistenti"
-#: admin/partials/everyalt-options-display.php:230
+#: admin/partials/everyalt-options-display.php:232
msgid "Show Media Library alt text on images already in posts that have none"
msgstr "Mostra il testo alternativo della Libreria media sulle immagini già presenti negli articoli che ne sono prive"
-#: admin/partials/everyalt-options-display.php:231
+#: admin/partials/everyalt-options-display.php:233
msgid "When an image is added to a post, WordPress copies its alt text into the post at that moment, so alt text generated later doesn’t appear in older posts. With this on, empty alt text in posts is filled in from the Media Library when the page is displayed. Your posts are not modified, and alt text written in a post is never replaced. Requires WordPress 6.0 or later."
msgstr "Quando un'immagine viene aggiunta a un articolo, WordPress copia in quel momento il suo testo alternativo nell'articolo, quindi il testo alternativo generato in seguito non compare negli articoli meno recenti. Con questa opzione attiva, il testo alternativo vuoto negli articoli viene compilato dalla Libreria media quando la pagina viene visualizzata. I tuoi articoli non vengono modificati e il testo alternativo scritto in un articolo non viene mai sostituito. Richiede WordPress 6.0 o successivo."
-#: admin/partials/everyalt-options-display.php:235
+#: admin/partials/everyalt-options-display.php:237
msgid "Language"
msgstr "Lingua"
#. translators: %s: site language name in English, e.g. German
-#: admin/partials/everyalt-options-display.php:242
+#: admin/partials/everyalt-options-display.php:244
#, php-format
msgid "Automatic (site language: %s)"
msgstr "Automatica (lingua del sito: %s)"
-#: admin/partials/everyalt-options-display.php:249
+#: admin/partials/everyalt-options-display.php:251
msgid "Language for generated alt text and titles. Automatic uses your site language, or each image’s own language on multilingual sites using Polylang or WPML."
msgstr "Lingua del testo alternativo e dei titoli generati. Automatica usa la lingua del sito oppure, sui siti multilingue con Polylang o WPML, la lingua di ciascuna immagine."
-#: admin/partials/everyalt-options-display.php:253
+#: admin/partials/everyalt-options-display.php:255
msgid "Max completion tokens"
msgstr "Token di completamento massimi"
-#: admin/partials/everyalt-options-display.php:256
+#: admin/partials/everyalt-options-display.php:258
msgid "Maximum tokens the model can use for its response, including any reasoning. Default 1024. Leave empty to use default."
msgstr "Numero massimo di token che il modello può usare per la risposta, incluso l'eventuale ragionamento. Predefinito: 1024. Lascia vuoto per usare il valore predefinito."
-#: admin/partials/everyalt-options-display.php:260
+#: admin/partials/everyalt-options-display.php:262
msgid "Alt text prompt"
msgstr "Prompt per il testo alternativo"
-#: admin/partials/everyalt-options-display.php:268
+#: admin/partials/everyalt-options-display.php:270
msgid "Instruction sent to the AI with each image. Edit as needed. The model should return only the alt text, no extra wording."
msgstr "Istruzione inviata all'IA con ogni immagine. Modifica se necessario. Il modello deve restituire solo il testo alternativo, senza testo aggiuntivo."
-#: admin/partials/everyalt-options-display.php:272
+#: admin/partials/everyalt-options-display.php:274
msgid "Image title prompt"
msgstr "Prompt per il titolo dell'immagine"
-#: admin/partials/everyalt-options-display.php:280
+#: admin/partials/everyalt-options-display.php:282
msgid "Instruction sent to the AI when generating image titles. Titles are usually short (a few words). The model should return only the title, no extra wording."
msgstr "Istruzione inviata all'IA durante la generazione dei titoli delle immagini. I titoli sono di solito brevi (poche parole). Il modello deve restituire solo il titolo, senza testo aggiuntivo."
-#: admin/partials/everyalt-options-display.php:285
+#: admin/partials/everyalt-options-display.php:287
msgid "Save Settings"
msgstr "Salva impostazioni"
-#: admin/partials/everyalt-options-display.php:294
+#: admin/partials/everyalt-options-display.php:296
#, php-format
msgid "This page finds all images in your media library that do not currently have alt text and lets you generate new alt text with EveryAlt quickly. To see existing images that already have alt text, go to the Review Alt Text tab."
msgstr "Questa pagina trova tutte le immagini nella libreria media senza testo alternativo e ti permette di generarlo rapidamente con EveryAlt. Per vedere le immagini che hanno già testo alternativo, vai alla scheda Rivedi testo alternativo."
-#: admin/partials/everyalt-options-display.php:296
-#: admin/partials/everyalt-options-display.php:390
+#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:394
msgid "Please add an API key for the selected AI model in the Settings tab first."
msgstr "Aggiungi prima una chiave API per il modello IA selezionato nella scheda Impostazioni."
-#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:300
msgid "No images without alt text found."
msgstr "Nessuna immagine senza testo alternativo trovata."
-#: admin/partials/everyalt-options-display.php:301
-#: admin/partials/everyalt-options-display.php:395
+#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:399
msgid "Select all"
msgstr "Seleziona tutto"
-#: admin/partials/everyalt-options-display.php:302
-#: admin/partials/everyalt-options-display.php:396
+#: admin/partials/everyalt-options-display.php:304
+#: admin/partials/everyalt-options-display.php:400
msgid "Select none"
msgstr "Deseleziona tutto"
-#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:305
msgid "Generate alt text for selected"
msgstr "Genera testo alternativo per i selezionati"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:307
-#: admin/partials/everyalt-options-display.php:401
+#: admin/partials/everyalt-options-display.php:309
+#: admin/partials/everyalt-options-display.php:405
#, php-format
msgid "Generate for all %s image"
msgid_plural "Generate for all %s images"
@@ -589,10 +599,10 @@ msgstr[0] "Genera per %s immagine"
msgstr[1] "Genera per tutte le %s immagini"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:311
-#: admin/partials/everyalt-options-display.php:349
-#: admin/partials/everyalt-options-display.php:405
-#: admin/partials/everyalt-options-display.php:443
+#: admin/partials/everyalt-options-display.php:313
+#: admin/partials/everyalt-options-display.php:351
+#: admin/partials/everyalt-options-display.php:409
+#: admin/partials/everyalt-options-display.php:447
#, php-format
msgid "%s image"
msgid_plural "%s images"
@@ -600,136 +610,158 @@ msgstr[0] "%s immagine"
msgstr[1] "%s immagini"
#. translators: %s: image title
-#: admin/partials/everyalt-options-display.php:319
-#: admin/partials/everyalt-options-display.php:413
+#: admin/partials/everyalt-options-display.php:321
+#: admin/partials/everyalt-options-display.php:417
#, php-format
msgid "Select “%s”"
msgstr "Seleziona “%s”"
-#: admin/partials/everyalt-options-display.php:326
-#: admin/partials/everyalt-options-display.php:363
-#: admin/partials/everyalt-options-display.php:420
-#: admin/partials/everyalt-options-display.php:453
+#: admin/partials/everyalt-options-display.php:328
+#: admin/partials/everyalt-options-display.php:365
+#: admin/partials/everyalt-options-display.php:424
+#: admin/partials/everyalt-options-display.php:457
msgid "Edit"
msgstr "Modifica"
-#: admin/partials/everyalt-options-display.php:342
+#: admin/partials/everyalt-options-display.php:344
msgid "Images that already have alt text, plus images marked decorative (alt text left empty on purpose). Edit and save, or regenerate with EveryAlt."
msgstr "Immagini che hanno già un testo alternativo, più le immagini contrassegnate come decorative (testo alternativo lasciato vuoto di proposito). Modifica e salva, oppure rigenera con EveryAlt."
-#: admin/partials/everyalt-options-display.php:344
-#: admin/partials/everyalt-options-display.php:438
+#: admin/partials/everyalt-options-display.php:346
+#: admin/partials/everyalt-options-display.php:442
msgid "Please add an API key for the selected AI model in the Settings tab to use Regenerate."
msgstr "Aggiungi una chiave API per il modello IA selezionato nella scheda Impostazioni per usare Rigenera."
-#: admin/partials/everyalt-options-display.php:347
+#: admin/partials/everyalt-options-display.php:349
msgid "No images with alt text found."
msgstr "Nessuna immagine con testo alternativo trovata."
-#: admin/partials/everyalt-options-display.php:360
+#: admin/partials/everyalt-options-display.php:362
msgid "Decorative"
msgstr "Decorativa"
-#: admin/partials/everyalt-options-display.php:365
+#. translators: %s: image title
+#: admin/partials/everyalt-options-display.php:367
+#, php-format
+msgid "Alt text for “%s”"
+msgstr "Testo alternativo per “%s”"
+
+#: admin/partials/everyalt-options-display.php:368
msgid "Empty on purpose: screen readers skip this image."
msgstr "Vuoto di proposito: gli screen reader ignorano questa immagine."
-#: admin/partials/everyalt-options-display.php:367
-#: admin/partials/everyalt-options-display.php:457
+#: admin/partials/everyalt-options-display.php:370
+#: admin/partials/everyalt-options-display.php:463
msgid "Save"
msgstr "Salva"
-#: admin/partials/everyalt-options-display.php:369
+#: admin/partials/everyalt-options-display.php:372
msgid "Describe anyway"
msgstr "Descrivi comunque"
-#: admin/partials/everyalt-options-display.php:371
-#: admin/partials/everyalt-options-display.php:458
+#: admin/partials/everyalt-options-display.php:374
+#: admin/partials/everyalt-options-display.php:464
msgid "Regenerate"
msgstr "Rigenera"
-#: admin/partials/everyalt-options-display.php:388
+#: admin/partials/everyalt-options-display.php:392
#, php-format
msgid "This page finds images whose title is still the raw upload filename (e.g. \"IMG_1234\") and lets you generate descriptive titles with EveryAlt quickly. To see images that already have a custom title, go to the Review Image Titles tab."
msgstr "Questa pagina trova le immagini il cui titolo è ancora il nome originale del file caricato (ad es. “IMG_1234”) e ti permette di generare rapidamente titoli descrittivi con EveryAlt. Per vedere le immagini che hanno già un titolo personalizzato, vai alla scheda Rivedi titoli immagine."
-#: admin/partials/everyalt-options-display.php:392
+#: admin/partials/everyalt-options-display.php:396
msgid "No images needing a title found."
msgstr "Nessuna immagine che necessita di un titolo trovata."
-#: admin/partials/everyalt-options-display.php:397
+#: admin/partials/everyalt-options-display.php:401
msgid "Generate titles for selected"
msgstr "Genera titoli per i selezionati"
-#: admin/partials/everyalt-options-display.php:436
+#: admin/partials/everyalt-options-display.php:440
msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt."
msgstr "Immagini che hanno già un titolo personalizzato. Modifica e salva, oppure rigenera con EveryAlt."
-#: admin/partials/everyalt-options-display.php:441
+#: admin/partials/everyalt-options-display.php:445
msgid "No images with a custom title found."
msgstr "Nessuna immagine con titolo personalizzato trovata."
-#: admin/partials/everyalt-options-display.php:473
+#. translators: %s: image file name
+#: admin/partials/everyalt-options-display.php:460
+#, php-format
+msgid "Title for image file “%s”"
+msgstr "Titolo immagine per il file “%s”"
+
+#: admin/partials/everyalt-options-display.php:480
msgid "Spending"
msgstr "Spesa"
#. translators: 1: spent this month, 2: monthly limit
-#: admin/partials/everyalt-options-display.php:484
+#: admin/partials/everyalt-options-display.php:491
#, php-format
msgid "This month: %1$s of your %2$s limit."
msgstr "Questo mese: %1$s del tuo limite di %2$s."
#. translators: %s: spent this month
-#: admin/partials/everyalt-options-display.php:487
+#: admin/partials/everyalt-options-display.php:494
#, php-format
msgid "This month: %s (no limit set)."
msgstr "Questo mese: %s (nessun limite impostato)."
-#: admin/partials/everyalt-options-display.php:499
+#. translators: 1: spent this month, 2: monthly limit
+#: admin/partials/everyalt-options-display.php:500
+#, php-format
+msgid "%1$s of %2$s"
+msgstr "%1$s di %2$s"
+
+#: admin/partials/everyalt-options-display.php:500
+msgid "Monthly spending limit used"
+msgstr "Limite di spesa mensile utilizzato"
+
+#: admin/partials/everyalt-options-display.php:506
msgid "Month"
msgstr "Mese"
-#: admin/partials/everyalt-options-display.php:500
+#: admin/partials/everyalt-options-display.php:507
msgid "Requests"
msgstr "Richieste"
-#: admin/partials/everyalt-options-display.php:501
+#: admin/partials/everyalt-options-display.php:508
msgid "Estimated cost"
msgstr "Costo stimato"
-#: admin/partials/everyalt-options-display.php:502
+#: admin/partials/everyalt-options-display.php:509
msgid "By model"
msgstr "Per modello"
-#: admin/partials/everyalt-options-display.php:526
+#: admin/partials/everyalt-options-display.php:533
msgid "No spending recorded yet."
msgstr "Ancora nessuna spesa registrata."
-#: admin/partials/everyalt-options-display.php:528
+#: admin/partials/everyalt-options-display.php:535
msgid "Estimated from the tokens each request used and the provider’s published prices. Your provider’s invoice is authoritative."
msgstr "Stima basata sui token usati da ogni richiesta e sui prezzi pubblicati dal provider. Fa fede la fattura del tuo provider."
-#: admin/partials/everyalt-options-display.php:530
+#: admin/partials/everyalt-options-display.php:537
msgid "Generation Log"
msgstr "Registro generazioni"
-#: admin/partials/everyalt-options-display.php:531
+#: admin/partials/everyalt-options-display.php:538
msgid "Last 100 alt text generation attempts (successes and failures)."
msgstr "Ultimi 100 tentativi di generazione di testo alternativo (successi e fallimenti)."
-#: admin/partials/everyalt-options-display.php:534
+#: admin/partials/everyalt-options-display.php:541
msgid "Export as CSV"
msgstr "Esporta come CSV"
-#: admin/partials/everyalt-options-display.php:542
+#: admin/partials/everyalt-options-display.php:549
msgid "Attachment"
msgstr "Allegato"
-#: admin/partials/everyalt-options-display.php:546
+#: admin/partials/everyalt-options-display.php:553
msgid "Cost"
msgstr "Costo"
-#: admin/partials/everyalt-options-display.php:598
+#: admin/partials/everyalt-options-display.php:605
msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log."
msgstr "Ancora nessuna voce nel registro. Genera testo alternativo dalla scheda Massivo o caricando immagini per popolare questo registro."
diff --git a/languages/everyalt-ja.mo b/languages/everyalt-ja.mo
index 8199e38..c8906e7 100644
Binary files a/languages/everyalt-ja.mo and b/languages/everyalt-ja.mo differ
diff --git a/languages/everyalt-ja.po b/languages/everyalt-ja.po
index 8f632b8..220248b 100644
--- a/languages/everyalt-ja.po
+++ b/languages/everyalt-ja.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EveryAlt 1.1.0\n"
"Report-Msgid-Bugs-To: https://hdc.net\n"
-"POT-Creation-Date: 2026-09-27 16:34+0000\n"
+"POT-Creation-Date: 2026-09-27 16:47+0000\n"
"PO-Revision-Date: 2026-09-27 00:00+0000\n"
"Last-Translator: HDC \n"
"Language-Team: 日本語 \n"
@@ -24,7 +24,7 @@ msgid "Skipped: monthly spending limit of %s reached. Generation resumes next mo
msgstr "スキップ: 月間利用上限額(%s)に達しました。生成は来月再開されます。または、設定で上限を引き上げてください。"
#: admin/class-everyalt-admin.php:164
-#: admin/partials/everyalt-options-display.php:541
+#: admin/partials/everyalt-options-display.php:548
msgid "Time"
msgstr "日時"
@@ -33,17 +33,17 @@ msgid "Attachment ID"
msgstr "添付ID"
#: admin/class-everyalt-admin.php:166
-#: admin/partials/everyalt-options-display.php:543
+#: admin/partials/everyalt-options-display.php:550
msgid "Status"
msgstr "状態"
#: admin/class-everyalt-admin.php:167
-#: admin/partials/everyalt-options-display.php:544
+#: admin/partials/everyalt-options-display.php:551
msgid "Model"
msgstr "モデル"
#: admin/class-everyalt-admin.php:168
-#: admin/partials/everyalt-options-display.php:545
+#: admin/partials/everyalt-options-display.php:552
msgid "Message / Alt text"
msgstr "メッセージ / 代替テキスト"
@@ -52,17 +52,18 @@ msgid "Cost (USD)"
msgstr "コスト (USD)"
#: admin/class-everyalt-admin.php:170
-#: admin/partials/everyalt-options-display.php:547
+#: admin/partials/everyalt-options-display.php:554
+#: admin/partials/everyalt-options-display.php:598
msgid "Details"
msgstr "詳細"
-#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432
-#: admin/partials/everyalt-options-display.php:583
+#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:434
+#: admin/partials/everyalt-options-display.php:590
msgid "Error"
msgstr "エラー"
#: admin/class-everyalt-admin.php:174
-#: admin/partials/everyalt-options-display.php:581
+#: admin/partials/everyalt-options-display.php:588
msgid "Success"
msgstr "成功"
@@ -137,111 +138,140 @@ msgstr "キューをクリアしました。"
msgid "Marked as decorative (alt text left empty on purpose)"
msgstr "装飾画像としてマーク済み(代替テキストは意図的に空欄)"
-#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458
+#. translators: %d: number of images finished in this batch
+#: admin/class-everyalt-admin.php:433
+#, php-format
+msgid "%d finished."
+msgstr "%d件完了しました。"
+
+#: admin/class-everyalt-admin.php:435 admin/class-everyalt-admin.php:460
msgid "Error:"
msgstr "エラー:"
-#: admin/class-everyalt-admin.php:434
+#: admin/class-everyalt-admin.php:436
msgid "Request failed"
msgstr "リクエストに失敗しました"
-#: admin/class-everyalt-admin.php:435
+#: admin/class-everyalt-admin.php:437
msgid "Saved!"
msgstr "保存しました!"
-#: admin/class-everyalt-admin.php:436
+#: admin/class-everyalt-admin.php:438
msgid "Save failed"
msgstr "保存に失敗しました"
-#: admin/class-everyalt-admin.php:437
+#: admin/class-everyalt-admin.php:439
msgid "Regenerated!"
msgstr "再生成しました!"
-#: admin/class-everyalt-admin.php:438
+#: admin/class-everyalt-admin.php:440
msgid "Regenerate failed"
msgstr "再生成に失敗しました"
-#: admin/class-everyalt-admin.php:451 admin/class-everyalt-admin.php:1052
-#: admin/class-everyalt-admin.php:1053
-#: admin/partials/everyalt-options-display.php:11
+#: admin/class-everyalt-admin.php:453 admin/class-everyalt-admin.php:1054
+#: admin/class-everyalt-admin.php:1055
+#: admin/partials/everyalt-options-display.php:13
msgid "EveryAlt"
msgstr "EveryAlt"
-#: admin/class-everyalt-admin.php:452
+#: admin/class-everyalt-admin.php:454
msgid "Generate alt text with EveryAlt"
msgstr "EveryAltで代替テキストを生成"
-#: admin/class-everyalt-admin.php:453
+#: admin/class-everyalt-admin.php:455
msgid "Select or upload an image to generate alt text."
msgstr "代替テキストを生成する画像を選択またはアップロードしてください。"
-#: admin/class-everyalt-admin.php:454
+#: admin/class-everyalt-admin.php:456
msgid "Generating…"
msgstr "生成中…"
-#: admin/class-everyalt-admin.php:455
+#: admin/class-everyalt-admin.php:457
msgid "Alt text generated."
msgstr "代替テキストを生成しました。"
-#: admin/class-everyalt-admin.php:456
+#: admin/class-everyalt-admin.php:458
msgid "Could not generate alt text."
msgstr "代替テキストを生成できませんでした。"
-#: admin/class-everyalt-admin.php:457
+#: admin/class-everyalt-admin.php:459
msgid "Marked as decorative: alt text left empty on purpose."
msgstr "装飾画像としてマークしました: 代替テキストは意図的に空欄にしています。"
-#: admin/class-everyalt-admin.php:578
+#: admin/class-everyalt-admin.php:580
msgid "Skipped: no API key or auto-generate disabled."
msgstr "スキップ: APIキーがないか、自動生成が無効です。"
-#: admin/class-everyalt-admin.php:583
+#: admin/class-everyalt-admin.php:585
msgid "Skipped: API key validation failed."
msgstr "スキップ: APIキーの検証に失敗しました。"
-#: admin/class-everyalt-admin.php:593
+#: admin/class-everyalt-admin.php:595
msgid "Skipped: not a valid image or file exceeds 4MB."
msgstr "スキップ: 有効な画像ではないか、ファイルが4MBを超えています。"
-#: admin/class-everyalt-admin.php:616
+#: admin/class-everyalt-admin.php:618
msgid "Marked as decorative (alt text left empty on purpose)."
msgstr "装飾画像としてマークしました(代替テキストは意図的に空欄)。"
-#: admin/class-everyalt-admin.php:623
+#: admin/class-everyalt-admin.php:625
msgid "No alt text returned from API."
msgstr "APIから代替テキストが返されませんでした。"
-#: admin/class-everyalt-admin.php:649
+#: admin/class-everyalt-admin.php:651
msgid "[Title] Skipped: no API key or auto-generate disabled."
msgstr "[タイトル] スキップ: APIキーがないか、自動生成が無効です。"
-#: admin/class-everyalt-admin.php:654
+#: admin/class-everyalt-admin.php:656
msgid "[Title] Skipped: API key validation failed."
msgstr "[タイトル] スキップ: APIキーの検証に失敗しました。"
-#: admin/class-everyalt-admin.php:664
+#: admin/class-everyalt-admin.php:666
msgid "[Title] Skipped: not a valid image or file exceeds 4MB."
msgstr "[タイトル] スキップ: 有効な画像ではないか、ファイルが4MBを超えています。"
-#: admin/class-everyalt-admin.php:687
+#: admin/class-everyalt-admin.php:689
msgid "[Title] No title returned from API."
msgstr "[タイトル] APIからタイトルが返されませんでした。"
-#: admin/class-everyalt-admin.php:1033
-#: admin/partials/everyalt-options-display.php:14
-#: admin/partials/everyalt-options-display.php:61
+#: admin/class-everyalt-admin.php:1035 admin/class-everyalt-admin.php:1077
+#: admin/partials/everyalt-options-display.php:63
msgid "Settings"
msgstr "設定"
-#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377
+#: admin/class-everyalt-admin.php:1078
+#: admin/partials/everyalt-options-display.php:295
+msgid "Bulk Alt Text Generator"
+msgstr "一括代替テキスト生成"
+
+#: admin/class-everyalt-admin.php:1079
+#: admin/partials/everyalt-options-display.php:343
+msgid "Review Alt Text"
+msgstr "代替テキストを確認"
+
+#: admin/class-everyalt-admin.php:1080
+#: admin/partials/everyalt-options-display.php:391
+msgid "Bulk Image Title Generator"
+msgstr "一括画像タイトル生成"
+
+#: admin/class-everyalt-admin.php:1081
+#: admin/partials/everyalt-options-display.php:439
+msgid "Review Image Titles"
+msgstr "画像タイトルを確認"
+
+#: admin/class-everyalt-admin.php:1082
+msgid "Logs"
+msgstr "ログ"
+
+#: admin/class-everyalt-admin.php:1396 admin/class-everyalt-admin.php:1421
msgid "Generation failed."
msgstr "生成に失敗しました。"
-#: admin/class-everyalt-admin.php:1450
+#: admin/class-everyalt-admin.php:1494
msgid "Alt successfully updated."
msgstr "代替テキストを正常に更新しました。"
-#: admin/class-everyalt-admin.php:1466
+#: admin/class-everyalt-admin.php:1510
msgid "Title successfully updated."
msgstr "タイトルを正常に更新しました。"
@@ -253,481 +283,483 @@ msgstr "API用に画像をエンコードできませんでした。一部のサ
msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this."
msgstr "応答が途中で切れました(最大トークン数に達しました)。設定で「最大完了トークン」を増やして解決してください。"
-#: admin/partials/everyalt-options-display.php:13
+#: admin/partials/everyalt-options-display.php:15
msgid "Secondary menu"
msgstr "サブメニュー"
-#: admin/partials/everyalt-options-display.php:15
-#: admin/partials/everyalt-options-display.php:293
-msgid "Bulk Alt Text Generator"
-msgstr "一括代替テキスト生成"
-
-#: admin/partials/everyalt-options-display.php:16
-#: admin/partials/everyalt-options-display.php:341
-msgid "Review Alt Text"
-msgstr "代替テキストを確認"
-
-#: admin/partials/everyalt-options-display.php:17
-#: admin/partials/everyalt-options-display.php:387
-msgid "Bulk Image Title Generator"
-msgstr "一括画像タイトル生成"
-
-#: admin/partials/everyalt-options-display.php:18
-#: admin/partials/everyalt-options-display.php:435
-msgid "Review Image Titles"
-msgstr "画像タイトルを確認"
-
-#: admin/partials/everyalt-options-display.php:19
-msgid "Logs"
-msgstr "ログ"
-
#. translators: 1: opening link to everyalt.com, 2: closing link tag, 3: opening link to hdc.net, 4: closing link tag
-#: admin/partials/everyalt-options-display.php:28
+#: admin/partials/everyalt-options-display.php:27
#, php-format
msgid "%1$sEveryAlt%2$s is a free, open-source project created by %3$sHDC%4$s, a web dev firm for high-stakes projects and AI builds."
msgstr "%1$sEveryAlt%2$sは、重要度の高いプロジェクトやAI開発を手がけるWeb開発会社%3$sHDC%4$sが作成した、無料のオープンソースプロジェクトです。"
-#: admin/partials/everyalt-options-display.php:41
+#: admin/partials/everyalt-options-display.php:43
msgid "Settings saved."
msgstr "設定を保存しました。"
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:47
+#: admin/partials/everyalt-options-display.php:49
#, php-format
msgid "The %s API key you entered could not be validated. Please check the key and try again. No settings were saved."
msgstr "入力された%s APIキーを検証できませんでした。キーを確認して、もう一度お試しください。設定は保存されていません。"
-#: admin/partials/everyalt-options-display.php:54
+#: admin/partials/everyalt-options-display.php:56
msgid "Clear queue"
msgstr "キューをクリア"
-#: admin/partials/everyalt-options-display.php:74
-#: admin/partials/everyalt-options-display.php:77
+#: admin/partials/everyalt-options-display.php:58
+msgid "Recent results"
+msgstr "最近の結果"
+
+#: admin/partials/everyalt-options-display.php:76
+#: admin/partials/everyalt-options-display.php:79
msgid "AI model"
msgstr "AIモデル"
#. translators: 1: input price in USD, 2: output price in USD
-#: admin/partials/everyalt-options-display.php:90
+#: admin/partials/everyalt-options-display.php:92
#, php-format
msgid "$%1$s input · $%2$s output per 1M tokens"
msgstr "100万トークンあたり 入力 $%1$s · 出力 $%2$s"
-#: admin/partials/everyalt-options-display.php:101
+#: admin/partials/everyalt-options-display.php:103
msgid "All models read the image and write alt text and titles the same way. Prices are each provider’s published rates as of September 2026 and may change. You pay the provider directly; EveryAlt never bills you. The actual cost of each image is recorded on the Logs tab."
msgstr "どのモデルも同じ方法で画像を読み取り、代替テキストとタイトルを作成します。価格は2026年9月時点の各プロバイダーの公表価格で、変更される場合があります。料金はプロバイダーに直接お支払いいただき、EveryAltから請求されることはありません。各画像の実際のコストは「ログ」タブに記録されます。"
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:108
+#: admin/partials/everyalt-options-display.php:110
#, php-format
msgid "%s pricing"
msgstr "%sの料金"
-#: admin/partials/everyalt-options-display.php:116
+#: admin/partials/everyalt-options-display.php:118
msgid "API key"
msgstr "APIキー"
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:127
+#: admin/partials/everyalt-options-display.php:129
#, php-format
msgid "%s API key"
msgstr "%s APIキー"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "Key saved"
msgstr "キー保存済み"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "No key saved"
msgstr "キー未保存"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Leave blank to keep existing key"
msgstr "既存のキーを維持する場合は空欄のままにしてください"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Paste your API key"
msgstr "APIキーを貼り付けてください"
-#: admin/partials/everyalt-options-display.php:136
+#: admin/partials/everyalt-options-display.php:138
msgid "Validate key"
msgstr "キーを検証"
#. translators: %s: link to OpenAI API keys page
-#: admin/partials/everyalt-options-display.php:142
+#: admin/partials/everyalt-options-display.php:144
#, php-format
msgid "Sign in at %s."
msgstr "%s にサインインします。"
-#: admin/partials/everyalt-options-display.php:143
+#: admin/partials/everyalt-options-display.php:145
msgid "Click “Create new secret key”, give it a name (e.g. “EveryAlt”), and copy the key. It is only shown once."
msgstr "“Create new secret key” をクリックし、名前(例: “EveryAlt”)を付けてキーをコピーします。キーは一度しか表示されません。"
-#: admin/partials/everyalt-options-display.php:144
+#: admin/partials/everyalt-options-display.php:146
msgid "Add a payment method or prepaid credits in your OpenAI billing settings; generation fails until your account has credit."
msgstr "OpenAIの請求設定で支払い方法またはプリペイドクレジットを追加します。アカウントにクレジットが入るまで、生成は失敗します。"
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
msgid "OpenAI API data usage"
msgstr "OpenAI APIのデータ利用"
#. translators: %s: link to OpenAI data usage policy
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
#, php-format
msgid "OpenAI does not use API data to train its models by default. See %s."
msgstr "OpenAIは、デフォルトではAPIデータをモデルのトレーニングに使用しません。詳しくは%sをご覧ください。"
#. translators: %s: link to Google AI Studio API keys page
-#: admin/partials/everyalt-options-display.php:149
+#: admin/partials/everyalt-options-display.php:151
#, php-format
msgid "Sign in to Google AI Studio at %s."
msgstr "%s でGoogle AI Studioにサインインします。"
-#: admin/partials/everyalt-options-display.php:150
+#: admin/partials/everyalt-options-display.php:152
msgid "Click “Create API key”, choose or create a Google Cloud project, and copy the key."
msgstr "“Create API key” をクリックし、Google Cloudプロジェクトを選択または作成して、キーをコピーします。"
-#: admin/partials/everyalt-options-display.php:151
+#: admin/partials/everyalt-options-display.php:153
msgid "Optional: set up billing on the project to move from the free tier to the paid tier."
msgstr "任意: プロジェクトで請求を設定すると、無料枠から有料枠に移行できます。"
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
msgid "Gemini API terms"
msgstr "Gemini API利用規約"
#. translators: %s: link to Gemini API terms
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
#, php-format
msgid "Gemini has a free tier, but Google may use free-tier prompts and images to improve its products. On the paid tier (billing enabled), your content is not used that way. See the %s."
msgstr "Geminiには無料枠がありますが、Googleは無料枠のプロンプトや画像を自社製品の改善に使用する場合があります。有料枠(請求が有効)では、コンテンツがそのように使用されることはありません。詳しくは%sをご覧ください。"
#. translators: %s: link to DeepInfra API keys page
-#: admin/partials/everyalt-options-display.php:156
+#: admin/partials/everyalt-options-display.php:158
#, php-format
msgid "Sign in or create an account at %s."
msgstr "%s でサインインするか、アカウントを作成します。"
-#: admin/partials/everyalt-options-display.php:157
+#: admin/partials/everyalt-options-display.php:159
msgid "Click “New API key”, name it (e.g. “EveryAlt”), and copy the key."
msgstr "“New API key” をクリックし、名前(例: “EveryAlt”)を付けてキーをコピーします。"
-#: admin/partials/everyalt-options-display.php:158
+#: admin/partials/everyalt-options-display.php:160
msgid "Add a payment method or credits in your DeepInfra billing settings. One DeepInfra key works for both DeepSeek V4.1 Flash and GLM-5.3-Flash."
msgstr "DeepInfraの請求設定で支払い方法またはクレジットを追加します。1つのDeepInfraキーでDeepSeek V4.1 FlashとGLM-5.3-Flashの両方を利用できます。"
-#: admin/partials/everyalt-options-display.php:162
+#: admin/partials/everyalt-options-display.php:164
msgid "Your images stay private."
msgstr "画像のプライバシーは守られます。"
-#: admin/partials/everyalt-options-display.php:163
+#: admin/partials/everyalt-options-display.php:165
msgid "DeepInfra runs these models on its own infrastructure in data centers in the US and Canada, with a zero data retention policy: your images and the generated text are processed in memory and not stored, the content of requests is not logged, and your data is never used to train models."
msgstr "DeepInfraは米国とカナダのデータセンターにある自社インフラでこれらのモデルを運用しており、データを一切保持しないポリシーを採用しています。画像と生成されたテキストはメモリ上で処理されて保存されず、リクエストの内容はログに記録されず、データがモデルのトレーニングに使われることもありません。"
-#: admin/partials/everyalt-options-display.php:168
+#: admin/partials/everyalt-options-display.php:170
msgid "DeepInfra data privacy"
msgstr "DeepInfraのデータプライバシー"
-#: admin/partials/everyalt-options-display.php:169
+#: admin/partials/everyalt-options-display.php:171
msgid "Privacy policy"
msgstr "プライバシーポリシー"
-#: admin/partials/everyalt-options-display.php:170
+#: admin/partials/everyalt-options-display.php:172
msgid "Trust center (SOC 2, ISO 27001)"
msgstr "トラストセンター(SOC 2、ISO 27001)"
-#: admin/partials/everyalt-options-display.php:179
+#: admin/partials/everyalt-options-display.php:181
msgid "Keys are stored encrypted in your WordPress database. The image is sent to the provider as base64, so generation works on localhost and behind HTTP auth."
msgstr "キーはWordPressデータベースに暗号化して保存されます。画像はbase64形式でプロバイダーに送信されるため、localhostやHTTP認証の背後でも生成できます。"
-#: admin/partials/everyalt-options-display.php:183
+#: admin/partials/everyalt-options-display.php:185
msgid "Auto-generate on upload"
msgstr "アップロード時に自動生成"
-#: admin/partials/everyalt-options-display.php:185
+#: admin/partials/everyalt-options-display.php:187
msgid "Automatically generate alt text when images are uploaded"
msgstr "画像をアップロードしたときに自動で代替テキストを生成する"
-#: admin/partials/everyalt-options-display.php:187
+#: admin/partials/everyalt-options-display.php:189
msgid "Automatically generate image titles when images are uploaded"
msgstr "画像をアップロードしたときに自動で画像タイトルを生成する"
-#: admin/partials/everyalt-options-display.php:191
-#: admin/partials/everyalt-options-display.php:194
+#: admin/partials/everyalt-options-display.php:193
+#: admin/partials/everyalt-options-display.php:196
msgid "New uploads"
msgstr "新規アップロード"
-#: admin/partials/everyalt-options-display.php:195
+#: admin/partials/everyalt-options-display.php:197
msgid "Generate in the background (recommended): uploads finish right away"
msgstr "バックグラウンドで生成(推奨): アップロードはすぐに完了します"
-#: admin/partials/everyalt-options-display.php:196
+#: admin/partials/everyalt-options-display.php:198
msgid "Generate during the upload: alt text is ready when the upload finishes, but each upload waits for the AI"
msgstr "アップロード中に生成: アップロード完了時に代替テキストが用意されますが、アップロードのたびにAIの処理を待つことになります"
-#: admin/partials/everyalt-options-display.php:198
+#: admin/partials/everyalt-options-display.php:200
msgid "Background jobs usually finish within a minute. They run on WordPress’s scheduler (WP-Cron), and also whenever an EveryAlt page is open, so they still work on sites where WP-Cron is blocked, such as sites behind a password."
msgstr "バックグラウンド処理は通常1分以内に完了します。WordPressのスケジューラー(WP-Cron)で実行されるほか、EveryAltのページを開いている間も実行されるため、パスワードで保護されたサイトなどWP-Cronがブロックされているサイトでも動作します。"
-#: admin/partials/everyalt-options-display.php:202
+#: admin/partials/everyalt-options-display.php:204
msgid "Decorative images"
msgstr "装飾画像"
-#: admin/partials/everyalt-options-display.php:204
+#: admin/partials/everyalt-options-display.php:206
msgid "Leave alt text empty for purely decorative images"
msgstr "装飾目的のみの画像では代替テキストを空欄にする"
-#: admin/partials/everyalt-options-display.php:205
+#: admin/partials/everyalt-options-display.php:207
msgid "Accessibility guidelines (WCAG) say decorative images such as dividers, spacers, and background patterns should have empty alt text so screen readers skip them. When the AI judges an image clearly decorative, EveryAlt leaves its alt text empty and marks it on the Review Alt Text tab, where you can ask for a description instead. When in doubt, the AI describes the image."
msgstr "アクセシビリティガイドライン(WCAG)では、区切り線、スペーサー、背景パターンなどの装飾画像は、スクリーンリーダーが読み飛ばせるよう代替テキストを空にすべきとされています。AIが明らかに装飾画像だと判断した場合、EveryAltは代替テキストを空欄のままにし、「代替テキストを確認」タブで印を付けます。そこで代わりに説明を生成させることもできます。判断に迷う場合、AIは画像を説明します。"
-#: admin/partials/everyalt-options-display.php:209
+#: admin/partials/everyalt-options-display.php:211
msgid "Monthly spending limit"
msgstr "月間利用上限額"
-#: admin/partials/everyalt-options-display.php:212
+#: admin/partials/everyalt-options-display.php:214
msgid "None"
msgstr "なし"
-#: admin/partials/everyalt-options-display.php:213
+#: admin/partials/everyalt-options-display.php:215
msgid "USD per month"
msgstr "USD/月"
#. translators: %s: estimated amount spent this month, e.g. $0.42
-#: admin/partials/everyalt-options-display.php:219
+#: admin/partials/everyalt-options-display.php:221
#, php-format
msgid "Estimated spend this month: %s. When the limit is reached, generation pauses until next month (queued images wait). Leave empty for no limit. Estimates use each provider’s published prices; your provider’s invoice is authoritative."
msgstr "今月の推定利用額: %s。上限に達すると、生成は来月まで一時停止します(キュー内の画像は待機します)。上限を設けない場合は空欄にしてください。推定額は各プロバイダーの公表価格に基づきます。正式な金額はプロバイダーの請求書をご確認ください。"
-#: admin/partials/everyalt-options-display.php:228
+#: admin/partials/everyalt-options-display.php:230
msgid "Existing posts"
msgstr "既存の投稿"
-#: admin/partials/everyalt-options-display.php:230
+#: admin/partials/everyalt-options-display.php:232
msgid "Show Media Library alt text on images already in posts that have none"
msgstr "投稿内の代替テキストがない画像に、メディアライブラリの代替テキストを表示する"
-#: admin/partials/everyalt-options-display.php:231
+#: admin/partials/everyalt-options-display.php:233
msgid "When an image is added to a post, WordPress copies its alt text into the post at that moment, so alt text generated later doesn’t appear in older posts. With this on, empty alt text in posts is filled in from the Media Library when the page is displayed. Your posts are not modified, and alt text written in a post is never replaced. Requires WordPress 6.0 or later."
msgstr "画像を投稿に追加すると、WordPressはその時点の代替テキストを投稿にコピーするため、後から生成した代替テキストは過去の投稿に反映されません。この設定を有効にすると、ページ表示時に投稿内の空の代替テキストがメディアライブラリの内容で補完されます。投稿自体は変更されず、投稿内で入力された代替テキストが置き換えられることもありません。WordPress 6.0以降が必要です。"
-#: admin/partials/everyalt-options-display.php:235
+#: admin/partials/everyalt-options-display.php:237
msgid "Language"
msgstr "言語"
#. translators: %s: site language name in English, e.g. German
-#: admin/partials/everyalt-options-display.php:242
+#: admin/partials/everyalt-options-display.php:244
#, php-format
msgid "Automatic (site language: %s)"
msgstr "自動(サイトの言語: %s)"
-#: admin/partials/everyalt-options-display.php:249
+#: admin/partials/everyalt-options-display.php:251
msgid "Language for generated alt text and titles. Automatic uses your site language, or each image’s own language on multilingual sites using Polylang or WPML."
msgstr "生成する代替テキストとタイトルの言語です。「自動」ではサイトの言語を使用します。PolylangまたはWPMLを使用した多言語サイトでは、各画像の言語を使用します。"
-#: admin/partials/everyalt-options-display.php:253
+#: admin/partials/everyalt-options-display.php:255
msgid "Max completion tokens"
msgstr "最大完了トークン数"
-#: admin/partials/everyalt-options-display.php:256
+#: admin/partials/everyalt-options-display.php:258
msgid "Maximum tokens the model can use for its response, including any reasoning. Default 1024. Leave empty to use default."
msgstr "モデルが応答(推論を含む)に使用できる最大トークン数です。デフォルトは1024です。デフォルトを使用する場合は空欄のままにしてください。"
-#: admin/partials/everyalt-options-display.php:260
+#: admin/partials/everyalt-options-display.php:262
msgid "Alt text prompt"
msgstr "代替テキスト用プロンプト"
-#: admin/partials/everyalt-options-display.php:268
+#: admin/partials/everyalt-options-display.php:270
msgid "Instruction sent to the AI with each image. Edit as needed. The model should return only the alt text, no extra wording."
msgstr "各画像とともにAIに送る指示です。必要に応じて編集してください。モデルは代替テキストのみを返し、余分な表現は含めません。"
-#: admin/partials/everyalt-options-display.php:272
+#: admin/partials/everyalt-options-display.php:274
msgid "Image title prompt"
msgstr "画像タイトル用プロンプト"
-#: admin/partials/everyalt-options-display.php:280
+#: admin/partials/everyalt-options-display.php:282
msgid "Instruction sent to the AI when generating image titles. Titles are usually short (a few words). The model should return only the title, no extra wording."
msgstr "画像タイトルを生成するときにAIに送る指示です。タイトルは通常短い(数語程度)ものです。モデルはタイトルのみを返し、余分な表現は含めません。"
-#: admin/partials/everyalt-options-display.php:285
+#: admin/partials/everyalt-options-display.php:287
msgid "Save Settings"
msgstr "設定を保存"
-#: admin/partials/everyalt-options-display.php:294
+#: admin/partials/everyalt-options-display.php:296
#, php-format
msgid "This page finds all images in your media library that do not currently have alt text and lets you generate new alt text with EveryAlt quickly. To see existing images that already have alt text, go to the Review Alt Text tab."
msgstr "このページでは、メディアライブラリ内で代替テキストがない画像を一覧し、EveryAltで素早く生成できます。すでに代替テキストがある画像を確認するには、代替テキストを確認タブへ移動してください。"
-#: admin/partials/everyalt-options-display.php:296
-#: admin/partials/everyalt-options-display.php:390
+#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:394
msgid "Please add an API key for the selected AI model in the Settings tab first."
msgstr "先に「設定」タブで、選択したAIモデルのAPIキーを追加してください。"
-#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:300
msgid "No images without alt text found."
msgstr "代替テキストのない画像は見つかりませんでした。"
-#: admin/partials/everyalt-options-display.php:301
-#: admin/partials/everyalt-options-display.php:395
+#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:399
msgid "Select all"
msgstr "すべて選択"
-#: admin/partials/everyalt-options-display.php:302
-#: admin/partials/everyalt-options-display.php:396
+#: admin/partials/everyalt-options-display.php:304
+#: admin/partials/everyalt-options-display.php:400
msgid "Select none"
msgstr "選択を解除"
-#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:305
msgid "Generate alt text for selected"
msgstr "選択した画像の代替テキストを生成"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:307
-#: admin/partials/everyalt-options-display.php:401
+#: admin/partials/everyalt-options-display.php:309
+#: admin/partials/everyalt-options-display.php:405
#, php-format
msgid "Generate for all %s image"
msgid_plural "Generate for all %s images"
msgstr[0] "全%s枚の画像に対して生成"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:311
-#: admin/partials/everyalt-options-display.php:349
-#: admin/partials/everyalt-options-display.php:405
-#: admin/partials/everyalt-options-display.php:443
+#: admin/partials/everyalt-options-display.php:313
+#: admin/partials/everyalt-options-display.php:351
+#: admin/partials/everyalt-options-display.php:409
+#: admin/partials/everyalt-options-display.php:447
#, php-format
msgid "%s image"
msgid_plural "%s images"
msgstr[0] "%s枚の画像"
#. translators: %s: image title
-#: admin/partials/everyalt-options-display.php:319
-#: admin/partials/everyalt-options-display.php:413
+#: admin/partials/everyalt-options-display.php:321
+#: admin/partials/everyalt-options-display.php:417
#, php-format
msgid "Select “%s”"
msgstr "「%s」を選択"
-#: admin/partials/everyalt-options-display.php:326
-#: admin/partials/everyalt-options-display.php:363
-#: admin/partials/everyalt-options-display.php:420
-#: admin/partials/everyalt-options-display.php:453
+#: admin/partials/everyalt-options-display.php:328
+#: admin/partials/everyalt-options-display.php:365
+#: admin/partials/everyalt-options-display.php:424
+#: admin/partials/everyalt-options-display.php:457
msgid "Edit"
msgstr "編集"
-#: admin/partials/everyalt-options-display.php:342
+#: admin/partials/everyalt-options-display.php:344
msgid "Images that already have alt text, plus images marked decorative (alt text left empty on purpose). Edit and save, or regenerate with EveryAlt."
msgstr "すでに代替テキストがある画像と、装飾画像としてマークされた画像(代替テキストを意図的に空欄にしたもの)です。編集して保存するか、EveryAltで再生成できます。"
-#: admin/partials/everyalt-options-display.php:344
-#: admin/partials/everyalt-options-display.php:438
+#: admin/partials/everyalt-options-display.php:346
+#: admin/partials/everyalt-options-display.php:442
msgid "Please add an API key for the selected AI model in the Settings tab to use Regenerate."
msgstr "「再生成」を使用するには、「設定」タブで選択したAIモデルのAPIキーを追加してください。"
-#: admin/partials/everyalt-options-display.php:347
+#: admin/partials/everyalt-options-display.php:349
msgid "No images with alt text found."
msgstr "代替テキストがある画像は見つかりませんでした。"
-#: admin/partials/everyalt-options-display.php:360
+#: admin/partials/everyalt-options-display.php:362
msgid "Decorative"
msgstr "装飾"
-#: admin/partials/everyalt-options-display.php:365
+#. translators: %s: image title
+#: admin/partials/everyalt-options-display.php:367
+#, php-format
+msgid "Alt text for “%s”"
+msgstr "「%s」の代替テキスト"
+
+#: admin/partials/everyalt-options-display.php:368
msgid "Empty on purpose: screen readers skip this image."
msgstr "意図的に空欄: スクリーンリーダーはこの画像を読み飛ばします。"
-#: admin/partials/everyalt-options-display.php:367
-#: admin/partials/everyalt-options-display.php:457
+#: admin/partials/everyalt-options-display.php:370
+#: admin/partials/everyalt-options-display.php:463
msgid "Save"
msgstr "保存"
-#: admin/partials/everyalt-options-display.php:369
+#: admin/partials/everyalt-options-display.php:372
msgid "Describe anyway"
msgstr "それでも説明を生成"
-#: admin/partials/everyalt-options-display.php:371
-#: admin/partials/everyalt-options-display.php:458
+#: admin/partials/everyalt-options-display.php:374
+#: admin/partials/everyalt-options-display.php:464
msgid "Regenerate"
msgstr "再生成"
-#: admin/partials/everyalt-options-display.php:388
+#: admin/partials/everyalt-options-display.php:392
#, php-format
msgid "This page finds images whose title is still the raw upload filename (e.g. \"IMG_1234\") and lets you generate descriptive titles with EveryAlt quickly. To see images that already have a custom title, go to the Review Image Titles tab."
msgstr "このページでは、タイトルがアップロード時のファイル名(例: 「IMG_1234」)のままの画像を一覧し、EveryAltでわかりやすいタイトルを素早く生成できます。すでに独自のタイトルがある画像を確認するには、画像タイトルを確認タブへ移動してください。"
-#: admin/partials/everyalt-options-display.php:392
+#: admin/partials/everyalt-options-display.php:396
msgid "No images needing a title found."
msgstr "タイトルが必要な画像は見つかりませんでした。"
-#: admin/partials/everyalt-options-display.php:397
+#: admin/partials/everyalt-options-display.php:401
msgid "Generate titles for selected"
msgstr "選択した画像のタイトルを生成"
-#: admin/partials/everyalt-options-display.php:436
+#: admin/partials/everyalt-options-display.php:440
msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt."
msgstr "すでに独自のタイトルがある画像です。編集して保存するか、EveryAltで再生成できます。"
-#: admin/partials/everyalt-options-display.php:441
+#: admin/partials/everyalt-options-display.php:445
msgid "No images with a custom title found."
msgstr "独自のタイトルがある画像は見つかりませんでした。"
-#: admin/partials/everyalt-options-display.php:473
+#. translators: %s: image file name
+#: admin/partials/everyalt-options-display.php:460
+#, php-format
+msgid "Title for image file “%s”"
+msgstr "画像ファイル「%s」のタイトル"
+
+#: admin/partials/everyalt-options-display.php:480
msgid "Spending"
msgstr "利用額"
#. translators: 1: spent this month, 2: monthly limit
-#: admin/partials/everyalt-options-display.php:484
+#: admin/partials/everyalt-options-display.php:491
#, php-format
msgid "This month: %1$s of your %2$s limit."
msgstr "今月: %1$s(上限 %2$s)。"
#. translators: %s: spent this month
-#: admin/partials/everyalt-options-display.php:487
+#: admin/partials/everyalt-options-display.php:494
#, php-format
msgid "This month: %s (no limit set)."
msgstr "今月: %s(上限なし)。"
-#: admin/partials/everyalt-options-display.php:499
+#. translators: 1: spent this month, 2: monthly limit
+#: admin/partials/everyalt-options-display.php:500
+#, php-format
+msgid "%1$s of %2$s"
+msgstr "%2$s中%1$s"
+
+#: admin/partials/everyalt-options-display.php:500
+msgid "Monthly spending limit used"
+msgstr "月間利用上限額の使用状況"
+
+#: admin/partials/everyalt-options-display.php:506
msgid "Month"
msgstr "月"
-#: admin/partials/everyalt-options-display.php:500
+#: admin/partials/everyalt-options-display.php:507
msgid "Requests"
msgstr "リクエスト数"
-#: admin/partials/everyalt-options-display.php:501
+#: admin/partials/everyalt-options-display.php:508
msgid "Estimated cost"
msgstr "推定コスト"
-#: admin/partials/everyalt-options-display.php:502
+#: admin/partials/everyalt-options-display.php:509
msgid "By model"
msgstr "モデル別"
-#: admin/partials/everyalt-options-display.php:526
+#: admin/partials/everyalt-options-display.php:533
msgid "No spending recorded yet."
msgstr "まだ利用額の記録はありません。"
-#: admin/partials/everyalt-options-display.php:528
+#: admin/partials/everyalt-options-display.php:535
msgid "Estimated from the tokens each request used and the provider’s published prices. Your provider’s invoice is authoritative."
msgstr "各リクエストで使用したトークン数とプロバイダーの公表価格から推定しています。正式な金額はプロバイダーの請求書をご確認ください。"
-#: admin/partials/everyalt-options-display.php:530
+#: admin/partials/everyalt-options-display.php:537
msgid "Generation Log"
msgstr "生成ログ"
-#: admin/partials/everyalt-options-display.php:531
+#: admin/partials/everyalt-options-display.php:538
msgid "Last 100 alt text generation attempts (successes and failures)."
msgstr "直近100件の代替テキスト生成の試行(成功・失敗)です。"
-#: admin/partials/everyalt-options-display.php:534
+#: admin/partials/everyalt-options-display.php:541
msgid "Export as CSV"
msgstr "CSVでエクスポート"
-#: admin/partials/everyalt-options-display.php:542
+#: admin/partials/everyalt-options-display.php:549
msgid "Attachment"
msgstr "添付"
-#: admin/partials/everyalt-options-display.php:546
+#: admin/partials/everyalt-options-display.php:553
msgid "Cost"
msgstr "コスト"
-#: admin/partials/everyalt-options-display.php:598
+#: admin/partials/everyalt-options-display.php:605
msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log."
msgstr "まだログにエントリがありません。一括タブで代替テキストを生成するか、画像をアップロードするとこのログに記録されます。"
diff --git a/languages/everyalt-nl_NL.mo b/languages/everyalt-nl_NL.mo
index 6011258..bec917a 100644
Binary files a/languages/everyalt-nl_NL.mo and b/languages/everyalt-nl_NL.mo differ
diff --git a/languages/everyalt-nl_NL.po b/languages/everyalt-nl_NL.po
index 329c30e..38f849f 100644
--- a/languages/everyalt-nl_NL.po
+++ b/languages/everyalt-nl_NL.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EveryAlt 1.1.0\n"
"Report-Msgid-Bugs-To: https://hdc.net\n"
-"POT-Creation-Date: 2026-09-27 16:34+0000\n"
+"POT-Creation-Date: 2026-09-27 16:47+0000\n"
"PO-Revision-Date: 2026-09-27 00:00+0000\n"
"Last-Translator: HDC \n"
"Language-Team: Nederlands \n"
@@ -24,7 +24,7 @@ msgid "Skipped: monthly spending limit of %s reached. Generation resumes next mo
msgstr "Overgeslagen: maandelijkse bestedingslimiet van %s bereikt. Het genereren gaat volgende maand verder, of verhoog de limiet in Instellingen."
#: admin/class-everyalt-admin.php:164
-#: admin/partials/everyalt-options-display.php:541
+#: admin/partials/everyalt-options-display.php:548
msgid "Time"
msgstr "Tijd"
@@ -33,17 +33,17 @@ msgid "Attachment ID"
msgstr "Bijlage-ID"
#: admin/class-everyalt-admin.php:166
-#: admin/partials/everyalt-options-display.php:543
+#: admin/partials/everyalt-options-display.php:550
msgid "Status"
msgstr "Status"
#: admin/class-everyalt-admin.php:167
-#: admin/partials/everyalt-options-display.php:544
+#: admin/partials/everyalt-options-display.php:551
msgid "Model"
msgstr "Model"
#: admin/class-everyalt-admin.php:168
-#: admin/partials/everyalt-options-display.php:545
+#: admin/partials/everyalt-options-display.php:552
msgid "Message / Alt text"
msgstr "Bericht / Alt-tekst"
@@ -52,17 +52,18 @@ msgid "Cost (USD)"
msgstr "Kosten (USD)"
#: admin/class-everyalt-admin.php:170
-#: admin/partials/everyalt-options-display.php:547
+#: admin/partials/everyalt-options-display.php:554
+#: admin/partials/everyalt-options-display.php:598
msgid "Details"
msgstr "Details"
-#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432
-#: admin/partials/everyalt-options-display.php:583
+#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:434
+#: admin/partials/everyalt-options-display.php:590
msgid "Error"
msgstr "Fout"
#: admin/class-everyalt-admin.php:174
-#: admin/partials/everyalt-options-display.php:581
+#: admin/partials/everyalt-options-display.php:588
msgid "Success"
msgstr "Geslaagd"
@@ -137,111 +138,140 @@ msgstr "Wachtrij gewist."
msgid "Marked as decorative (alt text left empty on purpose)"
msgstr "Gemarkeerd als decoratief (alt-tekst bewust leeg gelaten)"
-#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458
+#. translators: %d: number of images finished in this batch
+#: admin/class-everyalt-admin.php:433
+#, php-format
+msgid "%d finished."
+msgstr "%d klaar."
+
+#: admin/class-everyalt-admin.php:435 admin/class-everyalt-admin.php:460
msgid "Error:"
msgstr "Fout:"
-#: admin/class-everyalt-admin.php:434
+#: admin/class-everyalt-admin.php:436
msgid "Request failed"
msgstr "Verzoek mislukt"
-#: admin/class-everyalt-admin.php:435
+#: admin/class-everyalt-admin.php:437
msgid "Saved!"
msgstr "Opgeslagen!"
-#: admin/class-everyalt-admin.php:436
+#: admin/class-everyalt-admin.php:438
msgid "Save failed"
msgstr "Opslaan mislukt"
-#: admin/class-everyalt-admin.php:437
+#: admin/class-everyalt-admin.php:439
msgid "Regenerated!"
msgstr "Opnieuw gegenereerd!"
-#: admin/class-everyalt-admin.php:438
+#: admin/class-everyalt-admin.php:440
msgid "Regenerate failed"
msgstr "Opnieuw genereren mislukt"
-#: admin/class-everyalt-admin.php:451 admin/class-everyalt-admin.php:1052
-#: admin/class-everyalt-admin.php:1053
-#: admin/partials/everyalt-options-display.php:11
+#: admin/class-everyalt-admin.php:453 admin/class-everyalt-admin.php:1054
+#: admin/class-everyalt-admin.php:1055
+#: admin/partials/everyalt-options-display.php:13
msgid "EveryAlt"
msgstr "EveryAlt"
-#: admin/class-everyalt-admin.php:452
+#: admin/class-everyalt-admin.php:454
msgid "Generate alt text with EveryAlt"
msgstr "Alt-tekst genereren met EveryAlt"
-#: admin/class-everyalt-admin.php:453
+#: admin/class-everyalt-admin.php:455
msgid "Select or upload an image to generate alt text."
msgstr "Selecteer of upload een afbeelding om alt-tekst te genereren."
-#: admin/class-everyalt-admin.php:454
+#: admin/class-everyalt-admin.php:456
msgid "Generating…"
msgstr "Bezig met genereren…"
-#: admin/class-everyalt-admin.php:455
+#: admin/class-everyalt-admin.php:457
msgid "Alt text generated."
msgstr "Alt-tekst gegenereerd."
-#: admin/class-everyalt-admin.php:456
+#: admin/class-everyalt-admin.php:458
msgid "Could not generate alt text."
msgstr "Kon geen alt-tekst genereren."
-#: admin/class-everyalt-admin.php:457
+#: admin/class-everyalt-admin.php:459
msgid "Marked as decorative: alt text left empty on purpose."
msgstr "Gemarkeerd als decoratief: alt-tekst bewust leeg gelaten."
-#: admin/class-everyalt-admin.php:578
+#: admin/class-everyalt-admin.php:580
msgid "Skipped: no API key or auto-generate disabled."
msgstr "Overgeslagen: geen API-sleutel of automatisch genereren uitgeschakeld."
-#: admin/class-everyalt-admin.php:583
+#: admin/class-everyalt-admin.php:585
msgid "Skipped: API key validation failed."
msgstr "Overgeslagen: validatie van API-sleutel mislukt."
-#: admin/class-everyalt-admin.php:593
+#: admin/class-everyalt-admin.php:595
msgid "Skipped: not a valid image or file exceeds 4MB."
msgstr "Overgeslagen: geen geldige afbeelding of bestand groter dan 4 MB."
-#: admin/class-everyalt-admin.php:616
+#: admin/class-everyalt-admin.php:618
msgid "Marked as decorative (alt text left empty on purpose)."
msgstr "Gemarkeerd als decoratief (alt-tekst bewust leeg gelaten)."
-#: admin/class-everyalt-admin.php:623
+#: admin/class-everyalt-admin.php:625
msgid "No alt text returned from API."
msgstr "De API heeft geen alt-tekst teruggegeven."
-#: admin/class-everyalt-admin.php:649
+#: admin/class-everyalt-admin.php:651
msgid "[Title] Skipped: no API key or auto-generate disabled."
msgstr "[Titel] Overgeslagen: geen API-sleutel of automatisch genereren uitgeschakeld."
-#: admin/class-everyalt-admin.php:654
+#: admin/class-everyalt-admin.php:656
msgid "[Title] Skipped: API key validation failed."
msgstr "[Titel] Overgeslagen: validatie van API-sleutel mislukt."
-#: admin/class-everyalt-admin.php:664
+#: admin/class-everyalt-admin.php:666
msgid "[Title] Skipped: not a valid image or file exceeds 4MB."
msgstr "[Titel] Overgeslagen: geen geldige afbeelding of bestand groter dan 4 MB."
-#: admin/class-everyalt-admin.php:687
+#: admin/class-everyalt-admin.php:689
msgid "[Title] No title returned from API."
msgstr "[Titel] De API heeft geen titel teruggegeven."
-#: admin/class-everyalt-admin.php:1033
-#: admin/partials/everyalt-options-display.php:14
-#: admin/partials/everyalt-options-display.php:61
+#: admin/class-everyalt-admin.php:1035 admin/class-everyalt-admin.php:1077
+#: admin/partials/everyalt-options-display.php:63
msgid "Settings"
msgstr "Instellingen"
-#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377
+#: admin/class-everyalt-admin.php:1078
+#: admin/partials/everyalt-options-display.php:295
+msgid "Bulk Alt Text Generator"
+msgstr "Bulk alt-tekstgenerator"
+
+#: admin/class-everyalt-admin.php:1079
+#: admin/partials/everyalt-options-display.php:343
+msgid "Review Alt Text"
+msgstr "Alt-tekst beoordelen"
+
+#: admin/class-everyalt-admin.php:1080
+#: admin/partials/everyalt-options-display.php:391
+msgid "Bulk Image Title Generator"
+msgstr "Bulk afbeeldingstitelgenerator"
+
+#: admin/class-everyalt-admin.php:1081
+#: admin/partials/everyalt-options-display.php:439
+msgid "Review Image Titles"
+msgstr "Afbeeldingstitels beoordelen"
+
+#: admin/class-everyalt-admin.php:1082
+msgid "Logs"
+msgstr "Logboeken"
+
+#: admin/class-everyalt-admin.php:1396 admin/class-everyalt-admin.php:1421
msgid "Generation failed."
msgstr "Genereren mislukt."
-#: admin/class-everyalt-admin.php:1450
+#: admin/class-everyalt-admin.php:1494
msgid "Alt successfully updated."
msgstr "Alt-tekst succesvol bijgewerkt."
-#: admin/class-everyalt-admin.php:1466
+#: admin/class-everyalt-admin.php:1510
msgid "Title successfully updated."
msgstr "Titel succesvol bijgewerkt."
@@ -253,335 +283,315 @@ msgstr "De afbeelding kon niet voor de API worden gecodeerd. Op sommige servers
msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this."
msgstr "Het antwoord is afgekapt (max. tokens bereikt). Verhoog Max. voltooiingstokens in Instellingen om dit op te lossen."
-#: admin/partials/everyalt-options-display.php:13
+#: admin/partials/everyalt-options-display.php:15
msgid "Secondary menu"
msgstr "Secundair menu"
-#: admin/partials/everyalt-options-display.php:15
-#: admin/partials/everyalt-options-display.php:293
-msgid "Bulk Alt Text Generator"
-msgstr "Bulk alt-tekstgenerator"
-
-#: admin/partials/everyalt-options-display.php:16
-#: admin/partials/everyalt-options-display.php:341
-msgid "Review Alt Text"
-msgstr "Alt-tekst beoordelen"
-
-#: admin/partials/everyalt-options-display.php:17
-#: admin/partials/everyalt-options-display.php:387
-msgid "Bulk Image Title Generator"
-msgstr "Bulk afbeeldingstitelgenerator"
-
-#: admin/partials/everyalt-options-display.php:18
-#: admin/partials/everyalt-options-display.php:435
-msgid "Review Image Titles"
-msgstr "Afbeeldingstitels beoordelen"
-
-#: admin/partials/everyalt-options-display.php:19
-msgid "Logs"
-msgstr "Logboeken"
-
#. translators: 1: opening link to everyalt.com, 2: closing link tag, 3: opening link to hdc.net, 4: closing link tag
-#: admin/partials/everyalt-options-display.php:28
+#: admin/partials/everyalt-options-display.php:27
#, php-format
msgid "%1$sEveryAlt%2$s is a free, open-source project created by %3$sHDC%4$s, a web dev firm for high-stakes projects and AI builds."
msgstr "%1$sEveryAlt%2$s is een gratis opensourceproject van %3$sHDC%4$s, een webontwikkelbureau voor bedrijfskritische projecten en AI-toepassingen."
-#: admin/partials/everyalt-options-display.php:41
+#: admin/partials/everyalt-options-display.php:43
msgid "Settings saved."
msgstr "Instellingen opgeslagen."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:47
+#: admin/partials/everyalt-options-display.php:49
#, php-format
msgid "The %s API key you entered could not be validated. Please check the key and try again. No settings were saved."
msgstr "De ingevoerde API-sleutel voor %s kon niet worden gevalideerd. Controleer de sleutel en probeer het opnieuw. Er zijn geen instellingen opgeslagen."
-#: admin/partials/everyalt-options-display.php:54
+#: admin/partials/everyalt-options-display.php:56
msgid "Clear queue"
msgstr "Wachtrij wissen"
-#: admin/partials/everyalt-options-display.php:74
-#: admin/partials/everyalt-options-display.php:77
+#: admin/partials/everyalt-options-display.php:58
+msgid "Recent results"
+msgstr "Recente resultaten"
+
+#: admin/partials/everyalt-options-display.php:76
+#: admin/partials/everyalt-options-display.php:79
msgid "AI model"
msgstr "AI-model"
#. translators: 1: input price in USD, 2: output price in USD
-#: admin/partials/everyalt-options-display.php:90
+#: admin/partials/everyalt-options-display.php:92
#, php-format
msgid "$%1$s input · $%2$s output per 1M tokens"
msgstr "$%1$s invoer · $%2$s uitvoer per 1 miljoen tokens"
-#: admin/partials/everyalt-options-display.php:101
+#: admin/partials/everyalt-options-display.php:103
msgid "All models read the image and write alt text and titles the same way. Prices are each provider’s published rates as of September 2026 and may change. You pay the provider directly; EveryAlt never bills you. The actual cost of each image is recorded on the Logs tab."
msgstr "Alle modellen lezen de afbeelding en schrijven alt-tekst en titels op dezelfde manier. De prijzen zijn de gepubliceerde tarieven van elke provider per september 2026 en kunnen veranderen. Je betaalt de provider rechtstreeks; EveryAlt brengt je nooit iets in rekening. De werkelijke kosten per afbeelding worden vastgelegd op het tabblad Logboeken."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:108
+#: admin/partials/everyalt-options-display.php:110
#, php-format
msgid "%s pricing"
msgstr "Prijzen van %s"
-#: admin/partials/everyalt-options-display.php:116
+#: admin/partials/everyalt-options-display.php:118
msgid "API key"
msgstr "API-sleutel"
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:127
+#: admin/partials/everyalt-options-display.php:129
#, php-format
msgid "%s API key"
msgstr "%s API-sleutel"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "Key saved"
msgstr "Sleutel opgeslagen"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "No key saved"
msgstr "Geen sleutel opgeslagen"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Leave blank to keep existing key"
msgstr "Laat leeg om de bestaande sleutel te behouden"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Paste your API key"
msgstr "Plak je API-sleutel"
-#: admin/partials/everyalt-options-display.php:136
+#: admin/partials/everyalt-options-display.php:138
msgid "Validate key"
msgstr "Sleutel valideren"
#. translators: %s: link to OpenAI API keys page
-#: admin/partials/everyalt-options-display.php:142
+#: admin/partials/everyalt-options-display.php:144
#, php-format
msgid "Sign in at %s."
msgstr "Log in op %s."
-#: admin/partials/everyalt-options-display.php:143
+#: admin/partials/everyalt-options-display.php:145
msgid "Click “Create new secret key”, give it a name (e.g. “EveryAlt”), and copy the key. It is only shown once."
msgstr "Klik op “Create new secret key”, geef de sleutel een naam (bijv. “EveryAlt”) en kopieer de sleutel. Deze wordt maar één keer getoond."
-#: admin/partials/everyalt-options-display.php:144
+#: admin/partials/everyalt-options-display.php:146
msgid "Add a payment method or prepaid credits in your OpenAI billing settings; generation fails until your account has credit."
msgstr "Voeg een betaalmethode of vooraf betaald tegoed toe in je OpenAI-factuurinstellingen; genereren mislukt totdat je account tegoed heeft."
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
msgid "OpenAI API data usage"
msgstr "Gebruik van API-gegevens door OpenAI"
#. translators: %s: link to OpenAI data usage policy
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
#, php-format
msgid "OpenAI does not use API data to train its models by default. See %s."
msgstr "OpenAI gebruikt API-gegevens standaard niet om zijn modellen te trainen. Zie %s."
#. translators: %s: link to Google AI Studio API keys page
-#: admin/partials/everyalt-options-display.php:149
+#: admin/partials/everyalt-options-display.php:151
#, php-format
msgid "Sign in to Google AI Studio at %s."
msgstr "Log in bij Google AI Studio op %s."
-#: admin/partials/everyalt-options-display.php:150
+#: admin/partials/everyalt-options-display.php:152
msgid "Click “Create API key”, choose or create a Google Cloud project, and copy the key."
msgstr "Klik op “Create API key”, kies of maak een Google Cloud-project en kopieer de sleutel."
-#: admin/partials/everyalt-options-display.php:151
+#: admin/partials/everyalt-options-display.php:153
msgid "Optional: set up billing on the project to move from the free tier to the paid tier."
msgstr "Optioneel: stel facturering in voor het project om van het gratis niveau over te stappen naar het betaalde niveau."
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
msgid "Gemini API terms"
msgstr "Gemini API-voorwaarden"
#. translators: %s: link to Gemini API terms
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
#, php-format
msgid "Gemini has a free tier, but Google may use free-tier prompts and images to improve its products. On the paid tier (billing enabled), your content is not used that way. See the %s."
msgstr "Gemini heeft een gratis niveau, maar Google kan prompts en afbeeldingen uit het gratis niveau gebruiken om zijn producten te verbeteren. Op het betaalde niveau (facturering ingeschakeld) wordt je content niet op die manier gebruikt. Zie de %s."
#. translators: %s: link to DeepInfra API keys page
-#: admin/partials/everyalt-options-display.php:156
+#: admin/partials/everyalt-options-display.php:158
#, php-format
msgid "Sign in or create an account at %s."
msgstr "Log in of maak een account aan op %s."
-#: admin/partials/everyalt-options-display.php:157
+#: admin/partials/everyalt-options-display.php:159
msgid "Click “New API key”, name it (e.g. “EveryAlt”), and copy the key."
msgstr "Klik op “New API key”, geef de sleutel een naam (bijv. “EveryAlt”) en kopieer de sleutel."
-#: admin/partials/everyalt-options-display.php:158
+#: admin/partials/everyalt-options-display.php:160
msgid "Add a payment method or credits in your DeepInfra billing settings. One DeepInfra key works for both DeepSeek V4.1 Flash and GLM-5.3-Flash."
msgstr "Voeg een betaalmethode of tegoed toe in je DeepInfra-factuurinstellingen. Eén DeepInfra-sleutel werkt voor zowel DeepSeek V4.1 Flash als GLM-5.3-Flash."
-#: admin/partials/everyalt-options-display.php:162
+#: admin/partials/everyalt-options-display.php:164
msgid "Your images stay private."
msgstr "Je afbeeldingen blijven privé."
-#: admin/partials/everyalt-options-display.php:163
+#: admin/partials/everyalt-options-display.php:165
msgid "DeepInfra runs these models on its own infrastructure in data centers in the US and Canada, with a zero data retention policy: your images and the generated text are processed in memory and not stored, the content of requests is not logged, and your data is never used to train models."
msgstr "DeepInfra draait deze modellen op zijn eigen infrastructuur in datacenters in de VS en Canada, met een beleid zonder gegevensbewaring: je afbeeldingen en de gegenereerde tekst worden in het geheugen verwerkt en niet opgeslagen, de inhoud van verzoeken wordt niet gelogd en je gegevens worden nooit gebruikt om modellen te trainen."
-#: admin/partials/everyalt-options-display.php:168
+#: admin/partials/everyalt-options-display.php:170
msgid "DeepInfra data privacy"
msgstr "Gegevensprivacy bij DeepInfra"
-#: admin/partials/everyalt-options-display.php:169
+#: admin/partials/everyalt-options-display.php:171
msgid "Privacy policy"
msgstr "Privacybeleid"
-#: admin/partials/everyalt-options-display.php:170
+#: admin/partials/everyalt-options-display.php:172
msgid "Trust center (SOC 2, ISO 27001)"
msgstr "Trustcenter (SOC 2, ISO 27001)"
-#: admin/partials/everyalt-options-display.php:179
+#: admin/partials/everyalt-options-display.php:181
msgid "Keys are stored encrypted in your WordPress database. The image is sent to the provider as base64, so generation works on localhost and behind HTTP auth."
msgstr "Sleutels worden versleuteld opgeslagen in je WordPress-database. De afbeelding wordt als base64 naar de provider gestuurd, dus genereren werkt ook op localhost en achter HTTP-authenticatie."
-#: admin/partials/everyalt-options-display.php:183
+#: admin/partials/everyalt-options-display.php:185
msgid "Auto-generate on upload"
msgstr "Automatisch genereren bij upload"
-#: admin/partials/everyalt-options-display.php:185
+#: admin/partials/everyalt-options-display.php:187
msgid "Automatically generate alt text when images are uploaded"
msgstr "Alt-tekst automatisch genereren wanneer afbeeldingen worden geüpload"
-#: admin/partials/everyalt-options-display.php:187
+#: admin/partials/everyalt-options-display.php:189
msgid "Automatically generate image titles when images are uploaded"
msgstr "Afbeeldingstitels automatisch genereren wanneer afbeeldingen worden geüpload"
-#: admin/partials/everyalt-options-display.php:191
-#: admin/partials/everyalt-options-display.php:194
+#: admin/partials/everyalt-options-display.php:193
+#: admin/partials/everyalt-options-display.php:196
msgid "New uploads"
msgstr "Nieuwe uploads"
-#: admin/partials/everyalt-options-display.php:195
+#: admin/partials/everyalt-options-display.php:197
msgid "Generate in the background (recommended): uploads finish right away"
msgstr "Op de achtergrond genereren (aanbevolen): uploads zijn meteen klaar"
-#: admin/partials/everyalt-options-display.php:196
+#: admin/partials/everyalt-options-display.php:198
msgid "Generate during the upload: alt text is ready when the upload finishes, but each upload waits for the AI"
msgstr "Tijdens het uploaden genereren: de alt-tekst is klaar zodra de upload voltooid is, maar elke upload wacht op de AI"
-#: admin/partials/everyalt-options-display.php:198
+#: admin/partials/everyalt-options-display.php:200
msgid "Background jobs usually finish within a minute. They run on WordPress’s scheduler (WP-Cron), and also whenever an EveryAlt page is open, so they still work on sites where WP-Cron is blocked, such as sites behind a password."
msgstr "Achtergrondtaken zijn meestal binnen een minuut klaar. Ze draaien via de planner van WordPress (WP-Cron) en ook zolang er een EveryAlt-pagina openstaat, dus ze werken ook op sites waar WP-Cron geblokkeerd is, zoals sites achter een wachtwoord."
-#: admin/partials/everyalt-options-display.php:202
+#: admin/partials/everyalt-options-display.php:204
msgid "Decorative images"
msgstr "Decoratieve afbeeldingen"
-#: admin/partials/everyalt-options-display.php:204
+#: admin/partials/everyalt-options-display.php:206
msgid "Leave alt text empty for purely decorative images"
msgstr "Alt-tekst leeg laten voor puur decoratieve afbeeldingen"
-#: admin/partials/everyalt-options-display.php:205
+#: admin/partials/everyalt-options-display.php:207
msgid "Accessibility guidelines (WCAG) say decorative images such as dividers, spacers, and background patterns should have empty alt text so screen readers skip them. When the AI judges an image clearly decorative, EveryAlt leaves its alt text empty and marks it on the Review Alt Text tab, where you can ask for a description instead. When in doubt, the AI describes the image."
msgstr "Volgens de toegankelijkheidsrichtlijnen (WCAG) moeten decoratieve afbeeldingen, zoals scheidingslijnen, opvulelementen en achtergrondpatronen, lege alt-tekst hebben, zodat schermlezers ze overslaan. Als de AI een afbeelding duidelijk decoratief vindt, laat EveryAlt de alt-tekst leeg en markeert de afbeelding op het tabblad Alt-tekst beoordelen, waar je alsnog om een beschrijving kunt vragen. Bij twijfel beschrijft de AI de afbeelding."
-#: admin/partials/everyalt-options-display.php:209
+#: admin/partials/everyalt-options-display.php:211
msgid "Monthly spending limit"
msgstr "Maandelijkse bestedingslimiet"
-#: admin/partials/everyalt-options-display.php:212
+#: admin/partials/everyalt-options-display.php:214
msgid "None"
msgstr "Geen"
-#: admin/partials/everyalt-options-display.php:213
+#: admin/partials/everyalt-options-display.php:215
msgid "USD per month"
msgstr "USD per maand"
#. translators: %s: estimated amount spent this month, e.g. $0.42
-#: admin/partials/everyalt-options-display.php:219
+#: admin/partials/everyalt-options-display.php:221
#, php-format
msgid "Estimated spend this month: %s. When the limit is reached, generation pauses until next month (queued images wait). Leave empty for no limit. Estimates use each provider’s published prices; your provider’s invoice is authoritative."
msgstr "Geschatte uitgaven deze maand: %s. Als de limiet is bereikt, pauzeert het genereren tot volgende maand (afbeeldingen in de wachtrij wachten). Laat leeg voor geen limiet. Schattingen gebruiken de gepubliceerde prijzen van elke provider; de factuur van je provider is leidend."
-#: admin/partials/everyalt-options-display.php:228
+#: admin/partials/everyalt-options-display.php:230
msgid "Existing posts"
msgstr "Bestaande berichten"
-#: admin/partials/everyalt-options-display.php:230
+#: admin/partials/everyalt-options-display.php:232
msgid "Show Media Library alt text on images already in posts that have none"
msgstr "Alt-tekst uit de mediabibliotheek tonen bij afbeeldingen in berichten die er nog geen hebben"
-#: admin/partials/everyalt-options-display.php:231
+#: admin/partials/everyalt-options-display.php:233
msgid "When an image is added to a post, WordPress copies its alt text into the post at that moment, so alt text generated later doesn’t appear in older posts. With this on, empty alt text in posts is filled in from the Media Library when the page is displayed. Your posts are not modified, and alt text written in a post is never replaced. Requires WordPress 6.0 or later."
msgstr "Wanneer een afbeelding aan een bericht wordt toegevoegd, kopieert WordPress op dat moment de alt-tekst naar het bericht, waardoor later gegenereerde alt-tekst niet in oudere berichten verschijnt. Met deze optie aan wordt lege alt-tekst in berichten bij het weergeven van de pagina aangevuld vanuit de mediabibliotheek. Je berichten worden niet gewijzigd en alt-tekst die in een bericht is geschreven, wordt nooit vervangen. Vereist WordPress 6.0 of hoger."
-#: admin/partials/everyalt-options-display.php:235
+#: admin/partials/everyalt-options-display.php:237
msgid "Language"
msgstr "Taal"
#. translators: %s: site language name in English, e.g. German
-#: admin/partials/everyalt-options-display.php:242
+#: admin/partials/everyalt-options-display.php:244
#, php-format
msgid "Automatic (site language: %s)"
msgstr "Automatisch (sitetaal: %s)"
-#: admin/partials/everyalt-options-display.php:249
+#: admin/partials/everyalt-options-display.php:251
msgid "Language for generated alt text and titles. Automatic uses your site language, or each image’s own language on multilingual sites using Polylang or WPML."
msgstr "Taal voor gegenereerde alt-tekst en titels. Automatisch gebruikt je sitetaal, of op meertalige sites met Polylang of WPML de eigen taal van elke afbeelding."
-#: admin/partials/everyalt-options-display.php:253
+#: admin/partials/everyalt-options-display.php:255
msgid "Max completion tokens"
msgstr "Max. voltooiingstokens"
-#: admin/partials/everyalt-options-display.php:256
+#: admin/partials/everyalt-options-display.php:258
msgid "Maximum tokens the model can use for its response, including any reasoning. Default 1024. Leave empty to use default."
msgstr "Maximaal aantal tokens dat het model voor zijn antwoord mag gebruiken, inclusief eventuele redenering. Standaard 1024. Laat leeg om de standaardwaarde te gebruiken."
-#: admin/partials/everyalt-options-display.php:260
+#: admin/partials/everyalt-options-display.php:262
msgid "Alt text prompt"
msgstr "Alt-tekstprompt"
-#: admin/partials/everyalt-options-display.php:268
+#: admin/partials/everyalt-options-display.php:270
msgid "Instruction sent to the AI with each image. Edit as needed. The model should return only the alt text, no extra wording."
msgstr "Instructie die met elke afbeelding naar de AI gaat. Bewerk indien nodig. Het model moet alleen de alt-tekst teruggeven, geen extra tekst."
-#: admin/partials/everyalt-options-display.php:272
+#: admin/partials/everyalt-options-display.php:274
msgid "Image title prompt"
msgstr "Afbeeldingstitelprompt"
-#: admin/partials/everyalt-options-display.php:280
+#: admin/partials/everyalt-options-display.php:282
msgid "Instruction sent to the AI when generating image titles. Titles are usually short (a few words). The model should return only the title, no extra wording."
msgstr "Instructie die naar de AI gaat bij het genereren van afbeeldingstitels. Titels zijn meestal kort (een paar woorden). Het model moet alleen de titel teruggeven, geen extra tekst."
-#: admin/partials/everyalt-options-display.php:285
+#: admin/partials/everyalt-options-display.php:287
msgid "Save Settings"
msgstr "Instellingen opslaan"
-#: admin/partials/everyalt-options-display.php:294
+#: admin/partials/everyalt-options-display.php:296
#, php-format
msgid "This page finds all images in your media library that do not currently have alt text and lets you generate new alt text with EveryAlt quickly. To see existing images that already have alt text, go to the Review Alt Text tab."
msgstr "Deze pagina vindt alle afbeeldingen in je mediabibliotheek zonder alt-tekst en laat je die snel met EveryAlt genereren. Ga naar het tabblad Alt-tekst beoordelen voor afbeeldingen die al alt-tekst hebben."
-#: admin/partials/everyalt-options-display.php:296
-#: admin/partials/everyalt-options-display.php:390
+#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:394
msgid "Please add an API key for the selected AI model in the Settings tab first."
msgstr "Voeg eerst een API-sleutel toe voor het geselecteerde AI-model op het tabblad Instellingen."
-#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:300
msgid "No images without alt text found."
msgstr "Geen afbeeldingen zonder alt-tekst gevonden."
-#: admin/partials/everyalt-options-display.php:301
-#: admin/partials/everyalt-options-display.php:395
+#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:399
msgid "Select all"
msgstr "Alles selecteren"
-#: admin/partials/everyalt-options-display.php:302
-#: admin/partials/everyalt-options-display.php:396
+#: admin/partials/everyalt-options-display.php:304
+#: admin/partials/everyalt-options-display.php:400
msgid "Select none"
msgstr "Niets selecteren"
-#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:305
msgid "Generate alt text for selected"
msgstr "Alt-tekst genereren voor geselecteerde"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:307
-#: admin/partials/everyalt-options-display.php:401
+#: admin/partials/everyalt-options-display.php:309
+#: admin/partials/everyalt-options-display.php:405
#, php-format
msgid "Generate for all %s image"
msgid_plural "Generate for all %s images"
@@ -589,10 +599,10 @@ msgstr[0] "Genereren voor %s afbeelding"
msgstr[1] "Genereren voor alle %s afbeeldingen"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:311
-#: admin/partials/everyalt-options-display.php:349
-#: admin/partials/everyalt-options-display.php:405
-#: admin/partials/everyalt-options-display.php:443
+#: admin/partials/everyalt-options-display.php:313
+#: admin/partials/everyalt-options-display.php:351
+#: admin/partials/everyalt-options-display.php:409
+#: admin/partials/everyalt-options-display.php:447
#, php-format
msgid "%s image"
msgid_plural "%s images"
@@ -600,136 +610,158 @@ msgstr[0] "%s afbeelding"
msgstr[1] "%s afbeeldingen"
#. translators: %s: image title
-#: admin/partials/everyalt-options-display.php:319
-#: admin/partials/everyalt-options-display.php:413
+#: admin/partials/everyalt-options-display.php:321
+#: admin/partials/everyalt-options-display.php:417
#, php-format
msgid "Select “%s”"
msgstr "“%s” selecteren"
-#: admin/partials/everyalt-options-display.php:326
-#: admin/partials/everyalt-options-display.php:363
-#: admin/partials/everyalt-options-display.php:420
-#: admin/partials/everyalt-options-display.php:453
+#: admin/partials/everyalt-options-display.php:328
+#: admin/partials/everyalt-options-display.php:365
+#: admin/partials/everyalt-options-display.php:424
+#: admin/partials/everyalt-options-display.php:457
msgid "Edit"
msgstr "Bewerken"
-#: admin/partials/everyalt-options-display.php:342
+#: admin/partials/everyalt-options-display.php:344
msgid "Images that already have alt text, plus images marked decorative (alt text left empty on purpose). Edit and save, or regenerate with EveryAlt."
msgstr "Afbeeldingen die al alt-tekst hebben, plus afbeeldingen die als decoratief zijn gemarkeerd (alt-tekst bewust leeg gelaten). Bewerk en sla op, of genereer opnieuw met EveryAlt."
-#: admin/partials/everyalt-options-display.php:344
-#: admin/partials/everyalt-options-display.php:438
+#: admin/partials/everyalt-options-display.php:346
+#: admin/partials/everyalt-options-display.php:442
msgid "Please add an API key for the selected AI model in the Settings tab to use Regenerate."
msgstr "Voeg een API-sleutel toe voor het geselecteerde AI-model op het tabblad Instellingen om “Opnieuw genereren” te gebruiken."
-#: admin/partials/everyalt-options-display.php:347
+#: admin/partials/everyalt-options-display.php:349
msgid "No images with alt text found."
msgstr "Geen afbeeldingen met alt-tekst gevonden."
-#: admin/partials/everyalt-options-display.php:360
+#: admin/partials/everyalt-options-display.php:362
msgid "Decorative"
msgstr "Decoratief"
-#: admin/partials/everyalt-options-display.php:365
+#. translators: %s: image title
+#: admin/partials/everyalt-options-display.php:367
+#, php-format
+msgid "Alt text for “%s”"
+msgstr "Alt-tekst voor “%s”"
+
+#: admin/partials/everyalt-options-display.php:368
msgid "Empty on purpose: screen readers skip this image."
msgstr "Bewust leeg: schermlezers slaan deze afbeelding over."
-#: admin/partials/everyalt-options-display.php:367
-#: admin/partials/everyalt-options-display.php:457
+#: admin/partials/everyalt-options-display.php:370
+#: admin/partials/everyalt-options-display.php:463
msgid "Save"
msgstr "Opslaan"
-#: admin/partials/everyalt-options-display.php:369
+#: admin/partials/everyalt-options-display.php:372
msgid "Describe anyway"
msgstr "Toch beschrijven"
-#: admin/partials/everyalt-options-display.php:371
-#: admin/partials/everyalt-options-display.php:458
+#: admin/partials/everyalt-options-display.php:374
+#: admin/partials/everyalt-options-display.php:464
msgid "Regenerate"
msgstr "Opnieuw genereren"
-#: admin/partials/everyalt-options-display.php:388
+#: admin/partials/everyalt-options-display.php:392
#, php-format
msgid "This page finds images whose title is still the raw upload filename (e.g. \"IMG_1234\") and lets you generate descriptive titles with EveryAlt quickly. To see images that already have a custom title, go to the Review Image Titles tab."
msgstr "Deze pagina vindt afbeeldingen waarvan de titel nog de oorspronkelijke bestandsnaam van de upload is (bijv. “IMG_1234”) en laat je snel beschrijvende titels genereren met EveryAlt. Ga naar het tabblad Afbeeldingstitels beoordelen voor afbeeldingen die al een eigen titel hebben."
-#: admin/partials/everyalt-options-display.php:392
+#: admin/partials/everyalt-options-display.php:396
msgid "No images needing a title found."
msgstr "Geen afbeeldingen gevonden die een titel nodig hebben."
-#: admin/partials/everyalt-options-display.php:397
+#: admin/partials/everyalt-options-display.php:401
msgid "Generate titles for selected"
msgstr "Titels genereren voor geselecteerde"
-#: admin/partials/everyalt-options-display.php:436
+#: admin/partials/everyalt-options-display.php:440
msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt."
msgstr "Afbeeldingen die al een eigen titel hebben. Bewerk en sla op, of genereer opnieuw met EveryAlt."
-#: admin/partials/everyalt-options-display.php:441
+#: admin/partials/everyalt-options-display.php:445
msgid "No images with a custom title found."
msgstr "Geen afbeeldingen met een eigen titel gevonden."
-#: admin/partials/everyalt-options-display.php:473
+#. translators: %s: image file name
+#: admin/partials/everyalt-options-display.php:460
+#, php-format
+msgid "Title for image file “%s”"
+msgstr "Afbeeldingstitel voor bestand “%s”"
+
+#: admin/partials/everyalt-options-display.php:480
msgid "Spending"
msgstr "Uitgaven"
#. translators: 1: spent this month, 2: monthly limit
-#: admin/partials/everyalt-options-display.php:484
+#: admin/partials/everyalt-options-display.php:491
#, php-format
msgid "This month: %1$s of your %2$s limit."
msgstr "Deze maand: %1$s van je limiet van %2$s."
#. translators: %s: spent this month
-#: admin/partials/everyalt-options-display.php:487
+#: admin/partials/everyalt-options-display.php:494
#, php-format
msgid "This month: %s (no limit set)."
msgstr "Deze maand: %s (geen limiet ingesteld)."
-#: admin/partials/everyalt-options-display.php:499
+#. translators: 1: spent this month, 2: monthly limit
+#: admin/partials/everyalt-options-display.php:500
+#, php-format
+msgid "%1$s of %2$s"
+msgstr "%1$s van %2$s"
+
+#: admin/partials/everyalt-options-display.php:500
+msgid "Monthly spending limit used"
+msgstr "Gebruikte maandelijkse bestedingslimiet"
+
+#: admin/partials/everyalt-options-display.php:506
msgid "Month"
msgstr "Maand"
-#: admin/partials/everyalt-options-display.php:500
+#: admin/partials/everyalt-options-display.php:507
msgid "Requests"
msgstr "Verzoeken"
-#: admin/partials/everyalt-options-display.php:501
+#: admin/partials/everyalt-options-display.php:508
msgid "Estimated cost"
msgstr "Geschatte kosten"
-#: admin/partials/everyalt-options-display.php:502
+#: admin/partials/everyalt-options-display.php:509
msgid "By model"
msgstr "Per model"
-#: admin/partials/everyalt-options-display.php:526
+#: admin/partials/everyalt-options-display.php:533
msgid "No spending recorded yet."
msgstr "Nog geen uitgaven geregistreerd."
-#: admin/partials/everyalt-options-display.php:528
+#: admin/partials/everyalt-options-display.php:535
msgid "Estimated from the tokens each request used and the provider’s published prices. Your provider’s invoice is authoritative."
msgstr "Geschat op basis van de tokens die elk verzoek gebruikte en de gepubliceerde prijzen van de provider. De factuur van je provider is leidend."
-#: admin/partials/everyalt-options-display.php:530
+#: admin/partials/everyalt-options-display.php:537
msgid "Generation Log"
msgstr "Generatielogboek"
-#: admin/partials/everyalt-options-display.php:531
+#: admin/partials/everyalt-options-display.php:538
msgid "Last 100 alt text generation attempts (successes and failures)."
msgstr "Laatste 100 pogingen tot alt-tekstgeneratie (successen en mislukkingen)."
-#: admin/partials/everyalt-options-display.php:534
+#: admin/partials/everyalt-options-display.php:541
msgid "Export as CSV"
msgstr "Exporteren als CSV"
-#: admin/partials/everyalt-options-display.php:542
+#: admin/partials/everyalt-options-display.php:549
msgid "Attachment"
msgstr "Bijlage"
-#: admin/partials/everyalt-options-display.php:546
+#: admin/partials/everyalt-options-display.php:553
msgid "Cost"
msgstr "Kosten"
-#: admin/partials/everyalt-options-display.php:598
+#: admin/partials/everyalt-options-display.php:605
msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log."
msgstr "Nog geen logvermeldingen. Genereer alt-tekst via het tabblad Bulk of bij het uploaden van afbeeldingen om dit logboek te vullen."
diff --git a/languages/everyalt-pt_BR.mo b/languages/everyalt-pt_BR.mo
index 573b82c..bdc8dc7 100644
Binary files a/languages/everyalt-pt_BR.mo and b/languages/everyalt-pt_BR.mo differ
diff --git a/languages/everyalt-pt_BR.po b/languages/everyalt-pt_BR.po
index af39284..78509cc 100644
--- a/languages/everyalt-pt_BR.po
+++ b/languages/everyalt-pt_BR.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EveryAlt 1.1.0\n"
"Report-Msgid-Bugs-To: https://hdc.net\n"
-"POT-Creation-Date: 2026-09-27 16:34+0000\n"
+"POT-Creation-Date: 2026-09-27 16:47+0000\n"
"PO-Revision-Date: 2026-09-27 00:00+0000\n"
"Last-Translator: HDC \n"
"Language-Team: Português do Brasil \n"
@@ -24,7 +24,7 @@ msgid "Skipped: monthly spending limit of %s reached. Generation resumes next mo
msgstr "Ignorado: limite de gastos mensal de %s atingido. A geração será retomada no próximo mês, ou aumente o limite em Configurações."
#: admin/class-everyalt-admin.php:164
-#: admin/partials/everyalt-options-display.php:541
+#: admin/partials/everyalt-options-display.php:548
msgid "Time"
msgstr "Horário"
@@ -33,17 +33,17 @@ msgid "Attachment ID"
msgstr "ID do anexo"
#: admin/class-everyalt-admin.php:166
-#: admin/partials/everyalt-options-display.php:543
+#: admin/partials/everyalt-options-display.php:550
msgid "Status"
msgstr "Status"
#: admin/class-everyalt-admin.php:167
-#: admin/partials/everyalt-options-display.php:544
+#: admin/partials/everyalt-options-display.php:551
msgid "Model"
msgstr "Modelo"
#: admin/class-everyalt-admin.php:168
-#: admin/partials/everyalt-options-display.php:545
+#: admin/partials/everyalt-options-display.php:552
msgid "Message / Alt text"
msgstr "Mensagem / Texto alternativo"
@@ -52,17 +52,18 @@ msgid "Cost (USD)"
msgstr "Custo (USD)"
#: admin/class-everyalt-admin.php:170
-#: admin/partials/everyalt-options-display.php:547
+#: admin/partials/everyalt-options-display.php:554
+#: admin/partials/everyalt-options-display.php:598
msgid "Details"
msgstr "Detalhes"
-#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432
-#: admin/partials/everyalt-options-display.php:583
+#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:434
+#: admin/partials/everyalt-options-display.php:590
msgid "Error"
msgstr "Erro"
#: admin/class-everyalt-admin.php:174
-#: admin/partials/everyalt-options-display.php:581
+#: admin/partials/everyalt-options-display.php:588
msgid "Success"
msgstr "Sucesso"
@@ -137,111 +138,140 @@ msgstr "Fila limpa."
msgid "Marked as decorative (alt text left empty on purpose)"
msgstr "Marcada como decorativa (texto alternativo deixado vazio de propósito)"
-#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458
+#. translators: %d: number of images finished in this batch
+#: admin/class-everyalt-admin.php:433
+#, php-format
+msgid "%d finished."
+msgstr "%d concluídas."
+
+#: admin/class-everyalt-admin.php:435 admin/class-everyalt-admin.php:460
msgid "Error:"
msgstr "Erro:"
-#: admin/class-everyalt-admin.php:434
+#: admin/class-everyalt-admin.php:436
msgid "Request failed"
msgstr "A solicitação falhou"
-#: admin/class-everyalt-admin.php:435
+#: admin/class-everyalt-admin.php:437
msgid "Saved!"
msgstr "Salvo!"
-#: admin/class-everyalt-admin.php:436
+#: admin/class-everyalt-admin.php:438
msgid "Save failed"
msgstr "Falha ao salvar"
-#: admin/class-everyalt-admin.php:437
+#: admin/class-everyalt-admin.php:439
msgid "Regenerated!"
msgstr "Regenerado!"
-#: admin/class-everyalt-admin.php:438
+#: admin/class-everyalt-admin.php:440
msgid "Regenerate failed"
msgstr "Falha ao regenerar"
-#: admin/class-everyalt-admin.php:451 admin/class-everyalt-admin.php:1052
-#: admin/class-everyalt-admin.php:1053
-#: admin/partials/everyalt-options-display.php:11
+#: admin/class-everyalt-admin.php:453 admin/class-everyalt-admin.php:1054
+#: admin/class-everyalt-admin.php:1055
+#: admin/partials/everyalt-options-display.php:13
msgid "EveryAlt"
msgstr "EveryAlt"
-#: admin/class-everyalt-admin.php:452
+#: admin/class-everyalt-admin.php:454
msgid "Generate alt text with EveryAlt"
msgstr "Gerar texto alternativo com EveryAlt"
-#: admin/class-everyalt-admin.php:453
+#: admin/class-everyalt-admin.php:455
msgid "Select or upload an image to generate alt text."
msgstr "Selecione ou envie uma imagem para gerar o texto alternativo."
-#: admin/class-everyalt-admin.php:454
+#: admin/class-everyalt-admin.php:456
msgid "Generating…"
msgstr "Gerando…"
-#: admin/class-everyalt-admin.php:455
+#: admin/class-everyalt-admin.php:457
msgid "Alt text generated."
msgstr "Texto alternativo gerado."
-#: admin/class-everyalt-admin.php:456
+#: admin/class-everyalt-admin.php:458
msgid "Could not generate alt text."
msgstr "Não foi possível gerar o texto alternativo."
-#: admin/class-everyalt-admin.php:457
+#: admin/class-everyalt-admin.php:459
msgid "Marked as decorative: alt text left empty on purpose."
msgstr "Marcada como decorativa: texto alternativo deixado vazio de propósito."
-#: admin/class-everyalt-admin.php:578
+#: admin/class-everyalt-admin.php:580
msgid "Skipped: no API key or auto-generate disabled."
msgstr "Ignorado: nenhuma chave de API ou geração automática desativada."
-#: admin/class-everyalt-admin.php:583
+#: admin/class-everyalt-admin.php:585
msgid "Skipped: API key validation failed."
msgstr "Ignorado: a validação da chave de API falhou."
-#: admin/class-everyalt-admin.php:593
+#: admin/class-everyalt-admin.php:595
msgid "Skipped: not a valid image or file exceeds 4MB."
msgstr "Ignorado: imagem inválida ou arquivo maior que 4 MB."
-#: admin/class-everyalt-admin.php:616
+#: admin/class-everyalt-admin.php:618
msgid "Marked as decorative (alt text left empty on purpose)."
msgstr "Marcada como decorativa (texto alternativo deixado vazio de propósito)."
-#: admin/class-everyalt-admin.php:623
+#: admin/class-everyalt-admin.php:625
msgid "No alt text returned from API."
msgstr "A API não retornou texto alternativo."
-#: admin/class-everyalt-admin.php:649
+#: admin/class-everyalt-admin.php:651
msgid "[Title] Skipped: no API key or auto-generate disabled."
msgstr "[Título] Ignorado: nenhuma chave de API ou geração automática desativada."
-#: admin/class-everyalt-admin.php:654
+#: admin/class-everyalt-admin.php:656
msgid "[Title] Skipped: API key validation failed."
msgstr "[Título] Ignorado: a validação da chave de API falhou."
-#: admin/class-everyalt-admin.php:664
+#: admin/class-everyalt-admin.php:666
msgid "[Title] Skipped: not a valid image or file exceeds 4MB."
msgstr "[Título] Ignorado: imagem inválida ou arquivo maior que 4 MB."
-#: admin/class-everyalt-admin.php:687
+#: admin/class-everyalt-admin.php:689
msgid "[Title] No title returned from API."
msgstr "[Título] A API não retornou título."
-#: admin/class-everyalt-admin.php:1033
-#: admin/partials/everyalt-options-display.php:14
-#: admin/partials/everyalt-options-display.php:61
+#: admin/class-everyalt-admin.php:1035 admin/class-everyalt-admin.php:1077
+#: admin/partials/everyalt-options-display.php:63
msgid "Settings"
msgstr "Configurações"
-#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377
+#: admin/class-everyalt-admin.php:1078
+#: admin/partials/everyalt-options-display.php:295
+msgid "Bulk Alt Text Generator"
+msgstr "Gerador em massa de texto alternativo"
+
+#: admin/class-everyalt-admin.php:1079
+#: admin/partials/everyalt-options-display.php:343
+msgid "Review Alt Text"
+msgstr "Revisar texto alternativo"
+
+#: admin/class-everyalt-admin.php:1080
+#: admin/partials/everyalt-options-display.php:391
+msgid "Bulk Image Title Generator"
+msgstr "Gerador em massa de títulos de imagem"
+
+#: admin/class-everyalt-admin.php:1081
+#: admin/partials/everyalt-options-display.php:439
+msgid "Review Image Titles"
+msgstr "Revisar títulos de imagem"
+
+#: admin/class-everyalt-admin.php:1082
+msgid "Logs"
+msgstr "Registros"
+
+#: admin/class-everyalt-admin.php:1396 admin/class-everyalt-admin.php:1421
msgid "Generation failed."
msgstr "A geração falhou."
-#: admin/class-everyalt-admin.php:1450
+#: admin/class-everyalt-admin.php:1494
msgid "Alt successfully updated."
msgstr "Texto alternativo atualizado com sucesso."
-#: admin/class-everyalt-admin.php:1466
+#: admin/class-everyalt-admin.php:1510
msgid "Title successfully updated."
msgstr "Título atualizado com sucesso."
@@ -253,335 +283,315 @@ msgstr "A imagem não pôde ser codificada para a API. Em alguns servidores, a c
msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this."
msgstr "A resposta foi cortada (limite de tokens atingido). Aumente os tokens máximos de conclusão em Configurações para resolver."
-#: admin/partials/everyalt-options-display.php:13
+#: admin/partials/everyalt-options-display.php:15
msgid "Secondary menu"
msgstr "Menu secundário"
-#: admin/partials/everyalt-options-display.php:15
-#: admin/partials/everyalt-options-display.php:293
-msgid "Bulk Alt Text Generator"
-msgstr "Gerador em massa de texto alternativo"
-
-#: admin/partials/everyalt-options-display.php:16
-#: admin/partials/everyalt-options-display.php:341
-msgid "Review Alt Text"
-msgstr "Revisar texto alternativo"
-
-#: admin/partials/everyalt-options-display.php:17
-#: admin/partials/everyalt-options-display.php:387
-msgid "Bulk Image Title Generator"
-msgstr "Gerador em massa de títulos de imagem"
-
-#: admin/partials/everyalt-options-display.php:18
-#: admin/partials/everyalt-options-display.php:435
-msgid "Review Image Titles"
-msgstr "Revisar títulos de imagem"
-
-#: admin/partials/everyalt-options-display.php:19
-msgid "Logs"
-msgstr "Registros"
-
#. translators: 1: opening link to everyalt.com, 2: closing link tag, 3: opening link to hdc.net, 4: closing link tag
-#: admin/partials/everyalt-options-display.php:28
+#: admin/partials/everyalt-options-display.php:27
#, php-format
msgid "%1$sEveryAlt%2$s is a free, open-source project created by %3$sHDC%4$s, a web dev firm for high-stakes projects and AI builds."
msgstr "%1$sEveryAlt%2$s é um projeto gratuito e de código aberto criado pela %3$sHDC%4$s, uma empresa de desenvolvimento web para projetos críticos e soluções de IA."
-#: admin/partials/everyalt-options-display.php:41
+#: admin/partials/everyalt-options-display.php:43
msgid "Settings saved."
msgstr "Configurações salvas."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:47
+#: admin/partials/everyalt-options-display.php:49
#, php-format
msgid "The %s API key you entered could not be validated. Please check the key and try again. No settings were saved."
msgstr "A chave de API de %s que você digitou não pôde ser validada. Verifique a chave e tente novamente. Nenhuma configuração foi salva."
-#: admin/partials/everyalt-options-display.php:54
+#: admin/partials/everyalt-options-display.php:56
msgid "Clear queue"
msgstr "Limpar fila"
-#: admin/partials/everyalt-options-display.php:74
-#: admin/partials/everyalt-options-display.php:77
+#: admin/partials/everyalt-options-display.php:58
+msgid "Recent results"
+msgstr "Resultados recentes"
+
+#: admin/partials/everyalt-options-display.php:76
+#: admin/partials/everyalt-options-display.php:79
msgid "AI model"
msgstr "Modelo de IA"
#. translators: 1: input price in USD, 2: output price in USD
-#: admin/partials/everyalt-options-display.php:90
+#: admin/partials/everyalt-options-display.php:92
#, php-format
msgid "$%1$s input · $%2$s output per 1M tokens"
msgstr "$%1$s de entrada · $%2$s de saída por 1M de tokens"
-#: admin/partials/everyalt-options-display.php:101
+#: admin/partials/everyalt-options-display.php:103
msgid "All models read the image and write alt text and titles the same way. Prices are each provider’s published rates as of September 2026 and may change. You pay the provider directly; EveryAlt never bills you. The actual cost of each image is recorded on the Logs tab."
msgstr "Todos os modelos analisam a imagem e escrevem textos alternativos e títulos da mesma forma. Os preços são as tarifas publicadas por cada provedor em setembro de 2026 e podem mudar. Você paga diretamente ao provedor; o EveryAlt nunca cobra nada de você. O custo real de cada imagem fica registrado na aba Registros."
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:108
+#: admin/partials/everyalt-options-display.php:110
#, php-format
msgid "%s pricing"
msgstr "Preços de %s"
-#: admin/partials/everyalt-options-display.php:116
+#: admin/partials/everyalt-options-display.php:118
msgid "API key"
msgstr "Chave de API"
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:127
+#: admin/partials/everyalt-options-display.php:129
#, php-format
msgid "%s API key"
msgstr "Chave de API de %s"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "Key saved"
msgstr "Chave salva"
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "No key saved"
msgstr "Nenhuma chave salva"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Leave blank to keep existing key"
msgstr "Deixe em branco para manter a chave atual"
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Paste your API key"
msgstr "Cole sua chave de API"
-#: admin/partials/everyalt-options-display.php:136
+#: admin/partials/everyalt-options-display.php:138
msgid "Validate key"
msgstr "Validar chave"
#. translators: %s: link to OpenAI API keys page
-#: admin/partials/everyalt-options-display.php:142
+#: admin/partials/everyalt-options-display.php:144
#, php-format
msgid "Sign in at %s."
msgstr "Faça login em %s."
-#: admin/partials/everyalt-options-display.php:143
+#: admin/partials/everyalt-options-display.php:145
msgid "Click “Create new secret key”, give it a name (e.g. “EveryAlt”), and copy the key. It is only shown once."
msgstr "Clique em “Create new secret key”, dê um nome a ela (por exemplo, “EveryAlt”) e copie a chave. Ela é exibida apenas uma vez."
-#: admin/partials/everyalt-options-display.php:144
+#: admin/partials/everyalt-options-display.php:146
msgid "Add a payment method or prepaid credits in your OpenAI billing settings; generation fails until your account has credit."
msgstr "Adicione uma forma de pagamento ou créditos pré-pagos nas configurações de faturamento da OpenAI; a geração falhará até que sua conta tenha crédito."
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
msgid "OpenAI API data usage"
msgstr "Uso de dados da API da OpenAI"
#. translators: %s: link to OpenAI data usage policy
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
#, php-format
msgid "OpenAI does not use API data to train its models by default. See %s."
msgstr "Por padrão, a OpenAI não usa dados da API para treinar seus modelos. Consulte %s."
#. translators: %s: link to Google AI Studio API keys page
-#: admin/partials/everyalt-options-display.php:149
+#: admin/partials/everyalt-options-display.php:151
#, php-format
msgid "Sign in to Google AI Studio at %s."
msgstr "Faça login no Google AI Studio em %s."
-#: admin/partials/everyalt-options-display.php:150
+#: admin/partials/everyalt-options-display.php:152
msgid "Click “Create API key”, choose or create a Google Cloud project, and copy the key."
msgstr "Clique em “Create API key”, escolha ou crie um projeto do Google Cloud e copie a chave."
-#: admin/partials/everyalt-options-display.php:151
+#: admin/partials/everyalt-options-display.php:153
msgid "Optional: set up billing on the project to move from the free tier to the paid tier."
msgstr "Opcional: configure o faturamento no projeto para passar do nível gratuito para o nível pago."
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
msgid "Gemini API terms"
msgstr "Termos da API do Gemini"
#. translators: %s: link to Gemini API terms
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
#, php-format
msgid "Gemini has a free tier, but Google may use free-tier prompts and images to improve its products. On the paid tier (billing enabled), your content is not used that way. See the %s."
msgstr "O Gemini tem um nível gratuito, mas o Google pode usar prompts e imagens do nível gratuito para melhorar seus produtos. No nível pago (com faturamento ativado), seu conteúdo não é usado dessa forma. Consulte os %s."
#. translators: %s: link to DeepInfra API keys page
-#: admin/partials/everyalt-options-display.php:156
+#: admin/partials/everyalt-options-display.php:158
#, php-format
msgid "Sign in or create an account at %s."
msgstr "Faça login ou crie uma conta em %s."
-#: admin/partials/everyalt-options-display.php:157
+#: admin/partials/everyalt-options-display.php:159
msgid "Click “New API key”, name it (e.g. “EveryAlt”), and copy the key."
msgstr "Clique em “New API key”, dê um nome a ela (por exemplo, “EveryAlt”) e copie a chave."
-#: admin/partials/everyalt-options-display.php:158
+#: admin/partials/everyalt-options-display.php:160
msgid "Add a payment method or credits in your DeepInfra billing settings. One DeepInfra key works for both DeepSeek V4.1 Flash and GLM-5.3-Flash."
msgstr "Adicione uma forma de pagamento ou créditos nas configurações de faturamento da DeepInfra. Uma única chave da DeepInfra funciona tanto para o DeepSeek V4.1 Flash quanto para o GLM-5.3-Flash."
-#: admin/partials/everyalt-options-display.php:162
+#: admin/partials/everyalt-options-display.php:164
msgid "Your images stay private."
msgstr "Suas imagens permanecem privadas."
-#: admin/partials/everyalt-options-display.php:163
+#: admin/partials/everyalt-options-display.php:165
msgid "DeepInfra runs these models on its own infrastructure in data centers in the US and Canada, with a zero data retention policy: your images and the generated text are processed in memory and not stored, the content of requests is not logged, and your data is never used to train models."
msgstr "A DeepInfra executa esses modelos em sua própria infraestrutura, em data centers nos EUA e no Canadá, com uma política de retenção zero de dados: suas imagens e o texto gerado são processados em memória e não são armazenados, o conteúdo das solicitações não é registrado e seus dados nunca são usados para treinar modelos."
-#: admin/partials/everyalt-options-display.php:168
+#: admin/partials/everyalt-options-display.php:170
msgid "DeepInfra data privacy"
msgstr "Privacidade de dados da DeepInfra"
-#: admin/partials/everyalt-options-display.php:169
+#: admin/partials/everyalt-options-display.php:171
msgid "Privacy policy"
msgstr "Política de privacidade"
-#: admin/partials/everyalt-options-display.php:170
+#: admin/partials/everyalt-options-display.php:172
msgid "Trust center (SOC 2, ISO 27001)"
msgstr "Central de confiança (SOC 2, ISO 27001)"
-#: admin/partials/everyalt-options-display.php:179
+#: admin/partials/everyalt-options-display.php:181
msgid "Keys are stored encrypted in your WordPress database. The image is sent to the provider as base64, so generation works on localhost and behind HTTP auth."
msgstr "As chaves são armazenadas criptografadas no banco de dados do seu WordPress. A imagem é enviada ao provedor em base64, então a geração funciona em localhost e atrás de autenticação HTTP."
-#: admin/partials/everyalt-options-display.php:183
+#: admin/partials/everyalt-options-display.php:185
msgid "Auto-generate on upload"
msgstr "Gerar automaticamente no envio"
-#: admin/partials/everyalt-options-display.php:185
+#: admin/partials/everyalt-options-display.php:187
msgid "Automatically generate alt text when images are uploaded"
msgstr "Gerar automaticamente o texto alternativo quando as imagens forem enviadas"
-#: admin/partials/everyalt-options-display.php:187
+#: admin/partials/everyalt-options-display.php:189
msgid "Automatically generate image titles when images are uploaded"
msgstr "Gerar automaticamente os títulos de imagem quando as imagens forem enviadas"
-#: admin/partials/everyalt-options-display.php:191
-#: admin/partials/everyalt-options-display.php:194
+#: admin/partials/everyalt-options-display.php:193
+#: admin/partials/everyalt-options-display.php:196
msgid "New uploads"
msgstr "Novos envios"
-#: admin/partials/everyalt-options-display.php:195
+#: admin/partials/everyalt-options-display.php:197
msgid "Generate in the background (recommended): uploads finish right away"
msgstr "Gerar em segundo plano (recomendado): os envios terminam imediatamente"
-#: admin/partials/everyalt-options-display.php:196
+#: admin/partials/everyalt-options-display.php:198
msgid "Generate during the upload: alt text is ready when the upload finishes, but each upload waits for the AI"
msgstr "Gerar durante o envio: o texto alternativo fica pronto quando o envio termina, mas cada envio aguarda a IA"
-#: admin/partials/everyalt-options-display.php:198
+#: admin/partials/everyalt-options-display.php:200
msgid "Background jobs usually finish within a minute. They run on WordPress’s scheduler (WP-Cron), and also whenever an EveryAlt page is open, so they still work on sites where WP-Cron is blocked, such as sites behind a password."
msgstr "As tarefas em segundo plano geralmente terminam em até um minuto. Elas são executadas pelo agendador do WordPress (WP-Cron) e também sempre que uma página do EveryAlt está aberta, então funcionam mesmo em sites onde o WP-Cron está bloqueado, como sites protegidos por senha."
-#: admin/partials/everyalt-options-display.php:202
+#: admin/partials/everyalt-options-display.php:204
msgid "Decorative images"
msgstr "Imagens decorativas"
-#: admin/partials/everyalt-options-display.php:204
+#: admin/partials/everyalt-options-display.php:206
msgid "Leave alt text empty for purely decorative images"
msgstr "Deixar o texto alternativo vazio em imagens puramente decorativas"
-#: admin/partials/everyalt-options-display.php:205
+#: admin/partials/everyalt-options-display.php:207
msgid "Accessibility guidelines (WCAG) say decorative images such as dividers, spacers, and background patterns should have empty alt text so screen readers skip them. When the AI judges an image clearly decorative, EveryAlt leaves its alt text empty and marks it on the Review Alt Text tab, where you can ask for a description instead. When in doubt, the AI describes the image."
msgstr "As diretrizes de acessibilidade (WCAG) indicam que imagens decorativas, como divisores, espaçadores e padrões de fundo, devem ter texto alternativo vazio para que os leitores de tela as ignorem. Quando a IA considera uma imagem claramente decorativa, o EveryAlt deixa o texto alternativo vazio e a marca na aba Revisar texto alternativo, onde você pode pedir uma descrição. Na dúvida, a IA descreve a imagem."
-#: admin/partials/everyalt-options-display.php:209
+#: admin/partials/everyalt-options-display.php:211
msgid "Monthly spending limit"
msgstr "Limite de gastos mensal"
-#: admin/partials/everyalt-options-display.php:212
+#: admin/partials/everyalt-options-display.php:214
msgid "None"
msgstr "Nenhum"
-#: admin/partials/everyalt-options-display.php:213
+#: admin/partials/everyalt-options-display.php:215
msgid "USD per month"
msgstr "USD por mês"
#. translators: %s: estimated amount spent this month, e.g. $0.42
-#: admin/partials/everyalt-options-display.php:219
+#: admin/partials/everyalt-options-display.php:221
#, php-format
msgid "Estimated spend this month: %s. When the limit is reached, generation pauses until next month (queued images wait). Leave empty for no limit. Estimates use each provider’s published prices; your provider’s invoice is authoritative."
msgstr "Gasto estimado neste mês: %s. Quando o limite é atingido, a geração é pausada até o próximo mês (as imagens na fila aguardam). Deixe vazio para não ter limite. As estimativas usam os preços publicados por cada provedor; a fatura do seu provedor é o valor oficial."
-#: admin/partials/everyalt-options-display.php:228
+#: admin/partials/everyalt-options-display.php:230
msgid "Existing posts"
msgstr "Posts existentes"
-#: admin/partials/everyalt-options-display.php:230
+#: admin/partials/everyalt-options-display.php:232
msgid "Show Media Library alt text on images already in posts that have none"
msgstr "Mostrar o texto alternativo da Biblioteca de mídia em imagens já inseridas em posts que não têm nenhum"
-#: admin/partials/everyalt-options-display.php:231
+#: admin/partials/everyalt-options-display.php:233
msgid "When an image is added to a post, WordPress copies its alt text into the post at that moment, so alt text generated later doesn’t appear in older posts. With this on, empty alt text in posts is filled in from the Media Library when the page is displayed. Your posts are not modified, and alt text written in a post is never replaced. Requires WordPress 6.0 or later."
msgstr "Quando uma imagem é adicionada a um post, o WordPress copia o texto alternativo dela para o post naquele momento, então textos alternativos gerados depois não aparecem em posts mais antigos. Com esta opção ativada, textos alternativos vazios nos posts são preenchidos a partir da Biblioteca de mídia quando a página é exibida. Seus posts não são modificados, e o texto alternativo escrito em um post nunca é substituído. Requer WordPress 6.0 ou posterior."
-#: admin/partials/everyalt-options-display.php:235
+#: admin/partials/everyalt-options-display.php:237
msgid "Language"
msgstr "Idioma"
#. translators: %s: site language name in English, e.g. German
-#: admin/partials/everyalt-options-display.php:242
+#: admin/partials/everyalt-options-display.php:244
#, php-format
msgid "Automatic (site language: %s)"
msgstr "Automático (idioma do site: %s)"
-#: admin/partials/everyalt-options-display.php:249
+#: admin/partials/everyalt-options-display.php:251
msgid "Language for generated alt text and titles. Automatic uses your site language, or each image’s own language on multilingual sites using Polylang or WPML."
msgstr "Idioma dos textos alternativos e títulos gerados. Automático usa o idioma do seu site ou, em sites multilíngues com Polylang ou WPML, o idioma de cada imagem."
-#: admin/partials/everyalt-options-display.php:253
+#: admin/partials/everyalt-options-display.php:255
msgid "Max completion tokens"
msgstr "Tokens máximos de conclusão"
-#: admin/partials/everyalt-options-display.php:256
+#: admin/partials/everyalt-options-display.php:258
msgid "Maximum tokens the model can use for its response, including any reasoning. Default 1024. Leave empty to use default."
msgstr "Número máximo de tokens que o modelo pode usar na resposta, incluindo qualquer raciocínio. Padrão: 1024. Deixe vazio para usar o padrão."
-#: admin/partials/everyalt-options-display.php:260
+#: admin/partials/everyalt-options-display.php:262
msgid "Alt text prompt"
msgstr "Prompt do texto alternativo"
-#: admin/partials/everyalt-options-display.php:268
+#: admin/partials/everyalt-options-display.php:270
msgid "Instruction sent to the AI with each image. Edit as needed. The model should return only the alt text, no extra wording."
msgstr "Instrução enviada à IA com cada imagem. Edite conforme necessário. O modelo deve retornar apenas o texto alternativo, sem texto extra."
-#: admin/partials/everyalt-options-display.php:272
+#: admin/partials/everyalt-options-display.php:274
msgid "Image title prompt"
msgstr "Prompt do título da imagem"
-#: admin/partials/everyalt-options-display.php:280
+#: admin/partials/everyalt-options-display.php:282
msgid "Instruction sent to the AI when generating image titles. Titles are usually short (a few words). The model should return only the title, no extra wording."
msgstr "Instrução enviada à IA ao gerar títulos de imagem. Os títulos costumam ser curtos (poucas palavras). O modelo deve retornar apenas o título, sem texto extra."
-#: admin/partials/everyalt-options-display.php:285
+#: admin/partials/everyalt-options-display.php:287
msgid "Save Settings"
msgstr "Salvar configurações"
-#: admin/partials/everyalt-options-display.php:294
+#: admin/partials/everyalt-options-display.php:296
#, php-format
msgid "This page finds all images in your media library that do not currently have alt text and lets you generate new alt text with EveryAlt quickly. To see existing images that already have alt text, go to the Review Alt Text tab."
msgstr "Esta página encontra todas as imagens da sua biblioteca de mídia que ainda não têm texto alternativo e permite gerar um com EveryAlt rapidamente. Para ver imagens que já têm texto alternativo, vá à aba Revisar texto alternativo."
-#: admin/partials/everyalt-options-display.php:296
-#: admin/partials/everyalt-options-display.php:390
+#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:394
msgid "Please add an API key for the selected AI model in the Settings tab first."
msgstr "Primeiro, adicione uma chave de API para o modelo de IA selecionado na aba Configurações."
-#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:300
msgid "No images without alt text found."
msgstr "Nenhuma imagem sem texto alternativo encontrada."
-#: admin/partials/everyalt-options-display.php:301
-#: admin/partials/everyalt-options-display.php:395
+#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:399
msgid "Select all"
msgstr "Selecionar tudo"
-#: admin/partials/everyalt-options-display.php:302
-#: admin/partials/everyalt-options-display.php:396
+#: admin/partials/everyalt-options-display.php:304
+#: admin/partials/everyalt-options-display.php:400
msgid "Select none"
msgstr "Desmarcar todas"
-#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:305
msgid "Generate alt text for selected"
msgstr "Gerar texto alternativo para os selecionados"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:307
-#: admin/partials/everyalt-options-display.php:401
+#: admin/partials/everyalt-options-display.php:309
+#: admin/partials/everyalt-options-display.php:405
#, php-format
msgid "Generate for all %s image"
msgid_plural "Generate for all %s images"
@@ -589,10 +599,10 @@ msgstr[0] "Gerar para %s imagem"
msgstr[1] "Gerar para todas as %s imagens"
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:311
-#: admin/partials/everyalt-options-display.php:349
-#: admin/partials/everyalt-options-display.php:405
-#: admin/partials/everyalt-options-display.php:443
+#: admin/partials/everyalt-options-display.php:313
+#: admin/partials/everyalt-options-display.php:351
+#: admin/partials/everyalt-options-display.php:409
+#: admin/partials/everyalt-options-display.php:447
#, php-format
msgid "%s image"
msgid_plural "%s images"
@@ -600,136 +610,158 @@ msgstr[0] "%s imagem"
msgstr[1] "%s imagens"
#. translators: %s: image title
-#: admin/partials/everyalt-options-display.php:319
-#: admin/partials/everyalt-options-display.php:413
+#: admin/partials/everyalt-options-display.php:321
+#: admin/partials/everyalt-options-display.php:417
#, php-format
msgid "Select “%s”"
msgstr "Selecionar “%s”"
-#: admin/partials/everyalt-options-display.php:326
-#: admin/partials/everyalt-options-display.php:363
-#: admin/partials/everyalt-options-display.php:420
-#: admin/partials/everyalt-options-display.php:453
+#: admin/partials/everyalt-options-display.php:328
+#: admin/partials/everyalt-options-display.php:365
+#: admin/partials/everyalt-options-display.php:424
+#: admin/partials/everyalt-options-display.php:457
msgid "Edit"
msgstr "Editar"
-#: admin/partials/everyalt-options-display.php:342
+#: admin/partials/everyalt-options-display.php:344
msgid "Images that already have alt text, plus images marked decorative (alt text left empty on purpose). Edit and save, or regenerate with EveryAlt."
msgstr "Imagens que já têm texto alternativo, além das imagens marcadas como decorativas (texto alternativo deixado vazio de propósito). Edite e salve, ou regenere com EveryAlt."
-#: admin/partials/everyalt-options-display.php:344
-#: admin/partials/everyalt-options-display.php:438
+#: admin/partials/everyalt-options-display.php:346
+#: admin/partials/everyalt-options-display.php:442
msgid "Please add an API key for the selected AI model in the Settings tab to use Regenerate."
msgstr "Adicione uma chave de API para o modelo de IA selecionado na aba Configurações para usar Regenerar."
-#: admin/partials/everyalt-options-display.php:347
+#: admin/partials/everyalt-options-display.php:349
msgid "No images with alt text found."
msgstr "Nenhuma imagem com texto alternativo encontrada."
-#: admin/partials/everyalt-options-display.php:360
+#: admin/partials/everyalt-options-display.php:362
msgid "Decorative"
msgstr "Decorativa"
-#: admin/partials/everyalt-options-display.php:365
+#. translators: %s: image title
+#: admin/partials/everyalt-options-display.php:367
+#, php-format
+msgid "Alt text for “%s”"
+msgstr "Texto alternativo de “%s”"
+
+#: admin/partials/everyalt-options-display.php:368
msgid "Empty on purpose: screen readers skip this image."
msgstr "Vazio de propósito: os leitores de tela ignoram esta imagem."
-#: admin/partials/everyalt-options-display.php:367
-#: admin/partials/everyalt-options-display.php:457
+#: admin/partials/everyalt-options-display.php:370
+#: admin/partials/everyalt-options-display.php:463
msgid "Save"
msgstr "Salvar"
-#: admin/partials/everyalt-options-display.php:369
+#: admin/partials/everyalt-options-display.php:372
msgid "Describe anyway"
msgstr "Descrever mesmo assim"
-#: admin/partials/everyalt-options-display.php:371
-#: admin/partials/everyalt-options-display.php:458
+#: admin/partials/everyalt-options-display.php:374
+#: admin/partials/everyalt-options-display.php:464
msgid "Regenerate"
msgstr "Regenerar"
-#: admin/partials/everyalt-options-display.php:388
+#: admin/partials/everyalt-options-display.php:392
#, php-format
msgid "This page finds images whose title is still the raw upload filename (e.g. \"IMG_1234\") and lets you generate descriptive titles with EveryAlt quickly. To see images that already have a custom title, go to the Review Image Titles tab."
msgstr "Esta página encontra imagens cujo título ainda é o nome original do arquivo enviado (por exemplo, \"IMG_1234\") e permite gerar títulos descritivos com EveryAlt rapidamente. Para ver imagens que já têm um título personalizado, vá à aba Revisar títulos de imagem."
-#: admin/partials/everyalt-options-display.php:392
+#: admin/partials/everyalt-options-display.php:396
msgid "No images needing a title found."
msgstr "Nenhuma imagem precisando de título encontrada."
-#: admin/partials/everyalt-options-display.php:397
+#: admin/partials/everyalt-options-display.php:401
msgid "Generate titles for selected"
msgstr "Gerar títulos para os selecionados"
-#: admin/partials/everyalt-options-display.php:436
+#: admin/partials/everyalt-options-display.php:440
msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt."
msgstr "Imagens que já têm um título personalizado. Edite e salve, ou regenere com EveryAlt."
-#: admin/partials/everyalt-options-display.php:441
+#: admin/partials/everyalt-options-display.php:445
msgid "No images with a custom title found."
msgstr "Nenhuma imagem com título personalizado encontrada."
-#: admin/partials/everyalt-options-display.php:473
+#. translators: %s: image file name
+#: admin/partials/everyalt-options-display.php:460
+#, php-format
+msgid "Title for image file “%s”"
+msgstr "Título da imagem para o arquivo “%s”"
+
+#: admin/partials/everyalt-options-display.php:480
msgid "Spending"
msgstr "Gastos"
#. translators: 1: spent this month, 2: monthly limit
-#: admin/partials/everyalt-options-display.php:484
+#: admin/partials/everyalt-options-display.php:491
#, php-format
msgid "This month: %1$s of your %2$s limit."
msgstr "Este mês: %1$s do seu limite de %2$s."
#. translators: %s: spent this month
-#: admin/partials/everyalt-options-display.php:487
+#: admin/partials/everyalt-options-display.php:494
#, php-format
msgid "This month: %s (no limit set)."
msgstr "Este mês: %s (sem limite definido)."
-#: admin/partials/everyalt-options-display.php:499
+#. translators: 1: spent this month, 2: monthly limit
+#: admin/partials/everyalt-options-display.php:500
+#, php-format
+msgid "%1$s of %2$s"
+msgstr "%1$s de %2$s"
+
+#: admin/partials/everyalt-options-display.php:500
+msgid "Monthly spending limit used"
+msgstr "Limite de gastos mensal utilizado"
+
+#: admin/partials/everyalt-options-display.php:506
msgid "Month"
msgstr "Mês"
-#: admin/partials/everyalt-options-display.php:500
+#: admin/partials/everyalt-options-display.php:507
msgid "Requests"
msgstr "Solicitações"
-#: admin/partials/everyalt-options-display.php:501
+#: admin/partials/everyalt-options-display.php:508
msgid "Estimated cost"
msgstr "Custo estimado"
-#: admin/partials/everyalt-options-display.php:502
+#: admin/partials/everyalt-options-display.php:509
msgid "By model"
msgstr "Por modelo"
-#: admin/partials/everyalt-options-display.php:526
+#: admin/partials/everyalt-options-display.php:533
msgid "No spending recorded yet."
msgstr "Nenhum gasto registrado ainda."
-#: admin/partials/everyalt-options-display.php:528
+#: admin/partials/everyalt-options-display.php:535
msgid "Estimated from the tokens each request used and the provider’s published prices. Your provider’s invoice is authoritative."
msgstr "Estimado com base nos tokens usados em cada solicitação e nos preços publicados pelo provedor. A fatura do seu provedor é o valor oficial."
-#: admin/partials/everyalt-options-display.php:530
+#: admin/partials/everyalt-options-display.php:537
msgid "Generation Log"
msgstr "Registro de geração"
-#: admin/partials/everyalt-options-display.php:531
+#: admin/partials/everyalt-options-display.php:538
msgid "Last 100 alt text generation attempts (successes and failures)."
msgstr "Últimas 100 tentativas de geração de texto alternativo (sucessos e falhas)."
-#: admin/partials/everyalt-options-display.php:534
+#: admin/partials/everyalt-options-display.php:541
msgid "Export as CSV"
msgstr "Exportar como CSV"
-#: admin/partials/everyalt-options-display.php:542
+#: admin/partials/everyalt-options-display.php:549
msgid "Attachment"
msgstr "Anexo"
-#: admin/partials/everyalt-options-display.php:546
+#: admin/partials/everyalt-options-display.php:553
msgid "Cost"
msgstr "Custo"
-#: admin/partials/everyalt-options-display.php:598
+#: admin/partials/everyalt-options-display.php:605
msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log."
msgstr "Ainda não há entradas no registro. Gere texto alternativo na aba Em massa ou ao enviar imagens para preencher este registro."
diff --git a/languages/everyalt.pot b/languages/everyalt.pot
index 17bc2ca..f2ed75a 100644
--- a/languages/everyalt.pot
+++ b/languages/everyalt.pot
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EveryAlt 1.1.0\n"
"Report-Msgid-Bugs-To: https://hdc.net\n"
-"POT-Creation-Date: 2026-09-27 16:34+0000\n"
+"POT-Creation-Date: 2026-09-27 16:47+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -22,7 +22,7 @@ msgid "Skipped: monthly spending limit of %s reached. Generation resumes next mo
msgstr ""
#: admin/class-everyalt-admin.php:164
-#: admin/partials/everyalt-options-display.php:541
+#: admin/partials/everyalt-options-display.php:548
msgid "Time"
msgstr ""
@@ -31,17 +31,17 @@ msgid "Attachment ID"
msgstr ""
#: admin/class-everyalt-admin.php:166
-#: admin/partials/everyalt-options-display.php:543
+#: admin/partials/everyalt-options-display.php:550
msgid "Status"
msgstr ""
#: admin/class-everyalt-admin.php:167
-#: admin/partials/everyalt-options-display.php:544
+#: admin/partials/everyalt-options-display.php:551
msgid "Model"
msgstr ""
#: admin/class-everyalt-admin.php:168
-#: admin/partials/everyalt-options-display.php:545
+#: admin/partials/everyalt-options-display.php:552
msgid "Message / Alt text"
msgstr ""
@@ -50,17 +50,18 @@ msgid "Cost (USD)"
msgstr ""
#: admin/class-everyalt-admin.php:170
-#: admin/partials/everyalt-options-display.php:547
+#: admin/partials/everyalt-options-display.php:554
+#: admin/partials/everyalt-options-display.php:598
msgid "Details"
msgstr ""
-#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432
-#: admin/partials/everyalt-options-display.php:583
+#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:434
+#: admin/partials/everyalt-options-display.php:590
msgid "Error"
msgstr ""
#: admin/class-everyalt-admin.php:174
-#: admin/partials/everyalt-options-display.php:581
+#: admin/partials/everyalt-options-display.php:588
msgid "Success"
msgstr ""
@@ -135,451 +136,460 @@ msgstr ""
msgid "Marked as decorative (alt text left empty on purpose)"
msgstr ""
-#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458
+#. translators: %d: number of images finished in this batch
+#: admin/class-everyalt-admin.php:433
+#, php-format
+msgid "%d finished."
+msgstr ""
+
+#: admin/class-everyalt-admin.php:435 admin/class-everyalt-admin.php:460
msgid "Error:"
msgstr ""
-#: admin/class-everyalt-admin.php:434
+#: admin/class-everyalt-admin.php:436
msgid "Request failed"
msgstr ""
-#: admin/class-everyalt-admin.php:435
+#: admin/class-everyalt-admin.php:437
msgid "Saved!"
msgstr ""
-#: admin/class-everyalt-admin.php:436
+#: admin/class-everyalt-admin.php:438
msgid "Save failed"
msgstr ""
-#: admin/class-everyalt-admin.php:437
+#: admin/class-everyalt-admin.php:439
msgid "Regenerated!"
msgstr ""
-#: admin/class-everyalt-admin.php:438
+#: admin/class-everyalt-admin.php:440
msgid "Regenerate failed"
msgstr ""
-#: admin/class-everyalt-admin.php:451 admin/class-everyalt-admin.php:1052
-#: admin/class-everyalt-admin.php:1053
-#: admin/partials/everyalt-options-display.php:11
+#: admin/class-everyalt-admin.php:453 admin/class-everyalt-admin.php:1054
+#: admin/class-everyalt-admin.php:1055
+#: admin/partials/everyalt-options-display.php:13
msgid "EveryAlt"
msgstr ""
-#: admin/class-everyalt-admin.php:452
+#: admin/class-everyalt-admin.php:454
msgid "Generate alt text with EveryAlt"
msgstr ""
-#: admin/class-everyalt-admin.php:453
+#: admin/class-everyalt-admin.php:455
msgid "Select or upload an image to generate alt text."
msgstr ""
-#: admin/class-everyalt-admin.php:454
+#: admin/class-everyalt-admin.php:456
msgid "Generating…"
msgstr ""
-#: admin/class-everyalt-admin.php:455
+#: admin/class-everyalt-admin.php:457
msgid "Alt text generated."
msgstr ""
-#: admin/class-everyalt-admin.php:456
+#: admin/class-everyalt-admin.php:458
msgid "Could not generate alt text."
msgstr ""
-#: admin/class-everyalt-admin.php:457
+#: admin/class-everyalt-admin.php:459
msgid "Marked as decorative: alt text left empty on purpose."
msgstr ""
-#: admin/class-everyalt-admin.php:578
+#: admin/class-everyalt-admin.php:580
msgid "Skipped: no API key or auto-generate disabled."
msgstr ""
-#: admin/class-everyalt-admin.php:583
+#: admin/class-everyalt-admin.php:585
msgid "Skipped: API key validation failed."
msgstr ""
-#: admin/class-everyalt-admin.php:593
+#: admin/class-everyalt-admin.php:595
msgid "Skipped: not a valid image or file exceeds 4MB."
msgstr ""
-#: admin/class-everyalt-admin.php:616
+#: admin/class-everyalt-admin.php:618
msgid "Marked as decorative (alt text left empty on purpose)."
msgstr ""
-#: admin/class-everyalt-admin.php:623
+#: admin/class-everyalt-admin.php:625
msgid "No alt text returned from API."
msgstr ""
-#: admin/class-everyalt-admin.php:649
+#: admin/class-everyalt-admin.php:651
msgid "[Title] Skipped: no API key or auto-generate disabled."
msgstr ""
-#: admin/class-everyalt-admin.php:654
+#: admin/class-everyalt-admin.php:656
msgid "[Title] Skipped: API key validation failed."
msgstr ""
-#: admin/class-everyalt-admin.php:664
+#: admin/class-everyalt-admin.php:666
msgid "[Title] Skipped: not a valid image or file exceeds 4MB."
msgstr ""
-#: admin/class-everyalt-admin.php:687
+#: admin/class-everyalt-admin.php:689
msgid "[Title] No title returned from API."
msgstr ""
-#: admin/class-everyalt-admin.php:1033
-#: admin/partials/everyalt-options-display.php:14
-#: admin/partials/everyalt-options-display.php:61
+#: admin/class-everyalt-admin.php:1035 admin/class-everyalt-admin.php:1077
+#: admin/partials/everyalt-options-display.php:63
msgid "Settings"
msgstr ""
-#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377
-msgid "Generation failed."
+#: admin/class-everyalt-admin.php:1078
+#: admin/partials/everyalt-options-display.php:295
+msgid "Bulk Alt Text Generator"
msgstr ""
-#: admin/class-everyalt-admin.php:1450
-msgid "Alt successfully updated."
+#: admin/class-everyalt-admin.php:1079
+#: admin/partials/everyalt-options-display.php:343
+msgid "Review Alt Text"
msgstr ""
-#: admin/class-everyalt-admin.php:1466
-msgid "Title successfully updated."
+#: admin/class-everyalt-admin.php:1080
+#: admin/partials/everyalt-options-display.php:391
+msgid "Bulk Image Title Generator"
msgstr ""
-#: admin/class-everyalt-openai.php:234
-msgid "Image could not be encoded for the API. On some servers, base64 encoding fails for large images or due to PHP limits. Try a smaller image, or increase your server's PHP memory limit."
+#: admin/class-everyalt-admin.php:1081
+#: admin/partials/everyalt-options-display.php:439
+msgid "Review Image Titles"
msgstr ""
-#: admin/class-everyalt-openai.php:392
-msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this."
+#: admin/class-everyalt-admin.php:1082
+msgid "Logs"
msgstr ""
-#: admin/partials/everyalt-options-display.php:13
-msgid "Secondary menu"
+#: admin/class-everyalt-admin.php:1396 admin/class-everyalt-admin.php:1421
+msgid "Generation failed."
msgstr ""
-#: admin/partials/everyalt-options-display.php:15
-#: admin/partials/everyalt-options-display.php:293
-msgid "Bulk Alt Text Generator"
+#: admin/class-everyalt-admin.php:1494
+msgid "Alt successfully updated."
msgstr ""
-#: admin/partials/everyalt-options-display.php:16
-#: admin/partials/everyalt-options-display.php:341
-msgid "Review Alt Text"
+#: admin/class-everyalt-admin.php:1510
+msgid "Title successfully updated."
msgstr ""
-#: admin/partials/everyalt-options-display.php:17
-#: admin/partials/everyalt-options-display.php:387
-msgid "Bulk Image Title Generator"
+#: admin/class-everyalt-openai.php:234
+msgid "Image could not be encoded for the API. On some servers, base64 encoding fails for large images or due to PHP limits. Try a smaller image, or increase your server's PHP memory limit."
msgstr ""
-#: admin/partials/everyalt-options-display.php:18
-#: admin/partials/everyalt-options-display.php:435
-msgid "Review Image Titles"
+#: admin/class-everyalt-openai.php:392
+msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this."
msgstr ""
-#: admin/partials/everyalt-options-display.php:19
-msgid "Logs"
+#: admin/partials/everyalt-options-display.php:15
+msgid "Secondary menu"
msgstr ""
#. translators: 1: opening link to everyalt.com, 2: closing link tag, 3: opening link to hdc.net, 4: closing link tag
-#: admin/partials/everyalt-options-display.php:28
+#: admin/partials/everyalt-options-display.php:27
#, php-format
msgid "%1$sEveryAlt%2$s is a free, open-source project created by %3$sHDC%4$s, a web dev firm for high-stakes projects and AI builds."
msgstr ""
-#: admin/partials/everyalt-options-display.php:41
+#: admin/partials/everyalt-options-display.php:43
msgid "Settings saved."
msgstr ""
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:47
+#: admin/partials/everyalt-options-display.php:49
#, php-format
msgid "The %s API key you entered could not be validated. Please check the key and try again. No settings were saved."
msgstr ""
-#: admin/partials/everyalt-options-display.php:54
+#: admin/partials/everyalt-options-display.php:56
msgid "Clear queue"
msgstr ""
-#: admin/partials/everyalt-options-display.php:74
-#: admin/partials/everyalt-options-display.php:77
+#: admin/partials/everyalt-options-display.php:58
+msgid "Recent results"
+msgstr ""
+
+#: admin/partials/everyalt-options-display.php:76
+#: admin/partials/everyalt-options-display.php:79
msgid "AI model"
msgstr ""
#. translators: 1: input price in USD, 2: output price in USD
-#: admin/partials/everyalt-options-display.php:90
+#: admin/partials/everyalt-options-display.php:92
#, php-format
msgid "$%1$s input · $%2$s output per 1M tokens"
msgstr ""
-#: admin/partials/everyalt-options-display.php:101
+#: admin/partials/everyalt-options-display.php:103
msgid "All models read the image and write alt text and titles the same way. Prices are each provider’s published rates as of September 2026 and may change. You pay the provider directly; EveryAlt never bills you. The actual cost of each image is recorded on the Logs tab."
msgstr ""
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:108
+#: admin/partials/everyalt-options-display.php:110
#, php-format
msgid "%s pricing"
msgstr ""
-#: admin/partials/everyalt-options-display.php:116
+#: admin/partials/everyalt-options-display.php:118
msgid "API key"
msgstr ""
#. translators: %s: provider name, e.g. OpenAI
-#: admin/partials/everyalt-options-display.php:127
+#: admin/partials/everyalt-options-display.php:129
#, php-format
msgid "%s API key"
msgstr ""
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "Key saved"
msgstr ""
-#: admin/partials/everyalt-options-display.php:131
+#: admin/partials/everyalt-options-display.php:133
msgid "No key saved"
msgstr ""
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Leave blank to keep existing key"
msgstr ""
-#: admin/partials/everyalt-options-display.php:135
+#: admin/partials/everyalt-options-display.php:137
msgid "Paste your API key"
msgstr ""
-#: admin/partials/everyalt-options-display.php:136
+#: admin/partials/everyalt-options-display.php:138
msgid "Validate key"
msgstr ""
#. translators: %s: link to OpenAI API keys page
-#: admin/partials/everyalt-options-display.php:142
+#: admin/partials/everyalt-options-display.php:144
#, php-format
msgid "Sign in at %s."
msgstr ""
-#: admin/partials/everyalt-options-display.php:143
+#: admin/partials/everyalt-options-display.php:145
msgid "Click “Create new secret key”, give it a name (e.g. “EveryAlt”), and copy the key. It is only shown once."
msgstr ""
-#: admin/partials/everyalt-options-display.php:144
+#: admin/partials/everyalt-options-display.php:146
msgid "Add a payment method or prepaid credits in your OpenAI billing settings; generation fails until your account has credit."
msgstr ""
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
msgid "OpenAI API data usage"
msgstr ""
#. translators: %s: link to OpenAI data usage policy
-#: admin/partials/everyalt-options-display.php:146
+#: admin/partials/everyalt-options-display.php:148
#, php-format
msgid "OpenAI does not use API data to train its models by default. See %s."
msgstr ""
#. translators: %s: link to Google AI Studio API keys page
-#: admin/partials/everyalt-options-display.php:149
+#: admin/partials/everyalt-options-display.php:151
#, php-format
msgid "Sign in to Google AI Studio at %s."
msgstr ""
-#: admin/partials/everyalt-options-display.php:150
+#: admin/partials/everyalt-options-display.php:152
msgid "Click “Create API key”, choose or create a Google Cloud project, and copy the key."
msgstr ""
-#: admin/partials/everyalt-options-display.php:151
+#: admin/partials/everyalt-options-display.php:153
msgid "Optional: set up billing on the project to move from the free tier to the paid tier."
msgstr ""
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
msgid "Gemini API terms"
msgstr ""
#. translators: %s: link to Gemini API terms
-#: admin/partials/everyalt-options-display.php:153
+#: admin/partials/everyalt-options-display.php:155
#, php-format
msgid "Gemini has a free tier, but Google may use free-tier prompts and images to improve its products. On the paid tier (billing enabled), your content is not used that way. See the %s."
msgstr ""
#. translators: %s: link to DeepInfra API keys page
-#: admin/partials/everyalt-options-display.php:156
+#: admin/partials/everyalt-options-display.php:158
#, php-format
msgid "Sign in or create an account at %s."
msgstr ""
-#: admin/partials/everyalt-options-display.php:157
+#: admin/partials/everyalt-options-display.php:159
msgid "Click “New API key”, name it (e.g. “EveryAlt”), and copy the key."
msgstr ""
-#: admin/partials/everyalt-options-display.php:158
+#: admin/partials/everyalt-options-display.php:160
msgid "Add a payment method or credits in your DeepInfra billing settings. One DeepInfra key works for both DeepSeek V4.1 Flash and GLM-5.3-Flash."
msgstr ""
-#: admin/partials/everyalt-options-display.php:162
+#: admin/partials/everyalt-options-display.php:164
msgid "Your images stay private."
msgstr ""
-#: admin/partials/everyalt-options-display.php:163
+#: admin/partials/everyalt-options-display.php:165
msgid "DeepInfra runs these models on its own infrastructure in data centers in the US and Canada, with a zero data retention policy: your images and the generated text are processed in memory and not stored, the content of requests is not logged, and your data is never used to train models."
msgstr ""
-#: admin/partials/everyalt-options-display.php:168
+#: admin/partials/everyalt-options-display.php:170
msgid "DeepInfra data privacy"
msgstr ""
-#: admin/partials/everyalt-options-display.php:169
+#: admin/partials/everyalt-options-display.php:171
msgid "Privacy policy"
msgstr ""
-#: admin/partials/everyalt-options-display.php:170
+#: admin/partials/everyalt-options-display.php:172
msgid "Trust center (SOC 2, ISO 27001)"
msgstr ""
-#: admin/partials/everyalt-options-display.php:179
+#: admin/partials/everyalt-options-display.php:181
msgid "Keys are stored encrypted in your WordPress database. The image is sent to the provider as base64, so generation works on localhost and behind HTTP auth."
msgstr ""
-#: admin/partials/everyalt-options-display.php:183
+#: admin/partials/everyalt-options-display.php:185
msgid "Auto-generate on upload"
msgstr ""
-#: admin/partials/everyalt-options-display.php:185
+#: admin/partials/everyalt-options-display.php:187
msgid "Automatically generate alt text when images are uploaded"
msgstr ""
-#: admin/partials/everyalt-options-display.php:187
+#: admin/partials/everyalt-options-display.php:189
msgid "Automatically generate image titles when images are uploaded"
msgstr ""
-#: admin/partials/everyalt-options-display.php:191
-#: admin/partials/everyalt-options-display.php:194
+#: admin/partials/everyalt-options-display.php:193
+#: admin/partials/everyalt-options-display.php:196
msgid "New uploads"
msgstr ""
-#: admin/partials/everyalt-options-display.php:195
+#: admin/partials/everyalt-options-display.php:197
msgid "Generate in the background (recommended): uploads finish right away"
msgstr ""
-#: admin/partials/everyalt-options-display.php:196
+#: admin/partials/everyalt-options-display.php:198
msgid "Generate during the upload: alt text is ready when the upload finishes, but each upload waits for the AI"
msgstr ""
-#: admin/partials/everyalt-options-display.php:198
+#: admin/partials/everyalt-options-display.php:200
msgid "Background jobs usually finish within a minute. They run on WordPress’s scheduler (WP-Cron), and also whenever an EveryAlt page is open, so they still work on sites where WP-Cron is blocked, such as sites behind a password."
msgstr ""
-#: admin/partials/everyalt-options-display.php:202
+#: admin/partials/everyalt-options-display.php:204
msgid "Decorative images"
msgstr ""
-#: admin/partials/everyalt-options-display.php:204
+#: admin/partials/everyalt-options-display.php:206
msgid "Leave alt text empty for purely decorative images"
msgstr ""
-#: admin/partials/everyalt-options-display.php:205
+#: admin/partials/everyalt-options-display.php:207
msgid "Accessibility guidelines (WCAG) say decorative images such as dividers, spacers, and background patterns should have empty alt text so screen readers skip them. When the AI judges an image clearly decorative, EveryAlt leaves its alt text empty and marks it on the Review Alt Text tab, where you can ask for a description instead. When in doubt, the AI describes the image."
msgstr ""
-#: admin/partials/everyalt-options-display.php:209
+#: admin/partials/everyalt-options-display.php:211
msgid "Monthly spending limit"
msgstr ""
-#: admin/partials/everyalt-options-display.php:212
+#: admin/partials/everyalt-options-display.php:214
msgid "None"
msgstr ""
-#: admin/partials/everyalt-options-display.php:213
+#: admin/partials/everyalt-options-display.php:215
msgid "USD per month"
msgstr ""
#. translators: %s: estimated amount spent this month, e.g. $0.42
-#: admin/partials/everyalt-options-display.php:219
+#: admin/partials/everyalt-options-display.php:221
#, php-format
msgid "Estimated spend this month: %s. When the limit is reached, generation pauses until next month (queued images wait). Leave empty for no limit. Estimates use each provider’s published prices; your provider’s invoice is authoritative."
msgstr ""
-#: admin/partials/everyalt-options-display.php:228
+#: admin/partials/everyalt-options-display.php:230
msgid "Existing posts"
msgstr ""
-#: admin/partials/everyalt-options-display.php:230
+#: admin/partials/everyalt-options-display.php:232
msgid "Show Media Library alt text on images already in posts that have none"
msgstr ""
-#: admin/partials/everyalt-options-display.php:231
+#: admin/partials/everyalt-options-display.php:233
msgid "When an image is added to a post, WordPress copies its alt text into the post at that moment, so alt text generated later doesn’t appear in older posts. With this on, empty alt text in posts is filled in from the Media Library when the page is displayed. Your posts are not modified, and alt text written in a post is never replaced. Requires WordPress 6.0 or later."
msgstr ""
-#: admin/partials/everyalt-options-display.php:235
+#: admin/partials/everyalt-options-display.php:237
msgid "Language"
msgstr ""
#. translators: %s: site language name in English, e.g. German
-#: admin/partials/everyalt-options-display.php:242
+#: admin/partials/everyalt-options-display.php:244
#, php-format
msgid "Automatic (site language: %s)"
msgstr ""
-#: admin/partials/everyalt-options-display.php:249
+#: admin/partials/everyalt-options-display.php:251
msgid "Language for generated alt text and titles. Automatic uses your site language, or each image’s own language on multilingual sites using Polylang or WPML."
msgstr ""
-#: admin/partials/everyalt-options-display.php:253
+#: admin/partials/everyalt-options-display.php:255
msgid "Max completion tokens"
msgstr ""
-#: admin/partials/everyalt-options-display.php:256
+#: admin/partials/everyalt-options-display.php:258
msgid "Maximum tokens the model can use for its response, including any reasoning. Default 1024. Leave empty to use default."
msgstr ""
-#: admin/partials/everyalt-options-display.php:260
+#: admin/partials/everyalt-options-display.php:262
msgid "Alt text prompt"
msgstr ""
-#: admin/partials/everyalt-options-display.php:268
+#: admin/partials/everyalt-options-display.php:270
msgid "Instruction sent to the AI with each image. Edit as needed. The model should return only the alt text, no extra wording."
msgstr ""
-#: admin/partials/everyalt-options-display.php:272
+#: admin/partials/everyalt-options-display.php:274
msgid "Image title prompt"
msgstr ""
-#: admin/partials/everyalt-options-display.php:280
+#: admin/partials/everyalt-options-display.php:282
msgid "Instruction sent to the AI when generating image titles. Titles are usually short (a few words). The model should return only the title, no extra wording."
msgstr ""
-#: admin/partials/everyalt-options-display.php:285
+#: admin/partials/everyalt-options-display.php:287
msgid "Save Settings"
msgstr ""
-#: admin/partials/everyalt-options-display.php:294
+#: admin/partials/everyalt-options-display.php:296
#, php-format
msgid "This page finds all images in your media library that do not currently have alt text and lets you generate new alt text with EveryAlt quickly. To see existing images that already have alt text, go to the Review Alt Text tab."
msgstr ""
-#: admin/partials/everyalt-options-display.php:296
-#: admin/partials/everyalt-options-display.php:390
+#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:394
msgid "Please add an API key for the selected AI model in the Settings tab first."
msgstr ""
-#: admin/partials/everyalt-options-display.php:298
+#: admin/partials/everyalt-options-display.php:300
msgid "No images without alt text found."
msgstr ""
-#: admin/partials/everyalt-options-display.php:301
-#: admin/partials/everyalt-options-display.php:395
+#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:399
msgid "Select all"
msgstr ""
-#: admin/partials/everyalt-options-display.php:302
-#: admin/partials/everyalt-options-display.php:396
+#: admin/partials/everyalt-options-display.php:304
+#: admin/partials/everyalt-options-display.php:400
msgid "Select none"
msgstr ""
-#: admin/partials/everyalt-options-display.php:303
+#: admin/partials/everyalt-options-display.php:305
msgid "Generate alt text for selected"
msgstr ""
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:307
-#: admin/partials/everyalt-options-display.php:401
+#: admin/partials/everyalt-options-display.php:309
+#: admin/partials/everyalt-options-display.php:405
#, php-format
msgid "Generate for all %s image"
msgid_plural "Generate for all %s images"
@@ -587,10 +597,10 @@ msgstr[0] ""
msgstr[1] ""
#. translators: %s: number of images
-#: admin/partials/everyalt-options-display.php:311
-#: admin/partials/everyalt-options-display.php:349
-#: admin/partials/everyalt-options-display.php:405
-#: admin/partials/everyalt-options-display.php:443
+#: admin/partials/everyalt-options-display.php:313
+#: admin/partials/everyalt-options-display.php:351
+#: admin/partials/everyalt-options-display.php:409
+#: admin/partials/everyalt-options-display.php:447
#, php-format
msgid "%s image"
msgid_plural "%s images"
@@ -598,136 +608,158 @@ msgstr[0] ""
msgstr[1] ""
#. translators: %s: image title
-#: admin/partials/everyalt-options-display.php:319
-#: admin/partials/everyalt-options-display.php:413
+#: admin/partials/everyalt-options-display.php:321
+#: admin/partials/everyalt-options-display.php:417
#, php-format
msgid "Select “%s”"
msgstr ""
-#: admin/partials/everyalt-options-display.php:326
-#: admin/partials/everyalt-options-display.php:363
-#: admin/partials/everyalt-options-display.php:420
-#: admin/partials/everyalt-options-display.php:453
+#: admin/partials/everyalt-options-display.php:328
+#: admin/partials/everyalt-options-display.php:365
+#: admin/partials/everyalt-options-display.php:424
+#: admin/partials/everyalt-options-display.php:457
msgid "Edit"
msgstr ""
-#: admin/partials/everyalt-options-display.php:342
+#: admin/partials/everyalt-options-display.php:344
msgid "Images that already have alt text, plus images marked decorative (alt text left empty on purpose). Edit and save, or regenerate with EveryAlt."
msgstr ""
-#: admin/partials/everyalt-options-display.php:344
-#: admin/partials/everyalt-options-display.php:438
+#: admin/partials/everyalt-options-display.php:346
+#: admin/partials/everyalt-options-display.php:442
msgid "Please add an API key for the selected AI model in the Settings tab to use Regenerate."
msgstr ""
-#: admin/partials/everyalt-options-display.php:347
+#: admin/partials/everyalt-options-display.php:349
msgid "No images with alt text found."
msgstr ""
-#: admin/partials/everyalt-options-display.php:360
+#: admin/partials/everyalt-options-display.php:362
msgid "Decorative"
msgstr ""
-#: admin/partials/everyalt-options-display.php:365
+#. translators: %s: image title
+#: admin/partials/everyalt-options-display.php:367
+#, php-format
+msgid "Alt text for “%s”"
+msgstr ""
+
+#: admin/partials/everyalt-options-display.php:368
msgid "Empty on purpose: screen readers skip this image."
msgstr ""
-#: admin/partials/everyalt-options-display.php:367
-#: admin/partials/everyalt-options-display.php:457
+#: admin/partials/everyalt-options-display.php:370
+#: admin/partials/everyalt-options-display.php:463
msgid "Save"
msgstr ""
-#: admin/partials/everyalt-options-display.php:369
+#: admin/partials/everyalt-options-display.php:372
msgid "Describe anyway"
msgstr ""
-#: admin/partials/everyalt-options-display.php:371
-#: admin/partials/everyalt-options-display.php:458
+#: admin/partials/everyalt-options-display.php:374
+#: admin/partials/everyalt-options-display.php:464
msgid "Regenerate"
msgstr ""
-#: admin/partials/everyalt-options-display.php:388
+#: admin/partials/everyalt-options-display.php:392
#, php-format
msgid "This page finds images whose title is still the raw upload filename (e.g. \"IMG_1234\") and lets you generate descriptive titles with EveryAlt quickly. To see images that already have a custom title, go to the Review Image Titles tab."
msgstr ""
-#: admin/partials/everyalt-options-display.php:392
+#: admin/partials/everyalt-options-display.php:396
msgid "No images needing a title found."
msgstr ""
-#: admin/partials/everyalt-options-display.php:397
+#: admin/partials/everyalt-options-display.php:401
msgid "Generate titles for selected"
msgstr ""
-#: admin/partials/everyalt-options-display.php:436
+#: admin/partials/everyalt-options-display.php:440
msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt."
msgstr ""
-#: admin/partials/everyalt-options-display.php:441
+#: admin/partials/everyalt-options-display.php:445
msgid "No images with a custom title found."
msgstr ""
-#: admin/partials/everyalt-options-display.php:473
+#. translators: %s: image file name
+#: admin/partials/everyalt-options-display.php:460
+#, php-format
+msgid "Title for image file “%s”"
+msgstr ""
+
+#: admin/partials/everyalt-options-display.php:480
msgid "Spending"
msgstr ""
#. translators: 1: spent this month, 2: monthly limit
-#: admin/partials/everyalt-options-display.php:484
+#: admin/partials/everyalt-options-display.php:491
#, php-format
msgid "This month: %1$s of your %2$s limit."
msgstr ""
#. translators: %s: spent this month
-#: admin/partials/everyalt-options-display.php:487
+#: admin/partials/everyalt-options-display.php:494
#, php-format
msgid "This month: %s (no limit set)."
msgstr ""
-#: admin/partials/everyalt-options-display.php:499
-msgid "Month"
+#. translators: 1: spent this month, 2: monthly limit
+#: admin/partials/everyalt-options-display.php:500
+#, php-format
+msgid "%1$s of %2$s"
msgstr ""
#: admin/partials/everyalt-options-display.php:500
+msgid "Monthly spending limit used"
+msgstr ""
+
+#: admin/partials/everyalt-options-display.php:506
+msgid "Month"
+msgstr ""
+
+#: admin/partials/everyalt-options-display.php:507
msgid "Requests"
msgstr ""
-#: admin/partials/everyalt-options-display.php:501
+#: admin/partials/everyalt-options-display.php:508
msgid "Estimated cost"
msgstr ""
-#: admin/partials/everyalt-options-display.php:502
+#: admin/partials/everyalt-options-display.php:509
msgid "By model"
msgstr ""
-#: admin/partials/everyalt-options-display.php:526
+#: admin/partials/everyalt-options-display.php:533
msgid "No spending recorded yet."
msgstr ""
-#: admin/partials/everyalt-options-display.php:528
+#: admin/partials/everyalt-options-display.php:535
msgid "Estimated from the tokens each request used and the provider’s published prices. Your provider’s invoice is authoritative."
msgstr ""
-#: admin/partials/everyalt-options-display.php:530
+#: admin/partials/everyalt-options-display.php:537
msgid "Generation Log"
msgstr ""
-#: admin/partials/everyalt-options-display.php:531
+#: admin/partials/everyalt-options-display.php:538
msgid "Last 100 alt text generation attempts (successes and failures)."
msgstr ""
-#: admin/partials/everyalt-options-display.php:534
+#: admin/partials/everyalt-options-display.php:541
msgid "Export as CSV"
msgstr ""
-#: admin/partials/everyalt-options-display.php:542
+#: admin/partials/everyalt-options-display.php:549
msgid "Attachment"
msgstr ""
-#: admin/partials/everyalt-options-display.php:546
+#: admin/partials/everyalt-options-display.php:553
msgid "Cost"
msgstr ""
-#: admin/partials/everyalt-options-display.php:598
+#: admin/partials/everyalt-options-display.php:605
msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log."
msgstr ""
diff --git a/public/class-everyalt-public.php b/public/class-everyalt-public.php
index 2c37a89..29151f9 100644
--- a/public/class-everyalt-public.php
+++ b/public/class-everyalt-public.php
@@ -22,7 +22,7 @@
class Every_Alt_Public {
- /** Option: fill missing alt text in post content on display (default on). */
+ /** Option: fill missing alt text in post content on display. Off by default: it changes what visitors see on existing posts, so a site owner turns it on deliberately. */
const FILL_OPTION = 'every_alt_fill_content_alt';
/**
@@ -31,7 +31,7 @@ class Every_Alt_Public {
* @return bool
*/
public static function is_enabled() {
- return (bool) get_option( self::FILL_OPTION, 1 );
+ return (bool) get_option( self::FILL_OPTION, 0 );
}
/**