diff --git a/languages/everyalt-de_DE.mo b/languages/everyalt-de_DE.mo index 64ad31d..97c4d26 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 7e5aef3..47c3de3 100644 --- a/languages/everyalt-de_DE.po +++ b/languages/everyalt-de_DE.po @@ -3,10 +3,10 @@ # This file is distributed under the same license as the EveryAlt package. msgid "" msgstr "" -"Project-Id-Version: EveryAlt 1.0\n" +"Project-Id-Version: EveryAlt 1.1.0\n" "Report-Msgid-Bugs-To: https://hdc.net\n" -"POT-Creation-Date: 2025-02-15 00:00+0000\n" -"PO-Revision-Date: 2025-02-15 00:00+0000\n" +"POT-Creation-Date: 2026-09-27 16:34+0000\n" +"PO-Revision-Date: 2026-09-27 00:00+0000\n" "Last-Translator: HDC \n" "Language-Team: Deutsch \n" "Language: de_DE\n" @@ -17,91 +17,239 @@ msgstr "" "X-Domain: everyalt\n" "X-Generator: Manual\n" -#: admin/class-everyalt-admin.php:111 admin/partials/everyalt-options-display.php:189 +#. translators: %s: monthly spending limit, e.g. $5.00 +#: admin/class-everyalt-admin.php:85 +#, php-format +msgid "Skipped: monthly spending limit of %s reached. Generation resumes next month, or raise the limit in Settings." +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 msgid "Time" msgstr "Zeit" -#: admin/class-everyalt-admin.php:112 +#: admin/class-everyalt-admin.php:165 msgid "Attachment ID" msgstr "Anhang-ID" -#: admin/class-everyalt-admin.php:113 admin/partials/everyalt-options-display.php:191 +#: admin/class-everyalt-admin.php:166 +#: admin/partials/everyalt-options-display.php:543 msgid "Status" msgstr "Status" -#: admin/class-everyalt-admin.php:114 admin/partials/everyalt-options-display.php:192 +#: admin/class-everyalt-admin.php:167 +#: admin/partials/everyalt-options-display.php:544 +msgid "Model" +msgstr "Modell" + +#: admin/class-everyalt-admin.php:168 +#: admin/partials/everyalt-options-display.php:545 msgid "Message / Alt text" msgstr "Meldung / Alt-Text" -#: admin/class-everyalt-admin.php:115 +#: admin/class-everyalt-admin.php:169 msgid "Cost (USD)" msgstr "Kosten (USD)" -#: admin/class-everyalt-admin.php:116 admin/partials/everyalt-options-display.php:194 +#: admin/class-everyalt-admin.php:170 +#: admin/partials/everyalt-options-display.php:547 msgid "Details" msgstr "Details" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:228 +#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432 +#: admin/partials/everyalt-options-display.php:583 +msgid "Error" +msgstr "Fehler" + +#: admin/class-everyalt-admin.php:174 +#: admin/partials/everyalt-options-display.php:581 msgid "Success" msgstr "Erfolg" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:230 -msgid "Error" -msgstr "Fehler" +#. translators: 1: provider name(s), e.g. "OpenAI", 2: URL of the EveryAlt settings tab +#: admin/class-everyalt-admin.php:259 +#, php-format +msgid "EveryAlt can no longer read your saved %1$s API key, usually because the security keys in wp-config.php changed. Generation with that provider is paused until you re-enter the key." +msgstr "EveryAlt kann deinen gespeicherten %1$s-API-Schlüssel nicht mehr lesen, meist weil sich die Sicherheitsschlüssel in wp-config.php geändert haben. Die Generierung mit diesem Anbieter ist pausiert, bis du den Schlüssel erneut eingibst." -#: admin/class-everyalt-admin.php:152 +#. translators: 1: spent this month, 2: monthly limit, 3: settings URL +#: admin/class-everyalt-admin.php:278 +#, php-format +msgid "EveryAlt has paused: this month’s estimated spend (%1$s) reached your monthly limit of %2$s. New images will be processed next month, or you can raise the limit." +msgstr "EveryAlt ist pausiert: Die geschätzten Ausgaben dieses Monats (%1$s) haben dein Monatslimit von %2$s erreicht. Neue Bilder werden im nächsten Monat verarbeitet, oder du kannst das Limit erhöhen." + +#: admin/class-everyalt-admin.php:293 msgid "You do not have permission to do this." msgstr "Du hast keine Berechtigung dafür." -#: admin/class-everyalt-admin.php:159 +#: admin/class-everyalt-admin.php:297 +msgid "Unknown provider." +msgstr "Unbekannter Anbieter." + +#: admin/class-everyalt-admin.php:304 msgid "Enter an API key in the field above, or save a key first to validate the stored key." msgstr "Gib oben einen API-Schlüssel ein oder speichere zuerst einen Schlüssel, um den gespeicherten zu prüfen." -#: admin/class-everyalt-admin.php:162 +#: admin/class-everyalt-admin.php:307 msgid "API key is valid." msgstr "Der API-Schlüssel ist gültig." -#: admin/class-everyalt-admin.php:164 +#: admin/class-everyalt-admin.php:309 msgid "API key could not be validated. Check that the key is correct and has API access." msgstr "Der API-Schlüssel konnte nicht geprüft werden. Prüfe, ob der Schlüssel stimmt und API-Zugriff hat." -#: admin/class-everyalt-admin.php:342 +#: admin/class-everyalt-admin.php:423 +#, php-format +msgid "Generating in the background: %d remaining. You can leave this page; it continues on its own." +msgstr "Wird im Hintergrund erzeugt: %d verbleibend. Du kannst diese Seite verlassen, es läuft von selbst weiter." + +#: admin/class-everyalt-admin.php:424 +#, php-format +msgid "%d waiting to retry. They will be tried again automatically." +msgstr "%d warten auf einen erneuten Versuch. Sie werden automatisch erneut versucht." + +#: admin/class-everyalt-admin.php:425 +msgid "All done." +msgstr "Alles erledigt." + +#: admin/class-everyalt-admin.php:426 +msgid "Paused: monthly spending limit reached. Raise the limit in Settings or wait until next month." +msgstr "Pausiert: Monatliches Ausgabenlimit erreicht. Erhöhe das Limit in den Einstellungen oder warte bis zum nächsten Monat." + +#: admin/class-everyalt-admin.php:427 +msgid "Paused: add an API key for the selected model in Settings." +msgstr "Pausiert: Füge in den Einstellungen einen API-Schlüssel für das ausgewählte Modell hinzu." + +#: admin/class-everyalt-admin.php:428 +#, php-format +msgid "Added %d images to the queue." +msgstr "%d Bilder zur Warteschlange hinzugefügt." + +#: admin/class-everyalt-admin.php:429 +msgid "Those images were already queued." +msgstr "Diese Bilder waren bereits in der Warteschlange." + +#: admin/class-everyalt-admin.php:430 +msgid "Queue cleared." +msgstr "Warteschlange geleert." + +#: admin/class-everyalt-admin.php:431 +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 +msgid "Error:" +msgstr "Fehler:" + +#: admin/class-everyalt-admin.php:434 +msgid "Request failed" +msgstr "Anfrage fehlgeschlagen" + +#: admin/class-everyalt-admin.php:435 +msgid "Saved!" +msgstr "Gespeichert!" + +#: admin/class-everyalt-admin.php:436 +msgid "Save failed" +msgstr "Speichern fehlgeschlagen" + +#: admin/class-everyalt-admin.php:437 +msgid "Regenerated!" +msgstr "Neu erzeugt!" + +#: admin/class-everyalt-admin.php:438 +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 +msgid "EveryAlt" +msgstr "EveryAlt" + +#: admin/class-everyalt-admin.php:452 +msgid "Generate alt text with EveryAlt" +msgstr "Alt-Text mit EveryAlt erzeugen" + +#: admin/class-everyalt-admin.php:453 +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 +msgid "Generating…" +msgstr "Wird erzeugt…" + +#: admin/class-everyalt-admin.php:455 +msgid "Alt text generated." +msgstr "Alt-Text erzeugt." + +#: admin/class-everyalt-admin.php:456 +msgid "Could not generate alt text." +msgstr "Alt-Text konnte nicht erzeugt werden." + +#: admin/class-everyalt-admin.php:457 +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 msgid "Skipped: no API key or auto-generate disabled." msgstr "Übersprungen: Kein API-Schlüssel oder Auto-Generierung deaktiviert." -#: admin/class-everyalt-admin.php:346 +#: admin/class-everyalt-admin.php:583 msgid "Skipped: API key validation failed." msgstr "Übersprungen: API-Schlüssel-Prüfung fehlgeschlagen." -#: admin/class-everyalt-admin.php:350 +#: admin/class-everyalt-admin.php:593 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:366 +#: admin/class-everyalt-admin.php:616 +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 msgid "No alt text returned from API." msgstr "Die API hat keinen Alt-Text zurückgegeben." -#: admin/class-everyalt-admin.php:551 admin/partials/everyalt-options-display.php:14 admin/partials/everyalt-options-display.php:29 +#: admin/class-everyalt-admin.php:649 +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 +msgid "[Title] Skipped: API key validation failed." +msgstr "[Titel] Übersprungen: API-Schlüssel-Prüfung fehlgeschlagen." + +#: admin/class-everyalt-admin.php:664 +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 +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 msgid "Settings" msgstr "Einstellungen" -#: admin/class-everyalt-admin.php:570 admin/partials/everyalt-options-display.php:11 -msgid "EveryAlt" -msgstr "EveryAlt" - -#: admin/class-everyalt-admin.php:752 +#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377 msgid "Generation failed." msgstr "Generierung fehlgeschlagen." -#: admin/class-everyalt-admin.php:786 +#: admin/class-everyalt-admin.php:1450 msgid "Alt successfully updated." msgstr "Alt-Text erfolgreich aktualisiert." -#: admin/class-everyalt-openai.php:134 +#: admin/class-everyalt-admin.php:1466 +msgid "Title successfully updated." +msgstr "Titel erfolgreich aktualisiert." + +#: 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 "Das Bild konnte nicht für die API kodiert werden. Auf einigen Servern schlägt die Base64-Kodierung bei großen Bildern oder wegen PHP-Limits fehl. Probiere ein kleineres Bild oder erhöhe das PHP-Speicherlimit." -#: admin/class-everyalt-openai.php:243 +#: admin/class-everyalt-openai.php:392 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." @@ -109,158 +257,494 @@ msgstr "Die Antwort wurde abgeschnitten (Token-Limit erreicht). Erhöhe „Max. msgid "Secondary menu" msgstr "Sekundäres Menü" -#: admin/partials/everyalt-options-display.php:15 admin/partials/everyalt-options-display.php:100 +#: 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:144 +#: 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" -#: admin/partials/everyalt-options-display.php:24 -msgid "EveryAlt is a free, open-source project created by %1$sHDC%2$s, a web dev firm for high-stakes projects and AI builds." -msgstr "EveryAlt ist ein kostenloses Open-Source-Projekt von %1$sHDC%2$s, einer Web-Entwicklungsfirma für anspruchsvolle Projekte und KI-Entwicklung." - -#: admin/partials/everyalt-options-display.php:35 -msgid "EveryAlt also has a free Chrome extension and Shopify app. Check out our %1$sDigital Agency Plan%2$s if you manage lots of sites and want to set up limits and permissions for your clients or team." -msgstr "EveryAlt bietet außerdem eine kostenlose Chrome-Erweiterung und eine Shopify-App. Schau dir unseren %1$sDigital Agency Plan%2$s an, wenn du viele Websites verwaltest und Limits sowie Berechtigungen für Kunden oder Team einrichten möchtest." +#. 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 +#, 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:21 +#: admin/partials/everyalt-options-display.php:41 msgid "Settings saved." msgstr "Einstellungen gespeichert." -#: admin/partials/everyalt-options-display.php:24 -msgid "The OpenAI API key you entered could not be validated. Please check the key and try again. It was not saved." -msgstr "Der eingegebene OpenAI-API-Schlüssel konnte nicht geprüft werden. Bitte Schlüssel prüfen und erneut versuchen. Er wurde nicht gespeichert." +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:47 +#, 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 +msgid "Clear queue" +msgstr "Warteschlange leeren" + +#: admin/partials/everyalt-options-display.php:74 +#: admin/partials/everyalt-options-display.php:77 +msgid "AI model" +msgstr "KI-Modell" -#: admin/partials/everyalt-options-display.php:34 -msgid "OpenAI API Key" -msgstr "OpenAI-API-Schlüssel" +#. translators: 1: input price in USD, 2: output price in USD +#: admin/partials/everyalt-options-display.php:90 +#, 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:37 +#: admin/partials/everyalt-options-display.php:101 +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 +#, php-format +msgid "%s pricing" +msgstr "%s-Preise" + +#: admin/partials/everyalt-options-display.php:116 +msgid "API key" +msgstr "API-Schlüssel" + +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:127 +#, php-format +msgid "%s API key" +msgstr "%s-API-Schlüssel" + +#: admin/partials/everyalt-options-display.php:131 +msgid "Key saved" +msgstr "Schlüssel gespeichert" + +#: admin/partials/everyalt-options-display.php:131 +msgid "No key saved" +msgstr "Kein Schlüssel gespeichert" + +#: admin/partials/everyalt-options-display.php:135 msgid "Leave blank to keep existing key" msgstr "Leer lassen, um den bestehenden Schlüssel zu behalten" -#: admin/partials/everyalt-options-display.php:38 +#: admin/partials/everyalt-options-display.php:135 +msgid "Paste your API key" +msgstr "API-Schlüssel einfügen" + +#: admin/partials/everyalt-options-display.php:136 msgid "Validate key" msgstr "Schlüssel prüfen" -#: admin/partials/everyalt-options-display.php:41 -msgid "Alt text is generated via OpenAI (image is sent as base64, so it works on localhost and behind HTTP auth). Stored encrypted. You are charged by OpenAI for your usage; EveryAlt is free and never bills you." -msgstr "Alt-Text wird über OpenAI erzeugt (Bild wird als Base64 gesendet, funktioniert also auf Localhost und hinter HTTP-Auth). Verschlüsselt gespeichert. OpenAI berechnet dir die Nutzung; EveryAlt ist kostenlos und berechnet dich nie." +#. translators: %s: link to OpenAI API keys page +#: admin/partials/everyalt-options-display.php:142 +#, php-format +msgid "Sign in at %s." +msgstr "Melde dich unter %s an." -#: admin/partials/everyalt-options-display.php:41 -msgid "Generate an API key" -msgstr "API-Schlüssel erzeugen" +#: admin/partials/everyalt-options-display.php:143 +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 +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 +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 +#, 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 +#, 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 +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:45 +#: admin/partials/everyalt-options-display.php:151 +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 +msgid "Gemini API terms" +msgstr "Nutzungsbedingungen der Gemini-API" + +#. translators: %s: link to Gemini API terms +#: admin/partials/everyalt-options-display.php:153 +#, 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 +#, 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 +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 +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 +msgid "Your images stay private." +msgstr "Deine Bilder bleiben privat." + +#: admin/partials/everyalt-options-display.php:163 +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 +msgid "DeepInfra data privacy" +msgstr "Datenschutz bei DeepInfra" + +#: admin/partials/everyalt-options-display.php:169 +msgid "Privacy policy" +msgstr "Datenschutzerklärung" + +#: admin/partials/everyalt-options-display.php:170 +msgid "Trust center (SOC 2, ISO 27001)" +msgstr "Trust Center (SOC 2, ISO 27001)" + +#: admin/partials/everyalt-options-display.php:179 +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 msgid "Auto-generate on upload" msgstr "Beim Hochladen automatisch erzeugen" -#: admin/partials/everyalt-options-display.php:47 +#: admin/partials/everyalt-options-display.php:185 msgid "Automatically generate alt text when images are uploaded" msgstr "Alt-Text automatisch erzeugen, wenn Bilder hochgeladen werden" -#: admin/partials/everyalt-options-display.php:51 +#: admin/partials/everyalt-options-display.php:187 +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 +msgid "New uploads" +msgstr "Neue Uploads" + +#: admin/partials/everyalt-options-display.php:195 +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 +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 +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 +msgid "Decorative images" +msgstr "Dekorative Bilder" + +#: admin/partials/everyalt-options-display.php:204 +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 +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 +msgid "Monthly spending limit" +msgstr "Monatliches Ausgabenlimit" + +#: admin/partials/everyalt-options-display.php:212 +msgid "None" +msgstr "Keines" + +#: admin/partials/everyalt-options-display.php:213 +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 +#, 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 +msgid "Existing posts" +msgstr "Bestehende Beiträge" + +#: admin/partials/everyalt-options-display.php:230 +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 +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 +msgid "Language" +msgstr "Sprache" + +#. translators: %s: site language name in English, e.g. German +#: admin/partials/everyalt-options-display.php:242 +#, php-format +msgid "Automatic (site language: %s)" +msgstr "Automatisch (Website-Sprache: %s)" + +#: admin/partials/everyalt-options-display.php:249 +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 msgid "Max completion tokens" msgstr "Max. Abschluss-Tokens" -#: admin/partials/everyalt-options-display.php:54 -msgid "Maximum tokens the model can use for the response (including reasoning for models like gpt-5-nano). Default 1024. Leave empty to use default." -msgstr "Maximale Tokens, die das Modell für die Antwort nutzen darf (inkl. Reasoning bei Modellen wie gpt-5-nano). Standard 1024. Leer lassen für Standard." - -#: admin/partials/everyalt-options-display.php:66 -msgid "Pricing: EveryAlt uses %1$s, currently the cheapest and most efficient model for this task. A reasonable estimate per image is about 200 input tokens and 500 output tokens, which works out to about %2$s per image." -msgstr "Kosten: EveryAlt nutzt %1$s, derzeit das günstigste und effizienteste Modell dafür. Pro Bild grob 200 Input- und 500 Output-Tokens, etwa %2$s pro Bild." +#: admin/partials/everyalt-options-display.php:256 +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:76 +#: admin/partials/everyalt-options-display.php:260 msgid "Alt text prompt" msgstr "Alt-Text-Prompt" -#: admin/partials/everyalt-options-display.php:84 +#: admin/partials/everyalt-options-display.php:268 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:89 +#: admin/partials/everyalt-options-display.php:272 +msgid "Image title prompt" +msgstr "Bildtitel-Prompt" + +#: admin/partials/everyalt-options-display.php:280 +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 msgid "Save Settings" msgstr "Einstellungen speichern" -#: admin/partials/everyalt-options-display.php:101 +#: admin/partials/everyalt-options-display.php:294 +#, 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:105 -msgid "Please enter your OpenAI API key in the Settings tab first." -msgstr "Bitte zuerst deinen OpenAI-API-Schlüssel im Tab Einstellungen eintragen." +#: admin/partials/everyalt-options-display.php:296 +#: admin/partials/everyalt-options-display.php:390 +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:107 +#: admin/partials/everyalt-options-display.php:298 msgid "No images without alt text found." msgstr "Keine Bilder ohne Alt-Text gefunden." -#: admin/partials/everyalt-options-display.php:110 +#: admin/partials/everyalt-options-display.php:301 +#: admin/partials/everyalt-options-display.php:395 msgid "Select all" msgstr "Alle auswählen" -#: admin/partials/everyalt-options-display.php:111 +#: admin/partials/everyalt-options-display.php:302 +#: admin/partials/everyalt-options-display.php:396 msgid "Select none" msgstr "Keine auswählen" -#: admin/partials/everyalt-options-display.php:112 +#: admin/partials/everyalt-options-display.php:303 msgid "Generate alt text for selected" msgstr "Alt-Text für Auswahl erzeugen" -#: admin/partials/everyalt-options-display.php:115 -msgid "Processing…" -msgstr "Wird verarbeitet…" - -#: admin/partials/everyalt-options-display.php:132 admin/partials/everyalt-options-display.php:161 +#. translators: %s: number of images +#: admin/partials/everyalt-options-display.php:307 +#: admin/partials/everyalt-options-display.php:401 +#, php-format +msgid "Generate for all %s image" +msgid_plural "Generate for all %s images" +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 +#, php-format +msgid "%s image" +msgid_plural "%s images" +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 +#, 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 msgid "Edit" msgstr "Bearbeiten" -#: admin/partials/everyalt-options-display.php:145 -msgid "Images that already have alt text. Edit and save, or regenerate with EveryAlt." -msgstr "Bilder, die bereits Alt-Text haben. Bearbeiten und speichern oder mit EveryAlt neu erzeugen." +#: admin/partials/everyalt-options-display.php:342 +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:147 -msgid "Please enter your OpenAI API key in the Settings tab to use Regenerate." -msgstr "Trage deinen OpenAI-API-Schlüssel im Tab Einstellungen ein, um „Neu erzeugen“ zu nutzen." +#: admin/partials/everyalt-options-display.php:344 +#: admin/partials/everyalt-options-display.php:438 +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:150 +#: admin/partials/everyalt-options-display.php:347 msgid "No images with alt text found." msgstr "Keine Bilder mit Alt-Text gefunden." -#: admin/partials/everyalt-options-display.php:165 +#: admin/partials/everyalt-options-display.php:360 +msgid "Decorative" +msgstr "Dekorativ" + +#: admin/partials/everyalt-options-display.php:365 +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 msgid "Save" msgstr "Speichern" -#: admin/partials/everyalt-options-display.php:166 +#: admin/partials/everyalt-options-display.php:369 +msgid "Describe anyway" +msgstr "Trotzdem beschreiben" + +#: admin/partials/everyalt-options-display.php:371 +#: admin/partials/everyalt-options-display.php:458 msgid "Regenerate" msgstr "Neu erzeugen" -#: admin/partials/everyalt-options-display.php:178 +#: admin/partials/everyalt-options-display.php:388 +#, 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 +msgid "No images needing a title found." +msgstr "Keine Bilder ohne Titel gefunden." + +#: admin/partials/everyalt-options-display.php:397 +msgid "Generate titles for selected" +msgstr "Titel für Auswahl erzeugen" + +#: admin/partials/everyalt-options-display.php:436 +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 +msgid "No images with a custom title found." +msgstr "Keine Bilder mit eigenem Titel gefunden." + +#: admin/partials/everyalt-options-display.php:473 +msgid "Spending" +msgstr "Ausgaben" + +#. translators: 1: spent this month, 2: monthly limit +#: admin/partials/everyalt-options-display.php:484 +#, 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 +#, php-format +msgid "This month: %s (no limit set)." +msgstr "Diesen Monat: %s (kein Limit festgelegt)." + +#: admin/partials/everyalt-options-display.php:499 +msgid "Month" +msgstr "Monat" + +#: admin/partials/everyalt-options-display.php:500 +msgid "Requests" +msgstr "Anfragen" + +#: admin/partials/everyalt-options-display.php:501 +msgid "Estimated cost" +msgstr "Geschätzte Kosten" + +#: admin/partials/everyalt-options-display.php:502 +msgid "By model" +msgstr "Nach Modell" + +#: admin/partials/everyalt-options-display.php:526 +msgid "No spending recorded yet." +msgstr "Noch keine Ausgaben erfasst." + +#: admin/partials/everyalt-options-display.php:528 +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 msgid "Generation Log" msgstr "Generierungsprotokoll" -#: admin/partials/everyalt-options-display.php:179 +#: admin/partials/everyalt-options-display.php:531 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:182 +#: admin/partials/everyalt-options-display.php:534 msgid "Export as CSV" msgstr "Als CSV exportieren" -#: admin/partials/everyalt-options-display.php:190 +#: admin/partials/everyalt-options-display.php:542 msgid "Attachment" msgstr "Anhang" -#: admin/partials/everyalt-options-display.php:193 +#: admin/partials/everyalt-options-display.php:546 msgid "Cost" msgstr "Kosten" -#: admin/partials/everyalt-options-display.php:244 +#: admin/partials/everyalt-options-display.php:598 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." + +#: includes/class-everyalt-queue.php:199 +msgid "Image no longer exists." +msgstr "Das Bild existiert nicht mehr." + +#: includes/class-everyalt-queue.php:234 +msgid "(Gave up after several attempts.)" +msgstr "(Nach mehreren Versuchen aufgegeben.)" + +#: includes/class-everyalt-queue.php:238 +msgid "(Will retry automatically.)" +msgstr "(Wird automatisch erneut versucht.)" + +#: includes/class-everyalt-queue.php:273 +msgid "Every minute (EveryAlt queue)" +msgstr "Jede Minute (EveryAlt-Warteschlange)" diff --git a/languages/everyalt-es_ES.mo b/languages/everyalt-es_ES.mo index 1a464db..948eace 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 8774625..50fceb0 100644 --- a/languages/everyalt-es_ES.po +++ b/languages/everyalt-es_ES.po @@ -3,105 +3,253 @@ # This file is distributed under the same license as the EveryAlt package. msgid "" msgstr "" -"Project-Id-Version: EveryAlt 1.0\n" +"Project-Id-Version: EveryAlt 1.1.0\n" "Report-Msgid-Bugs-To: https://hdc.net\n" -"POT-Creation-Date: 2025-02-15 00:00+0000\n" -"PO-Revision-Date: 2025-02-15 00:00+0000\n" +"POT-Creation-Date: 2026-09-27 16:34+0000\n" +"PO-Revision-Date: 2026-09-27 00:00+0000\n" "Last-Translator: HDC \n" "Language-Team: Español \n" "Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: everyalt\n" "X-Generator: Manual\n" -#: admin/class-everyalt-admin.php:111 admin/partials/everyalt-options-display.php:189 +#. translators: %s: monthly spending limit, e.g. $5.00 +#: admin/class-everyalt-admin.php:85 +#, php-format +msgid "Skipped: monthly spending limit of %s reached. Generation resumes next month, or raise the limit in Settings." +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 msgid "Time" msgstr "Hora" -#: admin/class-everyalt-admin.php:112 +#: admin/class-everyalt-admin.php:165 msgid "Attachment ID" msgstr "ID del adjunto" -#: admin/class-everyalt-admin.php:113 admin/partials/everyalt-options-display.php:191 +#: admin/class-everyalt-admin.php:166 +#: admin/partials/everyalt-options-display.php:543 msgid "Status" msgstr "Estado" -#: admin/class-everyalt-admin.php:114 admin/partials/everyalt-options-display.php:192 +#: admin/class-everyalt-admin.php:167 +#: admin/partials/everyalt-options-display.php:544 +msgid "Model" +msgstr "Modelo" + +#: admin/class-everyalt-admin.php:168 +#: admin/partials/everyalt-options-display.php:545 msgid "Message / Alt text" msgstr "Mensaje / Texto alternativo" -#: admin/class-everyalt-admin.php:115 +#: admin/class-everyalt-admin.php:169 msgid "Cost (USD)" msgstr "Coste (USD)" -#: admin/class-everyalt-admin.php:116 admin/partials/everyalt-options-display.php:194 +#: admin/class-everyalt-admin.php:170 +#: admin/partials/everyalt-options-display.php:547 msgid "Details" msgstr "Detalles" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:228 +#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432 +#: admin/partials/everyalt-options-display.php:583 +msgid "Error" +msgstr "Error" + +#: admin/class-everyalt-admin.php:174 +#: admin/partials/everyalt-options-display.php:581 msgid "Success" msgstr "Éxito" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:230 -msgid "Error" -msgstr "Error" +#. translators: 1: provider name(s), e.g. "OpenAI", 2: URL of the EveryAlt settings tab +#: admin/class-everyalt-admin.php:259 +#, php-format +msgid "EveryAlt can no longer read your saved %1$s API key, usually because the security keys in wp-config.php changed. Generation with that provider is paused until you re-enter the key." +msgstr "EveryAlt ya no puede leer tu clave API de %1$s guardada, normalmente porque cambiaron las claves de seguridad de wp-config.php. La generación con ese proveedor está en pausa hasta que vuelvas a introducir la clave." -#: admin/class-everyalt-admin.php:152 +#. translators: 1: spent this month, 2: monthly limit, 3: settings URL +#: admin/class-everyalt-admin.php:278 +#, php-format +msgid "EveryAlt has paused: this month’s estimated spend (%1$s) reached your monthly limit of %2$s. New images will be processed next month, or you can raise the limit." +msgstr "EveryAlt está en pausa: el gasto estimado de este mes (%1$s) ha alcanzado tu límite mensual de %2$s. Las nuevas imágenes se procesarán el mes que viene, o puedes aumentar el límite." + +#: admin/class-everyalt-admin.php:293 msgid "You do not have permission to do this." msgstr "No tienes permiso para hacer esto." -#: admin/class-everyalt-admin.php:159 +#: admin/class-everyalt-admin.php:297 +msgid "Unknown provider." +msgstr "Proveedor desconocido." + +#: admin/class-everyalt-admin.php:304 msgid "Enter an API key in the field above, or save a key first to validate the stored key." msgstr "Introduce una clave API en el campo de arriba, o guarda primero una clave para validar la clave almacenada." -#: admin/class-everyalt-admin.php:162 +#: admin/class-everyalt-admin.php:307 msgid "API key is valid." msgstr "La clave API es válida." -#: admin/class-everyalt-admin.php:164 +#: admin/class-everyalt-admin.php:309 msgid "API key could not be validated. Check that the key is correct and has API access." msgstr "No se pudo validar la clave API. Comprueba que la clave sea correcta y tenga acceso a la API." -#: admin/class-everyalt-admin.php:342 +#: admin/class-everyalt-admin.php:423 +#, php-format +msgid "Generating in the background: %d remaining. You can leave this page; it continues on its own." +msgstr "Generando en segundo plano: quedan %d. Puedes salir de esta página; el proceso continúa por sí solo." + +#: admin/class-everyalt-admin.php:424 +#, php-format +msgid "%d waiting to retry. They will be tried again automatically." +msgstr "%d a la espera de reintento. Se volverán a intentar automáticamente." + +#: admin/class-everyalt-admin.php:425 +msgid "All done." +msgstr "Todo listo." + +#: admin/class-everyalt-admin.php:426 +msgid "Paused: monthly spending limit reached. Raise the limit in Settings or wait until next month." +msgstr "En pausa: se alcanzó el límite de gasto mensual. Aumenta el límite en Ajustes o espera al mes que viene." + +#: admin/class-everyalt-admin.php:427 +msgid "Paused: add an API key for the selected model in Settings." +msgstr "En pausa: añade una clave API para el modelo seleccionado en Ajustes." + +#: admin/class-everyalt-admin.php:428 +#, php-format +msgid "Added %d images to the queue." +msgstr "Se han añadido %d imágenes a la cola." + +#: admin/class-everyalt-admin.php:429 +msgid "Those images were already queued." +msgstr "Esas imágenes ya estaban en la cola." + +#: admin/class-everyalt-admin.php:430 +msgid "Queue cleared." +msgstr "Cola vaciada." + +#: admin/class-everyalt-admin.php:431 +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 +msgid "Error:" +msgstr "Error:" + +#: admin/class-everyalt-admin.php:434 +msgid "Request failed" +msgstr "La solicitud falló" + +#: admin/class-everyalt-admin.php:435 +msgid "Saved!" +msgstr "¡Guardado!" + +#: admin/class-everyalt-admin.php:436 +msgid "Save failed" +msgstr "Error al guardar" + +#: admin/class-everyalt-admin.php:437 +msgid "Regenerated!" +msgstr "¡Regenerado!" + +#: admin/class-everyalt-admin.php:438 +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 +msgid "EveryAlt" +msgstr "EveryAlt" + +#: admin/class-everyalt-admin.php:452 +msgid "Generate alt text with EveryAlt" +msgstr "Generar texto alternativo con EveryAlt" + +#: admin/class-everyalt-admin.php:453 +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 +msgid "Generating…" +msgstr "Generando…" + +#: admin/class-everyalt-admin.php:455 +msgid "Alt text generated." +msgstr "Texto alternativo generado." + +#: admin/class-everyalt-admin.php:456 +msgid "Could not generate alt text." +msgstr "No se pudo generar el texto alternativo." + +#: admin/class-everyalt-admin.php:457 +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 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:346 +#: admin/class-everyalt-admin.php:583 msgid "Skipped: API key validation failed." msgstr "Omitido: la validación de la clave API falló." -#: admin/class-everyalt-admin.php:350 +#: admin/class-everyalt-admin.php:593 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:366 +#: admin/class-everyalt-admin.php:616 +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 msgid "No alt text returned from API." msgstr "La API no devolvió texto alternativo." -#: admin/class-everyalt-admin.php:551 admin/partials/everyalt-options-display.php:14 admin/partials/everyalt-options-display.php:29 +#: admin/class-everyalt-admin.php:649 +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 +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 +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 +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 msgid "Settings" msgstr "Ajustes" -#: admin/class-everyalt-admin.php:570 admin/partials/everyalt-options-display.php:11 -msgid "EveryAlt" -msgstr "EveryAlt" - -#: admin/class-everyalt-admin.php:752 +#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377 msgid "Generation failed." msgstr "La generación falló." -#: admin/class-everyalt-admin.php:786 +#: admin/class-everyalt-admin.php:1450 msgid "Alt successfully updated." msgstr "Texto alternativo actualizado correctamente." -#: admin/class-everyalt-openai.php:134 +#: admin/class-everyalt-admin.php:1466 +msgid "Title successfully updated." +msgstr "Título actualizado correctamente." + +#: 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 "No se pudo codificar la imagen para la API. En algunos servidores, la codificación base64 falla con imágenes grandes o por límites de PHP. Prueba con una imagen más pequeña o aumenta el límite de memoria PHP del servidor." -#: admin/class-everyalt-openai.php:243 +#: admin/class-everyalt-openai.php:392 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." @@ -109,158 +257,494 @@ msgstr "La respuesta se cortó (se alcanzó el máximo de tokens). Aumenta los t msgid "Secondary menu" msgstr "Menú secundario" -#: admin/partials/everyalt-options-display.php:15 admin/partials/everyalt-options-display.php:100 +#: 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:144 +#: 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" -#: admin/partials/everyalt-options-display.php:24 -msgid "EveryAlt is a free, open-source project created by %1$sHDC%2$s, a web dev firm for high-stakes projects and AI builds." -msgstr "EveryAlt es un proyecto gratuito y de código abierto creado por %1$sHDC%2$s, una empresa de desarrollo web para proyectos de alto impacto y desarrollos con IA." - -#: admin/partials/everyalt-options-display.php:35 -msgid "EveryAlt also has a free Chrome extension and Shopify app. Check out our %1$sDigital Agency Plan%2$s if you manage lots of sites and want to set up limits and permissions for your clients or team." -msgstr "EveryAlt también tiene una extensión gratuita para Chrome y una app para Shopify. Descubre nuestro %1$sPlan para Agencias Digitales%2$s si gestionas muchos sitios y quieres configurar límites y permisos para tus clientes o equipo." +#. 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 +#, 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:21 +#: admin/partials/everyalt-options-display.php:41 msgid "Settings saved." msgstr "Ajustes guardados." -#: admin/partials/everyalt-options-display.php:24 -msgid "The OpenAI API key you entered could not be validated. Please check the key and try again. It was not saved." -msgstr "La clave API de OpenAI que introdujiste no pudo validarse. Comprueba la clave e inténtalo de nuevo. No se ha guardado." +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:47 +#, 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 +msgid "Clear queue" +msgstr "Vaciar cola" + +#: admin/partials/everyalt-options-display.php:74 +#: admin/partials/everyalt-options-display.php:77 +msgid "AI model" +msgstr "Modelo de IA" -#: admin/partials/everyalt-options-display.php:34 -msgid "OpenAI API Key" -msgstr "Clave API de OpenAI" +#. translators: 1: input price in USD, 2: output price in USD +#: admin/partials/everyalt-options-display.php:90 +#, 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:37 +#: admin/partials/everyalt-options-display.php:101 +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 +#, php-format +msgid "%s pricing" +msgstr "Precios de %s" + +#: admin/partials/everyalt-options-display.php:116 +msgid "API key" +msgstr "Clave API" + +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:127 +#, php-format +msgid "%s API key" +msgstr "Clave API de %s" + +#: admin/partials/everyalt-options-display.php:131 +msgid "Key saved" +msgstr "Clave guardada" + +#: admin/partials/everyalt-options-display.php:131 +msgid "No key saved" +msgstr "No hay ninguna clave guardada" + +#: admin/partials/everyalt-options-display.php:135 msgid "Leave blank to keep existing key" msgstr "Deja en blanco para mantener la clave actual" -#: admin/partials/everyalt-options-display.php:38 +#: admin/partials/everyalt-options-display.php:135 +msgid "Paste your API key" +msgstr "Pega tu clave API" + +#: admin/partials/everyalt-options-display.php:136 msgid "Validate key" msgstr "Validar clave" -#: admin/partials/everyalt-options-display.php:41 -msgid "Alt text is generated via OpenAI (image is sent as base64, so it works on localhost and behind HTTP auth). Stored encrypted. You are charged by OpenAI for your usage; EveryAlt is free and never bills you." -msgstr "El texto alternativo se genera mediante OpenAI (la imagen se envía en base64, por lo que funciona en localhost y tras autenticación HTTP). Se almacena cifrado. OpenAI te cobra por el uso; EveryAlt es gratuito y no te factura." +#. translators: %s: link to OpenAI API keys page +#: admin/partials/everyalt-options-display.php:142 +#, php-format +msgid "Sign in at %s." +msgstr "Inicia sesión en %s." -#: admin/partials/everyalt-options-display.php:41 -msgid "Generate an API key" -msgstr "Generar una clave API" +#: admin/partials/everyalt-options-display.php:143 +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 +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 +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 +#, 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 +#, 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 +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:45 +#: admin/partials/everyalt-options-display.php:151 +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 +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 +#, 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 +#, 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 +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 +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 +msgid "Your images stay private." +msgstr "Tus imágenes siguen siendo privadas." + +#: admin/partials/everyalt-options-display.php:163 +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 +msgid "DeepInfra data privacy" +msgstr "Privacidad de datos de DeepInfra" + +#: admin/partials/everyalt-options-display.php:169 +msgid "Privacy policy" +msgstr "Política de privacidad" + +#: admin/partials/everyalt-options-display.php:170 +msgid "Trust center (SOC 2, ISO 27001)" +msgstr "Centro de confianza (SOC 2, ISO 27001)" + +#: admin/partials/everyalt-options-display.php:179 +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 msgid "Auto-generate on upload" msgstr "Generar automáticamente al subir" -#: admin/partials/everyalt-options-display.php:47 +#: admin/partials/everyalt-options-display.php:185 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:51 +#: admin/partials/everyalt-options-display.php:187 +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 +msgid "New uploads" +msgstr "Nuevas subidas" + +#: admin/partials/everyalt-options-display.php:195 +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 +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 +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 +msgid "Decorative images" +msgstr "Imágenes decorativas" + +#: admin/partials/everyalt-options-display.php:204 +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 +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 +msgid "Monthly spending limit" +msgstr "Límite de gasto mensual" + +#: admin/partials/everyalt-options-display.php:212 +msgid "None" +msgstr "Ninguno" + +#: admin/partials/everyalt-options-display.php:213 +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 +#, 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 +msgid "Existing posts" +msgstr "Entradas existentes" + +#: admin/partials/everyalt-options-display.php:230 +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 +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 +msgid "Language" +msgstr "Idioma" + +#. translators: %s: site language name in English, e.g. German +#: admin/partials/everyalt-options-display.php:242 +#, php-format +msgid "Automatic (site language: %s)" +msgstr "Automático (idioma del sitio: %s)" + +#: admin/partials/everyalt-options-display.php:249 +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 msgid "Max completion tokens" msgstr "Tokens de finalización máximos" -#: admin/partials/everyalt-options-display.php:54 -msgid "Maximum tokens the model can use for the response (including reasoning for models like gpt-5-nano). Default 1024. Leave empty to use default." -msgstr "Máximo de tokens que el modelo puede usar en la respuesta (incluido el razonamiento en modelos como gpt-5-nano). Por defecto 1024. Deja vacío para usar el valor por defecto." - -#: admin/partials/everyalt-options-display.php:66 -msgid "Pricing: EveryAlt uses %1$s, currently the cheapest and most efficient model for this task. A reasonable estimate per image is about 200 input tokens and 500 output tokens, which works out to about %2$s per image." -msgstr "Precios: EveryAlt usa %1$s, actualmente el modelo más barato y eficiente para esta tarea. Una estimación razonable por imagen es unos 200 tokens de entrada y 500 de salida, lo que supone aproximadamente %2$s por imagen." +#: admin/partials/everyalt-options-display.php:256 +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:76 +#: admin/partials/everyalt-options-display.php:260 msgid "Alt text prompt" msgstr "Instrucción para el texto alternativo" -#: admin/partials/everyalt-options-display.php:84 +#: admin/partials/everyalt-options-display.php:268 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:89 +#: admin/partials/everyalt-options-display.php:272 +msgid "Image title prompt" +msgstr "Instrucción para el título de imagen" + +#: admin/partials/everyalt-options-display.php:280 +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 msgid "Save Settings" msgstr "Guardar ajustes" -#: admin/partials/everyalt-options-display.php:101 +#: admin/partials/everyalt-options-display.php:294 +#, 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:105 -msgid "Please enter your OpenAI API key in the Settings tab first." -msgstr "Introduce primero tu clave API de OpenAI en la pestaña Ajustes." +#: admin/partials/everyalt-options-display.php:296 +#: admin/partials/everyalt-options-display.php:390 +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:107 +#: admin/partials/everyalt-options-display.php:298 msgid "No images without alt text found." msgstr "No se encontraron imágenes sin texto alternativo." -#: admin/partials/everyalt-options-display.php:110 +#: admin/partials/everyalt-options-display.php:301 +#: admin/partials/everyalt-options-display.php:395 msgid "Select all" msgstr "Seleccionar todo" -#: admin/partials/everyalt-options-display.php:111 +#: admin/partials/everyalt-options-display.php:302 +#: admin/partials/everyalt-options-display.php:396 msgid "Select none" msgstr "No seleccionar ninguna" -#: admin/partials/everyalt-options-display.php:112 +#: admin/partials/everyalt-options-display.php:303 msgid "Generate alt text for selected" msgstr "Generar texto alternativo para los seleccionados" -#: admin/partials/everyalt-options-display.php:115 -msgid "Processing…" -msgstr "Procesando…" - -#: admin/partials/everyalt-options-display.php:132 admin/partials/everyalt-options-display.php:161 +#. translators: %s: number of images +#: admin/partials/everyalt-options-display.php:307 +#: admin/partials/everyalt-options-display.php:401 +#, php-format +msgid "Generate for all %s image" +msgid_plural "Generate for all %s images" +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 +#, php-format +msgid "%s image" +msgid_plural "%s images" +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 +#, 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 msgid "Edit" msgstr "Editar" -#: admin/partials/everyalt-options-display.php:145 -msgid "Images that already have alt text. Edit and save, or regenerate with EveryAlt." -msgstr "Imágenes que ya tienen texto alternativo. Edita y guarda, o regenera con EveryAlt." +#: admin/partials/everyalt-options-display.php:342 +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:147 -msgid "Please enter your OpenAI API key in the Settings tab to use Regenerate." -msgstr "Introduce tu clave API de OpenAI en la pestaña Ajustes para usar Regenerar." +#: admin/partials/everyalt-options-display.php:344 +#: admin/partials/everyalt-options-display.php:438 +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:150 +#: admin/partials/everyalt-options-display.php:347 msgid "No images with alt text found." msgstr "No se encontraron imágenes con texto alternativo." -#: admin/partials/everyalt-options-display.php:165 +#: admin/partials/everyalt-options-display.php:360 +msgid "Decorative" +msgstr "Decorativa" + +#: admin/partials/everyalt-options-display.php:365 +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 msgid "Save" msgstr "Guardar" -#: admin/partials/everyalt-options-display.php:166 +#: admin/partials/everyalt-options-display.php:369 +msgid "Describe anyway" +msgstr "Describir de todos modos" + +#: admin/partials/everyalt-options-display.php:371 +#: admin/partials/everyalt-options-display.php:458 msgid "Regenerate" msgstr "Regenerar" -#: admin/partials/everyalt-options-display.php:178 +#: admin/partials/everyalt-options-display.php:388 +#, 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 +msgid "No images needing a title found." +msgstr "No se encontraron imágenes que necesiten título." + +#: admin/partials/everyalt-options-display.php:397 +msgid "Generate titles for selected" +msgstr "Generar títulos para los seleccionados" + +#: admin/partials/everyalt-options-display.php:436 +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 +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 +msgid "Spending" +msgstr "Gasto" + +#. translators: 1: spent this month, 2: monthly limit +#: admin/partials/everyalt-options-display.php:484 +#, 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 +#, php-format +msgid "This month: %s (no limit set)." +msgstr "Este mes: %s (sin límite establecido)." + +#: admin/partials/everyalt-options-display.php:499 +msgid "Month" +msgstr "Mes" + +#: admin/partials/everyalt-options-display.php:500 +msgid "Requests" +msgstr "Solicitudes" + +#: admin/partials/everyalt-options-display.php:501 +msgid "Estimated cost" +msgstr "Coste estimado" + +#: admin/partials/everyalt-options-display.php:502 +msgid "By model" +msgstr "Por modelo" + +#: admin/partials/everyalt-options-display.php:526 +msgid "No spending recorded yet." +msgstr "Aún no se ha registrado ningún gasto." + +#: admin/partials/everyalt-options-display.php:528 +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 msgid "Generation Log" msgstr "Registro de generación" -#: admin/partials/everyalt-options-display.php:179 +#: admin/partials/everyalt-options-display.php:531 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:182 +#: admin/partials/everyalt-options-display.php:534 msgid "Export as CSV" msgstr "Exportar como CSV" -#: admin/partials/everyalt-options-display.php:190 +#: admin/partials/everyalt-options-display.php:542 msgid "Attachment" msgstr "Adjunto" -#: admin/partials/everyalt-options-display.php:193 +#: admin/partials/everyalt-options-display.php:546 msgid "Cost" msgstr "Coste" -#: admin/partials/everyalt-options-display.php:244 +#: admin/partials/everyalt-options-display.php:598 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." + +#: includes/class-everyalt-queue.php:199 +msgid "Image no longer exists." +msgstr "La imagen ya no existe." + +#: includes/class-everyalt-queue.php:234 +msgid "(Gave up after several attempts.)" +msgstr "(Abandonado tras varios intentos.)" + +#: includes/class-everyalt-queue.php:238 +msgid "(Will retry automatically.)" +msgstr "(Se reintentará automáticamente.)" + +#: includes/class-everyalt-queue.php:273 +msgid "Every minute (EveryAlt queue)" +msgstr "Cada minuto (cola de EveryAlt)" diff --git a/languages/everyalt-fr_FR.mo b/languages/everyalt-fr_FR.mo index 66ef4f7..447f676 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 f0efab8..6a01d37 100644 --- a/languages/everyalt-fr_FR.po +++ b/languages/everyalt-fr_FR.po @@ -3,10 +3,10 @@ # This file is distributed under the same license as the EveryAlt package. msgid "" msgstr "" -"Project-Id-Version: EveryAlt 1.0\n" +"Project-Id-Version: EveryAlt 1.1.0\n" "Report-Msgid-Bugs-To: https://hdc.net\n" -"POT-Creation-Date: 2025-02-15 00:00+0000\n" -"PO-Revision-Date: 2025-02-15 00:00+0000\n" +"POT-Creation-Date: 2026-09-27 16:34+0000\n" +"PO-Revision-Date: 2026-09-27 00:00+0000\n" "Last-Translator: HDC \n" "Language-Team: Français \n" "Language: fr_FR\n" @@ -17,91 +17,239 @@ msgstr "" "X-Domain: everyalt\n" "X-Generator: Manual\n" -#: admin/class-everyalt-admin.php:111 admin/partials/everyalt-options-display.php:189 +#. translators: %s: monthly spending limit, e.g. $5.00 +#: admin/class-everyalt-admin.php:85 +#, php-format +msgid "Skipped: monthly spending limit of %s reached. Generation resumes next month, or raise the limit in Settings." +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 msgid "Time" msgstr "Heure" -#: admin/class-everyalt-admin.php:112 +#: admin/class-everyalt-admin.php:165 msgid "Attachment ID" msgstr "ID de la pièce jointe" -#: admin/class-everyalt-admin.php:113 admin/partials/everyalt-options-display.php:191 +#: admin/class-everyalt-admin.php:166 +#: admin/partials/everyalt-options-display.php:543 msgid "Status" msgstr "Statut" -#: admin/class-everyalt-admin.php:114 admin/partials/everyalt-options-display.php:192 +#: admin/class-everyalt-admin.php:167 +#: admin/partials/everyalt-options-display.php:544 +msgid "Model" +msgstr "Modèle" + +#: admin/class-everyalt-admin.php:168 +#: admin/partials/everyalt-options-display.php:545 msgid "Message / Alt text" msgstr "Message / Texte alternatif" -#: admin/class-everyalt-admin.php:115 +#: admin/class-everyalt-admin.php:169 msgid "Cost (USD)" msgstr "Coût (USD)" -#: admin/class-everyalt-admin.php:116 admin/partials/everyalt-options-display.php:194 +#: admin/class-everyalt-admin.php:170 +#: admin/partials/everyalt-options-display.php:547 msgid "Details" msgstr "Détails" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:228 +#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432 +#: admin/partials/everyalt-options-display.php:583 +msgid "Error" +msgstr "Erreur" + +#: admin/class-everyalt-admin.php:174 +#: admin/partials/everyalt-options-display.php:581 msgid "Success" msgstr "Succès" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:230 -msgid "Error" -msgstr "Erreur" +#. translators: 1: provider name(s), e.g. "OpenAI", 2: URL of the EveryAlt settings tab +#: admin/class-everyalt-admin.php:259 +#, php-format +msgid "EveryAlt can no longer read your saved %1$s API key, usually because the security keys in wp-config.php changed. Generation with that provider is paused until you re-enter the key." +msgstr "EveryAlt ne peut plus lire votre clé API %1$s enregistrée, généralement parce que les clés de sécurité de wp-config.php ont changé. La génération avec ce fournisseur est suspendue jusqu'à ce que vous saisissiez de nouveau la clé." -#: admin/class-everyalt-admin.php:152 +#. translators: 1: spent this month, 2: monthly limit, 3: settings URL +#: admin/class-everyalt-admin.php:278 +#, php-format +msgid "EveryAlt has paused: this month’s estimated spend (%1$s) reached your monthly limit of %2$s. New images will be processed next month, or you can raise the limit." +msgstr "EveryAlt est en pause : les dépenses estimées de ce mois (%1$s) ont atteint votre limite mensuelle de %2$s. Les nouvelles images seront traitées le mois prochain, ou vous pouvez augmenter la limite." + +#: admin/class-everyalt-admin.php:293 msgid "You do not have permission to do this." msgstr "Vous n'avez pas la permission d'effectuer cette action." -#: admin/class-everyalt-admin.php:159 +#: admin/class-everyalt-admin.php:297 +msgid "Unknown provider." +msgstr "Fournisseur inconnu." + +#: admin/class-everyalt-admin.php:304 msgid "Enter an API key in the field above, or save a key first to validate the stored key." msgstr "Saisissez une clé API dans le champ ci-dessus, ou enregistrez d'abord une clé pour valider celle enregistrée." -#: admin/class-everyalt-admin.php:162 +#: admin/class-everyalt-admin.php:307 msgid "API key is valid." msgstr "La clé API est valide." -#: admin/class-everyalt-admin.php:164 +#: admin/class-everyalt-admin.php:309 msgid "API key could not be validated. Check that the key is correct and has API access." msgstr "La clé API n'a pas pu être validée. Vérifiez qu'elle est correcte et qu'elle a accès à l'API." -#: admin/class-everyalt-admin.php:342 +#: admin/class-everyalt-admin.php:423 +#, php-format +msgid "Generating in the background: %d remaining. You can leave this page; it continues on its own." +msgstr "Génération en arrière-plan : %d restante(s). Vous pouvez quitter cette page, la génération continue d'elle-même." + +#: admin/class-everyalt-admin.php:424 +#, php-format +msgid "%d waiting to retry. They will be tried again automatically." +msgstr "%d en attente d'une nouvelle tentative. Elles seront relancées automatiquement." + +#: admin/class-everyalt-admin.php:425 +msgid "All done." +msgstr "Terminé." + +#: admin/class-everyalt-admin.php:426 +msgid "Paused: monthly spending limit reached. Raise the limit in Settings or wait until next month." +msgstr "En pause : limite de dépenses mensuelle atteinte. Augmentez la limite dans Réglages ou attendez le mois prochain." + +#: admin/class-everyalt-admin.php:427 +msgid "Paused: add an API key for the selected model in Settings." +msgstr "En pause : ajoutez une clé API pour le modèle sélectionné dans Réglages." + +#: admin/class-everyalt-admin.php:428 +#, php-format +msgid "Added %d images to the queue." +msgstr "%d images ajoutées à la file d'attente." + +#: admin/class-everyalt-admin.php:429 +msgid "Those images were already queued." +msgstr "Ces images étaient déjà dans la file d'attente." + +#: admin/class-everyalt-admin.php:430 +msgid "Queue cleared." +msgstr "File d'attente vidée." + +#: admin/class-everyalt-admin.php:431 +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 +msgid "Error:" +msgstr "Erreur :" + +#: admin/class-everyalt-admin.php:434 +msgid "Request failed" +msgstr "La requête a échoué" + +#: admin/class-everyalt-admin.php:435 +msgid "Saved!" +msgstr "Enregistré !" + +#: admin/class-everyalt-admin.php:436 +msgid "Save failed" +msgstr "L'enregistrement a échoué" + +#: admin/class-everyalt-admin.php:437 +msgid "Regenerated!" +msgstr "Régénéré !" + +#: admin/class-everyalt-admin.php:438 +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 +msgid "EveryAlt" +msgstr "EveryAlt" + +#: admin/class-everyalt-admin.php:452 +msgid "Generate alt text with EveryAlt" +msgstr "Générer le texte alternatif avec EveryAlt" + +#: admin/class-everyalt-admin.php:453 +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 +msgid "Generating…" +msgstr "Génération…" + +#: admin/class-everyalt-admin.php:455 +msgid "Alt text generated." +msgstr "Texte alternatif généré." + +#: admin/class-everyalt-admin.php:456 +msgid "Could not generate alt text." +msgstr "Impossible de générer le texte alternatif." + +#: admin/class-everyalt-admin.php:457 +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 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:346 +#: admin/class-everyalt-admin.php:583 msgid "Skipped: API key validation failed." msgstr "Ignoré : la validation de la clé API a échoué." -#: admin/class-everyalt-admin.php:350 +#: admin/class-everyalt-admin.php:593 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:366 +#: admin/class-everyalt-admin.php:616 +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 msgid "No alt text returned from API." msgstr "L'API n'a renvoyé aucun texte alternatif." -#: admin/class-everyalt-admin.php:551 admin/partials/everyalt-options-display.php:14 admin/partials/everyalt-options-display.php:29 +#: admin/class-everyalt-admin.php:649 +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 +msgid "[Title] Skipped: API key validation failed." +msgstr "[Titre] Ignoré : la validation de la clé API a échoué." + +#: admin/class-everyalt-admin.php:664 +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 +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 msgid "Settings" msgstr "Réglages" -#: admin/class-everyalt-admin.php:570 admin/partials/everyalt-options-display.php:11 -msgid "EveryAlt" -msgstr "EveryAlt" - -#: admin/class-everyalt-admin.php:752 +#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377 msgid "Generation failed." msgstr "La génération a échoué." -#: admin/class-everyalt-admin.php:786 +#: admin/class-everyalt-admin.php:1450 msgid "Alt successfully updated." msgstr "Texte alternatif mis à jour avec succès." -#: admin/class-everyalt-openai.php:134 +#: admin/class-everyalt-admin.php:1466 +msgid "Title successfully updated." +msgstr "Titre mis à jour avec succès." + +#: 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 "L'image n'a pas pu être encodée pour l'API. Sur certains serveurs, l'encodage base64 échoue pour les grandes images ou à cause des limites PHP. Essayez une image plus petite ou augmentez la limite mémoire PHP du serveur." -#: admin/class-everyalt-openai.php:243 +#: admin/class-everyalt-openai.php:392 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." @@ -109,158 +257,494 @@ msgstr "La réponse a été tronquée (limite de jetons atteinte). Augmentez les msgid "Secondary menu" msgstr "Menu secondaire" -#: admin/partials/everyalt-options-display.php:15 admin/partials/everyalt-options-display.php:100 +#: 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:144 +#: 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" -#: admin/partials/everyalt-options-display.php:24 -msgid "EveryAlt is a free, open-source project created by %1$sHDC%2$s, a web dev firm for high-stakes projects and AI builds." -msgstr "EveryAlt est un projet gratuit et open source créé par %1$sHDC%2$s, une agence web pour les projets à enjeux et les développements IA." - -#: admin/partials/everyalt-options-display.php:35 -msgid "EveryAlt also has a free Chrome extension and Shopify app. Check out our %1$sDigital Agency Plan%2$s if you manage lots of sites and want to set up limits and permissions for your clients or team." -msgstr "EveryAlt propose aussi une extension Chrome gratuite et une app Shopify. Découvrez notre %1$sOffre Agences Digitales%2$s si vous gérez beaucoup de sites et souhaitez définir des limites et permissions pour vos clients ou votre équipe." +#. 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 +#, 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:21 +#: admin/partials/everyalt-options-display.php:41 msgid "Settings saved." msgstr "Réglages enregistrés." -#: admin/partials/everyalt-options-display.php:24 -msgid "The OpenAI API key you entered could not be validated. Please check the key and try again. It was not saved." -msgstr "La clé API OpenAI que vous avez saisie n'a pas pu être validée. Vérifiez la clé et réessayez. Elle n'a pas été enregistrée." +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:47 +#, 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 +msgid "Clear queue" +msgstr "Vider la file d'attente" + +#: admin/partials/everyalt-options-display.php:74 +#: admin/partials/everyalt-options-display.php:77 +msgid "AI model" +msgstr "Modèle d'IA" -#: admin/partials/everyalt-options-display.php:34 -msgid "OpenAI API Key" -msgstr "Clé API OpenAI" +#. translators: 1: input price in USD, 2: output price in USD +#: admin/partials/everyalt-options-display.php:90 +#, 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:37 +#: admin/partials/everyalt-options-display.php:101 +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 +#, php-format +msgid "%s pricing" +msgstr "Tarifs %s" + +#: admin/partials/everyalt-options-display.php:116 +msgid "API key" +msgstr "Clé API" + +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:127 +#, php-format +msgid "%s API key" +msgstr "Clé API %s" + +#: admin/partials/everyalt-options-display.php:131 +msgid "Key saved" +msgstr "Clé enregistrée" + +#: admin/partials/everyalt-options-display.php:131 +msgid "No key saved" +msgstr "Aucune clé enregistrée" + +#: admin/partials/everyalt-options-display.php:135 msgid "Leave blank to keep existing key" msgstr "Laisser vide pour conserver la clé actuelle" -#: admin/partials/everyalt-options-display.php:38 +#: admin/partials/everyalt-options-display.php:135 +msgid "Paste your API key" +msgstr "Collez votre clé API" + +#: admin/partials/everyalt-options-display.php:136 msgid "Validate key" msgstr "Valider la clé" -#: admin/partials/everyalt-options-display.php:41 -msgid "Alt text is generated via OpenAI (image is sent as base64, so it works on localhost and behind HTTP auth). Stored encrypted. You are charged by OpenAI for your usage; EveryAlt is free and never bills you." -msgstr "Le texte alternatif est généré via OpenAI (l'image est envoyée en base64, donc ça fonctionne en localhost et derrière une auth HTTP). Stocké chiffré. OpenAI vous facture votre usage ; EveryAlt est gratuit et ne vous facture jamais." +#. translators: %s: link to OpenAI API keys page +#: admin/partials/everyalt-options-display.php:142 +#, php-format +msgid "Sign in at %s." +msgstr "Connectez-vous sur %s." -#: admin/partials/everyalt-options-display.php:41 -msgid "Generate an API key" -msgstr "Générer une clé API" +#: admin/partials/everyalt-options-display.php:143 +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 +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 +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 +#, 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 +#, 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 +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:45 +#: admin/partials/everyalt-options-display.php:151 +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 +msgid "Gemini API terms" +msgstr "Conditions de l'API Gemini" + +#. translators: %s: link to Gemini API terms +#: admin/partials/everyalt-options-display.php:153 +#, 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 +#, 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 +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 +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 +msgid "Your images stay private." +msgstr "Vos images restent privées." + +#: admin/partials/everyalt-options-display.php:163 +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 +msgid "DeepInfra data privacy" +msgstr "Confidentialité des données chez DeepInfra" + +#: admin/partials/everyalt-options-display.php:169 +msgid "Privacy policy" +msgstr "Politique de confidentialité" + +#: admin/partials/everyalt-options-display.php:170 +msgid "Trust center (SOC 2, ISO 27001)" +msgstr "Centre de confiance (SOC 2, ISO 27001)" + +#: admin/partials/everyalt-options-display.php:179 +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 msgid "Auto-generate on upload" msgstr "Générer automatiquement à l'upload" -#: admin/partials/everyalt-options-display.php:47 +#: admin/partials/everyalt-options-display.php:185 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:51 +#: admin/partials/everyalt-options-display.php:187 +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 +msgid "New uploads" +msgstr "Nouveaux téléversements" + +#: admin/partials/everyalt-options-display.php:195 +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 +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 +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 +msgid "Decorative images" +msgstr "Images décoratives" + +#: admin/partials/everyalt-options-display.php:204 +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 +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 +msgid "Monthly spending limit" +msgstr "Limite de dépenses mensuelle" + +#: admin/partials/everyalt-options-display.php:212 +msgid "None" +msgstr "Aucune" + +#: admin/partials/everyalt-options-display.php:213 +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 +#, 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 +msgid "Existing posts" +msgstr "Publications existantes" + +#: admin/partials/everyalt-options-display.php:230 +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 +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 +msgid "Language" +msgstr "Langue" + +#. translators: %s: site language name in English, e.g. German +#: admin/partials/everyalt-options-display.php:242 +#, php-format +msgid "Automatic (site language: %s)" +msgstr "Automatique (langue du site : %s)" + +#: admin/partials/everyalt-options-display.php:249 +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 msgid "Max completion tokens" msgstr "Jetons de complétion max" -#: admin/partials/everyalt-options-display.php:54 -msgid "Maximum tokens the model can use for the response (including reasoning for models like gpt-5-nano). Default 1024. Leave empty to use default." -msgstr "Nombre maximum de jetons que le modèle peut utiliser pour la réponse (y compris le raisonnement pour des modèles comme gpt-5-nano). Par défaut 1024. Laisser vide pour la valeur par défaut." - -#: admin/partials/everyalt-options-display.php:66 -msgid "Pricing: EveryAlt uses %1$s, currently the cheapest and most efficient model for this task. A reasonable estimate per image is about 200 input tokens and 500 output tokens, which works out to about %2$s per image." -msgstr "Tarifs : EveryAlt utilise %1$s, actuellement le modèle le moins cher et le plus efficace pour cette tâche. Une estimation raisonnable par image est environ 200 jetons en entrée et 500 en sortie, soit environ %2$s par image." +#: admin/partials/everyalt-options-display.php:256 +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:76 +#: admin/partials/everyalt-options-display.php:260 msgid "Alt text prompt" msgstr "Invite pour le texte alternatif" -#: admin/partials/everyalt-options-display.php:84 +#: admin/partials/everyalt-options-display.php:268 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:89 +#: admin/partials/everyalt-options-display.php:272 +msgid "Image title prompt" +msgstr "Invite pour le titre d'image" + +#: admin/partials/everyalt-options-display.php:280 +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 msgid "Save Settings" msgstr "Enregistrer les réglages" -#: admin/partials/everyalt-options-display.php:101 +#: admin/partials/everyalt-options-display.php:294 +#, 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:105 -msgid "Please enter your OpenAI API key in the Settings tab first." -msgstr "Veuillez d'abord saisir votre clé API OpenAI dans l'onglet Réglages." +#: admin/partials/everyalt-options-display.php:296 +#: admin/partials/everyalt-options-display.php:390 +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:107 +#: admin/partials/everyalt-options-display.php:298 msgid "No images without alt text found." msgstr "Aucune image sans texte alternatif trouvée." -#: admin/partials/everyalt-options-display.php:110 +#: admin/partials/everyalt-options-display.php:301 +#: admin/partials/everyalt-options-display.php:395 msgid "Select all" msgstr "Tout sélectionner" -#: admin/partials/everyalt-options-display.php:111 +#: admin/partials/everyalt-options-display.php:302 +#: admin/partials/everyalt-options-display.php:396 msgid "Select none" msgstr "Tout désélectionner" -#: admin/partials/everyalt-options-display.php:112 +#: admin/partials/everyalt-options-display.php:303 msgid "Generate alt text for selected" msgstr "Générer le texte alternatif pour la sélection" -#: admin/partials/everyalt-options-display.php:115 -msgid "Processing…" -msgstr "Traitement en cours…" - -#: admin/partials/everyalt-options-display.php:132 admin/partials/everyalt-options-display.php:161 +#. translators: %s: number of images +#: admin/partials/everyalt-options-display.php:307 +#: admin/partials/everyalt-options-display.php:401 +#, php-format +msgid "Generate for all %s image" +msgid_plural "Generate for all %s images" +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 +#, php-format +msgid "%s image" +msgid_plural "%s images" +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 +#, 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 msgid "Edit" msgstr "Modifier" -#: admin/partials/everyalt-options-display.php:145 -msgid "Images that already have alt text. Edit and save, or regenerate with EveryAlt." -msgstr "Images qui ont déjà un texte alternatif. Modifiez et enregistrez, ou régénérez avec EveryAlt." +#: admin/partials/everyalt-options-display.php:342 +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:147 -msgid "Please enter your OpenAI API key in the Settings tab to use Regenerate." -msgstr "Saisissez votre clé API OpenAI dans l'onglet Réglages pour utiliser Régénérer." +#: admin/partials/everyalt-options-display.php:344 +#: admin/partials/everyalt-options-display.php:438 +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:150 +#: admin/partials/everyalt-options-display.php:347 msgid "No images with alt text found." msgstr "Aucune image avec texte alternatif trouvée." -#: admin/partials/everyalt-options-display.php:165 +#: admin/partials/everyalt-options-display.php:360 +msgid "Decorative" +msgstr "Décorative" + +#: admin/partials/everyalt-options-display.php:365 +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 msgid "Save" msgstr "Enregistrer" -#: admin/partials/everyalt-options-display.php:166 +#: admin/partials/everyalt-options-display.php:369 +msgid "Describe anyway" +msgstr "Décrire quand même" + +#: admin/partials/everyalt-options-display.php:371 +#: admin/partials/everyalt-options-display.php:458 msgid "Regenerate" msgstr "Régénérer" -#: admin/partials/everyalt-options-display.php:178 +#: admin/partials/everyalt-options-display.php:388 +#, 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 +msgid "No images needing a title found." +msgstr "Aucune image nécessitant un titre trouvée." + +#: admin/partials/everyalt-options-display.php:397 +msgid "Generate titles for selected" +msgstr "Générer les titres pour la sélection" + +#: admin/partials/everyalt-options-display.php:436 +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 +msgid "No images with a custom title found." +msgstr "Aucune image avec un titre personnalisé trouvée." + +#: admin/partials/everyalt-options-display.php:473 +msgid "Spending" +msgstr "Dépenses" + +#. translators: 1: spent this month, 2: monthly limit +#: admin/partials/everyalt-options-display.php:484 +#, 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 +#, 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 +msgid "Month" +msgstr "Mois" + +#: admin/partials/everyalt-options-display.php:500 +msgid "Requests" +msgstr "Requêtes" + +#: admin/partials/everyalt-options-display.php:501 +msgid "Estimated cost" +msgstr "Coût estimé" + +#: admin/partials/everyalt-options-display.php:502 +msgid "By model" +msgstr "Par modèle" + +#: admin/partials/everyalt-options-display.php:526 +msgid "No spending recorded yet." +msgstr "Aucune dépense enregistrée pour l'instant." + +#: admin/partials/everyalt-options-display.php:528 +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 msgid "Generation Log" msgstr "Journal des générations" -#: admin/partials/everyalt-options-display.php:179 +#: admin/partials/everyalt-options-display.php:531 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:182 +#: admin/partials/everyalt-options-display.php:534 msgid "Export as CSV" msgstr "Exporter en CSV" -#: admin/partials/everyalt-options-display.php:190 +#: admin/partials/everyalt-options-display.php:542 msgid "Attachment" msgstr "Pièce jointe" -#: admin/partials/everyalt-options-display.php:193 +#: admin/partials/everyalt-options-display.php:546 msgid "Cost" msgstr "Coût" -#: admin/partials/everyalt-options-display.php:244 +#: admin/partials/everyalt-options-display.php:598 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." + +#: includes/class-everyalt-queue.php:199 +msgid "Image no longer exists." +msgstr "L'image n'existe plus." + +#: includes/class-everyalt-queue.php:234 +msgid "(Gave up after several attempts.)" +msgstr "(Abandon après plusieurs tentatives.)" + +#: includes/class-everyalt-queue.php:238 +msgid "(Will retry automatically.)" +msgstr "(Nouvelle tentative automatique.)" + +#: includes/class-everyalt-queue.php:273 +msgid "Every minute (EveryAlt queue)" +msgstr "Chaque minute (file d'attente EveryAlt)" diff --git a/languages/everyalt-it_IT.mo b/languages/everyalt-it_IT.mo index 99d8045..c08445e 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 0a34e62..62f7b07 100644 --- a/languages/everyalt-it_IT.po +++ b/languages/everyalt-it_IT.po @@ -3,10 +3,10 @@ # This file is distributed under the same license as the EveryAlt package. msgid "" msgstr "" -"Project-Id-Version: EveryAlt 1.0\n" +"Project-Id-Version: EveryAlt 1.1.0\n" "Report-Msgid-Bugs-To: https://hdc.net\n" -"POT-Creation-Date: 2025-02-15 00:00+0000\n" -"PO-Revision-Date: 2025-02-15 00:00+0000\n" +"POT-Creation-Date: 2026-09-27 16:34+0000\n" +"PO-Revision-Date: 2026-09-27 00:00+0000\n" "Last-Translator: HDC \n" "Language-Team: Italiano \n" "Language: it_IT\n" @@ -17,91 +17,239 @@ msgstr "" "X-Domain: everyalt\n" "X-Generator: Manual\n" -#: admin/class-everyalt-admin.php:111 admin/partials/everyalt-options-display.php:189 +#. translators: %s: monthly spending limit, e.g. $5.00 +#: admin/class-everyalt-admin.php:85 +#, php-format +msgid "Skipped: monthly spending limit of %s reached. Generation resumes next month, or raise the limit in Settings." +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 msgid "Time" msgstr "Ora" -#: admin/class-everyalt-admin.php:112 +#: admin/class-everyalt-admin.php:165 msgid "Attachment ID" msgstr "ID allegato" -#: admin/class-everyalt-admin.php:113 admin/partials/everyalt-options-display.php:191 +#: admin/class-everyalt-admin.php:166 +#: admin/partials/everyalt-options-display.php:543 msgid "Status" msgstr "Stato" -#: admin/class-everyalt-admin.php:114 admin/partials/everyalt-options-display.php:192 +#: admin/class-everyalt-admin.php:167 +#: admin/partials/everyalt-options-display.php:544 +msgid "Model" +msgstr "Modello" + +#: admin/class-everyalt-admin.php:168 +#: admin/partials/everyalt-options-display.php:545 msgid "Message / Alt text" msgstr "Messaggio / Testo alternativo" -#: admin/class-everyalt-admin.php:115 +#: admin/class-everyalt-admin.php:169 msgid "Cost (USD)" msgstr "Costo (USD)" -#: admin/class-everyalt-admin.php:116 admin/partials/everyalt-options-display.php:194 +#: admin/class-everyalt-admin.php:170 +#: admin/partials/everyalt-options-display.php:547 msgid "Details" msgstr "Dettagli" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:228 +#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432 +#: admin/partials/everyalt-options-display.php:583 +msgid "Error" +msgstr "Errore" + +#: admin/class-everyalt-admin.php:174 +#: admin/partials/everyalt-options-display.php:581 msgid "Success" msgstr "Successo" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:230 -msgid "Error" -msgstr "Errore" +#. translators: 1: provider name(s), e.g. "OpenAI", 2: URL of the EveryAlt settings tab +#: admin/class-everyalt-admin.php:259 +#, php-format +msgid "EveryAlt can no longer read your saved %1$s API key, usually because the security keys in wp-config.php changed. Generation with that provider is paused until you re-enter the key." +msgstr "EveryAlt non riesce più a leggere la chiave API %1$s salvata, di solito perché le chiavi di sicurezza in wp-config.php sono cambiate. La generazione con questo provider è in pausa finché non reinserisci la chiave." -#: admin/class-everyalt-admin.php:152 +#. translators: 1: spent this month, 2: monthly limit, 3: settings URL +#: admin/class-everyalt-admin.php:278 +#, php-format +msgid "EveryAlt has paused: this month’s estimated spend (%1$s) reached your monthly limit of %2$s. New images will be processed next month, or you can raise the limit." +msgstr "EveryAlt è in pausa: la spesa stimata di questo mese (%1$s) ha raggiunto il tuo limite mensile di %2$s. Le nuove immagini verranno elaborate il mese prossimo, oppure puoi aumentare il limite." + +#: admin/class-everyalt-admin.php:293 msgid "You do not have permission to do this." msgstr "Non hai il permesso di fare questa operazione." -#: admin/class-everyalt-admin.php:159 +#: admin/class-everyalt-admin.php:297 +msgid "Unknown provider." +msgstr "Provider sconosciuto." + +#: admin/class-everyalt-admin.php:304 msgid "Enter an API key in the field above, or save a key first to validate the stored key." msgstr "Inserisci una chiave API nel campo sopra, oppure salva prima una chiave per validare quella memorizzata." -#: admin/class-everyalt-admin.php:162 +#: admin/class-everyalt-admin.php:307 msgid "API key is valid." msgstr "La chiave API è valida." -#: admin/class-everyalt-admin.php:164 +#: admin/class-everyalt-admin.php:309 msgid "API key could not be validated. Check that the key is correct and has API access." msgstr "Impossibile validare la chiave API. Verifica che la chiave sia corretta e abbia accesso all'API." -#: admin/class-everyalt-admin.php:342 +#: admin/class-everyalt-admin.php:423 +#, php-format +msgid "Generating in the background: %d remaining. You can leave this page; it continues on its own." +msgstr "Generazione in background: %d rimanenti. Puoi lasciare questa pagina; il processo continua da solo." + +#: admin/class-everyalt-admin.php:424 +#, php-format +msgid "%d waiting to retry. They will be tried again automatically." +msgstr "%d in attesa di un nuovo tentativo. Verranno ritentati automaticamente." + +#: admin/class-everyalt-admin.php:425 +msgid "All done." +msgstr "Tutto fatto." + +#: admin/class-everyalt-admin.php:426 +msgid "Paused: monthly spending limit reached. Raise the limit in Settings or wait until next month." +msgstr "In pausa: limite di spesa mensile raggiunto. Aumenta il limite in Impostazioni o attendi il mese prossimo." + +#: admin/class-everyalt-admin.php:427 +msgid "Paused: add an API key for the selected model in Settings." +msgstr "In pausa: aggiungi una chiave API per il modello selezionato in Impostazioni." + +#: admin/class-everyalt-admin.php:428 +#, php-format +msgid "Added %d images to the queue." +msgstr "Aggiunte %d immagini alla coda." + +#: admin/class-everyalt-admin.php:429 +msgid "Those images were already queued." +msgstr "Queste immagini erano già in coda." + +#: admin/class-everyalt-admin.php:430 +msgid "Queue cleared." +msgstr "Coda svuotata." + +#: admin/class-everyalt-admin.php:431 +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 +msgid "Error:" +msgstr "Errore:" + +#: admin/class-everyalt-admin.php:434 +msgid "Request failed" +msgstr "Richiesta non riuscita" + +#: admin/class-everyalt-admin.php:435 +msgid "Saved!" +msgstr "Salvato!" + +#: admin/class-everyalt-admin.php:436 +msgid "Save failed" +msgstr "Salvataggio non riuscito" + +#: admin/class-everyalt-admin.php:437 +msgid "Regenerated!" +msgstr "Rigenerato!" + +#: admin/class-everyalt-admin.php:438 +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 +msgid "EveryAlt" +msgstr "EveryAlt" + +#: admin/class-everyalt-admin.php:452 +msgid "Generate alt text with EveryAlt" +msgstr "Genera testo alternativo con EveryAlt" + +#: admin/class-everyalt-admin.php:453 +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 +msgid "Generating…" +msgstr "Generazione in corso…" + +#: admin/class-everyalt-admin.php:455 +msgid "Alt text generated." +msgstr "Testo alternativo generato." + +#: admin/class-everyalt-admin.php:456 +msgid "Could not generate alt text." +msgstr "Impossibile generare il testo alternativo." + +#: admin/class-everyalt-admin.php:457 +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 msgid "Skipped: no API key or auto-generate disabled." msgstr "Saltato: nessuna chiave API o generazione automatica disattivata." -#: admin/class-everyalt-admin.php:346 +#: admin/class-everyalt-admin.php:583 msgid "Skipped: API key validation failed." msgstr "Saltato: validazione della chiave API fallita." -#: admin/class-everyalt-admin.php:350 +#: admin/class-everyalt-admin.php:593 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:366 +#: admin/class-everyalt-admin.php:616 +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 msgid "No alt text returned from API." msgstr "L'API non ha restituito testo alternativo." -#: admin/class-everyalt-admin.php:551 admin/partials/everyalt-options-display.php:14 admin/partials/everyalt-options-display.php:29 +#: admin/class-everyalt-admin.php:649 +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 +msgid "[Title] Skipped: API key validation failed." +msgstr "[Titolo] Saltato: validazione della chiave API fallita." + +#: admin/class-everyalt-admin.php:664 +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 +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 msgid "Settings" msgstr "Impostazioni" -#: admin/class-everyalt-admin.php:570 admin/partials/everyalt-options-display.php:11 -msgid "EveryAlt" -msgstr "EveryAlt" - -#: admin/class-everyalt-admin.php:752 +#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377 msgid "Generation failed." msgstr "Generazione non riuscita." -#: admin/class-everyalt-admin.php:786 +#: admin/class-everyalt-admin.php:1450 msgid "Alt successfully updated." msgstr "Testo alternativo aggiornato correttamente." -#: admin/class-everyalt-openai.php:134 +#: admin/class-everyalt-admin.php:1466 +msgid "Title successfully updated." +msgstr "Titolo aggiornato correttamente." + +#: 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 "Impossibile codificare l'immagine per l'API. Su alcuni server la codifica base64 fallisce con immagini grandi o per limiti PHP. Prova con un'immagine più piccola o aumenta il limite di memoria PHP del server." -#: admin/class-everyalt-openai.php:243 +#: admin/class-everyalt-openai.php:392 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." @@ -109,158 +257,494 @@ msgstr "La risposta è stata troncata (limite token raggiunto). Aumenta i token msgid "Secondary menu" msgstr "Menu secondario" -#: admin/partials/everyalt-options-display.php:15 admin/partials/everyalt-options-display.php:100 +#: 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:144 +#: 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" -#: admin/partials/everyalt-options-display.php:24 -msgid "EveryAlt is a free, open-source project created by %1$sHDC%2$s, a web dev firm for high-stakes projects and AI builds." -msgstr "EveryAlt è un progetto gratuito e open source creato da %1$sHDC%2$s, un'agenzia web per progetti ad alto rischio e sviluppi con l'IA." - -#: admin/partials/everyalt-options-display.php:35 -msgid "EveryAlt also has a free Chrome extension and Shopify app. Check out our %1$sDigital Agency Plan%2$s if you manage lots of sites and want to set up limits and permissions for your clients or team." -msgstr "EveryAlt ha anche un'estensione Chrome gratuita e un'app Shopify. Scopri il nostro %1$sPiano per Agenzie Digitali%2$s se gestisci molti siti e vuoi impostare limiti e permessi per i tuoi clienti o il tuo team." +#. 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 +#, 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:21 +#: admin/partials/everyalt-options-display.php:41 msgid "Settings saved." msgstr "Impostazioni salvate." -#: admin/partials/everyalt-options-display.php:24 -msgid "The OpenAI API key you entered could not be validated. Please check the key and try again. It was not saved." -msgstr "La chiave API OpenAI inserita non è stata validata. Controlla la chiave e riprova. Non è stata salvata." +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:47 +#, 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 +msgid "Clear queue" +msgstr "Svuota coda" + +#: admin/partials/everyalt-options-display.php:74 +#: admin/partials/everyalt-options-display.php:77 +msgid "AI model" +msgstr "Modello IA" -#: admin/partials/everyalt-options-display.php:34 -msgid "OpenAI API Key" -msgstr "Chiave API OpenAI" +#. translators: 1: input price in USD, 2: output price in USD +#: admin/partials/everyalt-options-display.php:90 +#, 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:37 +#: admin/partials/everyalt-options-display.php:101 +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 +#, php-format +msgid "%s pricing" +msgstr "Prezzi %s" + +#: admin/partials/everyalt-options-display.php:116 +msgid "API key" +msgstr "Chiave API" + +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:127 +#, php-format +msgid "%s API key" +msgstr "Chiave API %s" + +#: admin/partials/everyalt-options-display.php:131 +msgid "Key saved" +msgstr "Chiave salvata" + +#: admin/partials/everyalt-options-display.php:131 +msgid "No key saved" +msgstr "Nessuna chiave salvata" + +#: admin/partials/everyalt-options-display.php:135 msgid "Leave blank to keep existing key" msgstr "Lascia vuoto per mantenere la chiave attuale" -#: admin/partials/everyalt-options-display.php:38 +#: admin/partials/everyalt-options-display.php:135 +msgid "Paste your API key" +msgstr "Incolla la tua chiave API" + +#: admin/partials/everyalt-options-display.php:136 msgid "Validate key" msgstr "Valida chiave" -#: admin/partials/everyalt-options-display.php:41 -msgid "Alt text is generated via OpenAI (image is sent as base64, so it works on localhost and behind HTTP auth). Stored encrypted. You are charged by OpenAI for your usage; EveryAlt is free and never bills you." -msgstr "Il testo alternativo è generato tramite OpenAI (l'immagine viene inviata in base64, quindi funziona in localhost e dietro autenticazione HTTP). Memorizzato crittografato. OpenAI ti addebita l'utilizzo; EveryAlt è gratuito e non ti fattura mai." +#. translators: %s: link to OpenAI API keys page +#: admin/partials/everyalt-options-display.php:142 +#, php-format +msgid "Sign in at %s." +msgstr "Accedi su %s." -#: admin/partials/everyalt-options-display.php:41 -msgid "Generate an API key" -msgstr "Genera una chiave API" +#: admin/partials/everyalt-options-display.php:143 +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 +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 +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 +#, 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 +#, 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 +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:45 +#: admin/partials/everyalt-options-display.php:151 +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 +msgid "Gemini API terms" +msgstr "Termini dell'API Gemini" + +#. translators: %s: link to Gemini API terms +#: admin/partials/everyalt-options-display.php:153 +#, 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 +#, 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 +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 +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 +msgid "Your images stay private." +msgstr "Le tue immagini restano private." + +#: admin/partials/everyalt-options-display.php:163 +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 +msgid "DeepInfra data privacy" +msgstr "Privacy dei dati di DeepInfra" + +#: admin/partials/everyalt-options-display.php:169 +msgid "Privacy policy" +msgstr "Informativa sulla privacy" + +#: admin/partials/everyalt-options-display.php:170 +msgid "Trust center (SOC 2, ISO 27001)" +msgstr "Trust center (SOC 2, ISO 27001)" + +#: admin/partials/everyalt-options-display.php:179 +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 msgid "Auto-generate on upload" msgstr "Genera automaticamente in upload" -#: admin/partials/everyalt-options-display.php:47 +#: admin/partials/everyalt-options-display.php:185 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:51 +#: admin/partials/everyalt-options-display.php:187 +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 +msgid "New uploads" +msgstr "Nuovi caricamenti" + +#: admin/partials/everyalt-options-display.php:195 +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 +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 +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 +msgid "Decorative images" +msgstr "Immagini decorative" + +#: admin/partials/everyalt-options-display.php:204 +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 +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 +msgid "Monthly spending limit" +msgstr "Limite di spesa mensile" + +#: admin/partials/everyalt-options-display.php:212 +msgid "None" +msgstr "Nessuno" + +#: admin/partials/everyalt-options-display.php:213 +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 +#, 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 +msgid "Existing posts" +msgstr "Articoli esistenti" + +#: admin/partials/everyalt-options-display.php:230 +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 +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 +msgid "Language" +msgstr "Lingua" + +#. translators: %s: site language name in English, e.g. German +#: admin/partials/everyalt-options-display.php:242 +#, php-format +msgid "Automatic (site language: %s)" +msgstr "Automatica (lingua del sito: %s)" + +#: admin/partials/everyalt-options-display.php:249 +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 msgid "Max completion tokens" msgstr "Token di completamento massimi" -#: admin/partials/everyalt-options-display.php:54 -msgid "Maximum tokens the model can use for the response (including reasoning for models like gpt-5-nano). Default 1024. Leave empty to use default." -msgstr "Numero massimo di token che il modello può usare per la risposta (incluso il ragionamento per modelli come gpt-5-nano). Predefinito 1024. Lascia vuoto per usare il predefinito." - -#: admin/partials/everyalt-options-display.php:66 -msgid "Pricing: EveryAlt uses %1$s, currently the cheapest and most efficient model for this task. A reasonable estimate per image is about 200 input tokens and 500 output tokens, which works out to about %2$s per image." -msgstr "Prezzi: EveryAlt usa %1$s, attualmente il modello più economico ed efficiente per questo compito. Una stima ragionevole per immagine è circa 200 token in ingresso e 500 in uscita, ovvero circa %2$s per immagine." +#: admin/partials/everyalt-options-display.php:256 +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:76 +#: admin/partials/everyalt-options-display.php:260 msgid "Alt text prompt" msgstr "Prompt per il testo alternativo" -#: admin/partials/everyalt-options-display.php:84 +#: admin/partials/everyalt-options-display.php:268 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:89 +#: admin/partials/everyalt-options-display.php:272 +msgid "Image title prompt" +msgstr "Prompt per il titolo dell'immagine" + +#: admin/partials/everyalt-options-display.php:280 +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 msgid "Save Settings" msgstr "Salva impostazioni" -#: admin/partials/everyalt-options-display.php:101 +#: admin/partials/everyalt-options-display.php:294 +#, 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:105 -msgid "Please enter your OpenAI API key in the Settings tab first." -msgstr "Inserisci prima la tua chiave API OpenAI nella scheda Impostazioni." +#: admin/partials/everyalt-options-display.php:296 +#: admin/partials/everyalt-options-display.php:390 +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:107 +#: admin/partials/everyalt-options-display.php:298 msgid "No images without alt text found." msgstr "Nessuna immagine senza testo alternativo trovata." -#: admin/partials/everyalt-options-display.php:110 +#: admin/partials/everyalt-options-display.php:301 +#: admin/partials/everyalt-options-display.php:395 msgid "Select all" msgstr "Seleziona tutto" -#: admin/partials/everyalt-options-display.php:111 +#: admin/partials/everyalt-options-display.php:302 +#: admin/partials/everyalt-options-display.php:396 msgid "Select none" msgstr "Deseleziona tutto" -#: admin/partials/everyalt-options-display.php:112 +#: admin/partials/everyalt-options-display.php:303 msgid "Generate alt text for selected" msgstr "Genera testo alternativo per i selezionati" -#: admin/partials/everyalt-options-display.php:115 -msgid "Processing…" -msgstr "Elaborazione…" - -#: admin/partials/everyalt-options-display.php:132 admin/partials/everyalt-options-display.php:161 +#. translators: %s: number of images +#: admin/partials/everyalt-options-display.php:307 +#: admin/partials/everyalt-options-display.php:401 +#, php-format +msgid "Generate for all %s image" +msgid_plural "Generate for all %s images" +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 +#, php-format +msgid "%s image" +msgid_plural "%s images" +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 +#, 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 msgid "Edit" msgstr "Modifica" -#: admin/partials/everyalt-options-display.php:145 -msgid "Images that already have alt text. Edit and save, or regenerate with EveryAlt." -msgstr "Immagini che hanno già testo alternativo. Modifica e salva, oppure rigenera con EveryAlt." +#: admin/partials/everyalt-options-display.php:342 +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:147 -msgid "Please enter your OpenAI API key in the Settings tab to use Regenerate." -msgstr "Inserisci la tua chiave API OpenAI nella scheda Impostazioni per usare Rigenera." +#: admin/partials/everyalt-options-display.php:344 +#: admin/partials/everyalt-options-display.php:438 +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:150 +#: admin/partials/everyalt-options-display.php:347 msgid "No images with alt text found." msgstr "Nessuna immagine con testo alternativo trovata." -#: admin/partials/everyalt-options-display.php:165 +#: admin/partials/everyalt-options-display.php:360 +msgid "Decorative" +msgstr "Decorativa" + +#: admin/partials/everyalt-options-display.php:365 +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 msgid "Save" msgstr "Salva" -#: admin/partials/everyalt-options-display.php:166 +#: admin/partials/everyalt-options-display.php:369 +msgid "Describe anyway" +msgstr "Descrivi comunque" + +#: admin/partials/everyalt-options-display.php:371 +#: admin/partials/everyalt-options-display.php:458 msgid "Regenerate" msgstr "Rigenera" -#: admin/partials/everyalt-options-display.php:178 +#: admin/partials/everyalt-options-display.php:388 +#, 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 +msgid "No images needing a title found." +msgstr "Nessuna immagine che necessita di un titolo trovata." + +#: admin/partials/everyalt-options-display.php:397 +msgid "Generate titles for selected" +msgstr "Genera titoli per i selezionati" + +#: admin/partials/everyalt-options-display.php:436 +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 +msgid "No images with a custom title found." +msgstr "Nessuna immagine con titolo personalizzato trovata." + +#: admin/partials/everyalt-options-display.php:473 +msgid "Spending" +msgstr "Spesa" + +#. translators: 1: spent this month, 2: monthly limit +#: admin/partials/everyalt-options-display.php:484 +#, 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 +#, php-format +msgid "This month: %s (no limit set)." +msgstr "Questo mese: %s (nessun limite impostato)." + +#: admin/partials/everyalt-options-display.php:499 +msgid "Month" +msgstr "Mese" + +#: admin/partials/everyalt-options-display.php:500 +msgid "Requests" +msgstr "Richieste" + +#: admin/partials/everyalt-options-display.php:501 +msgid "Estimated cost" +msgstr "Costo stimato" + +#: admin/partials/everyalt-options-display.php:502 +msgid "By model" +msgstr "Per modello" + +#: admin/partials/everyalt-options-display.php:526 +msgid "No spending recorded yet." +msgstr "Ancora nessuna spesa registrata." + +#: admin/partials/everyalt-options-display.php:528 +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 msgid "Generation Log" msgstr "Registro generazioni" -#: admin/partials/everyalt-options-display.php:179 +#: admin/partials/everyalt-options-display.php:531 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:182 +#: admin/partials/everyalt-options-display.php:534 msgid "Export as CSV" msgstr "Esporta come CSV" -#: admin/partials/everyalt-options-display.php:190 +#: admin/partials/everyalt-options-display.php:542 msgid "Attachment" msgstr "Allegato" -#: admin/partials/everyalt-options-display.php:193 +#: admin/partials/everyalt-options-display.php:546 msgid "Cost" msgstr "Costo" -#: admin/partials/everyalt-options-display.php:244 +#: admin/partials/everyalt-options-display.php:598 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." + +#: includes/class-everyalt-queue.php:199 +msgid "Image no longer exists." +msgstr "L'immagine non esiste più." + +#: includes/class-everyalt-queue.php:234 +msgid "(Gave up after several attempts.)" +msgstr "(Abbandonato dopo diversi tentativi.)" + +#: includes/class-everyalt-queue.php:238 +msgid "(Will retry automatically.)" +msgstr "(Nuovo tentativo automatico.)" + +#: includes/class-everyalt-queue.php:273 +msgid "Every minute (EveryAlt queue)" +msgstr "Ogni minuto (coda EveryAlt)" diff --git a/languages/everyalt-ja.mo b/languages/everyalt-ja.mo index 7d32011..8199e38 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 cc2bead..8f632b8 100644 --- a/languages/everyalt-ja.po +++ b/languages/everyalt-ja.po @@ -3,10 +3,10 @@ # This file is distributed under the same license as the EveryAlt package. msgid "" msgstr "" -"Project-Id-Version: EveryAlt 1.0\n" +"Project-Id-Version: EveryAlt 1.1.0\n" "Report-Msgid-Bugs-To: https://hdc.net\n" -"POT-Creation-Date: 2025-02-15 00:00+0000\n" -"PO-Revision-Date: 2025-02-15 00:00+0000\n" +"POT-Creation-Date: 2026-09-27 16:34+0000\n" +"PO-Revision-Date: 2026-09-27 00:00+0000\n" "Last-Translator: HDC \n" "Language-Team: 日本語 \n" "Language: ja\n" @@ -17,91 +17,239 @@ msgstr "" "X-Domain: everyalt\n" "X-Generator: Manual\n" -#: admin/class-everyalt-admin.php:111 admin/partials/everyalt-options-display.php:189 +#. translators: %s: monthly spending limit, e.g. $5.00 +#: admin/class-everyalt-admin.php:85 +#, php-format +msgid "Skipped: monthly spending limit of %s reached. Generation resumes next month, or raise the limit in Settings." +msgstr "スキップ: 月間利用上限額(%s)に達しました。生成は来月再開されます。または、設定で上限を引き上げてください。" + +#: admin/class-everyalt-admin.php:164 +#: admin/partials/everyalt-options-display.php:541 msgid "Time" msgstr "日時" -#: admin/class-everyalt-admin.php:112 +#: admin/class-everyalt-admin.php:165 msgid "Attachment ID" msgstr "添付ID" -#: admin/class-everyalt-admin.php:113 admin/partials/everyalt-options-display.php:191 +#: admin/class-everyalt-admin.php:166 +#: admin/partials/everyalt-options-display.php:543 msgid "Status" msgstr "状態" -#: admin/class-everyalt-admin.php:114 admin/partials/everyalt-options-display.php:192 +#: admin/class-everyalt-admin.php:167 +#: admin/partials/everyalt-options-display.php:544 +msgid "Model" +msgstr "モデル" + +#: admin/class-everyalt-admin.php:168 +#: admin/partials/everyalt-options-display.php:545 msgid "Message / Alt text" msgstr "メッセージ / 代替テキスト" -#: admin/class-everyalt-admin.php:115 +#: admin/class-everyalt-admin.php:169 msgid "Cost (USD)" msgstr "コスト (USD)" -#: admin/class-everyalt-admin.php:116 admin/partials/everyalt-options-display.php:194 +#: admin/class-everyalt-admin.php:170 +#: admin/partials/everyalt-options-display.php:547 msgid "Details" msgstr "詳細" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:228 +#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432 +#: admin/partials/everyalt-options-display.php:583 +msgid "Error" +msgstr "エラー" + +#: admin/class-everyalt-admin.php:174 +#: admin/partials/everyalt-options-display.php:581 msgid "Success" msgstr "成功" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:230 -msgid "Error" -msgstr "エラー" +#. translators: 1: provider name(s), e.g. "OpenAI", 2: URL of the EveryAlt settings tab +#: admin/class-everyalt-admin.php:259 +#, php-format +msgid "EveryAlt can no longer read your saved %1$s API key, usually because the security keys in wp-config.php changed. Generation with that provider is paused until you re-enter the key." +msgstr "保存されている%1$s APIキーをEveryAltが読み取れなくなりました。通常、wp-config.php のセキュリティキーが変更されたことが原因です。キーを再入力するまで、このプロバイダーでの生成は一時停止されます。" -#: admin/class-everyalt-admin.php:152 +#. translators: 1: spent this month, 2: monthly limit, 3: settings URL +#: admin/class-everyalt-admin.php:278 +#, php-format +msgid "EveryAlt has paused: this month’s estimated spend (%1$s) reached your monthly limit of %2$s. New images will be processed next month, or you can raise the limit." +msgstr "EveryAltは一時停止しています: 今月の推定利用額(%1$s)が月間上限の%2$sに達しました。新しい画像は来月処理されます。または、上限を引き上げることもできます。" + +#: admin/class-everyalt-admin.php:293 msgid "You do not have permission to do this." msgstr "この操作を行う権限がありません。" -#: admin/class-everyalt-admin.php:159 +#: admin/class-everyalt-admin.php:297 +msgid "Unknown provider." +msgstr "不明なプロバイダーです。" + +#: admin/class-everyalt-admin.php:304 msgid "Enter an API key in the field above, or save a key first to validate the stored key." msgstr "上記の欄にAPIキーを入力するか、保存されているキーを検証するために先にキーを保存してください。" -#: admin/class-everyalt-admin.php:162 +#: admin/class-everyalt-admin.php:307 msgid "API key is valid." msgstr "APIキーは有効です。" -#: admin/class-everyalt-admin.php:164 +#: admin/class-everyalt-admin.php:309 msgid "API key could not be validated. Check that the key is correct and has API access." msgstr "APIキーを検証できませんでした。キーが正しく、APIアクセス権があるか確認してください。" -#: admin/class-everyalt-admin.php:342 +#: admin/class-everyalt-admin.php:423 +#, php-format +msgid "Generating in the background: %d remaining. You can leave this page; it continues on its own." +msgstr "バックグラウンドで生成中: 残り%d件。このページを離れても処理は自動的に続行されます。" + +#: admin/class-everyalt-admin.php:424 +#, php-format +msgid "%d waiting to retry. They will be tried again automatically." +msgstr "%d件が再試行待ちです。自動的に再試行されます。" + +#: admin/class-everyalt-admin.php:425 +msgid "All done." +msgstr "すべて完了しました。" + +#: admin/class-everyalt-admin.php:426 +msgid "Paused: monthly spending limit reached. Raise the limit in Settings or wait until next month." +msgstr "一時停止中: 月間利用上限額に達しました。設定で上限を引き上げるか、来月までお待ちください。" + +#: admin/class-everyalt-admin.php:427 +msgid "Paused: add an API key for the selected model in Settings." +msgstr "一時停止中: 設定で、選択したモデルのAPIキーを追加してください。" + +#: admin/class-everyalt-admin.php:428 +#, php-format +msgid "Added %d images to the queue." +msgstr "%d枚の画像をキューに追加しました。" + +#: admin/class-everyalt-admin.php:429 +msgid "Those images were already queued." +msgstr "これらの画像はすでにキューに追加されています。" + +#: admin/class-everyalt-admin.php:430 +msgid "Queue cleared." +msgstr "キューをクリアしました。" + +#: admin/class-everyalt-admin.php:431 +msgid "Marked as decorative (alt text left empty on purpose)" +msgstr "装飾画像としてマーク済み(代替テキストは意図的に空欄)" + +#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458 +msgid "Error:" +msgstr "エラー:" + +#: admin/class-everyalt-admin.php:434 +msgid "Request failed" +msgstr "リクエストに失敗しました" + +#: admin/class-everyalt-admin.php:435 +msgid "Saved!" +msgstr "保存しました!" + +#: admin/class-everyalt-admin.php:436 +msgid "Save failed" +msgstr "保存に失敗しました" + +#: admin/class-everyalt-admin.php:437 +msgid "Regenerated!" +msgstr "再生成しました!" + +#: admin/class-everyalt-admin.php:438 +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 +msgid "EveryAlt" +msgstr "EveryAlt" + +#: admin/class-everyalt-admin.php:452 +msgid "Generate alt text with EveryAlt" +msgstr "EveryAltで代替テキストを生成" + +#: admin/class-everyalt-admin.php:453 +msgid "Select or upload an image to generate alt text." +msgstr "代替テキストを生成する画像を選択またはアップロードしてください。" + +#: admin/class-everyalt-admin.php:454 +msgid "Generating…" +msgstr "生成中…" + +#: admin/class-everyalt-admin.php:455 +msgid "Alt text generated." +msgstr "代替テキストを生成しました。" + +#: admin/class-everyalt-admin.php:456 +msgid "Could not generate alt text." +msgstr "代替テキストを生成できませんでした。" + +#: admin/class-everyalt-admin.php:457 +msgid "Marked as decorative: alt text left empty on purpose." +msgstr "装飾画像としてマークしました: 代替テキストは意図的に空欄にしています。" + +#: admin/class-everyalt-admin.php:578 msgid "Skipped: no API key or auto-generate disabled." msgstr "スキップ: APIキーがないか、自動生成が無効です。" -#: admin/class-everyalt-admin.php:346 +#: admin/class-everyalt-admin.php:583 msgid "Skipped: API key validation failed." msgstr "スキップ: APIキーの検証に失敗しました。" -#: admin/class-everyalt-admin.php:350 +#: admin/class-everyalt-admin.php:593 msgid "Skipped: not a valid image or file exceeds 4MB." msgstr "スキップ: 有効な画像ではないか、ファイルが4MBを超えています。" -#: admin/class-everyalt-admin.php:366 +#: admin/class-everyalt-admin.php:616 +msgid "Marked as decorative (alt text left empty on purpose)." +msgstr "装飾画像としてマークしました(代替テキストは意図的に空欄)。" + +#: admin/class-everyalt-admin.php:623 msgid "No alt text returned from API." msgstr "APIから代替テキストが返されませんでした。" -#: admin/class-everyalt-admin.php:551 admin/partials/everyalt-options-display.php:14 admin/partials/everyalt-options-display.php:29 +#: admin/class-everyalt-admin.php:649 +msgid "[Title] Skipped: no API key or auto-generate disabled." +msgstr "[タイトル] スキップ: APIキーがないか、自動生成が無効です。" + +#: admin/class-everyalt-admin.php:654 +msgid "[Title] Skipped: API key validation failed." +msgstr "[タイトル] スキップ: APIキーの検証に失敗しました。" + +#: admin/class-everyalt-admin.php:664 +msgid "[Title] Skipped: not a valid image or file exceeds 4MB." +msgstr "[タイトル] スキップ: 有効な画像ではないか、ファイルが4MBを超えています。" + +#: admin/class-everyalt-admin.php:687 +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 msgid "Settings" msgstr "設定" -#: admin/class-everyalt-admin.php:570 admin/partials/everyalt-options-display.php:11 -msgid "EveryAlt" -msgstr "EveryAlt" - -#: admin/class-everyalt-admin.php:752 +#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377 msgid "Generation failed." msgstr "生成に失敗しました。" -#: admin/class-everyalt-admin.php:786 +#: admin/class-everyalt-admin.php:1450 msgid "Alt successfully updated." msgstr "代替テキストを正常に更新しました。" -#: admin/class-everyalt-openai.php:134 +#: admin/class-everyalt-admin.php:1466 +msgid "Title successfully updated." +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." msgstr "API用に画像をエンコードできませんでした。一部のサーバーでは、大きな画像やPHPの制限によりbase64エンコードが失敗することがあります。より小さい画像を試すか、サーバーのPHPメモリ制限を増やしてください。" -#: admin/class-everyalt-openai.php:243 +#: admin/class-everyalt-openai.php:392 msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this." msgstr "応答が途中で切れました(最大トークン数に達しました)。設定で「最大完了トークン」を増やして解決してください。" @@ -109,158 +257,492 @@ msgstr "応答が途中で切れました(最大トークン数に達しまし msgid "Secondary menu" msgstr "サブメニュー" -#: admin/partials/everyalt-options-display.php:15 admin/partials/everyalt-options-display.php:100 +#: 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:144 +#: 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 "ログ" -#: admin/partials/everyalt-options-display.php:24 -msgid "EveryAlt is a free, open-source project created by %1$sHDC%2$s, a web dev firm for high-stakes projects and AI builds." -msgstr "EveryAltは%1$sHDC%2$sが作成した無料のオープンソースプロジェクトです。重要プロジェクトとAI構築を手がけるWeb開発会社です。" - -#: admin/partials/everyalt-options-display.php:35 -msgid "EveryAlt also has a free Chrome extension and Shopify app. Check out our %1$sDigital Agency Plan%2$s if you manage lots of sites and want to set up limits and permissions for your clients or team." -msgstr "EveryAltには無料のChrome拡張機能とShopifyアプリもあります。多数のサイトを管理し、クライアントやチームの制限と権限を設定したい場合は、%1$sデジタルエージェンシープラン%2$sをご覧ください。" +#. 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 +#, 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:21 +#: admin/partials/everyalt-options-display.php:41 msgid "Settings saved." msgstr "設定を保存しました。" -#: admin/partials/everyalt-options-display.php:24 -msgid "The OpenAI API key you entered could not be validated. Please check the key and try again. It was not saved." -msgstr "入力したOpenAI APIキーは検証できませんでした。キーを確認してもう一度お試しください。保存されていません。" +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:47 +#, 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 +msgid "Clear queue" +msgstr "キューをクリア" + +#: admin/partials/everyalt-options-display.php:74 +#: admin/partials/everyalt-options-display.php:77 +msgid "AI model" +msgstr "AIモデル" -#: admin/partials/everyalt-options-display.php:34 -msgid "OpenAI API Key" -msgstr "OpenAI APIキー" +#. translators: 1: input price in USD, 2: output price in USD +#: admin/partials/everyalt-options-display.php:90 +#, php-format +msgid "$%1$s input · $%2$s output per 1M tokens" +msgstr "100万トークンあたり 入力 $%1$s · 出力 $%2$s" -#: admin/partials/everyalt-options-display.php:37 +#: admin/partials/everyalt-options-display.php:101 +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 +#, php-format +msgid "%s pricing" +msgstr "%sの料金" + +#: admin/partials/everyalt-options-display.php:116 +msgid "API key" +msgstr "APIキー" + +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:127 +#, php-format +msgid "%s API key" +msgstr "%s APIキー" + +#: admin/partials/everyalt-options-display.php:131 +msgid "Key saved" +msgstr "キー保存済み" + +#: admin/partials/everyalt-options-display.php:131 +msgid "No key saved" +msgstr "キー未保存" + +#: admin/partials/everyalt-options-display.php:135 msgid "Leave blank to keep existing key" msgstr "既存のキーを維持する場合は空欄のままにしてください" -#: admin/partials/everyalt-options-display.php:38 +#: admin/partials/everyalt-options-display.php:135 +msgid "Paste your API key" +msgstr "APIキーを貼り付けてください" + +#: admin/partials/everyalt-options-display.php:136 msgid "Validate key" msgstr "キーを検証" -#: admin/partials/everyalt-options-display.php:41 -msgid "Alt text is generated via OpenAI (image is sent as base64, so it works on localhost and behind HTTP auth). Stored encrypted. You are charged by OpenAI for your usage; EveryAlt is free and never bills you." -msgstr "代替テキストはOpenAIで生成されます(画像はbase64で送信されるため、localhostやHTTP認証の内側でも動作します)。暗号化して保存されます。利用料はOpenAIから請求されます。EveryAltは無料で、請求することはありません。" +#. translators: %s: link to OpenAI API keys page +#: admin/partials/everyalt-options-display.php:142 +#, php-format +msgid "Sign in at %s." +msgstr "%s にサインインします。" -#: admin/partials/everyalt-options-display.php:41 -msgid "Generate an API key" -msgstr "APIキーを発行" +#: admin/partials/everyalt-options-display.php:143 +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 +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 +msgid "OpenAI API data usage" +msgstr "OpenAI APIのデータ利用" + +#. translators: %s: link to OpenAI data usage policy +#: admin/partials/everyalt-options-display.php:146 +#, 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 +#, php-format +msgid "Sign in to Google AI Studio at %s." +msgstr "%s でGoogle AI Studioにサインインします。" + +#: admin/partials/everyalt-options-display.php:150 +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:45 +#: admin/partials/everyalt-options-display.php:151 +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 +msgid "Gemini API terms" +msgstr "Gemini API利用規約" + +#. translators: %s: link to Gemini API terms +#: admin/partials/everyalt-options-display.php:153 +#, 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 +#, php-format +msgid "Sign in or create an account at %s." +msgstr "%s でサインインするか、アカウントを作成します。" + +#: admin/partials/everyalt-options-display.php:157 +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 +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 +msgid "Your images stay private." +msgstr "画像のプライバシーは守られます。" + +#: admin/partials/everyalt-options-display.php:163 +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 +msgid "DeepInfra data privacy" +msgstr "DeepInfraのデータプライバシー" + +#: admin/partials/everyalt-options-display.php:169 +msgid "Privacy policy" +msgstr "プライバシーポリシー" + +#: admin/partials/everyalt-options-display.php:170 +msgid "Trust center (SOC 2, ISO 27001)" +msgstr "トラストセンター(SOC 2、ISO 27001)" + +#: admin/partials/everyalt-options-display.php:179 +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 msgid "Auto-generate on upload" msgstr "アップロード時に自動生成" -#: admin/partials/everyalt-options-display.php:47 +#: admin/partials/everyalt-options-display.php:185 msgid "Automatically generate alt text when images are uploaded" msgstr "画像をアップロードしたときに自動で代替テキストを生成する" -#: admin/partials/everyalt-options-display.php:51 +#: admin/partials/everyalt-options-display.php:187 +msgid "Automatically generate image titles when images are uploaded" +msgstr "画像をアップロードしたときに自動で画像タイトルを生成する" + +#: admin/partials/everyalt-options-display.php:191 +#: admin/partials/everyalt-options-display.php:194 +msgid "New uploads" +msgstr "新規アップロード" + +#: admin/partials/everyalt-options-display.php:195 +msgid "Generate in the background (recommended): uploads finish right away" +msgstr "バックグラウンドで生成(推奨): アップロードはすぐに完了します" + +#: admin/partials/everyalt-options-display.php:196 +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 +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 +msgid "Decorative images" +msgstr "装飾画像" + +#: admin/partials/everyalt-options-display.php:204 +msgid "Leave alt text empty for purely decorative images" +msgstr "装飾目的のみの画像では代替テキストを空欄にする" + +#: admin/partials/everyalt-options-display.php:205 +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 +msgid "Monthly spending limit" +msgstr "月間利用上限額" + +#: admin/partials/everyalt-options-display.php:212 +msgid "None" +msgstr "なし" + +#: admin/partials/everyalt-options-display.php:213 +msgid "USD per month" +msgstr "USD/月" + +#. translators: %s: estimated amount spent this month, e.g. $0.42 +#: admin/partials/everyalt-options-display.php:219 +#, 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 +msgid "Existing posts" +msgstr "既存の投稿" + +#: admin/partials/everyalt-options-display.php:230 +msgid "Show Media Library alt text on images already in posts that have none" +msgstr "投稿内の代替テキストがない画像に、メディアライブラリの代替テキストを表示する" + +#: admin/partials/everyalt-options-display.php:231 +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 +msgid "Language" +msgstr "言語" + +#. translators: %s: site language name in English, e.g. German +#: admin/partials/everyalt-options-display.php:242 +#, php-format +msgid "Automatic (site language: %s)" +msgstr "自動(サイトの言語: %s)" + +#: admin/partials/everyalt-options-display.php:249 +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 msgid "Max completion tokens" msgstr "最大完了トークン数" -#: admin/partials/everyalt-options-display.php:54 -msgid "Maximum tokens the model can use for the response (including reasoning for models like gpt-5-nano). Default 1024. Leave empty to use default." -msgstr "モデルが応答に使用できる最大トークン数(gpt-5-nanoなどの推論を含む)。デフォルトは1024。空欄の場合はデフォルトを使用します。" - -#: admin/partials/everyalt-options-display.php:66 -msgid "Pricing: EveryAlt uses %1$s, currently the cheapest and most efficient model for this task. A reasonable estimate per image is about 200 input tokens and 500 output tokens, which works out to about %2$s per image." -msgstr "料金: EveryAltは%1$sを使用しています。このタスクでは現在最も安価で効率的なモデルです。画像1枚あたりの目安は入力約200トークン・出力約500トークンで、%2$s程度/画像です。" +#: admin/partials/everyalt-options-display.php:256 +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:76 +#: admin/partials/everyalt-options-display.php:260 msgid "Alt text prompt" msgstr "代替テキスト用プロンプト" -#: admin/partials/everyalt-options-display.php:84 +#: admin/partials/everyalt-options-display.php:268 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:89 +#: admin/partials/everyalt-options-display.php:272 +msgid "Image title prompt" +msgstr "画像タイトル用プロンプト" + +#: admin/partials/everyalt-options-display.php:280 +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 msgid "Save Settings" msgstr "設定を保存" -#: admin/partials/everyalt-options-display.php:101 +#: admin/partials/everyalt-options-display.php:294 +#, 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:105 -msgid "Please enter your OpenAI API key in the Settings tab first." -msgstr "まず設定タブでOpenAI APIキーを入力してください。" +#: admin/partials/everyalt-options-display.php:296 +#: admin/partials/everyalt-options-display.php:390 +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:107 +#: admin/partials/everyalt-options-display.php:298 msgid "No images without alt text found." msgstr "代替テキストのない画像は見つかりませんでした。" -#: admin/partials/everyalt-options-display.php:110 +#: admin/partials/everyalt-options-display.php:301 +#: admin/partials/everyalt-options-display.php:395 msgid "Select all" msgstr "すべて選択" -#: admin/partials/everyalt-options-display.php:111 +#: admin/partials/everyalt-options-display.php:302 +#: admin/partials/everyalt-options-display.php:396 msgid "Select none" msgstr "選択を解除" -#: admin/partials/everyalt-options-display.php:112 +#: admin/partials/everyalt-options-display.php:303 msgid "Generate alt text for selected" msgstr "選択した画像の代替テキストを生成" -#: admin/partials/everyalt-options-display.php:115 -msgid "Processing…" -msgstr "処理中…" - -#: admin/partials/everyalt-options-display.php:132 admin/partials/everyalt-options-display.php:161 +#. translators: %s: number of images +#: admin/partials/everyalt-options-display.php:307 +#: admin/partials/everyalt-options-display.php:401 +#, 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 +#, 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 +#, 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 msgid "Edit" msgstr "編集" -#: admin/partials/everyalt-options-display.php:145 -msgid "Images that already have alt text. Edit and save, or regenerate with EveryAlt." -msgstr "すでに代替テキストがある画像です。編集して保存するか、EveryAltで再生成できます。" +#: admin/partials/everyalt-options-display.php:342 +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:147 -msgid "Please enter your OpenAI API key in the Settings tab to use Regenerate." -msgstr "「再生成」を使うには、設定タブでOpenAI APIキーを入力してください。" +#: admin/partials/everyalt-options-display.php:344 +#: admin/partials/everyalt-options-display.php:438 +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:150 +#: admin/partials/everyalt-options-display.php:347 msgid "No images with alt text found." msgstr "代替テキストがある画像は見つかりませんでした。" -#: admin/partials/everyalt-options-display.php:165 +#: admin/partials/everyalt-options-display.php:360 +msgid "Decorative" +msgstr "装飾" + +#: admin/partials/everyalt-options-display.php:365 +msgid "Empty on purpose: screen readers skip this image." +msgstr "意図的に空欄: スクリーンリーダーはこの画像を読み飛ばします。" + +#: admin/partials/everyalt-options-display.php:367 +#: admin/partials/everyalt-options-display.php:457 msgid "Save" msgstr "保存" -#: admin/partials/everyalt-options-display.php:166 +#: admin/partials/everyalt-options-display.php:369 +msgid "Describe anyway" +msgstr "それでも説明を生成" + +#: admin/partials/everyalt-options-display.php:371 +#: admin/partials/everyalt-options-display.php:458 msgid "Regenerate" msgstr "再生成" -#: admin/partials/everyalt-options-display.php:178 +#: admin/partials/everyalt-options-display.php:388 +#, 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 +msgid "No images needing a title found." +msgstr "タイトルが必要な画像は見つかりませんでした。" + +#: admin/partials/everyalt-options-display.php:397 +msgid "Generate titles for selected" +msgstr "選択した画像のタイトルを生成" + +#: admin/partials/everyalt-options-display.php:436 +msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt." +msgstr "すでに独自のタイトルがある画像です。編集して保存するか、EveryAltで再生成できます。" + +#: admin/partials/everyalt-options-display.php:441 +msgid "No images with a custom title found." +msgstr "独自のタイトルがある画像は見つかりませんでした。" + +#: admin/partials/everyalt-options-display.php:473 +msgid "Spending" +msgstr "利用額" + +#. translators: 1: spent this month, 2: monthly limit +#: admin/partials/everyalt-options-display.php:484 +#, 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 +#, php-format +msgid "This month: %s (no limit set)." +msgstr "今月: %s(上限なし)。" + +#: admin/partials/everyalt-options-display.php:499 +msgid "Month" +msgstr "月" + +#: admin/partials/everyalt-options-display.php:500 +msgid "Requests" +msgstr "リクエスト数" + +#: admin/partials/everyalt-options-display.php:501 +msgid "Estimated cost" +msgstr "推定コスト" + +#: admin/partials/everyalt-options-display.php:502 +msgid "By model" +msgstr "モデル別" + +#: admin/partials/everyalt-options-display.php:526 +msgid "No spending recorded yet." +msgstr "まだ利用額の記録はありません。" + +#: admin/partials/everyalt-options-display.php:528 +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 msgid "Generation Log" msgstr "生成ログ" -#: admin/partials/everyalt-options-display.php:179 +#: admin/partials/everyalt-options-display.php:531 msgid "Last 100 alt text generation attempts (successes and failures)." msgstr "直近100件の代替テキスト生成の試行(成功・失敗)です。" -#: admin/partials/everyalt-options-display.php:182 +#: admin/partials/everyalt-options-display.php:534 msgid "Export as CSV" msgstr "CSVでエクスポート" -#: admin/partials/everyalt-options-display.php:190 +#: admin/partials/everyalt-options-display.php:542 msgid "Attachment" msgstr "添付" -#: admin/partials/everyalt-options-display.php:193 +#: admin/partials/everyalt-options-display.php:546 msgid "Cost" msgstr "コスト" -#: admin/partials/everyalt-options-display.php:244 +#: admin/partials/everyalt-options-display.php:598 msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log." msgstr "まだログにエントリがありません。一括タブで代替テキストを生成するか、画像をアップロードするとこのログに記録されます。" + +#: includes/class-everyalt-queue.php:199 +msgid "Image no longer exists." +msgstr "画像はもう存在しません。" + +#: includes/class-everyalt-queue.php:234 +msgid "(Gave up after several attempts.)" +msgstr "(複数回試行しましたが、中止しました。)" + +#: includes/class-everyalt-queue.php:238 +msgid "(Will retry automatically.)" +msgstr "(自動的に再試行します。)" + +#: includes/class-everyalt-queue.php:273 +msgid "Every minute (EveryAlt queue)" +msgstr "1分ごと(EveryAltキュー)" diff --git a/languages/everyalt-nl_NL.mo b/languages/everyalt-nl_NL.mo index 415c0ef..6011258 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 cd5f70b..329c30e 100644 --- a/languages/everyalt-nl_NL.po +++ b/languages/everyalt-nl_NL.po @@ -3,10 +3,10 @@ # This file is distributed under the same license as the EveryAlt package. msgid "" msgstr "" -"Project-Id-Version: EveryAlt 1.0\n" +"Project-Id-Version: EveryAlt 1.1.0\n" "Report-Msgid-Bugs-To: https://hdc.net\n" -"POT-Creation-Date: 2025-02-15 00:00+0000\n" -"PO-Revision-Date: 2025-02-15 00:00+0000\n" +"POT-Creation-Date: 2026-09-27 16:34+0000\n" +"PO-Revision-Date: 2026-09-27 00:00+0000\n" "Last-Translator: HDC \n" "Language-Team: Nederlands \n" "Language: nl_NL\n" @@ -17,91 +17,239 @@ msgstr "" "X-Domain: everyalt\n" "X-Generator: Manual\n" -#: admin/class-everyalt-admin.php:111 admin/partials/everyalt-options-display.php:189 +#. translators: %s: monthly spending limit, e.g. $5.00 +#: admin/class-everyalt-admin.php:85 +#, php-format +msgid "Skipped: monthly spending limit of %s reached. Generation resumes next month, or raise the limit in Settings." +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 msgid "Time" msgstr "Tijd" -#: admin/class-everyalt-admin.php:112 +#: admin/class-everyalt-admin.php:165 msgid "Attachment ID" msgstr "Bijlage-ID" -#: admin/class-everyalt-admin.php:113 admin/partials/everyalt-options-display.php:191 +#: admin/class-everyalt-admin.php:166 +#: admin/partials/everyalt-options-display.php:543 msgid "Status" msgstr "Status" -#: admin/class-everyalt-admin.php:114 admin/partials/everyalt-options-display.php:192 +#: admin/class-everyalt-admin.php:167 +#: admin/partials/everyalt-options-display.php:544 +msgid "Model" +msgstr "Model" + +#: admin/class-everyalt-admin.php:168 +#: admin/partials/everyalt-options-display.php:545 msgid "Message / Alt text" msgstr "Bericht / Alt-tekst" -#: admin/class-everyalt-admin.php:115 +#: admin/class-everyalt-admin.php:169 msgid "Cost (USD)" msgstr "Kosten (USD)" -#: admin/class-everyalt-admin.php:116 admin/partials/everyalt-options-display.php:194 +#: admin/class-everyalt-admin.php:170 +#: admin/partials/everyalt-options-display.php:547 msgid "Details" msgstr "Details" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:228 +#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432 +#: admin/partials/everyalt-options-display.php:583 +msgid "Error" +msgstr "Fout" + +#: admin/class-everyalt-admin.php:174 +#: admin/partials/everyalt-options-display.php:581 msgid "Success" msgstr "Geslaagd" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:230 -msgid "Error" -msgstr "Fout" +#. translators: 1: provider name(s), e.g. "OpenAI", 2: URL of the EveryAlt settings tab +#: admin/class-everyalt-admin.php:259 +#, php-format +msgid "EveryAlt can no longer read your saved %1$s API key, usually because the security keys in wp-config.php changed. Generation with that provider is paused until you re-enter the key." +msgstr "EveryAlt kan je opgeslagen API-sleutel voor %1$s niet meer lezen, meestal omdat de beveiligingssleutels in wp-config.php zijn gewijzigd. Genereren met die provider is gepauzeerd totdat je de sleutel opnieuw invoert." -#: admin/class-everyalt-admin.php:152 +#. translators: 1: spent this month, 2: monthly limit, 3: settings URL +#: admin/class-everyalt-admin.php:278 +#, php-format +msgid "EveryAlt has paused: this month’s estimated spend (%1$s) reached your monthly limit of %2$s. New images will be processed next month, or you can raise the limit." +msgstr "EveryAlt is gepauzeerd: de geschatte uitgaven van deze maand (%1$s) hebben je maandlimiet van %2$s bereikt. Nieuwe afbeeldingen worden volgende maand verwerkt, of je kunt de limiet verhogen." + +#: admin/class-everyalt-admin.php:293 msgid "You do not have permission to do this." msgstr "Je hebt geen toestemming om dit te doen." -#: admin/class-everyalt-admin.php:159 +#: admin/class-everyalt-admin.php:297 +msgid "Unknown provider." +msgstr "Onbekende provider." + +#: admin/class-everyalt-admin.php:304 msgid "Enter an API key in the field above, or save a key first to validate the stored key." msgstr "Voer boven een API-sleutel in, of sla eerst een sleutel op om de opgeslagen sleutel te valideren." -#: admin/class-everyalt-admin.php:162 +#: admin/class-everyalt-admin.php:307 msgid "API key is valid." msgstr "De API-sleutel is geldig." -#: admin/class-everyalt-admin.php:164 +#: admin/class-everyalt-admin.php:309 msgid "API key could not be validated. Check that the key is correct and has API access." msgstr "De API-sleutel kon niet worden gevalideerd. Controleer of de sleutel klopt en API-toegang heeft." -#: admin/class-everyalt-admin.php:342 +#: admin/class-everyalt-admin.php:423 +#, php-format +msgid "Generating in the background: %d remaining. You can leave this page; it continues on its own." +msgstr "Bezig met genereren op de achtergrond: nog %d te gaan. Je kunt deze pagina verlaten; het gaat vanzelf verder." + +#: admin/class-everyalt-admin.php:424 +#, php-format +msgid "%d waiting to retry. They will be tried again automatically." +msgstr "%d wachten op een nieuwe poging. Ze worden automatisch opnieuw geprobeerd." + +#: admin/class-everyalt-admin.php:425 +msgid "All done." +msgstr "Helemaal klaar." + +#: admin/class-everyalt-admin.php:426 +msgid "Paused: monthly spending limit reached. Raise the limit in Settings or wait until next month." +msgstr "Gepauzeerd: maandelijkse bestedingslimiet bereikt. Verhoog de limiet in Instellingen of wacht tot volgende maand." + +#: admin/class-everyalt-admin.php:427 +msgid "Paused: add an API key for the selected model in Settings." +msgstr "Gepauzeerd: voeg in Instellingen een API-sleutel toe voor het geselecteerde model." + +#: admin/class-everyalt-admin.php:428 +#, php-format +msgid "Added %d images to the queue." +msgstr "%d afbeeldingen aan de wachtrij toegevoegd." + +#: admin/class-everyalt-admin.php:429 +msgid "Those images were already queued." +msgstr "Die afbeeldingen stonden al in de wachtrij." + +#: admin/class-everyalt-admin.php:430 +msgid "Queue cleared." +msgstr "Wachtrij gewist." + +#: admin/class-everyalt-admin.php:431 +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 +msgid "Error:" +msgstr "Fout:" + +#: admin/class-everyalt-admin.php:434 +msgid "Request failed" +msgstr "Verzoek mislukt" + +#: admin/class-everyalt-admin.php:435 +msgid "Saved!" +msgstr "Opgeslagen!" + +#: admin/class-everyalt-admin.php:436 +msgid "Save failed" +msgstr "Opslaan mislukt" + +#: admin/class-everyalt-admin.php:437 +msgid "Regenerated!" +msgstr "Opnieuw gegenereerd!" + +#: admin/class-everyalt-admin.php:438 +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 +msgid "EveryAlt" +msgstr "EveryAlt" + +#: admin/class-everyalt-admin.php:452 +msgid "Generate alt text with EveryAlt" +msgstr "Alt-tekst genereren met EveryAlt" + +#: admin/class-everyalt-admin.php:453 +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 +msgid "Generating…" +msgstr "Bezig met genereren…" + +#: admin/class-everyalt-admin.php:455 +msgid "Alt text generated." +msgstr "Alt-tekst gegenereerd." + +#: admin/class-everyalt-admin.php:456 +msgid "Could not generate alt text." +msgstr "Kon geen alt-tekst genereren." + +#: admin/class-everyalt-admin.php:457 +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 msgid "Skipped: no API key or auto-generate disabled." msgstr "Overgeslagen: geen API-sleutel of automatisch genereren uitgeschakeld." -#: admin/class-everyalt-admin.php:346 +#: admin/class-everyalt-admin.php:583 msgid "Skipped: API key validation failed." msgstr "Overgeslagen: validatie van API-sleutel mislukt." -#: admin/class-everyalt-admin.php:350 +#: admin/class-everyalt-admin.php:593 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:366 +#: admin/class-everyalt-admin.php:616 +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 msgid "No alt text returned from API." msgstr "De API heeft geen alt-tekst teruggegeven." -#: admin/class-everyalt-admin.php:551 admin/partials/everyalt-options-display.php:14 admin/partials/everyalt-options-display.php:29 +#: admin/class-everyalt-admin.php:649 +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 +msgid "[Title] Skipped: API key validation failed." +msgstr "[Titel] Overgeslagen: validatie van API-sleutel mislukt." + +#: admin/class-everyalt-admin.php:664 +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 +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 msgid "Settings" msgstr "Instellingen" -#: admin/class-everyalt-admin.php:570 admin/partials/everyalt-options-display.php:11 -msgid "EveryAlt" -msgstr "EveryAlt" - -#: admin/class-everyalt-admin.php:752 +#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377 msgid "Generation failed." msgstr "Genereren mislukt." -#: admin/class-everyalt-admin.php:786 +#: admin/class-everyalt-admin.php:1450 msgid "Alt successfully updated." msgstr "Alt-tekst succesvol bijgewerkt." -#: admin/class-everyalt-openai.php:134 +#: admin/class-everyalt-admin.php:1466 +msgid "Title successfully updated." +msgstr "Titel succesvol bijgewerkt." + +#: 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 "De afbeelding kon niet voor de API worden gecodeerd. Op sommige servers faalt base64-codering bij grote afbeeldingen of door PHP-limieten. Probeer een kleinere afbeelding of verhoog de PHP-geheugenlimiet van je server." -#: admin/class-everyalt-openai.php:243 +#: admin/class-everyalt-openai.php:392 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." @@ -109,158 +257,494 @@ msgstr "Het antwoord is afgekapt (max. tokens bereikt). Verhoog Max. voltooiings msgid "Secondary menu" msgstr "Secundair menu" -#: admin/partials/everyalt-options-display.php:15 admin/partials/everyalt-options-display.php:100 +#: 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:144 +#: 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" -#: admin/partials/everyalt-options-display.php:24 -msgid "EveryAlt is a free, open-source project created by %1$sHDC%2$s, a web dev firm for high-stakes projects and AI builds." -msgstr "EveryAlt is een gratis, open-source project van %1$sHDC%2$s, een webbureau voor projecten met hoge inzet en AI-ontwikkeling." - -#: admin/partials/everyalt-options-display.php:35 -msgid "EveryAlt also has a free Chrome extension and Shopify app. Check out our %1$sDigital Agency Plan%2$s if you manage lots of sites and want to set up limits and permissions for your clients or team." -msgstr "EveryAlt heeft ook een gratis Chrome-extensie en Shopify-app. Bekijk ons %1$sDigital Agency Plan%2$s als je veel sites beheert en limieten en rechten voor je klanten of team wilt instellen." +#. 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 +#, 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:21 +#: admin/partials/everyalt-options-display.php:41 msgid "Settings saved." msgstr "Instellingen opgeslagen." -#: admin/partials/everyalt-options-display.php:24 -msgid "The OpenAI API key you entered could not be validated. Please check the key and try again. It was not saved." -msgstr "De ingevoerde OpenAI API-sleutel kon niet worden gevalideerd. Controleer de sleutel en probeer opnieuw. Hij is niet opgeslagen." +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:47 +#, 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 +msgid "Clear queue" +msgstr "Wachtrij wissen" + +#: admin/partials/everyalt-options-display.php:74 +#: admin/partials/everyalt-options-display.php:77 +msgid "AI model" +msgstr "AI-model" -#: admin/partials/everyalt-options-display.php:34 -msgid "OpenAI API Key" -msgstr "OpenAI API-sleutel" +#. translators: 1: input price in USD, 2: output price in USD +#: admin/partials/everyalt-options-display.php:90 +#, 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:37 +#: admin/partials/everyalt-options-display.php:101 +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 +#, php-format +msgid "%s pricing" +msgstr "Prijzen van %s" + +#: admin/partials/everyalt-options-display.php:116 +msgid "API key" +msgstr "API-sleutel" + +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:127 +#, php-format +msgid "%s API key" +msgstr "%s API-sleutel" + +#: admin/partials/everyalt-options-display.php:131 +msgid "Key saved" +msgstr "Sleutel opgeslagen" + +#: admin/partials/everyalt-options-display.php:131 +msgid "No key saved" +msgstr "Geen sleutel opgeslagen" + +#: admin/partials/everyalt-options-display.php:135 msgid "Leave blank to keep existing key" msgstr "Laat leeg om de bestaande sleutel te behouden" -#: admin/partials/everyalt-options-display.php:38 +#: admin/partials/everyalt-options-display.php:135 +msgid "Paste your API key" +msgstr "Plak je API-sleutel" + +#: admin/partials/everyalt-options-display.php:136 msgid "Validate key" msgstr "Sleutel valideren" -#: admin/partials/everyalt-options-display.php:41 -msgid "Alt text is generated via OpenAI (image is sent as base64, so it works on localhost and behind HTTP auth). Stored encrypted. You are charged by OpenAI for your usage; EveryAlt is free and never bills you." -msgstr "Alt-tekst wordt gegenereerd via OpenAI (afbeelding wordt als base64 verzonden, werkt dus op localhost en achter HTTP-auth). Versleuteld opgeslagen. OpenAI rekent je voor gebruik; EveryAlt is gratis en rekent je nooit." +#. translators: %s: link to OpenAI API keys page +#: admin/partials/everyalt-options-display.php:142 +#, php-format +msgid "Sign in at %s." +msgstr "Log in op %s." -#: admin/partials/everyalt-options-display.php:41 -msgid "Generate an API key" -msgstr "API-sleutel genereren" +#: admin/partials/everyalt-options-display.php:143 +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 +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 +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 +#, 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 +#, 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 +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:45 +#: admin/partials/everyalt-options-display.php:151 +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 +msgid "Gemini API terms" +msgstr "Gemini API-voorwaarden" + +#. translators: %s: link to Gemini API terms +#: admin/partials/everyalt-options-display.php:153 +#, 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 +#, 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 +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 +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 +msgid "Your images stay private." +msgstr "Je afbeeldingen blijven privé." + +#: admin/partials/everyalt-options-display.php:163 +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 +msgid "DeepInfra data privacy" +msgstr "Gegevensprivacy bij DeepInfra" + +#: admin/partials/everyalt-options-display.php:169 +msgid "Privacy policy" +msgstr "Privacybeleid" + +#: admin/partials/everyalt-options-display.php:170 +msgid "Trust center (SOC 2, ISO 27001)" +msgstr "Trustcenter (SOC 2, ISO 27001)" + +#: admin/partials/everyalt-options-display.php:179 +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 msgid "Auto-generate on upload" msgstr "Automatisch genereren bij upload" -#: admin/partials/everyalt-options-display.php:47 +#: admin/partials/everyalt-options-display.php:185 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:51 +#: admin/partials/everyalt-options-display.php:187 +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 +msgid "New uploads" +msgstr "Nieuwe uploads" + +#: admin/partials/everyalt-options-display.php:195 +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 +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 +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 +msgid "Decorative images" +msgstr "Decoratieve afbeeldingen" + +#: admin/partials/everyalt-options-display.php:204 +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 +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 +msgid "Monthly spending limit" +msgstr "Maandelijkse bestedingslimiet" + +#: admin/partials/everyalt-options-display.php:212 +msgid "None" +msgstr "Geen" + +#: admin/partials/everyalt-options-display.php:213 +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 +#, 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 +msgid "Existing posts" +msgstr "Bestaande berichten" + +#: admin/partials/everyalt-options-display.php:230 +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 +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 +msgid "Language" +msgstr "Taal" + +#. translators: %s: site language name in English, e.g. German +#: admin/partials/everyalt-options-display.php:242 +#, php-format +msgid "Automatic (site language: %s)" +msgstr "Automatisch (sitetaal: %s)" + +#: admin/partials/everyalt-options-display.php:249 +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 msgid "Max completion tokens" msgstr "Max. voltooiingstokens" -#: admin/partials/everyalt-options-display.php:54 -msgid "Maximum tokens the model can use for the response (including reasoning for models like gpt-5-nano). Default 1024. Leave empty to use default." -msgstr "Maximaal aantal tokens dat het model voor het antwoord mag gebruiken (inclusief redeneren bij modellen als gpt-5-nano). Standaard 1024. Laat leeg voor standaard." - -#: admin/partials/everyalt-options-display.php:66 -msgid "Pricing: EveryAlt uses %1$s, currently the cheapest and most efficient model for this task. A reasonable estimate per image is about 200 input tokens and 500 output tokens, which works out to about %2$s per image." -msgstr "Prijzen: EveryAlt gebruikt %1$s, momenteel het goedkoopste en efficiëntste model voor deze taak. Een redelijke schatting per afbeelding is ongeveer 200 invoertokens en 500 uitvoertokens, dus ongeveer %2$s per afbeelding." +#: admin/partials/everyalt-options-display.php:256 +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:76 +#: admin/partials/everyalt-options-display.php:260 msgid "Alt text prompt" msgstr "Alt-tekstprompt" -#: admin/partials/everyalt-options-display.php:84 +#: admin/partials/everyalt-options-display.php:268 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:89 +#: admin/partials/everyalt-options-display.php:272 +msgid "Image title prompt" +msgstr "Afbeeldingstitelprompt" + +#: admin/partials/everyalt-options-display.php:280 +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 msgid "Save Settings" msgstr "Instellingen opslaan" -#: admin/partials/everyalt-options-display.php:101 +#: admin/partials/everyalt-options-display.php:294 +#, 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:105 -msgid "Please enter your OpenAI API key in the Settings tab first." -msgstr "Voer eerst je OpenAI API-sleutel in op het tabblad Instellingen." +#: admin/partials/everyalt-options-display.php:296 +#: admin/partials/everyalt-options-display.php:390 +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:107 +#: admin/partials/everyalt-options-display.php:298 msgid "No images without alt text found." msgstr "Geen afbeeldingen zonder alt-tekst gevonden." -#: admin/partials/everyalt-options-display.php:110 +#: admin/partials/everyalt-options-display.php:301 +#: admin/partials/everyalt-options-display.php:395 msgid "Select all" msgstr "Alles selecteren" -#: admin/partials/everyalt-options-display.php:111 +#: admin/partials/everyalt-options-display.php:302 +#: admin/partials/everyalt-options-display.php:396 msgid "Select none" msgstr "Niets selecteren" -#: admin/partials/everyalt-options-display.php:112 +#: admin/partials/everyalt-options-display.php:303 msgid "Generate alt text for selected" msgstr "Alt-tekst genereren voor geselecteerde" -#: admin/partials/everyalt-options-display.php:115 -msgid "Processing…" -msgstr "Verwerken…" - -#: admin/partials/everyalt-options-display.php:132 admin/partials/everyalt-options-display.php:161 +#. translators: %s: number of images +#: admin/partials/everyalt-options-display.php:307 +#: admin/partials/everyalt-options-display.php:401 +#, php-format +msgid "Generate for all %s image" +msgid_plural "Generate for all %s images" +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 +#, php-format +msgid "%s image" +msgid_plural "%s images" +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 +#, 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 msgid "Edit" msgstr "Bewerken" -#: admin/partials/everyalt-options-display.php:145 -msgid "Images that already have alt text. Edit and save, or regenerate with EveryAlt." -msgstr "Afbeeldingen die al alt-tekst hebben. Bewerk en sla op, of genereer opnieuw met EveryAlt." +#: admin/partials/everyalt-options-display.php:342 +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:147 -msgid "Please enter your OpenAI API key in the Settings tab to use Regenerate." -msgstr "Voer je OpenAI API-sleutel in op het tabblad Instellingen om Opnieuw genereren te gebruiken." +#: admin/partials/everyalt-options-display.php:344 +#: admin/partials/everyalt-options-display.php:438 +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:150 +#: admin/partials/everyalt-options-display.php:347 msgid "No images with alt text found." msgstr "Geen afbeeldingen met alt-tekst gevonden." -#: admin/partials/everyalt-options-display.php:165 +#: admin/partials/everyalt-options-display.php:360 +msgid "Decorative" +msgstr "Decoratief" + +#: admin/partials/everyalt-options-display.php:365 +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 msgid "Save" msgstr "Opslaan" -#: admin/partials/everyalt-options-display.php:166 +#: admin/partials/everyalt-options-display.php:369 +msgid "Describe anyway" +msgstr "Toch beschrijven" + +#: admin/partials/everyalt-options-display.php:371 +#: admin/partials/everyalt-options-display.php:458 msgid "Regenerate" msgstr "Opnieuw genereren" -#: admin/partials/everyalt-options-display.php:178 +#: admin/partials/everyalt-options-display.php:388 +#, 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 +msgid "No images needing a title found." +msgstr "Geen afbeeldingen gevonden die een titel nodig hebben." + +#: admin/partials/everyalt-options-display.php:397 +msgid "Generate titles for selected" +msgstr "Titels genereren voor geselecteerde" + +#: admin/partials/everyalt-options-display.php:436 +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 +msgid "No images with a custom title found." +msgstr "Geen afbeeldingen met een eigen titel gevonden." + +#: admin/partials/everyalt-options-display.php:473 +msgid "Spending" +msgstr "Uitgaven" + +#. translators: 1: spent this month, 2: monthly limit +#: admin/partials/everyalt-options-display.php:484 +#, 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 +#, php-format +msgid "This month: %s (no limit set)." +msgstr "Deze maand: %s (geen limiet ingesteld)." + +#: admin/partials/everyalt-options-display.php:499 +msgid "Month" +msgstr "Maand" + +#: admin/partials/everyalt-options-display.php:500 +msgid "Requests" +msgstr "Verzoeken" + +#: admin/partials/everyalt-options-display.php:501 +msgid "Estimated cost" +msgstr "Geschatte kosten" + +#: admin/partials/everyalt-options-display.php:502 +msgid "By model" +msgstr "Per model" + +#: admin/partials/everyalt-options-display.php:526 +msgid "No spending recorded yet." +msgstr "Nog geen uitgaven geregistreerd." + +#: admin/partials/everyalt-options-display.php:528 +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 msgid "Generation Log" msgstr "Generatielogboek" -#: admin/partials/everyalt-options-display.php:179 +#: admin/partials/everyalt-options-display.php:531 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:182 +#: admin/partials/everyalt-options-display.php:534 msgid "Export as CSV" msgstr "Exporteren als CSV" -#: admin/partials/everyalt-options-display.php:190 +#: admin/partials/everyalt-options-display.php:542 msgid "Attachment" msgstr "Bijlage" -#: admin/partials/everyalt-options-display.php:193 +#: admin/partials/everyalt-options-display.php:546 msgid "Cost" msgstr "Kosten" -#: admin/partials/everyalt-options-display.php:244 +#: admin/partials/everyalt-options-display.php:598 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." + +#: includes/class-everyalt-queue.php:199 +msgid "Image no longer exists." +msgstr "Afbeelding bestaat niet meer." + +#: includes/class-everyalt-queue.php:234 +msgid "(Gave up after several attempts.)" +msgstr "(Opgegeven na meerdere pogingen.)" + +#: includes/class-everyalt-queue.php:238 +msgid "(Will retry automatically.)" +msgstr "(Wordt automatisch opnieuw geprobeerd.)" + +#: includes/class-everyalt-queue.php:273 +msgid "Every minute (EveryAlt queue)" +msgstr "Elke minuut (EveryAlt-wachtrij)" diff --git a/languages/everyalt-pt_BR.mo b/languages/everyalt-pt_BR.mo index d3bfa17..573b82c 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 a49d9e7..af39284 100644 --- a/languages/everyalt-pt_BR.po +++ b/languages/everyalt-pt_BR.po @@ -3,10 +3,10 @@ # This file is distributed under the same license as the EveryAlt package. msgid "" msgstr "" -"Project-Id-Version: EveryAlt 1.0\n" +"Project-Id-Version: EveryAlt 1.1.0\n" "Report-Msgid-Bugs-To: https://hdc.net\n" -"POT-Creation-Date: 2025-02-15 00:00+0000\n" -"PO-Revision-Date: 2025-02-15 00:00+0000\n" +"POT-Creation-Date: 2026-09-27 16:34+0000\n" +"PO-Revision-Date: 2026-09-27 00:00+0000\n" "Last-Translator: HDC \n" "Language-Team: Português do Brasil \n" "Language: pt_BR\n" @@ -17,91 +17,239 @@ msgstr "" "X-Domain: everyalt\n" "X-Generator: Manual\n" -#: admin/class-everyalt-admin.php:111 admin/partials/everyalt-options-display.php:189 +#. translators: %s: monthly spending limit, e.g. $5.00 +#: admin/class-everyalt-admin.php:85 +#, php-format +msgid "Skipped: monthly spending limit of %s reached. Generation resumes next month, or raise the limit in Settings." +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 msgid "Time" msgstr "Horário" -#: admin/class-everyalt-admin.php:112 +#: admin/class-everyalt-admin.php:165 msgid "Attachment ID" msgstr "ID do anexo" -#: admin/class-everyalt-admin.php:113 admin/partials/everyalt-options-display.php:191 +#: admin/class-everyalt-admin.php:166 +#: admin/partials/everyalt-options-display.php:543 msgid "Status" msgstr "Status" -#: admin/class-everyalt-admin.php:114 admin/partials/everyalt-options-display.php:192 +#: admin/class-everyalt-admin.php:167 +#: admin/partials/everyalt-options-display.php:544 +msgid "Model" +msgstr "Modelo" + +#: admin/class-everyalt-admin.php:168 +#: admin/partials/everyalt-options-display.php:545 msgid "Message / Alt text" msgstr "Mensagem / Texto alternativo" -#: admin/class-everyalt-admin.php:115 +#: admin/class-everyalt-admin.php:169 msgid "Cost (USD)" msgstr "Custo (USD)" -#: admin/class-everyalt-admin.php:116 admin/partials/everyalt-options-display.php:194 +#: admin/class-everyalt-admin.php:170 +#: admin/partials/everyalt-options-display.php:547 msgid "Details" msgstr "Detalhes" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:228 +#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432 +#: admin/partials/everyalt-options-display.php:583 +msgid "Error" +msgstr "Erro" + +#: admin/class-everyalt-admin.php:174 +#: admin/partials/everyalt-options-display.php:581 msgid "Success" msgstr "Sucesso" -#: admin/class-everyalt-admin.php:120 admin/partials/everyalt-options-display.php:230 -msgid "Error" -msgstr "Erro" +#. translators: 1: provider name(s), e.g. "OpenAI", 2: URL of the EveryAlt settings tab +#: admin/class-everyalt-admin.php:259 +#, php-format +msgid "EveryAlt can no longer read your saved %1$s API key, usually because the security keys in wp-config.php changed. Generation with that provider is paused until you re-enter the key." +msgstr "O EveryAlt não consegue mais ler a chave de API de %1$s que você salvou, geralmente porque as chaves de segurança no wp-config.php foram alteradas. A geração com esse provedor está pausada até você digitar a chave novamente." -#: admin/class-everyalt-admin.php:152 +#. translators: 1: spent this month, 2: monthly limit, 3: settings URL +#: admin/class-everyalt-admin.php:278 +#, php-format +msgid "EveryAlt has paused: this month’s estimated spend (%1$s) reached your monthly limit of %2$s. New images will be processed next month, or you can raise the limit." +msgstr "O EveryAlt foi pausado: o gasto estimado deste mês (%1$s) atingiu seu limite mensal de %2$s. Novas imagens serão processadas no próximo mês, ou você pode aumentar o limite." + +#: admin/class-everyalt-admin.php:293 msgid "You do not have permission to do this." msgstr "Você não tem permissão para fazer isso." -#: admin/class-everyalt-admin.php:159 +#: admin/class-everyalt-admin.php:297 +msgid "Unknown provider." +msgstr "Provedor desconhecido." + +#: admin/class-everyalt-admin.php:304 msgid "Enter an API key in the field above, or save a key first to validate the stored key." msgstr "Digite uma chave de API no campo acima ou salve uma chave primeiro para validar a chave armazenada." -#: admin/class-everyalt-admin.php:162 +#: admin/class-everyalt-admin.php:307 msgid "API key is valid." msgstr "A chave de API é válida." -#: admin/class-everyalt-admin.php:164 +#: admin/class-everyalt-admin.php:309 msgid "API key could not be validated. Check that the key is correct and has API access." msgstr "A chave de API não pôde ser validada. Verifique se a chave está correta e tem acesso à API." -#: admin/class-everyalt-admin.php:342 +#: admin/class-everyalt-admin.php:423 +#, php-format +msgid "Generating in the background: %d remaining. You can leave this page; it continues on its own." +msgstr "Gerando em segundo plano: %d restantes. Você pode sair desta página; o processo continua sozinho." + +#: admin/class-everyalt-admin.php:424 +#, php-format +msgid "%d waiting to retry. They will be tried again automatically." +msgstr "%d aguardando nova tentativa, que será feita automaticamente." + +#: admin/class-everyalt-admin.php:425 +msgid "All done." +msgstr "Tudo pronto." + +#: admin/class-everyalt-admin.php:426 +msgid "Paused: monthly spending limit reached. Raise the limit in Settings or wait until next month." +msgstr "Pausado: limite de gastos mensal atingido. Aumente o limite em Configurações ou aguarde até o próximo mês." + +#: admin/class-everyalt-admin.php:427 +msgid "Paused: add an API key for the selected model in Settings." +msgstr "Pausado: adicione uma chave de API para o modelo selecionado em Configurações." + +#: admin/class-everyalt-admin.php:428 +#, php-format +msgid "Added %d images to the queue." +msgstr "%d imagens adicionadas à fila." + +#: admin/class-everyalt-admin.php:429 +msgid "Those images were already queued." +msgstr "Essas imagens já estavam na fila." + +#: admin/class-everyalt-admin.php:430 +msgid "Queue cleared." +msgstr "Fila limpa." + +#: admin/class-everyalt-admin.php:431 +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 +msgid "Error:" +msgstr "Erro:" + +#: admin/class-everyalt-admin.php:434 +msgid "Request failed" +msgstr "A solicitação falhou" + +#: admin/class-everyalt-admin.php:435 +msgid "Saved!" +msgstr "Salvo!" + +#: admin/class-everyalt-admin.php:436 +msgid "Save failed" +msgstr "Falha ao salvar" + +#: admin/class-everyalt-admin.php:437 +msgid "Regenerated!" +msgstr "Regenerado!" + +#: admin/class-everyalt-admin.php:438 +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 +msgid "EveryAlt" +msgstr "EveryAlt" + +#: admin/class-everyalt-admin.php:452 +msgid "Generate alt text with EveryAlt" +msgstr "Gerar texto alternativo com EveryAlt" + +#: admin/class-everyalt-admin.php:453 +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 +msgid "Generating…" +msgstr "Gerando…" + +#: admin/class-everyalt-admin.php:455 +msgid "Alt text generated." +msgstr "Texto alternativo gerado." + +#: admin/class-everyalt-admin.php:456 +msgid "Could not generate alt text." +msgstr "Não foi possível gerar o texto alternativo." + +#: admin/class-everyalt-admin.php:457 +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 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:346 +#: admin/class-everyalt-admin.php:583 msgid "Skipped: API key validation failed." msgstr "Ignorado: a validação da chave de API falhou." -#: admin/class-everyalt-admin.php:350 +#: admin/class-everyalt-admin.php:593 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:366 +#: admin/class-everyalt-admin.php:616 +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 msgid "No alt text returned from API." msgstr "A API não retornou texto alternativo." -#: admin/class-everyalt-admin.php:551 admin/partials/everyalt-options-display.php:14 admin/partials/everyalt-options-display.php:29 +#: admin/class-everyalt-admin.php:649 +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 +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 +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 +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 msgid "Settings" msgstr "Configurações" -#: admin/class-everyalt-admin.php:570 admin/partials/everyalt-options-display.php:11 -msgid "EveryAlt" -msgstr "EveryAlt" - -#: admin/class-everyalt-admin.php:752 +#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377 msgid "Generation failed." msgstr "A geração falhou." -#: admin/class-everyalt-admin.php:786 +#: admin/class-everyalt-admin.php:1450 msgid "Alt successfully updated." msgstr "Texto alternativo atualizado com sucesso." -#: admin/class-everyalt-openai.php:134 +#: admin/class-everyalt-admin.php:1466 +msgid "Title successfully updated." +msgstr "Título atualizado com sucesso." + +#: 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 "A imagem não pôde ser codificada para a API. Em alguns servidores, a codificação base64 falha para imagens grandes ou por limites do PHP. Tente uma imagem menor ou aumente o limite de memória PHP do servidor." -#: admin/class-everyalt-openai.php:243 +#: admin/class-everyalt-openai.php:392 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." @@ -109,158 +257,494 @@ msgstr "A resposta foi cortada (limite de tokens atingido). Aumente os tokens m msgid "Secondary menu" msgstr "Menu secundário" -#: admin/partials/everyalt-options-display.php:15 admin/partials/everyalt-options-display.php:100 +#: 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:144 +#: 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" -#: admin/partials/everyalt-options-display.php:24 -msgid "EveryAlt is a free, open-source project created by %1$sHDC%2$s, a web dev firm for high-stakes projects and AI builds." -msgstr "EveryAlt é um projeto gratuito e de código aberto criado pela %1$sHDC%2$s, uma agência de desenvolvimento web para projetos de alto impacto e desenvolvimentos com IA." - -#: admin/partials/everyalt-options-display.php:35 -msgid "EveryAlt also has a free Chrome extension and Shopify app. Check out our %1$sDigital Agency Plan%2$s if you manage lots of sites and want to set up limits and permissions for your clients or team." -msgstr "O EveryAlt também tem uma extensão gratuita para Chrome e um app para Shopify. Conheça nosso %1$sPlano para Agências Digitais%2$s se você gerencia muitos sites e quer definir limites e permissões para seus clientes ou equipe." +#. 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 +#, 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:21 +#: admin/partials/everyalt-options-display.php:41 msgid "Settings saved." msgstr "Configurações salvas." -#: admin/partials/everyalt-options-display.php:24 -msgid "The OpenAI API key you entered could not be validated. Please check the key and try again. It was not saved." -msgstr "A chave de API da OpenAI que você digitou não pôde ser validada. Verifique a chave e tente novamente. Ela não foi salva." +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:47 +#, 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 +msgid "Clear queue" +msgstr "Limpar fila" + +#: admin/partials/everyalt-options-display.php:74 +#: admin/partials/everyalt-options-display.php:77 +msgid "AI model" +msgstr "Modelo de IA" -#: admin/partials/everyalt-options-display.php:34 -msgid "OpenAI API Key" -msgstr "Chave de API OpenAI" +#. translators: 1: input price in USD, 2: output price in USD +#: admin/partials/everyalt-options-display.php:90 +#, 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:37 +#: admin/partials/everyalt-options-display.php:101 +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 +#, php-format +msgid "%s pricing" +msgstr "Preços de %s" + +#: admin/partials/everyalt-options-display.php:116 +msgid "API key" +msgstr "Chave de API" + +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:127 +#, php-format +msgid "%s API key" +msgstr "Chave de API de %s" + +#: admin/partials/everyalt-options-display.php:131 +msgid "Key saved" +msgstr "Chave salva" + +#: admin/partials/everyalt-options-display.php:131 +msgid "No key saved" +msgstr "Nenhuma chave salva" + +#: admin/partials/everyalt-options-display.php:135 msgid "Leave blank to keep existing key" msgstr "Deixe em branco para manter a chave atual" -#: admin/partials/everyalt-options-display.php:38 +#: admin/partials/everyalt-options-display.php:135 +msgid "Paste your API key" +msgstr "Cole sua chave de API" + +#: admin/partials/everyalt-options-display.php:136 msgid "Validate key" msgstr "Validar chave" -#: admin/partials/everyalt-options-display.php:41 -msgid "Alt text is generated via OpenAI (image is sent as base64, so it works on localhost and behind HTTP auth). Stored encrypted. You are charged by OpenAI for your usage; EveryAlt is free and never bills you." -msgstr "O texto alternativo é gerado via OpenAI (a imagem é enviada em base64, então funciona em localhost e atrás de autenticação HTTP). Armazenado criptografado. A OpenAI cobra pelo seu uso; o EveryAlt é gratuito e nunca cobra você." +#. translators: %s: link to OpenAI API keys page +#: admin/partials/everyalt-options-display.php:142 +#, php-format +msgid "Sign in at %s." +msgstr "Faça login em %s." -#: admin/partials/everyalt-options-display.php:41 -msgid "Generate an API key" -msgstr "Gerar uma chave de API" +#: admin/partials/everyalt-options-display.php:143 +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 +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 +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 +#, 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 +#, 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 +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:45 +#: admin/partials/everyalt-options-display.php:151 +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 +msgid "Gemini API terms" +msgstr "Termos da API do Gemini" + +#. translators: %s: link to Gemini API terms +#: admin/partials/everyalt-options-display.php:153 +#, 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 +#, 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 +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 +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 +msgid "Your images stay private." +msgstr "Suas imagens permanecem privadas." + +#: admin/partials/everyalt-options-display.php:163 +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 +msgid "DeepInfra data privacy" +msgstr "Privacidade de dados da DeepInfra" + +#: admin/partials/everyalt-options-display.php:169 +msgid "Privacy policy" +msgstr "Política de privacidade" + +#: admin/partials/everyalt-options-display.php:170 +msgid "Trust center (SOC 2, ISO 27001)" +msgstr "Central de confiança (SOC 2, ISO 27001)" + +#: admin/partials/everyalt-options-display.php:179 +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 msgid "Auto-generate on upload" msgstr "Gerar automaticamente no envio" -#: admin/partials/everyalt-options-display.php:47 +#: admin/partials/everyalt-options-display.php:185 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:51 +#: admin/partials/everyalt-options-display.php:187 +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 +msgid "New uploads" +msgstr "Novos envios" + +#: admin/partials/everyalt-options-display.php:195 +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 +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 +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 +msgid "Decorative images" +msgstr "Imagens decorativas" + +#: admin/partials/everyalt-options-display.php:204 +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 +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 +msgid "Monthly spending limit" +msgstr "Limite de gastos mensal" + +#: admin/partials/everyalt-options-display.php:212 +msgid "None" +msgstr "Nenhum" + +#: admin/partials/everyalt-options-display.php:213 +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 +#, 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 +msgid "Existing posts" +msgstr "Posts existentes" + +#: admin/partials/everyalt-options-display.php:230 +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 +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 +msgid "Language" +msgstr "Idioma" + +#. translators: %s: site language name in English, e.g. German +#: admin/partials/everyalt-options-display.php:242 +#, php-format +msgid "Automatic (site language: %s)" +msgstr "Automático (idioma do site: %s)" + +#: admin/partials/everyalt-options-display.php:249 +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 msgid "Max completion tokens" msgstr "Tokens máximos de conclusão" -#: admin/partials/everyalt-options-display.php:54 -msgid "Maximum tokens the model can use for the response (including reasoning for models like gpt-5-nano). Default 1024. Leave empty to use default." -msgstr "Número máximo de tokens que o modelo pode usar na resposta (incluindo raciocínio para modelos como gpt-5-nano). Padrão 1024. Deixe vazio para usar o padrão." - -#: admin/partials/everyalt-options-display.php:66 -msgid "Pricing: EveryAlt uses %1$s, currently the cheapest and most efficient model for this task. A reasonable estimate per image is about 200 input tokens and 500 output tokens, which works out to about %2$s per image." -msgstr "Preços: o EveryAlt usa %1$s, atualmente o modelo mais barato e eficiente para esta tarefa. Uma estimativa razoável por imagem é cerca de 200 tokens de entrada e 500 de saída, ou seja, cerca de %2$s por imagem." +#: admin/partials/everyalt-options-display.php:256 +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:76 +#: admin/partials/everyalt-options-display.php:260 msgid "Alt text prompt" msgstr "Prompt do texto alternativo" -#: admin/partials/everyalt-options-display.php:84 +#: admin/partials/everyalt-options-display.php:268 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:89 +#: admin/partials/everyalt-options-display.php:272 +msgid "Image title prompt" +msgstr "Prompt do título da imagem" + +#: admin/partials/everyalt-options-display.php:280 +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 msgid "Save Settings" msgstr "Salvar configurações" -#: admin/partials/everyalt-options-display.php:101 +#: admin/partials/everyalt-options-display.php:294 +#, 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:105 -msgid "Please enter your OpenAI API key in the Settings tab first." -msgstr "Digite primeiro sua chave de API da OpenAI na aba Configurações." +#: admin/partials/everyalt-options-display.php:296 +#: admin/partials/everyalt-options-display.php:390 +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:107 +#: admin/partials/everyalt-options-display.php:298 msgid "No images without alt text found." msgstr "Nenhuma imagem sem texto alternativo encontrada." -#: admin/partials/everyalt-options-display.php:110 +#: admin/partials/everyalt-options-display.php:301 +#: admin/partials/everyalt-options-display.php:395 msgid "Select all" msgstr "Selecionar tudo" -#: admin/partials/everyalt-options-display.php:111 +#: admin/partials/everyalt-options-display.php:302 +#: admin/partials/everyalt-options-display.php:396 msgid "Select none" msgstr "Desmarcar todas" -#: admin/partials/everyalt-options-display.php:112 +#: admin/partials/everyalt-options-display.php:303 msgid "Generate alt text for selected" msgstr "Gerar texto alternativo para os selecionados" -#: admin/partials/everyalt-options-display.php:115 -msgid "Processing…" -msgstr "Processando…" - -#: admin/partials/everyalt-options-display.php:132 admin/partials/everyalt-options-display.php:161 +#. translators: %s: number of images +#: admin/partials/everyalt-options-display.php:307 +#: admin/partials/everyalt-options-display.php:401 +#, php-format +msgid "Generate for all %s image" +msgid_plural "Generate for all %s images" +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 +#, php-format +msgid "%s image" +msgid_plural "%s images" +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 +#, 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 msgid "Edit" msgstr "Editar" -#: admin/partials/everyalt-options-display.php:145 -msgid "Images that already have alt text. Edit and save, or regenerate with EveryAlt." -msgstr "Imagens que já têm texto alternativo. Edite e salve ou regenere com EveryAlt." +#: admin/partials/everyalt-options-display.php:342 +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:147 -msgid "Please enter your OpenAI API key in the Settings tab to use Regenerate." -msgstr "Digite sua chave de API da OpenAI na aba Configurações para usar Regenerar." +#: admin/partials/everyalt-options-display.php:344 +#: admin/partials/everyalt-options-display.php:438 +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:150 +#: admin/partials/everyalt-options-display.php:347 msgid "No images with alt text found." msgstr "Nenhuma imagem com texto alternativo encontrada." -#: admin/partials/everyalt-options-display.php:165 +#: admin/partials/everyalt-options-display.php:360 +msgid "Decorative" +msgstr "Decorativa" + +#: admin/partials/everyalt-options-display.php:365 +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 msgid "Save" msgstr "Salvar" -#: admin/partials/everyalt-options-display.php:166 +#: admin/partials/everyalt-options-display.php:369 +msgid "Describe anyway" +msgstr "Descrever mesmo assim" + +#: admin/partials/everyalt-options-display.php:371 +#: admin/partials/everyalt-options-display.php:458 msgid "Regenerate" msgstr "Regenerar" -#: admin/partials/everyalt-options-display.php:178 +#: admin/partials/everyalt-options-display.php:388 +#, 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 +msgid "No images needing a title found." +msgstr "Nenhuma imagem precisando de título encontrada." + +#: admin/partials/everyalt-options-display.php:397 +msgid "Generate titles for selected" +msgstr "Gerar títulos para os selecionados" + +#: admin/partials/everyalt-options-display.php:436 +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 +msgid "No images with a custom title found." +msgstr "Nenhuma imagem com título personalizado encontrada." + +#: admin/partials/everyalt-options-display.php:473 +msgid "Spending" +msgstr "Gastos" + +#. translators: 1: spent this month, 2: monthly limit +#: admin/partials/everyalt-options-display.php:484 +#, 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 +#, php-format +msgid "This month: %s (no limit set)." +msgstr "Este mês: %s (sem limite definido)." + +#: admin/partials/everyalt-options-display.php:499 +msgid "Month" +msgstr "Mês" + +#: admin/partials/everyalt-options-display.php:500 +msgid "Requests" +msgstr "Solicitações" + +#: admin/partials/everyalt-options-display.php:501 +msgid "Estimated cost" +msgstr "Custo estimado" + +#: admin/partials/everyalt-options-display.php:502 +msgid "By model" +msgstr "Por modelo" + +#: admin/partials/everyalt-options-display.php:526 +msgid "No spending recorded yet." +msgstr "Nenhum gasto registrado ainda." + +#: admin/partials/everyalt-options-display.php:528 +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 msgid "Generation Log" msgstr "Registro de geração" -#: admin/partials/everyalt-options-display.php:179 +#: admin/partials/everyalt-options-display.php:531 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:182 +#: admin/partials/everyalt-options-display.php:534 msgid "Export as CSV" msgstr "Exportar como CSV" -#: admin/partials/everyalt-options-display.php:190 +#: admin/partials/everyalt-options-display.php:542 msgid "Attachment" msgstr "Anexo" -#: admin/partials/everyalt-options-display.php:193 +#: admin/partials/everyalt-options-display.php:546 msgid "Cost" msgstr "Custo" -#: admin/partials/everyalt-options-display.php:244 +#: admin/partials/everyalt-options-display.php:598 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." + +#: includes/class-everyalt-queue.php:199 +msgid "Image no longer exists." +msgstr "A imagem não existe mais." + +#: includes/class-everyalt-queue.php:234 +msgid "(Gave up after several attempts.)" +msgstr "(Abandonado após várias tentativas.)" + +#: includes/class-everyalt-queue.php:238 +msgid "(Will retry automatically.)" +msgstr "(Uma nova tentativa será feita automaticamente.)" + +#: includes/class-everyalt-queue.php:273 +msgid "Every minute (EveryAlt queue)" +msgstr "A cada minuto (fila do EveryAlt)" diff --git a/languages/everyalt.pot b/languages/everyalt.pot index 24f251a..17bc2ca 100644 --- a/languages/everyalt.pot +++ b/languages/everyalt.pot @@ -1,10 +1,10 @@ -# Copyright (C) 2025 HDC +# Copyright (C) 2026 HDC # This file is distributed under the same license as the EveryAlt package. msgid "" msgstr "" -"Project-Id-Version: EveryAlt 1.0\n" +"Project-Id-Version: EveryAlt 1.1.0\n" "Report-Msgid-Bugs-To: https://hdc.net\n" -"POT-Creation-Date: 2025-02-15 00:00+0000\n" +"POT-Creation-Date: 2026-09-27 16:34+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,300 +12,737 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "X-Domain: everyalt\n" -#: admin/class-everyalt-admin.php:111 +#. translators: %s: monthly spending limit, e.g. $5.00 +#: admin/class-everyalt-admin.php:85 +#, php-format +msgid "Skipped: monthly spending limit of %s reached. Generation resumes next month, or raise the limit in Settings." +msgstr "" + +#: admin/class-everyalt-admin.php:164 +#: admin/partials/everyalt-options-display.php:541 msgid "Time" msgstr "" -#: admin/class-everyalt-admin.php:112 +#: admin/class-everyalt-admin.php:165 msgid "Attachment ID" msgstr "" -#: admin/class-everyalt-admin.php:113 +#: admin/class-everyalt-admin.php:166 +#: admin/partials/everyalt-options-display.php:543 msgid "Status" msgstr "" -#: admin/class-everyalt-admin.php:114 +#: admin/class-everyalt-admin.php:167 +#: admin/partials/everyalt-options-display.php:544 +msgid "Model" +msgstr "" + +#: admin/class-everyalt-admin.php:168 +#: admin/partials/everyalt-options-display.php:545 msgid "Message / Alt text" msgstr "" -#: admin/class-everyalt-admin.php:115 +#: admin/class-everyalt-admin.php:169 msgid "Cost (USD)" msgstr "" -#: admin/class-everyalt-admin.php:116 +#: admin/class-everyalt-admin.php:170 +#: admin/partials/everyalt-options-display.php:547 msgid "Details" msgstr "" -#: admin/class-everyalt-admin.php:120 +#: admin/class-everyalt-admin.php:174 admin/class-everyalt-admin.php:432 +#: admin/partials/everyalt-options-display.php:583 +msgid "Error" +msgstr "" + +#: admin/class-everyalt-admin.php:174 +#: admin/partials/everyalt-options-display.php:581 msgid "Success" msgstr "" -#: admin/class-everyalt-admin.php:120 -msgid "Error" +#. translators: 1: provider name(s), e.g. "OpenAI", 2: URL of the EveryAlt settings tab +#: admin/class-everyalt-admin.php:259 +#, php-format +msgid "EveryAlt can no longer read your saved %1$s API key, usually because the security keys in wp-config.php changed. Generation with that provider is paused until you re-enter the key." +msgstr "" + +#. translators: 1: spent this month, 2: monthly limit, 3: settings URL +#: admin/class-everyalt-admin.php:278 +#, php-format +msgid "EveryAlt has paused: this month’s estimated spend (%1$s) reached your monthly limit of %2$s. New images will be processed next month, or you can raise the limit." msgstr "" -#: admin/class-everyalt-admin.php:152 +#: admin/class-everyalt-admin.php:293 msgid "You do not have permission to do this." msgstr "" -#: admin/class-everyalt-admin.php:159 +#: admin/class-everyalt-admin.php:297 +msgid "Unknown provider." +msgstr "" + +#: admin/class-everyalt-admin.php:304 msgid "Enter an API key in the field above, or save a key first to validate the stored key." msgstr "" -#: admin/class-everyalt-admin.php:162 +#: admin/class-everyalt-admin.php:307 msgid "API key is valid." msgstr "" -#: admin/class-everyalt-admin.php:164 +#: admin/class-everyalt-admin.php:309 msgid "API key could not be validated. Check that the key is correct and has API access." msgstr "" -#: admin/class-everyalt-admin.php:342 +#: admin/class-everyalt-admin.php:423 +#, php-format +msgid "Generating in the background: %d remaining. You can leave this page; it continues on its own." +msgstr "" + +#: admin/class-everyalt-admin.php:424 +#, php-format +msgid "%d waiting to retry. They will be tried again automatically." +msgstr "" + +#: admin/class-everyalt-admin.php:425 +msgid "All done." +msgstr "" + +#: admin/class-everyalt-admin.php:426 +msgid "Paused: monthly spending limit reached. Raise the limit in Settings or wait until next month." +msgstr "" + +#: admin/class-everyalt-admin.php:427 +msgid "Paused: add an API key for the selected model in Settings." +msgstr "" + +#: admin/class-everyalt-admin.php:428 +#, php-format +msgid "Added %d images to the queue." +msgstr "" + +#: admin/class-everyalt-admin.php:429 +msgid "Those images were already queued." +msgstr "" + +#: admin/class-everyalt-admin.php:430 +msgid "Queue cleared." +msgstr "" + +#: admin/class-everyalt-admin.php:431 +msgid "Marked as decorative (alt text left empty on purpose)" +msgstr "" + +#: admin/class-everyalt-admin.php:433 admin/class-everyalt-admin.php:458 +msgid "Error:" +msgstr "" + +#: admin/class-everyalt-admin.php:434 +msgid "Request failed" +msgstr "" + +#: admin/class-everyalt-admin.php:435 +msgid "Saved!" +msgstr "" + +#: admin/class-everyalt-admin.php:436 +msgid "Save failed" +msgstr "" + +#: admin/class-everyalt-admin.php:437 +msgid "Regenerated!" +msgstr "" + +#: admin/class-everyalt-admin.php:438 +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 +msgid "EveryAlt" +msgstr "" + +#: admin/class-everyalt-admin.php:452 +msgid "Generate alt text with EveryAlt" +msgstr "" + +#: admin/class-everyalt-admin.php:453 +msgid "Select or upload an image to generate alt text." +msgstr "" + +#: admin/class-everyalt-admin.php:454 +msgid "Generating…" +msgstr "" + +#: admin/class-everyalt-admin.php:455 +msgid "Alt text generated." +msgstr "" + +#: admin/class-everyalt-admin.php:456 +msgid "Could not generate alt text." +msgstr "" + +#: admin/class-everyalt-admin.php:457 +msgid "Marked as decorative: alt text left empty on purpose." +msgstr "" + +#: admin/class-everyalt-admin.php:578 msgid "Skipped: no API key or auto-generate disabled." msgstr "" -#: admin/class-everyalt-admin.php:346 +#: admin/class-everyalt-admin.php:583 msgid "Skipped: API key validation failed." msgstr "" -#: admin/class-everyalt-admin.php:350 +#: admin/class-everyalt-admin.php:593 msgid "Skipped: not a valid image or file exceeds 4MB." msgstr "" -#: admin/class-everyalt-admin.php:366 +#: admin/class-everyalt-admin.php:616 +msgid "Marked as decorative (alt text left empty on purpose)." +msgstr "" + +#: admin/class-everyalt-admin.php:623 msgid "No alt text returned from API." msgstr "" -#: admin/class-everyalt-admin.php:551 -msgid "Settings" +#: admin/class-everyalt-admin.php:649 +msgid "[Title] Skipped: no API key or auto-generate disabled." msgstr "" -#: admin/class-everyalt-admin.php:570 -msgid "EveryAlt" +#: admin/class-everyalt-admin.php:654 +msgid "[Title] Skipped: API key validation failed." +msgstr "" + +#: admin/class-everyalt-admin.php:664 +msgid "[Title] Skipped: not a valid image or file exceeds 4MB." +msgstr "" + +#: admin/class-everyalt-admin.php:687 +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 +msgid "Settings" msgstr "" -#: admin/class-everyalt-admin.php:752 +#: admin/class-everyalt-admin.php:1352 admin/class-everyalt-admin.php:1377 msgid "Generation failed." msgstr "" -#: admin/class-everyalt-admin.php:786 +#: admin/class-everyalt-admin.php:1450 msgid "Alt successfully updated." msgstr "" -#: admin/class-everyalt-openai.php:134 -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:1466 +msgid "Title successfully updated." msgstr "" -#: admin/class-everyalt-openai.php:243 -msgid "Response was cut off (max tokens reached). Increase Max completion tokens in Settings to resolve this." +#: 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:11 -msgid "EveryAlt" +#: 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:13 msgid "Secondary menu" msgstr "" -#: admin/partials/everyalt-options-display.php:14 -msgid "Settings" -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 -msgid "Logs" +#: admin/partials/everyalt-options-display.php:387 +msgid "Bulk Image Title Generator" msgstr "" -#: admin/partials/everyalt-options-display.php:24 -msgid "EveryAlt is a free, open-source project created by %1$sHDC%2$s, a web dev firm for high-stakes projects and AI builds." +#: 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:35 -msgid "EveryAlt also has a free Chrome extension and Shopify app. Check out our %1$sDigital Agency Plan%2$s if you manage lots of sites and want to set up limits and permissions for your clients or team." +#: 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 +#, 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:21 +#: admin/partials/everyalt-options-display.php:41 msgid "Settings saved." msgstr "" -#: admin/partials/everyalt-options-display.php:24 -msgid "The OpenAI API key you entered could not be validated. Please check the key and try again. It was not saved." +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:47 +#, 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:29 -msgid "Settings" +#: admin/partials/everyalt-options-display.php:54 +msgid "Clear queue" +msgstr "" + +#: admin/partials/everyalt-options-display.php:74 +#: admin/partials/everyalt-options-display.php:77 +msgid "AI model" +msgstr "" + +#. translators: 1: input price in USD, 2: output price in USD +#: admin/partials/everyalt-options-display.php:90 +#, php-format +msgid "$%1$s input · $%2$s output per 1M tokens" msgstr "" -#: admin/partials/everyalt-options-display.php:34 -msgid "OpenAI API Key" +#: admin/partials/everyalt-options-display.php:101 +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 +#, php-format +msgid "%s pricing" +msgstr "" + +#: admin/partials/everyalt-options-display.php:116 +msgid "API key" +msgstr "" + +#. translators: %s: provider name, e.g. OpenAI +#: admin/partials/everyalt-options-display.php:127 +#, php-format +msgid "%s API key" +msgstr "" + +#: admin/partials/everyalt-options-display.php:131 +msgid "Key saved" +msgstr "" + +#: admin/partials/everyalt-options-display.php:131 +msgid "No key saved" msgstr "" -#: admin/partials/everyalt-options-display.php:37 +#: admin/partials/everyalt-options-display.php:135 msgid "Leave blank to keep existing key" msgstr "" -#: admin/partials/everyalt-options-display.php:38 +#: admin/partials/everyalt-options-display.php:135 +msgid "Paste your API key" +msgstr "" + +#: admin/partials/everyalt-options-display.php:136 msgid "Validate key" msgstr "" -#: admin/partials/everyalt-options-display.php:41 -msgid "Alt text is generated via OpenAI (image is sent as base64, so it works on localhost and behind HTTP auth). Stored encrypted. You are charged by OpenAI for your usage; EveryAlt is free and never bills you." +#. translators: %s: link to OpenAI API keys page +#: admin/partials/everyalt-options-display.php:142 +#, php-format +msgid "Sign in at %s." msgstr "" -#: admin/partials/everyalt-options-display.php:41 -msgid "Generate an API key" +#: admin/partials/everyalt-options-display.php:143 +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 +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 +msgid "OpenAI API data usage" +msgstr "" + +#. translators: %s: link to OpenAI data usage policy +#: admin/partials/everyalt-options-display.php:146 +#, 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 +#, php-format +msgid "Sign in to Google AI Studio at %s." +msgstr "" + +#: admin/partials/everyalt-options-display.php:150 +msgid "Click “Create API key”, choose or create a Google Cloud project, and copy the key." +msgstr "" + +#: admin/partials/everyalt-options-display.php:151 +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 +msgid "Gemini API terms" msgstr "" -#: admin/partials/everyalt-options-display.php:45 +#. translators: %s: link to Gemini API terms +#: admin/partials/everyalt-options-display.php:153 +#, 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 +#, php-format +msgid "Sign in or create an account at %s." +msgstr "" + +#: admin/partials/everyalt-options-display.php:157 +msgid "Click “New API key”, name it (e.g. “EveryAlt”), and copy the key." +msgstr "" + +#: admin/partials/everyalt-options-display.php:158 +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 +msgid "Your images stay private." +msgstr "" + +#: admin/partials/everyalt-options-display.php:163 +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 +msgid "DeepInfra data privacy" +msgstr "" + +#: admin/partials/everyalt-options-display.php:169 +msgid "Privacy policy" +msgstr "" + +#: admin/partials/everyalt-options-display.php:170 +msgid "Trust center (SOC 2, ISO 27001)" +msgstr "" + +#: admin/partials/everyalt-options-display.php:179 +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 msgid "Auto-generate on upload" msgstr "" -#: admin/partials/everyalt-options-display.php:47 +#: admin/partials/everyalt-options-display.php:185 msgid "Automatically generate alt text when images are uploaded" msgstr "" -#: admin/partials/everyalt-options-display.php:51 -msgid "Max completion tokens" +#: admin/partials/everyalt-options-display.php:187 +msgid "Automatically generate image titles when images are uploaded" msgstr "" -#: admin/partials/everyalt-options-display.php:54 -msgid "Maximum tokens the model can use for the response (including reasoning for models like gpt-5-nano). Default 1024. Leave empty to use default." +#: admin/partials/everyalt-options-display.php:191 +#: admin/partials/everyalt-options-display.php:194 +msgid "New uploads" +msgstr "" + +#: admin/partials/everyalt-options-display.php:195 +msgid "Generate in the background (recommended): uploads finish right away" +msgstr "" + +#: admin/partials/everyalt-options-display.php:196 +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 +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 +msgid "Decorative images" +msgstr "" + +#: admin/partials/everyalt-options-display.php:204 +msgid "Leave alt text empty for purely decorative images" +msgstr "" + +#: admin/partials/everyalt-options-display.php:205 +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 +msgid "Monthly spending limit" +msgstr "" + +#: admin/partials/everyalt-options-display.php:212 +msgid "None" +msgstr "" + +#: admin/partials/everyalt-options-display.php:213 +msgid "USD per month" +msgstr "" + +#. translators: %s: estimated amount spent this month, e.g. $0.42 +#: admin/partials/everyalt-options-display.php:219 +#, 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 +msgid "Existing posts" +msgstr "" + +#: admin/partials/everyalt-options-display.php:230 +msgid "Show Media Library alt text on images already in posts that have none" +msgstr "" + +#: admin/partials/everyalt-options-display.php:231 +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 +msgid "Language" +msgstr "" + +#. translators: %s: site language name in English, e.g. German +#: admin/partials/everyalt-options-display.php:242 +#, php-format +msgid "Automatic (site language: %s)" +msgstr "" + +#: admin/partials/everyalt-options-display.php:249 +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 +msgid "Max completion tokens" msgstr "" -#: admin/partials/everyalt-options-display.php:66 -msgid "Pricing: EveryAlt uses %1$s, currently the cheapest and most efficient model for this task. A reasonable estimate per image is about 200 input tokens and 500 output tokens, which works out to about %2$s per image." +#: admin/partials/everyalt-options-display.php:256 +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:76 +#: admin/partials/everyalt-options-display.php:260 msgid "Alt text prompt" msgstr "" -#: admin/partials/everyalt-options-display.php:84 +#: admin/partials/everyalt-options-display.php:268 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:89 -msgid "Save Settings" +#: admin/partials/everyalt-options-display.php:272 +msgid "Image title prompt" msgstr "" -#: admin/partials/everyalt-options-display.php:100 -msgid "Bulk Alt Text Generator" +#: admin/partials/everyalt-options-display.php:280 +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:101 +#: admin/partials/everyalt-options-display.php:285 +msgid "Save Settings" +msgstr "" + +#: admin/partials/everyalt-options-display.php:294 +#, 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:105 -msgid "Please enter your OpenAI API key in the Settings tab first." +#: admin/partials/everyalt-options-display.php:296 +#: admin/partials/everyalt-options-display.php:390 +msgid "Please add an API key for the selected AI model in the Settings tab first." msgstr "" -#: admin/partials/everyalt-options-display.php:107 +#: admin/partials/everyalt-options-display.php:298 msgid "No images without alt text found." msgstr "" -#: admin/partials/everyalt-options-display.php:110 +#: admin/partials/everyalt-options-display.php:301 +#: admin/partials/everyalt-options-display.php:395 msgid "Select all" msgstr "" -#: admin/partials/everyalt-options-display.php:111 +#: admin/partials/everyalt-options-display.php:302 +#: admin/partials/everyalt-options-display.php:396 msgid "Select none" msgstr "" -#: admin/partials/everyalt-options-display.php:112 +#: admin/partials/everyalt-options-display.php:303 msgid "Generate alt text for selected" msgstr "" -#: admin/partials/everyalt-options-display.php:115 -msgid "Processing…" -msgstr "" - -#: admin/partials/everyalt-options-display.php:132 +#. translators: %s: number of images +#: admin/partials/everyalt-options-display.php:307 +#: admin/partials/everyalt-options-display.php:401 +#, php-format +msgid "Generate for all %s image" +msgid_plural "Generate for all %s images" +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 +#, php-format +msgid "%s image" +msgid_plural "%s images" +msgstr[0] "" +msgstr[1] "" + +#. translators: %s: image title +#: admin/partials/everyalt-options-display.php:319 +#: admin/partials/everyalt-options-display.php:413 +#, 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 msgid "Edit" msgstr "" -#: admin/partials/everyalt-options-display.php:144 -msgid "Review Alt Text" +#: admin/partials/everyalt-options-display.php:342 +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:145 -msgid "Images that already have alt text. Edit and save, or regenerate with EveryAlt." +#: admin/partials/everyalt-options-display.php:344 +#: admin/partials/everyalt-options-display.php:438 +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:147 -msgid "Please enter your OpenAI API key in the Settings tab to use Regenerate." +#: admin/partials/everyalt-options-display.php:347 +msgid "No images with alt text found." msgstr "" -#: admin/partials/everyalt-options-display.php:150 -msgid "No images with alt text found." +#: admin/partials/everyalt-options-display.php:360 +msgid "Decorative" msgstr "" -#: admin/partials/everyalt-options-display.php:161 -msgid "Edit" +#: admin/partials/everyalt-options-display.php:365 +msgid "Empty on purpose: screen readers skip this image." msgstr "" -#: admin/partials/everyalt-options-display.php:165 +#: admin/partials/everyalt-options-display.php:367 +#: admin/partials/everyalt-options-display.php:457 msgid "Save" msgstr "" -#: admin/partials/everyalt-options-display.php:166 +#: admin/partials/everyalt-options-display.php:369 +msgid "Describe anyway" +msgstr "" + +#: admin/partials/everyalt-options-display.php:371 +#: admin/partials/everyalt-options-display.php:458 msgid "Regenerate" msgstr "" -#: admin/partials/everyalt-options-display.php:178 -msgid "Generation Log" +#: admin/partials/everyalt-options-display.php:388 +#, 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:179 -msgid "Last 100 alt text generation attempts (successes and failures)." +#: admin/partials/everyalt-options-display.php:392 +msgid "No images needing a title found." msgstr "" -#: admin/partials/everyalt-options-display.php:182 -msgid "Export as CSV" +#: admin/partials/everyalt-options-display.php:397 +msgid "Generate titles for selected" msgstr "" -#: admin/partials/everyalt-options-display.php:189 -msgid "Time" +#: admin/partials/everyalt-options-display.php:436 +msgid "Images that already have a custom title. Edit and save, or regenerate with EveryAlt." msgstr "" -#: admin/partials/everyalt-options-display.php:190 -msgid "Attachment" +#: admin/partials/everyalt-options-display.php:441 +msgid "No images with a custom title found." msgstr "" -#: admin/partials/everyalt-options-display.php:191 -msgid "Status" +#: admin/partials/everyalt-options-display.php:473 +msgid "Spending" msgstr "" -#: admin/partials/everyalt-options-display.php:192 -msgid "Message / Alt text" +#. translators: 1: spent this month, 2: monthly limit +#: admin/partials/everyalt-options-display.php:484 +#, php-format +msgid "This month: %1$s of your %2$s limit." msgstr "" -#: admin/partials/everyalt-options-display.php:193 -msgid "Cost" +#. translators: %s: spent this month +#: admin/partials/everyalt-options-display.php:487 +#, php-format +msgid "This month: %s (no limit set)." msgstr "" -#: admin/partials/everyalt-options-display.php:194 -msgid "Details" +#: admin/partials/everyalt-options-display.php:499 +msgid "Month" msgstr "" -#: admin/partials/everyalt-options-display.php:228 -msgid "Success" +#: admin/partials/everyalt-options-display.php:500 +msgid "Requests" msgstr "" -#: admin/partials/everyalt-options-display.php:230 -msgid "Error" +#: admin/partials/everyalt-options-display.php:501 +msgid "Estimated cost" +msgstr "" + +#: admin/partials/everyalt-options-display.php:502 +msgid "By model" +msgstr "" + +#: admin/partials/everyalt-options-display.php:526 +msgid "No spending recorded yet." +msgstr "" + +#: admin/partials/everyalt-options-display.php:528 +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:244 +#: admin/partials/everyalt-options-display.php:530 +msgid "Generation Log" +msgstr "" + +#: admin/partials/everyalt-options-display.php:531 +msgid "Last 100 alt text generation attempts (successes and failures)." +msgstr "" + +#: admin/partials/everyalt-options-display.php:534 +msgid "Export as CSV" +msgstr "" + +#: admin/partials/everyalt-options-display.php:542 +msgid "Attachment" +msgstr "" + +#: admin/partials/everyalt-options-display.php:546 +msgid "Cost" +msgstr "" + +#: admin/partials/everyalt-options-display.php:598 msgid "No log entries yet. Generate alt text from the Bulk tab or when uploading images to populate this log." msgstr "" + +#: includes/class-everyalt-queue.php:199 +msgid "Image no longer exists." +msgstr "" + +#: includes/class-everyalt-queue.php:234 +msgid "(Gave up after several attempts.)" +msgstr "" + +#: includes/class-everyalt-queue.php:238 +msgid "(Will retry automatically.)" +msgstr "" + +#: includes/class-everyalt-queue.php:273 +msgid "Every minute (EveryAlt queue)" +msgstr ""