diff --git a/changelog.txt b/changelog.txt index a6f7d91..eb782ea 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,26 @@ == Changelog == += 1.4.1 = + +_Release date: 2026-08-17_ + +**Changed** + +* Plugin identity now points at the ROBOTSTXT software site: Plugin URI and the new Update URI header are `https://www.robotstxt.software/plugins/robotstxt-manager/`, Author URI is `https://www.robotstxt.software/`, and the readme.txt full-changelog link points to the same page. +* Contributors list reordered: robotstxt first, then javiercasares. +* readme.txt changelog section trimmed to the 3 latest versions per the documentation template. +* Tooling aligned with the declared real floors: PHPCS `testVersion` and the preflight scan range now cover PHP 8.0-8.5 (previously 7.4-8.5 / 8.4-8.5). + +**Compatibility** + +* WordPress: 4.4 - 7.1 (scan-verified: wp-compat ladder clean from 4.4; 10 errors at 4.0) +* PHP: 8.0 - 8.5 (scan-verified: PHPCompatibility ladder + manual audit — `mixed` hints and `str_contains()` are the 8.0 floor) + +**Tests** + +* PHPCS (WordPress-Core, WordPress-Docs, WordPress-Extra): pass +* PHPStan level 9 + wp-compat: pass + = 1.4.0 = _Release date: 2026-08-17_ diff --git a/languages/robotstxt-manager-ca.mo b/languages/robotstxt-manager-ca.mo index e313bbf..cdc25e0 100644 Binary files a/languages/robotstxt-manager-ca.mo and b/languages/robotstxt-manager-ca.mo differ diff --git a/languages/robotstxt-manager-ca.po b/languages/robotstxt-manager-ca.po index 3c5406d..204bfc3 100644 --- a/languages/robotstxt-manager-ca.po +++ b/languages/robotstxt-manager-ca.po @@ -2,9 +2,12 @@ # This file is distributed under the GPL-3.0-or-later. msgid "" msgstr "" -"Project-Id-Version: Manager (by ROBOTSTXT) 0.6.0\n" -"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-manager\n" +"Project-Id-Version: Manager (by ROBOTSTXT) 1.4.1\n" +"Report-Msgid-Bugs-To: https://www.robotstxt.software/plugins/robotstxt-manager/\n" +"PO-Revision-Date: 2026-08-17 15:41+0000\n" "Last-Translator: ROBOTSTXT \n" +"POT-Creation-Date: 2026-08-17T14:52:09+00:00\n" +"X-Translator: ROBOTSTXT \n" "Language-Team: Català \n" "Language: ca\n" "MIME-Version: 1.0\n" @@ -13,289 +16,570 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: robotstxt-manager\n" -msgid "%d plugin in the catalog is not compatible with this site's WordPress or PHP version." -msgid_plural "%d plugins in the catalog are not compatible with this site's WordPress or PHP version." -msgstr[0] "%d plugin del catàleg no és compatible amb la versió de WordPress o de PHP d'aquest lloc." -msgstr[1] "%d plugins del catàleg no són compatibles amb la versió de WordPress o de PHP d'aquest lloc." +#. Plugin Name of the plugin +#: robotstxt-manager.php +msgid "Manager (by ROBOTSTXT)" +msgstr "Manager (de ROBOTSTXT)" -msgid "%s activated." -msgstr "%s activat." +#. Plugin URI of the plugin +#: robotstxt-manager.php +msgid "https://www.robotstxt.software/plugins/robotstxt-manager/" +msgstr "https://www.robotstxt.software/plugins/robotstxt-manager/" -msgid "%s installed. Activate it from the list below." -msgstr "%s instal·lat. Activa'l des de la llista de sota." - -msgid "%s updated." -msgstr "%s actualitzat." - -msgid "(about %s)" -msgstr "(sobre %s)" - -msgid "A key is stored (last 4 characters: %s). Leave blank to keep the existing key; enter a new value to replace it." -msgstr "Hi ha una clau desada (últims 4 caràcters: %s). Deixa-ho en blanc per mantenir la clau actual; escriu un valor nou per substituir-la." - -msgid "A key is stored but could not be decoded. You can replace it by entering a new value above, or delete it with the button below." -msgstr "Hi ha una clau desada però no s'ha pogut descodificar. Pots substituir-la escrivint un valor nou a dalt, o esborrar-la amb el botó de sota." - -msgid "API Key" -msgstr "Clau API" - -msgid "API key deleted. Save changes to persist." -msgstr "Clau API esborrada. Desa els canvis perquè faci efecte." - -msgid "API key is not configured." -msgstr "La clau API no està configurada." - -msgid "Account-level API key issued by the ROBOTSTXT store. Required to authenticate catalog and subscription requests. The value is encrypted before storage." -msgstr "Clau API a nivell de compte emesa per la botiga ROBOTSTXT. És necessària per autenticar les sol·licituds del catàleg i de les subscripcions. El valor es xifra abans de desar-se." - -msgid "Action" -msgstr "Acció" - -msgid "Activate" -msgstr "Activa" - -msgid "An unexpected error occurred." -msgstr "S'ha produït un error inesperat." - -msgid "Base URL of the remote Plugins Core installation that this site will pull the plugin catalog from." -msgstr "URL base de la instal·lació remota de Plugins Core d'on aquest lloc obtindrà el catàleg de plugins." - -msgid "Buy" -msgstr "Comprar" - -msgid "Cache" -msgstr "Memòria cau" - -msgid "Catalog Cache (minutes)" -msgstr "Memòria cau del catàleg (minuts)" - -msgid "Catalog refreshed." -msgstr "Catàleg actualitzat." - -msgid "Connected." -msgstr "Connectat." - -msgid "Connection" -msgstr "Connexió" - -msgid "Could not create a temporary file for download." -msgstr "No s'ha pogut crear un fitxer temporal per a la baixada." - -msgid "Could not reach Plugins Core: %s" -msgstr "No s'ha pogut connectar amb Plugins Core: %s" - -msgid "Data on Uninstall" -msgstr "Dades en desinstal·lar" - -msgid "Delete API key" -msgstr "Esborra la clau API" - -msgid "Delete all plugin data when the plugin is uninstalled." -msgstr "Esborra totes les dades del plugin quan es desinstal·li." - -msgid "Delete the stored API key? The catalog and subscription data will stop working until a new key is entered." -msgstr "Segur que vols esborrar la clau API desada? El catàleg i les dades de subscripció deixaran de funcionar fins que s'introdueixi una clau nova." - -msgid "Deleting…" -msgstr "S'està esborrant…" - -msgid "Download failed (HTTP %d)." -msgstr "Error en la baixada (HTTP %d)." - -msgid "Download failed: %s" -msgstr "Error en la baixada: %s" - -msgid "Free" -msgstr "Gratuït" - -msgid "How long the catalog response from Core is cached in a transient. Default: 60 minutes. Lower values refresh more often at the cost of more requests to Core. Maximum: 1440 (24 hours)." -msgstr "Quant de temps es desa a la memòria cau la resposta del catàleg de Core en un transient. Per defecte: 60 minuts. Els valors més baixos actualitzen més sovint a costa de més sol·licituds a Core. Màxim: 1440 (24 hores)." - -msgid "Incompatible" -msgstr "Incompatible" - -msgid "Install" -msgstr "Instal·la" - -msgid "Installation failed." -msgstr "Error en la instal·lació." - -msgid "Installation failed: %s" -msgstr "Error en la instal·lació: %s" - -msgid "Installed (inactive)" -msgstr "Instal·lat (inactiu)" - -msgid "Insufficient permissions." -msgstr "Permisos insuficients." - - -msgid "Manager (by ROBOTSTXT) — Plugins" -msgstr "Manager (by ROBOTSTXT) — Plugins" - -msgid "Manager (by ROBOTSTXT) — Settings" -msgstr "Manager (by ROBOTSTXT) — Paràmetres" - -msgid "No plugins were returned by the ROBOTSTXT store. Check the Store URL and API key on the Settings page, or click Refresh to try again." -msgstr "La botiga ROBOTSTXT no ha retornat cap plugin. Revisa la URL de la botiga i la clau API a la pàgina de paràmetres, o prem Actualitza per tornar-ho a provar." - -msgid "Not installed" -msgstr "No instal·lat" - -msgid "Plugin" -msgstr "Plugin" - -msgid "Plugin is not installed." -msgstr "El plugin no està instal·lat." - -msgid "Plugin not found in catalog." -msgstr "Plugin no trobat al catàleg." - - -msgid "Price" -msgstr "Preu" +#. Description of the plugin +#: robotstxt-manager.php +msgid "" +"Client-side dashboard for the ROBOTSTXT plugin ecosystem. Lists the catalog " +"from a remote Plugins Core install, resolves local install/update state, and " +"installs, activates, and updates plugins directly from the store." +msgstr "" +"Tauler del costat del client per a l'ecosistema de plugins de ROBOTSTXT. " +"Mostra el catàleg d'una instal·lació remota de Plugins Core, resol l'estat " +"local d'instal·lació i actualització, i instal·la, activa i actualitza " +"plugins directament des de la botiga." +#. Author of the plugin +#: robotstxt-manager.php admin/class-robotstxt-manager-admin.php:48 msgid "ROBOTSTXT" msgstr "ROBOTSTXT" -msgid "ROBOTSTXT Manager is not configured yet. Set the Store URL and API key to see your plugin catalog." -msgstr "ROBOTSTXT Manager encara no està configurat. Configura la URL de la botiga i la clau API per veure el teu catàleg de plugins." +#. Author URI of the plugin +#: robotstxt-manager.php +msgid "https://www.robotstxt.software/" +msgstr "https://www.robotstxt.software/" -msgid "Refresh catalog" -msgstr "Actualitza el catàleg" - -msgid "Requires PHP" -msgstr "Requereix PHP" - -msgid "Requires WP" -msgstr "Requereix WP" - -msgid "Settings" -msgstr "Paràmetres" - - -msgid "Store URL" -msgstr "URL de la botiga" - -msgid "Store URL is not configured." -msgstr "La URL de la botiga no està configurada." - -msgid "Store is not configured." -msgstr "La botiga no està configurada." - -msgid "Test connection" -msgstr "Prova la connexió" - -msgid "Testing…" -msgstr "S'està provant…" - -msgid "The API key format is invalid. Copy the full key from your ROBOTSTXT account page." -msgstr "El format de la clau API no és vàlid. Copia la clau completa des de la teva pàgina de compte de ROBOTSTXT." - -msgid "The store responded with HTTP %d. Check the Store URL and API key." -msgstr "La botiga ha respost amb HTTP %d. Revisa la URL de la botiga i la clau API." - -msgid "The store returned an invalid file." -msgstr "La botiga ha retornat un fitxer no vàlid." - -msgid "This site runs WordPress %1$s on PHP %2$s." -msgstr "Aquest lloc funciona amb WordPress %1$s i PHP %2$s." - -msgid "Too many refreshes. Please wait a minute before refreshing again." -msgstr "Massa actualitzacions. Espera un minut abans de tornar a actualitzar." - - -msgid "Up to date" -msgstr "Actualitzat" - -msgid "Update" -msgstr "Actualitza" - -msgid "Update available (v%1$s → v%2$s)" -msgstr "Actualització disponible (v%1$s → v%2$s)" - -msgid "Visit website" -msgstr "Visita el lloc web" +#: admin/class-robotstxt-manager-admin.php:47 admin/views/page-catalog.php:66 +msgid "Manager (by ROBOTSTXT) — Plugins" +msgstr "Manager (by ROBOTSTXT) — Plugins" +#: admin/class-robotstxt-manager-admin.php:64 +#: admin/class-robotstxt-manager-settings.php:207 msgid "You do not have sufficient permissions to access this page." msgstr "No tens permisos suficients per accedir a aquesta pàgina." -msgid "Your server runs PHP" -msgstr "El teu servidor funciona amb PHP" +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-admin.php:108 +#, php-format +msgid "" +"The payment for %s failed. Update your payment method from your ROBOTSTXT " +"account page to keep access." +msgstr "" +"El pagament de %s ha fallat. Actualitza el teu mètode de pagament des de la " +"teva pàgina de compte de ROBOTSTXT per mantenir l'accés." -msgid "Your site runs WordPress" -msgstr "El teu lloc funciona amb WordPress" - -msgid "This is the ROBOTSTXT plugin store: the catalog of plugins published by ROBOTSTXT, installable and updatable straight from your own wp-admin. Free plugins install with one click; premium plugins require an annual subscription that you purchase on our website." -msgstr "Aquesta és la botiga de plugins de ROBOTSTXT: el catàleg de plugins publicats per ROBOTSTXT, instal·lables i actualitzables directament des del teu propi wp-admin. Els plugins gratuïts s'instal·len amb un clic; els plugins premium requereixen una subscripció anual que es compra al nostre lloc web." - -msgid "Version" -msgstr "Versió" - -msgid "Status" -msgstr "Estat" - -msgid "€%s / year" -msgstr "%s €/any" - -msgid "Support" -msgstr "Suport" - -msgid "Need help with a ROBOTSTXT plugin? Visit the plugin's website (the link in its row above) for documentation and guides, or contact us through our website — we are happy to help." -msgstr "Necessites ajuda amb un plugin de ROBOTSTXT? Visita el lloc web del plugin (l'enllaç a la seva fila de dalt) per veure la documentació i les guies, o contacta amb nosaltres a través del nostre lloc web: estarem encantats d'ajudar-te." - -msgid "Payments, and how it works" -msgstr "Pagaments, i com funciona" - -msgid "Free plugins install instantly at no cost. Premium plugins are annual subscriptions: you pay once on our website and the subscription renews automatically every year until you cancel. You can cancel at any time from your ROBOTSTXT account page — access keeps working until the end of the paid period. All payments are processed securely by Mollie; we never see or store your card details." -msgstr "Els plugins gratuïts s'instal·len a l'instant i sense cost. Els plugins premium són subscripcions anuals: pagues una vegada al nostre lloc web i la subscripció es renova automàticament cada any fins que la cancellis. Pots cancel·lar-la en qualsevol moment des de la teva pàgina de compte de ROBOTSTXT; l'accés segueix funcionant fins al final del període pagat. Tots els pagaments els processa de manera segura Mollie; nosaltres mai no veiem ni desem les dades de la teva targeta." - -msgid "Installed required plugins: %s." -msgstr "Plugins requerits instal·lats: %s." - -msgid "Could not install the required plugin %s." -msgstr "No s'ha pogut instal·lar el plugin requerit %s." - -msgid "WordPress.org lookup failed: %s" -msgstr "La cerca a WordPress.org ha fallat: %s" - -msgid "No download found on WordPress.org for %s." -msgstr "No s'ha trobat cap baixada a WordPress.org per a %s." - -msgid "The downloaded plugin for %s does not have the expected folder structure." -msgstr "El plugin baixat per a %s no té lestructura de carpetes esperada." - -msgid "Requires: %s" -msgstr "Requereix: %s" - -msgid "The payment for %s failed. Update your payment method from your ROBOTSTXT account page to keep access." -msgstr "El pagament de %s ha fallat. Actualitza el teu mètode de pagament des de la teva pàgina de compte de ROBOTSTXT per mantenir l'accés." - -msgid "The subscription for %s has expired, but the plugin is still active on this site. Renew from your ROBOTSTXT account page to keep receiving updates." -msgstr "La subscripció de %s ha caducat, però el plugin encara és actiu en aquest lloc. Renova-la des de la teva pàgina de compte de ROBOTSTXT per seguir rebent actualitzacions." - -msgid "Subscribed" -msgstr "Subscrit" - -msgid "Subscribed — %d days left" -msgstr "Subscrit — queden %d dies" - -msgid "Payment failed" -msgstr "Pagament fallit" - -msgid "Cancelled" -msgstr "Cancel·lada" - -msgid "Expired" -msgstr "Caducada" +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-admin.php:119 +#, php-format +msgid "" +"The subscription for %s has expired, but the plugin is still active on this " +"site. Renew from your ROBOTSTXT account page to keep receiving updates." +msgstr "" +"La subscripció de %s ha caducat, però el plugin encara és actiu en aquest " +"lloc. Renova-la des de la teva pàgina de compte de ROBOTSTXT per seguir " +"rebent actualitzacions." +#. translators: 1: plugin slug, 2: days remaining. +#: admin/class-robotstxt-manager-admin.php:132 +#, php-format msgid "The subscription for %1$s expires in %2$d day." msgid_plural "The subscription for %1$s expires in %2$d days." msgstr[0] "La subscripció de %1$s caduca en %2$d dia." msgstr[1] "La subscripció de %1$s caduca en %2$d dies." -msgid "Create your free account at the ROBOTSTXT store to get your personal API key. The key links your subscriptions to this site and unlocks premium plugins and updates." -msgstr "Crea el teu compte gratuït a la botiga de ROBOTSTXT per obtenir la teva clau API personal. La clau vincula les teves subscripcions a aquest lloc i desbloqueja els plugins premium i les seves actualitzacions." +#: admin/class-robotstxt-manager-admin.php:153 +#: admin/class-robotstxt-manager-installer.php:421 +#: admin/class-robotstxt-manager-settings.php:379 +#: admin/class-robotstxt-manager-settings.php:405 +msgid "Insufficient permissions." +msgstr "Permisos insuficients." -msgid "Account-level API key from the ROBOTSTXT store (create your free account there to get one). Optional — the free catalog works without it — but required to link your subscriptions, install premium plugins, and receive their updates. Encrypted before storage." -msgstr "Clau API a nivell de compte de la botiga de ROBOTSTXT (crea allà el teu compte gratuït per obtenir-la). Opcional: el catàleg de plugins gratuïts funciona sense ella, però és necessària per vincular les teves subscripcions, instal·lar plugins premium i rebre les actualitzacions. Es xifra abans de desar-se." +#: admin/class-robotstxt-manager-admin.php:197 +msgid "Too many refreshes. Please wait a minute before refreshing again." +msgstr "Massa actualitzacions. Espereu un minut abans de tornar a actualitzar." + +#: admin/class-robotstxt-manager-installer.php:51 +#: admin/class-robotstxt-manager-installer.php:518 +msgid "Plugin not found in catalog." +msgstr "Plugin no trobat al catàleg." + +#. translators: %s: plugin name. +#: admin/class-robotstxt-manager-installer.php:73 +#, php-format +msgid "%s installed. Activate it from the list below." +msgstr "%s instal·lat. Activa'l des de la llista de sota." + +#. translators: %s: dependency slug. +#: admin/class-robotstxt-manager-installer.php:114 +#, php-format +msgid "Could not install the required plugin %s." +msgstr "No s'ha pogut instal·lar el plugin requerit %s." + +#. translators: %s: list of installed dependency names. +#: admin/class-robotstxt-manager-installer.php:130 +#, php-format +msgid "Installed required plugins: %s." +msgstr "Plugins requerits instal·lats: %s." + +#. translators: %s: error message from WordPress.org. +#: admin/class-robotstxt-manager-installer.php:272 +#, php-format +msgid "WordPress.org lookup failed: %s" +msgstr "La cerca a WordPress.org ha fallat: %s" + +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-installer.php:281 +#, php-format +msgid "No download found on WordPress.org for %s." +msgstr "No s'ha trobat cap baixada a WordPress.org per a %s." + +#: admin/class-robotstxt-manager-installer.php:287 +#: admin/class-robotstxt-manager-installer.php:540 +msgid "Could not create a temporary file for download." +msgstr "No s'ha pogut crear un fitxer temporal per a la baixada." + +#. translators: %s: HTTP transport error message. +#: admin/class-robotstxt-manager-installer.php:303 +#: admin/class-robotstxt-manager-installer.php:573 +#, php-format +msgid "Download failed: %s" +msgstr "Error en la baixada: %s" + +#. translators: %d: HTTP status code. +#: admin/class-robotstxt-manager-installer.php:310 +#: admin/class-robotstxt-manager-installer.php:588 +#, php-format +msgid "Download failed (HTTP %d)." +msgstr "Error en la baixada (HTTP %d)." + +#: admin/class-robotstxt-manager-installer.php:316 +#: admin/class-robotstxt-manager-installer.php:597 +msgid "The store returned an invalid file." +msgstr "La botiga ha retornat un fitxer no vàlid." + +#. translators: %s: upgrader error message. +#: admin/class-robotstxt-manager-installer.php:334 +#: admin/class-robotstxt-manager-installer.php:622 +#, php-format +msgid "Installation failed: %s" +msgstr "Error en la instal·lació: %s" + +#. translators: %s: upgrader error message. +#: admin/class-robotstxt-manager-installer.php:334 +#: admin/class-robotstxt-manager-installer.php:625 +msgid "Installation failed." +msgstr "Error en la instal·lació." + +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-installer.php:341 +#, php-format +msgid "" +"The downloaded plugin for %s does not have the expected folder structure." +msgstr "El plugin baixat per a %s no té l'estructura de carpetes esperada." + +#: admin/class-robotstxt-manager-installer.php:363 +#: admin/class-robotstxt-manager-installer.php:394 +msgid "Plugin is not installed." +msgstr "El plugin no està instal·lat." + +#. translators: %s: plugin name (slug). +#: admin/class-robotstxt-manager-installer.php:375 +#, php-format +msgid "%s activated." +msgstr "%s activat." + +#. translators: %s: plugin name (slug). +#: admin/class-robotstxt-manager-installer.php:406 +#, php-format +msgid "%s updated." +msgstr "%s actualitzat." + +#: admin/class-robotstxt-manager-installer.php:512 +msgid "Store is not configured." +msgstr "La botiga no està configurada." + +#: admin/class-robotstxt-manager-settings.php:59 +#: admin/views/page-settings.php:13 +msgid "Manager (by ROBOTSTXT) — Settings" +msgstr "Manager (by ROBOTSTXT) — Paràmetres" + +#: admin/class-robotstxt-manager-settings.php:60 +msgid "Settings" +msgstr "Paràmetres" + +#: admin/class-robotstxt-manager-settings.php:75 +msgid "Connection" +msgstr "Connexió" + +#: admin/class-robotstxt-manager-settings.php:92 +msgid "Store URL" +msgstr "URL de la botiga" + +#: admin/class-robotstxt-manager-settings.php:110 +msgid "API Key" +msgstr "Clau API" + +#: admin/class-robotstxt-manager-settings.php:118 +msgid "Cache" +msgstr "Memòria cau" + +#: admin/class-robotstxt-manager-settings.php:135 +msgid "Catalog Cache (minutes)" +msgstr "Memòria cau del catàleg (minuts)" + +#: admin/class-robotstxt-manager-settings.php:153 +msgid "Data on Uninstall" +msgstr "Dades en desinstal·lar" + +#: admin/class-robotstxt-manager-settings.php:188 +msgid "Testing…" +msgstr "S'està provant…" + +#: admin/class-robotstxt-manager-settings.php:189 +#: admin/class-robotstxt-manager-settings.php:274 +msgid "Test connection" +msgstr "Prova la connexió" + +#: admin/class-robotstxt-manager-settings.php:190 +msgid "Deleting…" +msgstr "S'està esborrant…" + +#: admin/class-robotstxt-manager-settings.php:191 +#: admin/class-robotstxt-manager-settings.php:278 +msgid "Delete API key" +msgstr "Esborra la clau API" + +#: admin/class-robotstxt-manager-settings.php:192 +msgid "" +"Delete the stored API key? The catalog and subscription data will stop " +"working until a new key is entered." +msgstr "" +"Segur que voleu esborrar la clau API desada? El catàleg i les dades de " +"subscripció deixaran de funcionar fins que s'introdueixi una clau nova." + +#: admin/class-robotstxt-manager-settings.php:193 +#: admin/class-robotstxt-manager-settings.php:414 +msgid "API key deleted. Save changes to persist." +msgstr "Clau API esborrada. Desa els canvis perquè faci efecte." + +#: admin/class-robotstxt-manager-settings.php:194 +msgid "An unexpected error occurred." +msgstr "S'ha produït un error inesperat." + +#: admin/class-robotstxt-manager-settings.php:226 +msgid "" +"Base URL of the remote Plugins Core installation that this site will pull " +"the plugin catalog from." +msgstr "" +"URL base de la instal·lació remota de Plugins Core d'on aquest lloc obtindrà " +"el catàleg de plugins." + +#. translators: %s: last 4 characters of the stored API key. +#: admin/class-robotstxt-manager-settings.php:257 +#, php-format +msgid "" +"A key is stored (last 4 characters: %s). Leave blank to keep " +"the existing key; enter a new value to replace it." +msgstr "" +"Hi ha una clau desada (últims 4 caràcters: %s). Deixa-ho en " +"blanc per mantenir la clau actual; escriu un valor nou per substituir-la." + +#: admin/class-robotstxt-manager-settings.php:262 +msgid "" +"A key is stored but could not be decoded. You can replace it by entering a " +"new value above, or delete it with the button below." +msgstr "" +"Hi ha una clau desada però no s'ha pogut descodificar. Pots substituir-la " +"escrivint un valor nou a dalt, o esborrar-la amb el botó de sota." + +#: admin/class-robotstxt-manager-settings.php:266 +msgid "" +"Account-level API key from the ROBOTSTXT store (create your free account " +"there to get one). Optional — the free catalog works without it — but " +"required to link your subscriptions, install premium plugins, and receive " +"their updates. Encrypted before storage." +msgstr "" +"Clau API a nivell de compte de la botiga de ROBOTSTXT (crea allà el teu " +"compte gratuït per obtenir-la). Opcional: el catàleg de plugins gratuïts " +"funciona sense ella, però és necessària per vincular les teves " +"subscripcions, instal·lar plugins premium i rebre les actualitzacions. Es " +"xifra abans de desar-se." + +#: admin/class-robotstxt-manager-settings.php:298 +msgid "" +"How long the catalog response from Core is cached in a transient. Default: " +"60 minutes. Lower values refresh more often at the cost of more requests to " +"Core. Maximum: 1440 (24 hours)." +msgstr "" +"Quant de temps es desa a la memòria cau la resposta del catàleg de Core en " +"un transient. Per defecte: 60 minuts. Els valors més baixos actualitzen més " +"sovint a costa de més sol·licituds a Core. Màxim: 1440 (24 hores)." + +#: admin/class-robotstxt-manager-settings.php:313 +msgid "Delete all plugin data when the plugin is uninstalled." +msgstr "Esborra totes les dades del plugin quan es desinstal·li." + +#: admin/class-robotstxt-manager-settings.php:343 +msgid "" +"The API key format is invalid. Copy the full key from your ROBOTSTXT account " +"page." +msgstr "" +"El format de la clau API no és vàlid. Copia la clau completa des de la teva " +"pàgina de compte de ROBOTSTXT." + +#: admin/views/page-catalog.php:69 +msgid "" +"This is the ROBOTSTXT plugin store: the catalog of plugins published by " +"ROBOTSTXT, installable and updatable straight from your own wp-admin. Free " +"plugins install with one click; premium plugins require an annual " +"subscription that you purchase on our website." +msgstr "" +"Aquesta és la botiga de plugins de ROBOTSTXT: el catàleg de plugins " +"publicats per ROBOTSTXT, instal·lables i actualitzables directament des del " +"teu propi wp-admin. Els plugins gratuïts s'instal·len amb un clic; els " +"plugins premium requereixen una subscripció anual que es compra al nostre " +"lloc web." + +#: admin/views/page-catalog.php:73 +msgid "Catalog refreshed." +msgstr "Catàleg actualitzat." + +#. translators: %s: store registration URL. +#: admin/views/page-catalog.php:89 +#, php-format +msgid "" +"Create your free account at the ROBOTSTXT store to get your personal API " +"key. The key links your subscriptions to this site and unlocks premium " +"plugins and updates." +msgstr "" +"Creeu el vostre compte gratuït a la botiga de ROBOTSTXT per obtenir la teva clau API " +"personal. La clau vincula les teves subscripcions a aquest lloc i " +"desbloqueja els plugins premium i les seves actualitzacions." + +#. translators: %s: settings URL. +#: admin/views/page-catalog.php:109 +#, php-format +msgid "" +"ROBOTSTXT Manager is not configured yet. Set the Store URL " +"and API key to see your plugin catalog." +msgstr "" +"ROBOTSTXT Manager encara no està configurat. Configura la URL " +"de la botiga i la clau API per veure el teu catàleg de plugins." + +#: admin/views/page-catalog.php:119 +msgid "" +"No plugins were returned by the ROBOTSTXT store. Check the Store URL and API " +"key on the Settings page, or click Refresh to try again." +msgstr "" +"La botiga ROBOTSTXT no ha retornat cap plugin. Revisa la URL de la botiga i " +"la clau API a la pàgina de paràmetres, o prem Actualitza per tornar-ho a " +"provar." + +#: admin/views/page-catalog.php:122 admin/views/page-catalog.php:125 +msgid "Refresh catalog" +msgstr "Actualitza el catàleg" + +#: admin/views/page-catalog.php:131 +msgid "Plugin" +msgstr "Plugin" + +#: admin/views/page-catalog.php:132 +msgid "Version" +msgstr "Versió" + +#: admin/views/page-catalog.php:133 +msgid "Requires WP" +msgstr "Requereix WP" + +#: admin/views/page-catalog.php:134 +msgid "Requires PHP" +msgstr "Requereix PHP" + +#: admin/views/page-catalog.php:135 +msgid "Price" +msgstr "Preu" + +#: admin/views/page-catalog.php:136 +msgid "Action" +msgstr "Acció" + +#: admin/views/page-catalog.php:137 +msgid "Status" +msgstr "Estat" + +#: admin/views/page-catalog.php:239 +msgid "Your site runs WordPress" +msgstr "El vostre lloc funciona amb WordPress" + +#: admin/views/page-catalog.php:251 +msgid "Your server runs PHP" +msgstr "El vostre servidor funciona amb PHP" + +#. translators: %s: formatted price number. +#: admin/views/page-catalog.php:264 +#, php-format +msgid "€%s / year" +msgstr "%s €/any" + +#. translators: %d: days remaining. +#: admin/views/page-catalog.php:282 +#, php-format +msgid "Subscribed — %d days left" +msgstr "Subscrit — queden %d dies" + +#: admin/views/page-catalog.php:286 +msgid "Subscribed" +msgstr "Subscrit" + +#: admin/views/page-catalog.php:289 +msgid "Payment failed" +msgstr "Pagament fallit" + +#: admin/views/page-catalog.php:291 +msgid "Cancelled" +msgstr "Cancel·lada" + +#: admin/views/page-catalog.php:293 +msgid "Expired" +msgstr "Caducada" + +#: admin/views/page-catalog.php:303 +msgid "Free" +msgstr "Gratuït" + +#: admin/views/page-catalog.php:309 +msgid "Incompatible" +msgstr "Incompatible" + +#: admin/views/page-catalog.php:312 +msgid "Buy" +msgstr "Comprar" + +#: admin/views/page-catalog.php:317 +msgid "Install" +msgstr "Instal·la" + +#: admin/views/page-catalog.php:319 +msgid "Activate" +msgstr "Activa" + +#: admin/views/page-catalog.php:321 +msgid "Update" +msgstr "Actualitza" + +#: admin/views/page-catalog.php:327 +msgid "Not installed" +msgstr "No instal·lat" + +#: admin/views/page-catalog.php:329 +msgid "Installed (inactive)" +msgstr "Instal·lat (inactiu)" + +#. translators: 1: installed version, 2: available version. +#: admin/views/page-catalog.php:334 +#, php-format +msgid "Update available (v%1$s → v%2$s)" +msgstr "Actualització disponible (v%1$s → v%2$s)" + +#: admin/views/page-catalog.php:340 +msgid "Up to date" +msgstr "Actualitzat" + +#: admin/views/page-catalog.php:349 +msgid "Visit website" +msgstr "Visita el lloc web" + +#. translators: %s: plugin name. +#: admin/views/page-catalog.php:349 +#, php-format +msgid "(about %s)" +msgstr "(sobre %s)" + +#. translators: %s: list of plugin slugs. +#: admin/views/page-catalog.php:360 +#, php-format +msgid "Requires: %s" +msgstr "Requereix: %s" + +#: admin/views/page-catalog.php:374 +msgid "Support" +msgstr "Suport" + +#: admin/views/page-catalog.php:376 +msgid "" +"Need help with a ROBOTSTXT plugin? Visit the plugin's website (the link in " +"its row above) for documentation and guides, or contact us through our " +"website — we are happy to help." +msgstr "" +"Necessites ajuda amb un plugin de ROBOTSTXT? Visita el lloc web del plugin " +"(l'enllaç a la seva fila de dalt) per veure la documentació i les guies, o " +"contacta amb nosaltres a través del nostre lloc web: estarem encantats " +"d'ajudar-te." + +#: admin/views/page-catalog.php:379 +msgid "Payments, and how it works" +msgstr "Pagaments, i com funciona" + +#: admin/views/page-catalog.php:381 +msgid "" +"Free plugins install instantly at no cost. Premium plugins are annual " +"subscriptions: you pay once on our website and the subscription renews " +"automatically every year until you cancel. You can cancel at any time from " +"your ROBOTSTXT account page — access keeps working until the end of the paid " +"period. All payments are processed securely by Mollie; we never see or store " +"your card details." +msgstr "" +"Els plugins gratuïts s'instal·len a l'instant i sense cost. Els plugins " +"premium són subscripcions anuals: pagues una vegada al nostre lloc web i la " +"subscripció es renova automàticament cada any fins que la cancellis. Pots " +"cancel·lar-la en qualsevol moment des de la teva pàgina de compte de " +"ROBOTSTXT; l'accés segueix funcionant fins al final del període pagat. Tots " +"els pagaments els processa de manera segura Mollie; nosaltres mai no veiem " +"ni desem les dades de la teva targeta." + +#. translators: %d: number of incompatible plugins. +#: admin/views/page-catalog.php:391 +#, php-format +msgid "" +"%d plugin in the catalog is not compatible with this site's WordPress or PHP " +"version." +msgid_plural "" +"%d plugins in the catalog are not compatible with this site's WordPress or " +"PHP version." +msgstr[0] "" +"%d plugin del catàleg no és compatible amb la versió de WordPress o de PHP " +"d'aquest lloc." +msgstr[1] "" +"%d plugins del catàleg no són compatibles amb la versió de WordPress o de " +"PHP d'aquest lloc." + +#. translators: 1: local WP version, 2: local PHP version. +#: admin/views/page-catalog.php:400 +#, php-format +msgid "This site runs WordPress %1$s on PHP %2$s." +msgstr "Aquest lloc funciona amb WordPress %1$s i PHP %2$s." + +#: includes/class-robotstxt-manager-core-client.php:141 +msgid "Store URL is not configured." +msgstr "La URL de la botiga no està configurada." + +#: includes/class-robotstxt-manager-core-client.php:148 +msgid "API key is not configured." +msgstr "La clau API no està configurada." + +#. translators: %s: HTTP transport error message. +#: includes/class-robotstxt-manager-core-client.php:158 +#, php-format +msgid "Could not reach Plugins Core: %s" +msgstr "No s'ha pogut connectar amb Plugins Core: %s" + +#. translators: %d: HTTP status code. +#: includes/class-robotstxt-manager-core-client.php:168 +#, php-format +msgid "The store responded with HTTP %d. Check the Store URL and API key." +msgstr "La botiga ha respost amb HTTP %d. Comproveu l'URL de la botiga i la clau API." + +#: includes/class-robotstxt-manager-core-client.php:177 +msgid "Connected." +msgstr "Connectat." diff --git a/languages/robotstxt-manager-es_ES.mo b/languages/robotstxt-manager-es_ES.mo index 40903e8..f82d8d7 100644 Binary files a/languages/robotstxt-manager-es_ES.mo and b/languages/robotstxt-manager-es_ES.mo differ diff --git a/languages/robotstxt-manager-es_ES.po b/languages/robotstxt-manager-es_ES.po index fb239cd..e691fd8 100644 --- a/languages/robotstxt-manager-es_ES.po +++ b/languages/robotstxt-manager-es_ES.po @@ -2,9 +2,12 @@ # This file is distributed under the GPL-3.0-or-later. msgid "" msgstr "" -"Project-Id-Version: Manager (by ROBOTSTXT) 0.6.0\n" -"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-manager\n" +"Project-Id-Version: Manager (by ROBOTSTXT) 1.4.1\n" +"Report-Msgid-Bugs-To: https://www.robotstxt.software/plugins/robotstxt-manager/\n" +"PO-Revision-Date: 2026-08-17 15:41+0000\n" "Last-Translator: ROBOTSTXT \n" +"POT-Creation-Date: 2026-08-17T14:52:09+00:00\n" +"X-Translator: ROBOTSTXT \n" "Language-Team: Español (España) \n" "Language: es_ES\n" "MIME-Version: 1.0\n" @@ -13,289 +16,569 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: robotstxt-manager\n" -msgid "%d plugin in the catalog is not compatible with this site's WordPress or PHP version." -msgid_plural "%d plugins in the catalog are not compatible with this site's WordPress or PHP version." -msgstr[0] "%d plugin del catálogo no es compatible con la versión de WordPress o de PHP de este sitio." -msgstr[1] "%d plugins del catálogo no son compatibles con la versión de WordPress o de PHP de este sitio." +#. Plugin Name of the plugin +#: robotstxt-manager.php +msgid "Manager (by ROBOTSTXT)" +msgstr "Manager (de ROBOTSTXT)" -msgid "%s activated." -msgstr "%s activado." +#. Plugin URI of the plugin +#: robotstxt-manager.php +msgid "https://www.robotstxt.software/plugins/robotstxt-manager/" +msgstr "https://www.robotstxt.software/plugins/robotstxt-manager/" -msgid "%s installed. Activate it from the list below." -msgstr "%s instalado. Actívalo desde la lista de abajo." - -msgid "%s updated." -msgstr "%s actualizado." - -msgid "(about %s)" -msgstr "(sobre %s)" - -msgid "A key is stored (last 4 characters: %s). Leave blank to keep the existing key; enter a new value to replace it." -msgstr "Hay una clave guardada (últimos 4 caracteres: %s). Déjalo en blanco para mantener la clave actual; escribe un valor nuevo para sustituirla." - -msgid "A key is stored but could not be decoded. You can replace it by entering a new value above, or delete it with the button below." -msgstr "Hay una clave guardada pero no se pudo descodificar. Puedes sustituirla escribiendo un valor nuevo arriba, o borrarla con el botón de abajo." - -msgid "API Key" -msgstr "Clave API" - -msgid "API key deleted. Save changes to persist." -msgstr "Clave API borrada. Guarda los cambios para que surta efecto." - -msgid "API key is not configured." -msgstr "La clave API no está configurada." - -msgid "Account-level API key issued by the ROBOTSTXT store. Required to authenticate catalog and subscription requests. The value is encrypted before storage." -msgstr "Clave API a nivel de cuenta emitida por la tienda ROBOTSTXT. Es necesaria para autenticar las solicitudes del catálogo y de las suscripciones. El valor se cifra antes de guardarse." - -msgid "Action" -msgstr "Acción" - -msgid "Activate" -msgstr "Activar" - -msgid "An unexpected error occurred." -msgstr "Ha ocurrido un error inesperado." - -msgid "Base URL of the remote Plugins Core installation that this site will pull the plugin catalog from." -msgstr "URL base de la instalación remota de Plugins Core de la que este sitio obtendrá el catálogo de plugins." - -msgid "Buy" -msgstr "Comprar" - -msgid "Cache" -msgstr "Caché" - -msgid "Catalog Cache (minutes)" -msgstr "Caché del catálogo (minutos)" - -msgid "Catalog refreshed." -msgstr "Catálogo actualizado." - -msgid "Connected." -msgstr "Conectado." - -msgid "Connection" -msgstr "Conexión" - -msgid "Could not create a temporary file for download." -msgstr "No se pudo crear un archivo temporal para la descarga." - -msgid "Could not reach Plugins Core: %s" -msgstr "No se pudo conectar con Plugins Core: %s" - -msgid "Data on Uninstall" -msgstr "Datos al desinstalar" - -msgid "Delete API key" -msgstr "Borrar la clave API" - -msgid "Delete all plugin data when the plugin is uninstalled." -msgstr "Borrar todos los datos del plugin cuando se desinstale." - -msgid "Delete the stored API key? The catalog and subscription data will stop working until a new key is entered." -msgstr "¿Seguro que quieres borrar la clave API guardada? El catálogo y los datos de suscripción dejarán de funcionar hasta que se introduzca una clave nueva." - -msgid "Deleting…" -msgstr "Borrando…" - -msgid "Download failed (HTTP %d)." -msgstr "Fallo en la descarga (HTTP %d)." - -msgid "Download failed: %s" -msgstr "Fallo en la descarga: %s" - -msgid "Free" -msgstr "Gratis" - -msgid "How long the catalog response from Core is cached in a transient. Default: 60 minutes. Lower values refresh more often at the cost of more requests to Core. Maximum: 1440 (24 hours)." -msgstr "Cuánto tiempo se guarda en caché la respuesta del catálogo de Core en un transient. Por defecto: 60 minutos. Los valores más bajos actualizan con más frecuencia a costa de más solicitudes a Core. Máximo: 1440 (24 horas)." - -msgid "Incompatible" -msgstr "Incompatible" - -msgid "Install" -msgstr "Instalar" - -msgid "Installation failed." -msgstr "Fallo en la instalación." - -msgid "Installation failed: %s" -msgstr "Fallo en la instalación: %s" - -msgid "Installed (inactive)" -msgstr "Instalado (inactivo)" - -msgid "Insufficient permissions." -msgstr "Permisos insuficientes." - - -msgid "Manager (by ROBOTSTXT) — Plugins" -msgstr "Manager (by ROBOTSTXT) — Plugins" - -msgid "Manager (by ROBOTSTXT) — Settings" -msgstr "Manager (by ROBOTSTXT) — Ajustes" - -msgid "No plugins were returned by the ROBOTSTXT store. Check the Store URL and API key on the Settings page, or click Refresh to try again." -msgstr "La tienda ROBOTSTXT no devolvió ningún plugin. Revisa la URL de la tienda y la clave API en la página de ajustes, o pulsa Actualizar para volver a intentarlo." - -msgid "Not installed" -msgstr "No instalado" - -msgid "Plugin" -msgstr "Plugin" - -msgid "Plugin is not installed." -msgstr "El plugin no está instalado." - -msgid "Plugin not found in catalog." -msgstr "Plugin no encontrado en el catálogo." - - -msgid "Price" -msgstr "Precio" +#. Description of the plugin +#: robotstxt-manager.php +msgid "" +"Client-side dashboard for the ROBOTSTXT plugin ecosystem. Lists the catalog " +"from a remote Plugins Core install, resolves local install/update state, and " +"installs, activates, and updates plugins directly from the store." +msgstr "" +"Escritorio del lado del cliente para el ecosistema de plugins de ROBOTSTXT. " +"Muestra el catálogo de una instalación remota de Plugins Core, resuelve el " +"estado local de instalación y actualización, e instala, activa y actualiza " +"plugins directamente desde la tienda." +#. Author of the plugin +#: robotstxt-manager.php admin/class-robotstxt-manager-admin.php:48 msgid "ROBOTSTXT" msgstr "ROBOTSTXT" -msgid "ROBOTSTXT Manager is not configured yet. Set the Store URL and API key to see your plugin catalog." -msgstr "ROBOTSTXT Manager aún no está configurado. Configura la URL de la tienda y la clave API para ver tu catálogo de plugins." +#. Author URI of the plugin +#: robotstxt-manager.php +msgid "https://www.robotstxt.software/" +msgstr "https://www.robotstxt.software/" -msgid "Refresh catalog" -msgstr "Actualizar el catálogo" - -msgid "Requires PHP" -msgstr "Requiere PHP" - -msgid "Requires WP" -msgstr "Requiere WP" - -msgid "Settings" -msgstr "Ajustes" - - -msgid "Store URL" -msgstr "URL de la tienda" - -msgid "Store URL is not configured." -msgstr "La URL de la tienda no está configurada." - -msgid "Store is not configured." -msgstr "La tienda no está configurada." - -msgid "Test connection" -msgstr "Probar la conexión" - -msgid "Testing…" -msgstr "Probando…" - -msgid "The API key format is invalid. Copy the full key from your ROBOTSTXT account page." -msgstr "El formato de la clave API no es válido. Copia la clave completa desde tu página de cuenta de ROBOTSTXT." - -msgid "The store responded with HTTP %d. Check the Store URL and API key." -msgstr "La tienda respondió con HTTP %d. Revisa la URL de la tienda y la clave API." - -msgid "The store returned an invalid file." -msgstr "La tienda devolvió un archivo no válido." - -msgid "This site runs WordPress %1$s on PHP %2$s." -msgstr "Este sitio funciona con WordPress %1$s y PHP %2$s." - -msgid "Too many refreshes. Please wait a minute before refreshing again." -msgstr "Demasiadas actualizaciones. Espera un minuto antes de volver a actualizar." - - -msgid "Up to date" -msgstr "Actualizado" - -msgid "Update" -msgstr "Actualizar" - -msgid "Update available (v%1$s → v%2$s)" -msgstr "Actualización disponible (v%1$s → v%2$s)" - -msgid "Visit website" -msgstr "Visitar el sitio web" +#: admin/class-robotstxt-manager-admin.php:47 admin/views/page-catalog.php:66 +msgid "Manager (by ROBOTSTXT) — Plugins" +msgstr "Manager (by ROBOTSTXT) — Plugins" +#: admin/class-robotstxt-manager-admin.php:64 +#: admin/class-robotstxt-manager-settings.php:207 msgid "You do not have sufficient permissions to access this page." msgstr "No tienes permisos suficientes para acceder a esta página." -msgid "Your server runs PHP" -msgstr "Tu servidor funciona con PHP" +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-admin.php:108 +#, php-format +msgid "" +"The payment for %s failed. Update your payment method from your ROBOTSTXT " +"account page to keep access." +msgstr "" +"El pago de %s falló. Actualiza tu método de pago desde tu página de cuenta " +"de ROBOTSTXT para mantener el acceso." -msgid "Your site runs WordPress" -msgstr "Tu sitio funciona con WordPress" - -msgid "This is the ROBOTSTXT plugin store: the catalog of plugins published by ROBOTSTXT, installable and updatable straight from your own wp-admin. Free plugins install with one click; premium plugins require an annual subscription that you purchase on our website." -msgstr "Esta es la tienda de plugins de ROBOTSTXT: el catálogo de plugins publicados por ROBOTSTXT, instalables y actualizables directamente desde tu propio wp-admin. Los plugins gratis se instalan con un clic; los plugins premium requieren una suscripción anual que se compra en nuestro sitio web." - -msgid "Version" -msgstr "Versión" - -msgid "Status" -msgstr "Estado" - -msgid "€%s / year" -msgstr "%s €/año" - -msgid "Support" -msgstr "Soporte" - -msgid "Need help with a ROBOTSTXT plugin? Visit the plugin's website (the link in its row above) for documentation and guides, or contact us through our website — we are happy to help." -msgstr "¿Necesitas ayuda con un plugin de ROBOTSTXT? Visita el sitio web del plugin (el enlace en su fila de arriba) para ver la documentación y las guías, o contáctanos a través de nuestro sitio web: estaremos encantados de ayudarte." - -msgid "Payments, and how it works" -msgstr "Pagos, y cómo funciona" - -msgid "Free plugins install instantly at no cost. Premium plugins are annual subscriptions: you pay once on our website and the subscription renews automatically every year until you cancel. You can cancel at any time from your ROBOTSTXT account page — access keeps working until the end of the paid period. All payments are processed securely by Mollie; we never see or store your card details." -msgstr "Los plugins gratis se instalan al instante y sin coste. Los plugins premium son suscripciones anuales: pagas una vez en nuestro sitio web y la suscripción se renueva automáticamente cada año hasta que la canceles. Puedes cancelarla en cualquier momento desde tu página de cuenta de ROBOTSTXT; el acceso sigue funcionando hasta el final del periodo pagado. Todos los pagos los procesa de forma segura Mollie; nosotros nunca vemos ni guardamos los datos de tu tarjeta." - -msgid "Installed required plugins: %s." -msgstr "Plugins requeridos instalados: %s." - -msgid "Could not install the required plugin %s." -msgstr "No se pudo instalar el plugin requerido %s." - -msgid "WordPress.org lookup failed: %s" -msgstr "La búsqueda en WordPress.org falló: %s" - -msgid "No download found on WordPress.org for %s." -msgstr "No se encontró ninguna descarga en WordPress.org para %s." - -msgid "The downloaded plugin for %s does not have the expected folder structure." -msgstr "El plugin descargado para %s no tiene la estructura de carpetas esperada." - -msgid "Requires: %s" -msgstr "Requiere: %s" - -msgid "The payment for %s failed. Update your payment method from your ROBOTSTXT account page to keep access." -msgstr "El pago de %s falló. Actualiza tu método de pago desde tu página de cuenta de ROBOTSTXT para mantener el acceso." - -msgid "The subscription for %s has expired, but the plugin is still active on this site. Renew from your ROBOTSTXT account page to keep receiving updates." -msgstr "La suscripción de %s ha caducado, pero el plugin sigue activo en este sitio. Renuévela desde tu página de cuenta de ROBOTSTXT para seguir recibiendo actualizaciones." - -msgid "Subscribed" -msgstr "Suscrito" - -msgid "Subscribed — %d days left" -msgstr "Suscrito — quedan %d días" - -msgid "Payment failed" -msgstr "Pago fallido" - -msgid "Cancelled" -msgstr "Cancelada" - -msgid "Expired" -msgstr "Caducada" +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-admin.php:119 +#, php-format +msgid "" +"The subscription for %s has expired, but the plugin is still active on this " +"site. Renew from your ROBOTSTXT account page to keep receiving updates." +msgstr "" +"La suscripción de %s ha caducado, pero el plugin sigue activo en este sitio. " +"Renuévela desde tu página de cuenta de ROBOTSTXT para seguir recibiendo " +"actualizaciones." +#. translators: 1: plugin slug, 2: days remaining. +#: admin/class-robotstxt-manager-admin.php:132 +#, php-format msgid "The subscription for %1$s expires in %2$d day." msgid_plural "The subscription for %1$s expires in %2$d days." msgstr[0] "La suscripción de %1$s caduca en %2$d día." msgstr[1] "La suscripción de %1$s caduca en %2$d días." -msgid "Create your free account at the ROBOTSTXT store to get your personal API key. The key links your subscriptions to this site and unlocks premium plugins and updates." -msgstr "Crea tu cuenta gratuita en la tienda de ROBOTSTXT para obtener tu clave API personal. La clave vincula tus suscripciones a este sitio y desbloquea los plugins premium y sus actualizaciones." +#: admin/class-robotstxt-manager-admin.php:153 +#: admin/class-robotstxt-manager-installer.php:421 +#: admin/class-robotstxt-manager-settings.php:379 +#: admin/class-robotstxt-manager-settings.php:405 +msgid "Insufficient permissions." +msgstr "Permisos insuficientes." -msgid "Account-level API key from the ROBOTSTXT store (create your free account there to get one). Optional — the free catalog works without it — but required to link your subscriptions, install premium plugins, and receive their updates. Encrypted before storage." -msgstr "Clave API a nivel de cuenta de la tienda de ROBOTSTXT (crea allí tu cuenta gratuita para obtenerla). Opcional: el catálogo de plugins gratis funciona sin ella, pero es necesaria para vincular tus suscripciones, instalar plugins premium y recibir sus actualizaciones. Se cifra antes de guardarse." +#: admin/class-robotstxt-manager-admin.php:197 +msgid "Too many refreshes. Please wait a minute before refreshing again." +msgstr "Demasiadas actualizaciones seguidas. Espera un minuto antes de volver a actualizar." + +#: admin/class-robotstxt-manager-installer.php:51 +#: admin/class-robotstxt-manager-installer.php:518 +msgid "Plugin not found in catalog." +msgstr "Plugin no encontrado en el catálogo." + +#. translators: %s: plugin name. +#: admin/class-robotstxt-manager-installer.php:73 +#, php-format +msgid "%s installed. Activate it from the list below." +msgstr "%s instalado. Actívalo desde la lista de abajo." + +#. translators: %s: dependency slug. +#: admin/class-robotstxt-manager-installer.php:114 +#, php-format +msgid "Could not install the required plugin %s." +msgstr "No se pudo instalar el plugin requerido %s." + +#. translators: %s: list of installed dependency names. +#: admin/class-robotstxt-manager-installer.php:130 +#, php-format +msgid "Installed required plugins: %s." +msgstr "Plugins requeridos instalados: %s." + +#. translators: %s: error message from WordPress.org. +#: admin/class-robotstxt-manager-installer.php:272 +#, php-format +msgid "WordPress.org lookup failed: %s" +msgstr "La búsqueda en WordPress.org falló: %s" + +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-installer.php:281 +#, php-format +msgid "No download found on WordPress.org for %s." +msgstr "No se encontró ninguna descarga en WordPress.org para %s." + +#: admin/class-robotstxt-manager-installer.php:287 +#: admin/class-robotstxt-manager-installer.php:540 +msgid "Could not create a temporary file for download." +msgstr "No se pudo crear un archivo temporal para la descarga." + +#. translators: %s: HTTP transport error message. +#: admin/class-robotstxt-manager-installer.php:303 +#: admin/class-robotstxt-manager-installer.php:573 +#, php-format +msgid "Download failed: %s" +msgstr "Fallo en la descarga: %s" + +#. translators: %d: HTTP status code. +#: admin/class-robotstxt-manager-installer.php:310 +#: admin/class-robotstxt-manager-installer.php:588 +#, php-format +msgid "Download failed (HTTP %d)." +msgstr "Fallo en la descarga (HTTP %d)." + +#: admin/class-robotstxt-manager-installer.php:316 +#: admin/class-robotstxt-manager-installer.php:597 +msgid "The store returned an invalid file." +msgstr "La tienda devolvió un archivo no válido." + +#. translators: %s: upgrader error message. +#: admin/class-robotstxt-manager-installer.php:334 +#: admin/class-robotstxt-manager-installer.php:622 +#, php-format +msgid "Installation failed: %s" +msgstr "Fallo en la instalación: %s" + +#. translators: %s: upgrader error message. +#: admin/class-robotstxt-manager-installer.php:334 +#: admin/class-robotstxt-manager-installer.php:625 +msgid "Installation failed." +msgstr "Fallo en la instalación." + +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-installer.php:341 +#, php-format +msgid "" +"The downloaded plugin for %s does not have the expected folder structure." +msgstr "" +"El plugin descargado para %s no tiene la estructura de carpetas esperada." + +#: admin/class-robotstxt-manager-installer.php:363 +#: admin/class-robotstxt-manager-installer.php:394 +msgid "Plugin is not installed." +msgstr "El plugin no está instalado." + +#. translators: %s: plugin name (slug). +#: admin/class-robotstxt-manager-installer.php:375 +#, php-format +msgid "%s activated." +msgstr "%s activado." + +#. translators: %s: plugin name (slug). +#: admin/class-robotstxt-manager-installer.php:406 +#, php-format +msgid "%s updated." +msgstr "%s actualizado." + +#: admin/class-robotstxt-manager-installer.php:512 +msgid "Store is not configured." +msgstr "La tienda no está configurada." + +#: admin/class-robotstxt-manager-settings.php:59 +#: admin/views/page-settings.php:13 +msgid "Manager (by ROBOTSTXT) — Settings" +msgstr "Manager (by ROBOTSTXT) — Ajustes" + +#: admin/class-robotstxt-manager-settings.php:60 +msgid "Settings" +msgstr "Ajustes" + +#: admin/class-robotstxt-manager-settings.php:75 +msgid "Connection" +msgstr "Conexión" + +#: admin/class-robotstxt-manager-settings.php:92 +msgid "Store URL" +msgstr "URL de la tienda" + +#: admin/class-robotstxt-manager-settings.php:110 +msgid "API Key" +msgstr "Clave API" + +#: admin/class-robotstxt-manager-settings.php:118 +msgid "Cache" +msgstr "Caché" + +#: admin/class-robotstxt-manager-settings.php:135 +msgid "Catalog Cache (minutes)" +msgstr "Caché del catálogo (minutos)" + +#: admin/class-robotstxt-manager-settings.php:153 +msgid "Data on Uninstall" +msgstr "Datos al desinstalar" + +#: admin/class-robotstxt-manager-settings.php:188 +msgid "Testing…" +msgstr "Probando…" + +#: admin/class-robotstxt-manager-settings.php:189 +#: admin/class-robotstxt-manager-settings.php:274 +msgid "Test connection" +msgstr "Probar la conexión" + +#: admin/class-robotstxt-manager-settings.php:190 +msgid "Deleting…" +msgstr "Borrando…" + +#: admin/class-robotstxt-manager-settings.php:191 +#: admin/class-robotstxt-manager-settings.php:278 +msgid "Delete API key" +msgstr "Borrar la clave API" + +#: admin/class-robotstxt-manager-settings.php:192 +msgid "" +"Delete the stored API key? The catalog and subscription data will stop " +"working until a new key is entered." +msgstr "" +"¿Seguro que quieres borrar la clave API guardada? El catálogo y los datos de " +"suscripción dejarán de funcionar hasta que se introduzca una clave nueva." + +#: admin/class-robotstxt-manager-settings.php:193 +#: admin/class-robotstxt-manager-settings.php:414 +msgid "API key deleted. Save changes to persist." +msgstr "Clave API borrada. Guarda los cambios para que surta efecto." + +#: admin/class-robotstxt-manager-settings.php:194 +msgid "An unexpected error occurred." +msgstr "Ha ocurrido un error inesperado." + +#: admin/class-robotstxt-manager-settings.php:226 +msgid "" +"Base URL of the remote Plugins Core installation that this site will pull " +"the plugin catalog from." +msgstr "" +"URL base de la instalación remota de Plugins Core de la que este sitio " +"obtendrá el catálogo de plugins." + +#. translators: %s: last 4 characters of the stored API key. +#: admin/class-robotstxt-manager-settings.php:257 +#, php-format +msgid "" +"A key is stored (last 4 characters: %s). Leave blank to keep " +"the existing key; enter a new value to replace it." +msgstr "" +"Hay una clave guardada (últimos 4 caracteres: %s). Déjalo en " +"blanco para mantener la clave actual; escribe un valor nuevo para " +"sustituirla." + +#: admin/class-robotstxt-manager-settings.php:262 +msgid "" +"A key is stored but could not be decoded. You can replace it by entering a " +"new value above, or delete it with the button below." +msgstr "" +"Hay una clave guardada pero no se pudo descodificar. Puedes sustituirla " +"escribiendo un valor nuevo arriba, o borrarla con el botón de abajo." + +#: admin/class-robotstxt-manager-settings.php:266 +msgid "" +"Account-level API key from the ROBOTSTXT store (create your free account " +"there to get one). Optional — the free catalog works without it — but " +"required to link your subscriptions, install premium plugins, and receive " +"their updates. Encrypted before storage." +msgstr "" +"Clave API a nivel de cuenta de la tienda de ROBOTSTXT (crea allí tu cuenta " +"gratuita para obtenerla). Opcional: el catálogo de plugins gratis funciona " +"sin ella, pero es necesaria para vincular tus suscripciones, instalar " +"plugins premium y recibir sus actualizaciones. Se cifra antes de guardarse." + +#: admin/class-robotstxt-manager-settings.php:298 +msgid "" +"How long the catalog response from Core is cached in a transient. Default: " +"60 minutes. Lower values refresh more often at the cost of more requests to " +"Core. Maximum: 1440 (24 hours)." +msgstr "" +"Cuánto tiempo se guarda en caché la respuesta del catálogo de Core en un " +"transient. Por defecto: 60 minutos. Los valores más bajos actualizan con más " +"frecuencia a costa de más solicitudes a Core. Máximo: 1440 (24 horas)." + +#: admin/class-robotstxt-manager-settings.php:313 +msgid "Delete all plugin data when the plugin is uninstalled." +msgstr "Borrar todos los datos del plugin cuando se desinstale." + +#: admin/class-robotstxt-manager-settings.php:343 +msgid "" +"The API key format is invalid. Copy the full key from your ROBOTSTXT account " +"page." +msgstr "" +"El formato de la clave API no es válido. Copia la clave completa desde tu " +"página de cuenta de ROBOTSTXT." + +#: admin/views/page-catalog.php:69 +msgid "" +"This is the ROBOTSTXT plugin store: the catalog of plugins published by " +"ROBOTSTXT, installable and updatable straight from your own wp-admin. Free " +"plugins install with one click; premium plugins require an annual " +"subscription that you purchase on our website." +msgstr "" +"Esta es la tienda de plugins de ROBOTSTXT: el catálogo de plugins publicados " +"por ROBOTSTXT, instalables y actualizables directamente desde tu propio wp-" +"admin. Los plugins gratis se instalan con un clic; los plugins premium " +"requieren una suscripción anual que se compra en nuestro sitio web." + +#: admin/views/page-catalog.php:73 +msgid "Catalog refreshed." +msgstr "Catálogo actualizado." + +#. translators: %s: store registration URL. +#: admin/views/page-catalog.php:89 +#, php-format +msgid "" +"Create your free account at the ROBOTSTXT store to get your personal API " +"key. The key links your subscriptions to this site and unlocks premium " +"plugins and updates." +msgstr "" +"Crea tu cuenta gratuita en la tienda de ROBOTSTXT para obtener tu clave API personal. " +"La clave vincula tus suscripciones a este sitio y desbloquea los plugins " +"premium y sus actualizaciones." + +#. translators: %s: settings URL. +#: admin/views/page-catalog.php:109 +#, php-format +msgid "" +"ROBOTSTXT Manager is not configured yet. Set the Store URL " +"and API key to see your plugin catalog." +msgstr "" +"ROBOTSTXT Manager aún no está configurado. Configura la URL " +"de la tienda y la clave API para ver tu catálogo de plugins." + +#: admin/views/page-catalog.php:119 +msgid "" +"No plugins were returned by the ROBOTSTXT store. Check the Store URL and API " +"key on the Settings page, or click Refresh to try again." +msgstr "" +"La tienda ROBOTSTXT no devolvió ningún plugin. Revisa la URL de la tienda y " +"la clave API en la página de ajustes, o pulsa Actualizar para volver a " +"intentarlo." + +#: admin/views/page-catalog.php:122 admin/views/page-catalog.php:125 +msgid "Refresh catalog" +msgstr "Actualizar el catálogo" + +#: admin/views/page-catalog.php:131 +msgid "Plugin" +msgstr "Plugin" + +#: admin/views/page-catalog.php:132 +msgid "Version" +msgstr "Versión" + +#: admin/views/page-catalog.php:133 +msgid "Requires WP" +msgstr "Requiere WP" + +#: admin/views/page-catalog.php:134 +msgid "Requires PHP" +msgstr "Requiere PHP" + +#: admin/views/page-catalog.php:135 +msgid "Price" +msgstr "Precio" + +#: admin/views/page-catalog.php:136 +msgid "Action" +msgstr "Acción" + +#: admin/views/page-catalog.php:137 +msgid "Status" +msgstr "Estado" + +#: admin/views/page-catalog.php:239 +msgid "Your site runs WordPress" +msgstr "Tu sitio funciona con WordPress" + +#: admin/views/page-catalog.php:251 +msgid "Your server runs PHP" +msgstr "Tu servidor funciona con PHP" + +#. translators: %s: formatted price number. +#: admin/views/page-catalog.php:264 +#, php-format +msgid "€%s / year" +msgstr "%s €/año" + +#. translators: %d: days remaining. +#: admin/views/page-catalog.php:282 +#, php-format +msgid "Subscribed — %d days left" +msgstr "Suscrito — quedan %d días" + +#: admin/views/page-catalog.php:286 +msgid "Subscribed" +msgstr "Suscrito" + +#: admin/views/page-catalog.php:289 +msgid "Payment failed" +msgstr "Pago fallido" + +#: admin/views/page-catalog.php:291 +msgid "Cancelled" +msgstr "Cancelada" + +#: admin/views/page-catalog.php:293 +msgid "Expired" +msgstr "Caducada" + +#: admin/views/page-catalog.php:303 +msgid "Free" +msgstr "Gratis" + +#: admin/views/page-catalog.php:309 +msgid "Incompatible" +msgstr "Incompatible" + +#: admin/views/page-catalog.php:312 +msgid "Buy" +msgstr "Comprar" + +#: admin/views/page-catalog.php:317 +msgid "Install" +msgstr "Instalar" + +#: admin/views/page-catalog.php:319 +msgid "Activate" +msgstr "Activar" + +#: admin/views/page-catalog.php:321 +msgid "Update" +msgstr "Actualizar" + +#: admin/views/page-catalog.php:327 +msgid "Not installed" +msgstr "No instalado" + +#: admin/views/page-catalog.php:329 +msgid "Installed (inactive)" +msgstr "Instalado (inactivo)" + +#. translators: 1: installed version, 2: available version. +#: admin/views/page-catalog.php:334 +#, php-format +msgid "Update available (v%1$s → v%2$s)" +msgstr "Actualización disponible (v%1$s → v%2$s)" + +#: admin/views/page-catalog.php:340 +msgid "Up to date" +msgstr "Actualizado" + +#: admin/views/page-catalog.php:349 +msgid "Visit website" +msgstr "Visitar el sitio web" + +#. translators: %s: plugin name. +#: admin/views/page-catalog.php:349 +#, php-format +msgid "(about %s)" +msgstr "(sobre %s)" + +#. translators: %s: list of plugin slugs. +#: admin/views/page-catalog.php:360 +#, php-format +msgid "Requires: %s" +msgstr "Requiere: %s" + +#: admin/views/page-catalog.php:374 +msgid "Support" +msgstr "Soporte" + +#: admin/views/page-catalog.php:376 +msgid "" +"Need help with a ROBOTSTXT plugin? Visit the plugin's website (the link in " +"its row above) for documentation and guides, or contact us through our " +"website — we are happy to help." +msgstr "" +"¿Necesitas ayuda con un plugin de ROBOTSTXT? Visita el sitio web del plugin " +"(el enlace en su fila de arriba) para ver la documentación y las guías, o " +"contáctanos a través de nuestro sitio web: estaremos encantados de ayudarte." + +#: admin/views/page-catalog.php:379 +msgid "Payments, and how it works" +msgstr "Pagos, y cómo funciona" + +#: admin/views/page-catalog.php:381 +msgid "" +"Free plugins install instantly at no cost. Premium plugins are annual " +"subscriptions: you pay once on our website and the subscription renews " +"automatically every year until you cancel. You can cancel at any time from " +"your ROBOTSTXT account page — access keeps working until the end of the paid " +"period. All payments are processed securely by Mollie; we never see or store " +"your card details." +msgstr "" +"Los plugins gratis se instalan al instante y sin coste. Los plugins premium " +"son suscripciones anuales: pagas una vez en nuestro sitio web y la " +"suscripción se renueva automáticamente cada año hasta que la canceles. " +"Puedes cancelarla en cualquier momento desde tu página de cuenta de " +"ROBOTSTXT; el acceso sigue funcionando hasta el final del periodo pagado. " +"Todos los pagos los procesa de forma segura Mollie; nosotros nunca vemos ni " +"guardamos los datos de tu tarjeta." + +#. translators: %d: number of incompatible plugins. +#: admin/views/page-catalog.php:391 +#, php-format +msgid "" +"%d plugin in the catalog is not compatible with this site's WordPress or PHP " +"version." +msgid_plural "" +"%d plugins in the catalog are not compatible with this site's WordPress or " +"PHP version." +msgstr[0] "" +"%d plugin del catálogo no es compatible con la versión de WordPress o de PHP " +"de este sitio." +msgstr[1] "" +"%d plugins del catálogo no son compatibles con la versión de WordPress o de " +"PHP de este sitio." + +#. translators: 1: local WP version, 2: local PHP version. +#: admin/views/page-catalog.php:400 +#, php-format +msgid "This site runs WordPress %1$s on PHP %2$s." +msgstr "Este sitio funciona con WordPress %1$s y PHP %2$s." + +#: includes/class-robotstxt-manager-core-client.php:141 +msgid "Store URL is not configured." +msgstr "La URL de la tienda no está configurada." + +#: includes/class-robotstxt-manager-core-client.php:148 +msgid "API key is not configured." +msgstr "La clave API no está configurada." + +#. translators: %s: HTTP transport error message. +#: includes/class-robotstxt-manager-core-client.php:158 +#, php-format +msgid "Could not reach Plugins Core: %s" +msgstr "No se pudo conectar con Plugins Core: %s" + +#. translators: %d: HTTP status code. +#: includes/class-robotstxt-manager-core-client.php:168 +#, php-format +msgid "The store responded with HTTP %d. Check the Store URL and API key." +msgstr "La tienda respondió con HTTP %d. Comprueba la URL de la tienda y la clave API." + +#: includes/class-robotstxt-manager-core-client.php:177 +msgid "Connected." +msgstr "Conectado." diff --git a/languages/robotstxt-manager.pot b/languages/robotstxt-manager.pot index 4d2d0c3..e0350b5 100644 --- a/languages/robotstxt-manager.pot +++ b/languages/robotstxt-manager.pot @@ -1,33 +1,480 @@ +# Copyright (C) 2026 ROBOTSTXT +# This file is distributed under the GPL-3.0-or-later. +msgid "" +msgstr "" +"Project-Id-Version: Manager (by ROBOTSTXT) 1.4.1\n" +"Report-Msgid-Bugs-To: https://www.robotstxt.software/plugins/robotstxt-manager/\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2026-08-17T14:52:09+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.12.0\n" +"X-Domain: robotstxt-manager\n" +#. Plugin Name of the plugin +#: robotstxt-manager.php +msgid "Manager (by ROBOTSTXT)" +msgstr "" +#. Plugin URI of the plugin +#: robotstxt-manager.php +msgid "https://www.robotstxt.software/plugins/robotstxt-manager/" +msgstr "" + +#. Description of the plugin +#: robotstxt-manager.php +msgid "Client-side dashboard for the ROBOTSTXT plugin ecosystem. Lists the catalog from a remote Plugins Core install, resolves local install/update state, and installs, activates, and updates plugins directly from the store." +msgstr "" + +#. Author of the plugin +#: robotstxt-manager.php +#: admin/class-robotstxt-manager-admin.php:48 +msgid "ROBOTSTXT" +msgstr "" + +#. Author URI of the plugin +#: robotstxt-manager.php +msgid "https://www.robotstxt.software/" +msgstr "" + +#: admin/class-robotstxt-manager-admin.php:47 +#: admin/views/page-catalog.php:66 +msgid "Manager (by ROBOTSTXT) — Plugins" +msgstr "" + +#: admin/class-robotstxt-manager-admin.php:64 +#: admin/class-robotstxt-manager-settings.php:207 +msgid "You do not have sufficient permissions to access this page." +msgstr "" + +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-admin.php:108 +#, php-format msgid "The payment for %s failed. Update your payment method from your ROBOTSTXT account page to keep access." msgstr "" +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-admin.php:119 +#, php-format msgid "The subscription for %s has expired, but the plugin is still active on this site. Renew from your ROBOTSTXT account page to keep receiving updates." msgstr "" +#. translators: 1: plugin slug, 2: days remaining. +#: admin/class-robotstxt-manager-admin.php:132 +#, php-format msgid "The subscription for %1$s expires in %2$d day." msgid_plural "The subscription for %1$s expires in %2$d days." msgstr[0] "" msgstr[1] "" -msgid "Subscribed" +#: admin/class-robotstxt-manager-admin.php:153 +#: admin/class-robotstxt-manager-installer.php:421 +#: admin/class-robotstxt-manager-settings.php:379 +#: admin/class-robotstxt-manager-settings.php:405 +msgid "Insufficient permissions." msgstr "" -msgid "Subscribed — %d days left" +#: admin/class-robotstxt-manager-admin.php:197 +msgid "Too many refreshes. Please wait a minute before refreshing again." msgstr "" -msgid "Payment failed" +#: admin/class-robotstxt-manager-installer.php:51 +#: admin/class-robotstxt-manager-installer.php:518 +msgid "Plugin not found in catalog." msgstr "" -msgid "Cancelled" +#. translators: %s: plugin name. +#: admin/class-robotstxt-manager-installer.php:73 +#, php-format +msgid "%s installed. Activate it from the list below." msgstr "" -msgid "Expired" +#. translators: %s: dependency slug. +#: admin/class-robotstxt-manager-installer.php:114 +#, php-format +msgid "Could not install the required plugin %s." msgstr "" +#. translators: %s: list of installed dependency names. +#: admin/class-robotstxt-manager-installer.php:130 +#, php-format +msgid "Installed required plugins: %s." +msgstr "" + +#. translators: %s: error message from WordPress.org. +#: admin/class-robotstxt-manager-installer.php:272 +#, php-format +msgid "WordPress.org lookup failed: %s" +msgstr "" + +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-installer.php:281 +#, php-format +msgid "No download found on WordPress.org for %s." +msgstr "" + +#: admin/class-robotstxt-manager-installer.php:287 +#: admin/class-robotstxt-manager-installer.php:540 +msgid "Could not create a temporary file for download." +msgstr "" + +#. translators: %s: HTTP transport error message. +#: admin/class-robotstxt-manager-installer.php:303 +#: admin/class-robotstxt-manager-installer.php:573 +#, php-format +msgid "Download failed: %s" +msgstr "" + +#. translators: %d: HTTP status code. +#: admin/class-robotstxt-manager-installer.php:310 +#: admin/class-robotstxt-manager-installer.php:588 +#, php-format +msgid "Download failed (HTTP %d)." +msgstr "" + +#: admin/class-robotstxt-manager-installer.php:316 +#: admin/class-robotstxt-manager-installer.php:597 +msgid "The store returned an invalid file." +msgstr "" + +#. translators: %s: upgrader error message. +#: admin/class-robotstxt-manager-installer.php:334 +#: admin/class-robotstxt-manager-installer.php:622 +#, php-format +msgid "Installation failed: %s" +msgstr "" + +#. translators: %s: upgrader error message. +#: admin/class-robotstxt-manager-installer.php:334 +#: admin/class-robotstxt-manager-installer.php:625 +msgid "Installation failed." +msgstr "" + +#. translators: %s: plugin slug. +#: admin/class-robotstxt-manager-installer.php:341 +#, php-format +msgid "The downloaded plugin for %s does not have the expected folder structure." +msgstr "" + +#: admin/class-robotstxt-manager-installer.php:363 +#: admin/class-robotstxt-manager-installer.php:394 +msgid "Plugin is not installed." +msgstr "" + +#. translators: %s: plugin name (slug). +#: admin/class-robotstxt-manager-installer.php:375 +#, php-format +msgid "%s activated." +msgstr "" + +#. translators: %s: plugin name (slug). +#: admin/class-robotstxt-manager-installer.php:406 +#, php-format +msgid "%s updated." +msgstr "" + +#: admin/class-robotstxt-manager-installer.php:512 +msgid "Store is not configured." +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:59 +#: admin/views/page-settings.php:13 +msgid "Manager (by ROBOTSTXT) — Settings" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:60 +msgid "Settings" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:75 +msgid "Connection" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:92 +msgid "Store URL" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:110 +msgid "API Key" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:118 +msgid "Cache" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:135 +msgid "Catalog Cache (minutes)" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:153 +msgid "Data on Uninstall" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:188 +msgid "Testing…" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:189 +#: admin/class-robotstxt-manager-settings.php:274 +msgid "Test connection" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:190 +msgid "Deleting…" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:191 +#: admin/class-robotstxt-manager-settings.php:278 +msgid "Delete API key" +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:192 +msgid "Delete the stored API key? The catalog and subscription data will stop working until a new key is entered." +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:193 +#: admin/class-robotstxt-manager-settings.php:414 +msgid "API key deleted. Save changes to persist." +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:194 +msgid "An unexpected error occurred." +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:226 +msgid "Base URL of the remote Plugins Core installation that this site will pull the plugin catalog from." +msgstr "" + +#. translators: %s: last 4 characters of the stored API key. +#: admin/class-robotstxt-manager-settings.php:257 +#, php-format +msgid "A key is stored (last 4 characters: %s). Leave blank to keep the existing key; enter a new value to replace it." +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:262 +msgid "A key is stored but could not be decoded. You can replace it by entering a new value above, or delete it with the button below." +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:266 +msgid "Account-level API key from the ROBOTSTXT store (create your free account there to get one). Optional — the free catalog works without it — but required to link your subscriptions, install premium plugins, and receive their updates. Encrypted before storage." +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:298 +msgid "How long the catalog response from Core is cached in a transient. Default: 60 minutes. Lower values refresh more often at the cost of more requests to Core. Maximum: 1440 (24 hours)." +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:313 +msgid "Delete all plugin data when the plugin is uninstalled." +msgstr "" + +#: admin/class-robotstxt-manager-settings.php:343 +msgid "The API key format is invalid. Copy the full key from your ROBOTSTXT account page." +msgstr "" + +#: admin/views/page-catalog.php:69 +msgid "This is the ROBOTSTXT plugin store: the catalog of plugins published by ROBOTSTXT, installable and updatable straight from your own wp-admin. Free plugins install with one click; premium plugins require an annual subscription that you purchase on our website." +msgstr "" + +#: admin/views/page-catalog.php:73 +msgid "Catalog refreshed." +msgstr "" + +#. translators: %s: store registration URL. +#: admin/views/page-catalog.php:89 +#, php-format msgid "Create your free account at the ROBOTSTXT store to get your personal API key. The key links your subscriptions to this site and unlocks premium plugins and updates." msgstr "" -msgid "Account-level API key from the ROBOTSTXT store (create your free account there to get one). Optional — the free catalog works without it — but required to link your subscriptions, install premium plugins, and receive their updates. Encrypted before storage." +#. translators: %s: settings URL. +#: admin/views/page-catalog.php:109 +#, php-format +msgid "ROBOTSTXT Manager is not configured yet. Set the Store URL and API key to see your plugin catalog." +msgstr "" + +#: admin/views/page-catalog.php:119 +msgid "No plugins were returned by the ROBOTSTXT store. Check the Store URL and API key on the Settings page, or click Refresh to try again." +msgstr "" + +#: admin/views/page-catalog.php:122 +#: admin/views/page-catalog.php:125 +msgid "Refresh catalog" +msgstr "" + +#: admin/views/page-catalog.php:131 +msgid "Plugin" +msgstr "" + +#: admin/views/page-catalog.php:132 +msgid "Version" +msgstr "" + +#: admin/views/page-catalog.php:133 +msgid "Requires WP" +msgstr "" + +#: admin/views/page-catalog.php:134 +msgid "Requires PHP" +msgstr "" + +#: admin/views/page-catalog.php:135 +msgid "Price" +msgstr "" + +#: admin/views/page-catalog.php:136 +msgid "Action" +msgstr "" + +#: admin/views/page-catalog.php:137 +msgid "Status" +msgstr "" + +#: admin/views/page-catalog.php:239 +msgid "Your site runs WordPress" +msgstr "" + +#: admin/views/page-catalog.php:251 +msgid "Your server runs PHP" +msgstr "" + +#. translators: %s: formatted price number. +#: admin/views/page-catalog.php:264 +#, php-format +msgid "€%s / year" +msgstr "" + +#. translators: %d: days remaining. +#: admin/views/page-catalog.php:282 +#, php-format +msgid "Subscribed — %d days left" +msgstr "" + +#: admin/views/page-catalog.php:286 +msgid "Subscribed" +msgstr "" + +#: admin/views/page-catalog.php:289 +msgid "Payment failed" +msgstr "" + +#: admin/views/page-catalog.php:291 +msgid "Cancelled" +msgstr "" + +#: admin/views/page-catalog.php:293 +msgid "Expired" +msgstr "" + +#: admin/views/page-catalog.php:303 +msgid "Free" +msgstr "" + +#: admin/views/page-catalog.php:309 +msgid "Incompatible" +msgstr "" + +#: admin/views/page-catalog.php:312 +msgid "Buy" +msgstr "" + +#: admin/views/page-catalog.php:317 +msgid "Install" +msgstr "" + +#: admin/views/page-catalog.php:319 +msgid "Activate" +msgstr "" + +#: admin/views/page-catalog.php:321 +msgid "Update" +msgstr "" + +#: admin/views/page-catalog.php:327 +msgid "Not installed" +msgstr "" + +#: admin/views/page-catalog.php:329 +msgid "Installed (inactive)" +msgstr "" + +#. translators: 1: installed version, 2: available version. +#: admin/views/page-catalog.php:334 +#, php-format +msgid "Update available (v%1$s → v%2$s)" +msgstr "" + +#: admin/views/page-catalog.php:340 +msgid "Up to date" +msgstr "" + +#: admin/views/page-catalog.php:349 +msgid "Visit website" +msgstr "" + +#. translators: %s: plugin name. +#: admin/views/page-catalog.php:349 +#, php-format +msgid "(about %s)" +msgstr "" + +#. translators: %s: list of plugin slugs. +#: admin/views/page-catalog.php:360 +#, php-format +msgid "Requires: %s" +msgstr "" + +#: admin/views/page-catalog.php:374 +msgid "Support" +msgstr "" + +#: admin/views/page-catalog.php:376 +msgid "Need help with a ROBOTSTXT plugin? Visit the plugin's website (the link in its row above) for documentation and guides, or contact us through our website — we are happy to help." +msgstr "" + +#: admin/views/page-catalog.php:379 +msgid "Payments, and how it works" +msgstr "" + +#: admin/views/page-catalog.php:381 +msgid "Free plugins install instantly at no cost. Premium plugins are annual subscriptions: you pay once on our website and the subscription renews automatically every year until you cancel. You can cancel at any time from your ROBOTSTXT account page — access keeps working until the end of the paid period. All payments are processed securely by Mollie; we never see or store your card details." +msgstr "" + +#. translators: %d: number of incompatible plugins. +#: admin/views/page-catalog.php:391 +#, php-format +msgid "%d plugin in the catalog is not compatible with this site's WordPress or PHP version." +msgid_plural "%d plugins in the catalog are not compatible with this site's WordPress or PHP version." +msgstr[0] "" +msgstr[1] "" + +#. translators: 1: local WP version, 2: local PHP version. +#: admin/views/page-catalog.php:400 +#, php-format +msgid "This site runs WordPress %1$s on PHP %2$s." +msgstr "" + +#: includes/class-robotstxt-manager-core-client.php:141 +msgid "Store URL is not configured." +msgstr "" + +#: includes/class-robotstxt-manager-core-client.php:148 +msgid "API key is not configured." +msgstr "" + +#. translators: %s: HTTP transport error message. +#: includes/class-robotstxt-manager-core-client.php:158 +#, php-format +msgid "Could not reach Plugins Core: %s" +msgstr "" + +#. translators: %d: HTTP status code. +#: includes/class-robotstxt-manager-core-client.php:168 +#, php-format +msgid "The store responded with HTTP %d. Check the Store URL and API key." +msgstr "" + +#: includes/class-robotstxt-manager-core-client.php:177 +msgid "Connected." msgstr "" diff --git a/readme.txt b/readme.txt index f83cd64..b2f0888 100644 --- a/readme.txt +++ b/readme.txt @@ -1,11 +1,11 @@ === Manager (by ROBOTSTXT) === -Contributors: javiercasares, robotstxt +Contributors: robotstxt, javiercasares Tags: dashboard, catalog, updates, subscriptions, management Requires at least: 4.4 Tested up to: 7.1 -Stable tag: 1.4.0 +Stable tag: 1.4.1 Requires PHP: 8.0 -Version: 1.4.0 +Version: 1.4.1 License: GPL-3.0-or-later License URI: https://www.gnu.org/licenses/gpl-3.0.txt @@ -92,6 +92,15 @@ Encrypted at rest using AES-256-CBC with a key derived from your site's WordPres == Changelog == +Only the 3 last versions. The full changelog will be at changelog.txt + += 1.4.1 = + +_Release date: 2026-08-17_ + +* Housekeeping release: plugin identity now points at the ROBOTSTXT software site — Plugin URI and Update URI are `https://www.robotstxt.software/plugins/robotstxt-manager/`, Author URI is `https://www.robotstxt.software/`, and this readme's full-changelog link points to the same page. +* Tooling aligned with the declared real floors: PHPCS `testVersion` and the preflight scan range now cover PHP 8.0-8.5 (was 7.4/8.4). + = 1.4.0 = _Release date: 2026-08-17_ @@ -104,124 +113,9 @@ _Release date: 2026-08-17_ * Descriptions render in the admin's language (Core 1.8.0+ `description_translations`), English fallback. -= 1.3.0 = - -_Release date: 2026-08-17_ - -* Catalog works without an API key (only the Store URL is needed); free plugins are listed and installable, and an info notice links to the store to register and get a personal key. Premium plugins show Buy only until subscribed; with an active subscription they show Install/Update. - -= 1.2.1 = - -_Release date: 2026-08-17_ - -* Plugin icons in the catalog rows (64×64, from the store's `icon_url`; white placeholder when missing). - -= 1.2.0 = - -_Release date: 2026-08-15_ - -* Subscription status (Phase 4): pills next to premium prices (Subscribed / N days left / Payment failed / Cancelled / Expired) and admin notices for failed payments, upcoming expiries, and expired-but-active plugins. Cached hourly from Core's /me/subscriptions. - -= 1.1.0 = - -_Release date: 2026-08-15_ - -* Cascade dependency install: required plugins (ecosystem or WordPress.org, e.g. Action Scheduler) are installed automatically before the plugin; "Requires:" hints in the catalog. - -= 1.0.0 = - -_Release date: 2026-08-15_ - -* Catalog redesign: columns Plugin · Version · Requires WP · Requires PHP · Price · Action · Status; Type merged into Price ("Free" or the annual price); per-plugin website link + description always open under each row; intro text after the title; Support and Payments sections below the table. First stable release. - -= 0.6.0 = - -_Release date: 2026-08-15_ - -* Spanish (es_ES) and Catalan (ca) translations for all admin strings (73 msgids, POT regenerated). -* "Refresh catalog" rate-limited to 6 per minute per user. - -= 0.5.3 = - -_Release date: 2026-08-15_ - -* Authenticated encryption (encrypt-then-MAC, matching Core 1.6.0) for the stored API key: tampered payloads fail closed; legacy-stored keys keep working and upgrade on next save. - -= 0.5.2 = - -_Release date: 2026-08-15_ - -* Fixed: updating (and installing) a plugin from the Manager catalog page failed with a fatal or a bare "Installation failed." Two defects in the panel's upgrader path: `Plugin_Upgrader` was never loaded in the `admin-post` context (it lives in its own file since the WordPress 5.3 class split, and only `class-wp-upgrader.php` was required), and the overwrite option was passed under the key `overwrite`, which current WordPress reads as `overwrite_package` — so the existing folder was never cleared. Verified end-to-end against the live store. - -= 0.5.1 = - -_Release date: 2026-08-15_ - -* Stabilization release: full code/security audit, compatibility scans, and documentation alignment. Real floors declared: WordPress 4.4+, PHP 8.0+ (previously declared 4.7/7.4). -* Connection test and catalog fetch now check the HTTP status code — an unauthorized or failing store reports an error instead of "Connected" / an empty catalog (non-200 responses are no longer cached). -* API-key field validates the key format before storing. -* Premium plugins are not offered as native updates when no API key is configured (they would only fail with HTTP 403). -* Domain normalization for premium package URLs strips only the literal `www.` prefix (hosts starting with "w" were mangled). -* Opt-in uninstall now also purges the WordPress update transient (premium entries carry the API key in their package URL) and drops a phantom option. - -= 0.5.0 = - -_Release date: 2026-08-14_ - -* Native update integration: catalog plugins now show WordPress's standard "Update available" badge and update through the regular wp-admin flow. Updates download from the ROBOTSTXT store (premium plugins authenticate via the account API key; requires Core 1.5.0+). "View details" modal data comes from the catalog. Refreshing the catalog also forces a fresh WordPress update check. - -= 0.4.0 = - -_Release date: 2026-08-14_ - -* Click-to-expand rows in the catalog: each plugin's description and a link to its website are shown in a detail row under the plugin name (CSS-only toggle, no JavaScript). Requires Core 1.4.2+ on the store. - -= 0.3.1 = - -_Release date: 2026-08-14_ - -* Default store URL is now `https://www.robotstxt.software`. Existing saved URLs are preserved. - -= 0.3.0 = - -_Release date: 2026-08-13_ - -* Classic install/activate/update flow: actions run on a full page load (`admin-post.php` with per-action-and-slug nonces) and report the outcome through standard admin notices (green success / red error), replacing the previous AJAX flow. - -= 0.2.0 = - -_Release date: 2026-08-13_ - -* Install action: free and premium plugins install directly from the catalog, authenticated with the account-level API key against Core's `/download` endpoint (requires Core 1.4.0+). - -= 0.1.3 = - -_Release date: 2026-08-12_ - -* Composer PHP requirement aligned to scan floor (>=7.4). - -= 0.1.2 = - -_Release date: 2026-08-12_ - -* Documentation refresh: readme.txt and changelog.txt aligned to the standard templates. Compatibility scan results documented. - -= 0.1.1 = - -_Release date: 2026-08-12_ - -* PHPCompatibility scan (5.6–8.5): real PHP floor is 7.2; project deliberately declares 8.4 to match the ecosystem. -* wp-compat scan against WordPress 4.7: zero errors. Real WP floor is ≤ 4.7; project declares 7.0 to match the ecosystem support window. - -= 0.1.0 = - -_Release date: 2026-08-12_ - -* Phase 1 scaffold. - = Previous versions = -If you want to see the full changelog, visit the [changelog.txt](https://git.robotstxt.es/ROBOTSTXT/robotstxt-manager/raw/branch/main/changelog.txt) file. +If you want to see the full changelog, visit the [plugin page](https://www.robotstxt.software/plugins/robotstxt-manager/). == Compliance == diff --git a/robotstxt-manager.php b/robotstxt-manager.php index 36e9340..dfa157b 100644 --- a/robotstxt-manager.php +++ b/robotstxt-manager.php @@ -1,13 +1,14 @@