This commit is contained in:
Javier Casares 2026-08-17 16:00:15 +00:00
commit 3a653a7bf3
9 changed files with 475 additions and 358 deletions

View file

@ -76,7 +76,8 @@ class Robotstxt_Manager_Admin {
*
* Clears the cached catalog response, purges WordPress's update_plugins
* transient so native update badges re-evaluate immediately, and
* redirects back to the page.
* redirects back to the page. Rate-limited to 6 refreshes per minute
* per user so a stuck browser cannot hammer the store.
*
* @return void
*/
@ -87,6 +88,16 @@ class Robotstxt_Manager_Admin {
check_admin_referer( 'robotstxt_manager_refresh_catalog' );
$bucket = 'robotstxt_manager_refresh_' . get_current_user_id();
$hits_raw = get_transient( $bucket );
$hits = is_numeric( $hits_raw ) ? (int) $hits_raw : 0;
if ( $hits >= 6 ) {
$this->redirect_refresh_error();
}
set_transient( $bucket, $hits + 1, MINUTE_IN_SECONDS );
$client = Robotstxt_Manager_Core_Client::from_options();
$client->clear_catalog_cache();
delete_site_transient( 'update_plugins' );
@ -103,6 +114,27 @@ class Robotstxt_Manager_Admin {
exit;
}
/**
* Redirects back to the catalog page with a rate-limit error notice.
*
* @return void
*/
private function redirect_refresh_error(): void {
wp_safe_redirect(
add_query_arg(
array(
'page' => self::PAGE_SLUG,
'robotstxt_manager_result' => 'error',
'robotstxt_manager_message' => rawurlencode(
__( 'Too many refreshes. Please wait a minute before refreshing again.', 'robotstxt-manager' )
),
),
admin_url( 'admin.php' )
)
);
exit;
}
/**
* Builds a nonce-protected admin-post action URL for a plugin row.
*

View file

@ -1,5 +1,23 @@
== Changelog ==
= 0.6.0 =
_Release date: 2026-08-15_
**Added**
* Spanish (es_ES) and Catalan (ca) translations — all 73 admin strings, regenerated POT included.
* "Refresh catalog" is rate-limited to 6 refreshes per minute per user (transient bucket), redirecting back with an error notice when exceeded; the limit rejects before clearing any cache (Phase 6 hardening).
**Changed**
* Plugin version 0.5.3 → 0.6.0. No database schema changes (no custom tables).
**Compatibility**
* WordPress: 4.4 - 7.1 (scan-verified: wp-compat clean from 4.4)
* PHP: 8.0 - 8.5 (scan-verified: PHPCompatibility + manual feature audit)
= 0.5.3 =
_Release date: 2026-08-15_

Binary file not shown.

View file

@ -1,184 +1,235 @@
# Copyright (C) 2026 ROBOTSTXT
# This file is distributed under the GPL-3.0-or-later.
msgid ""
msgstr ""
"Project-Id-Version: Manager (by ROBOTSTXT) 0.1.0\n"
"Project-Id-Version: Manager (by ROBOTSTXT) 0.6.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-manager\n"
"POT-Creation-Date: 2026-08-12T13:09:24+00:00\n"
"PO-Revision-Date: 2026-08-12 13:15+0000\n"
"Last-Translator: ROBOTSTXT <info@robotstxt.es>\n"
"Language-Team: Català\n"
"Last-Translator: ROBOTSTXT <hola@robotstxt.es>\n"
"Language-Team: Català <ca@robotstxt.es>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Domain: robotstxt-manager\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Domain: robotstxt-manager\n"
msgid "Manager (by ROBOTSTXT)"
msgstr "Manager (by ROBOTSTXT)"
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."
msgid "Client-side dashboard for the ROBOTSTXT plugin ecosystem. Lists the catalog from a remote Plugins Core install, resolves local install/update state, and surfaces subscription health. Phase 1: read-only catalog view."
msgstr "Tauler de control del costat del client per a l'ecosistema de plugins de ROBOTSTXT. Llista el catàleg des d'una instal·lació remota de Plugins Core, resol l'estat local d'instal·lació/actualització, i mostra l'estat de les subscripcions. Fase 1: vista de catàleg de només lectura."
msgid "%s activated."
msgstr "%s activat."
msgid "ROBOTSTXT"
msgstr "ROBOTSTXT"
msgid "%s installed. Activate it from the list below."
msgstr "%s instal·lat. Activa'l des de la llista de sota."
msgid "Manager (by ROBOTSTXT) — Plugins"
msgstr "Manager (by ROBOTSTXT) — Plugins"
msgid "%s updated."
msgstr "%s actualitzat."
msgid "You do not have sufficient permissions to access this page."
msgstr "No tens permisos suficients per accedir a aquesta pàgina."
msgid "(about %s)"
msgstr "(sobre %s)"
msgid "Insufficient permissions."
msgstr "Permisos insuficients."
msgid "A key is stored (last 4 characters: <code>%s</code>). Leave blank to keep the existing key; enter a new value to replace it."
msgstr "Hi ha una clau desada (últims 4 caràcters: <code>%s</code>). Deixa-ho en blanc per mantenir la clau actual; escriu un valor nou per substituir-la."
msgid "Manager (by ROBOTSTXT) — Settings"
msgstr "Manager (by ROBOTSTXT) — Configuració"
msgid "Settings"
msgstr "Configuració"
msgid "Connection"
msgstr "Connexió"
msgid "Store URL"
msgstr "URL del store"
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 "Data on Uninstall"
msgstr "Dades en desinstal·lar"
msgid "Testing…"
msgstr "Provant…"
msgid "Test connection"
msgstr "Provar connexió"
msgid "Deleting…"
msgstr "Eliminant…"
msgid "Delete API key"
msgstr "Eliminar clau API"
msgid "Delete the stored API key? The catalog and subscription data will stop working until a new key is entered."
msgstr "Eliminar la clau API emmagatzemada? Les dades del catàleg i les subscripcions deixaran de funcionar fins que s'introdueixi una nova clau."
msgid "API key deleted. Save changes to persist."
msgstr "Clau API eliminada. Desa els canvis per persistir."
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 des d'on aquest lloc obtindrà el catàleg de plugins."
msgid "A key is stored (last 4 characters: <code>%s</code>). Leave blank to keep the existing key; enter a new value to replace it."
msgstr "Hi ha una clau emmagatzemada (últims 4 caràcters: <code>%s</code>). Deixa-ho en blanc per mantenir la clau existent; introdueix un valor nou per reemplaçar-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 emmagatzemada però no s'ha pogut descodificar. Pots reemplaçar-la introduint un valor nou a dalt, o eliminar-la amb el botó de baix."
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 de nivell de compte emesa pel store de ROBOTSTXT. Necessària per autenticar les peticions de catàleg i subscripció. El valor es xifra abans d'emmagatzemar-se."
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 s'emmagatzema a la memòria cau la resposta del catàleg de Core. Per defecte: 60 minuts. Valors més baixos actualitzen més sovint a costa de més peticions a Core. Màxim: 1440 (24 hores)."
msgid "Delete all plugin data when the plugin is uninstalled."
msgstr "Eliminar totes les dades del plugin quan es desinstal·li."
msgid "Catalog refreshed."
msgstr "Catàleg actualitzat."
msgid "ROBOTSTXT Manager is not configured yet. <a href=\"%s\">Set the Store URL and API key</a> to see your plugin catalog."
msgstr "ROBOTSTXT Manager encara no està configurat. <a href=\"%s\">Configura la URL del store i la clau API</a> per veure el teu catàleg de plugins."
msgid "Connected."
msgstr "Connectat."
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 "El store de ROBOTSTXT no ha retornat cap plugin. Comprova la URL del store i la clau API a la pàgina de Configuració, o fes clic a Actualitzar per reintentar."
msgid "Connection"
msgstr "Connexió"
msgid "Refresh catalog"
msgstr "Actualitzar catàleg"
msgid "Plugin"
msgstr "Plugin"
msgid "Type"
msgstr "Tipus"
msgid "Price"
msgstr "Preu"
msgid "Requires WP"
msgstr "Requereix WP"
msgid "Requires PHP"
msgstr "Requereix PHP"
msgid "Local state"
msgstr "Estat local"
msgid "Action"
msgstr "Acció"
msgid "Premium"
msgstr "Premium"
msgid "Free"
msgstr "Gratuït"
msgid "Your site runs WordPress"
msgstr "El teu lloc usa WordPress"
msgid "Your server runs PHP"
msgstr "El teu servidor usa PHP"
msgid "Not installed"
msgstr "No instal·lat"
msgid "Installed (inactive)"
msgstr "Instal·lat (inactiu)"
msgid "Update available (v%1$s → v%2$s)"
msgstr "Actualització disponible (v%1$s → v%2$s)"
msgid "Up to date"
msgstr "Actualitzat"
msgid "Incompatible"
msgstr "Incompatible"
msgid "Buy"
msgstr "Comprar"
msgid "Install (soon)"
msgstr "Instal·lar (properament)"
msgid "Update (soon)"
msgstr "Actualitzar (properament)"
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 PHP d'aquest lloc."
msgstr[1] "%d plugins del catàleg no són compatibles amb la versió de WordPress o PHP d'aquest lloc."
msgid "This site runs WordPress %1$s on PHP %2$s."
msgstr "Aquest lloc usa WordPress %1$s en PHP %2$s."
msgid "Store URL is not configured."
msgstr "La URL del store no està configurada."
msgid "API key is not configured."
msgstr "La clau API no està configurada."
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 "Connected."
msgstr "Connectat."
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 "Local state"
msgstr "Estat local"
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 "Premium"
msgstr "Premium"
msgid "Price"
msgstr "Preu"
msgid "ROBOTSTXT"
msgstr "ROBOTSTXT"
msgid "ROBOTSTXT Manager is not configured yet. <a href=\"%s\">Set the Store URL and API key</a> to see your plugin catalog."
msgstr "ROBOTSTXT Manager encara no està configurat. <a href=\"%s\">Configura la URL de la botiga i la clau API</a> per veure el teu catàleg de plugins."
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 "Show more information"
msgstr "Mostra més informació"
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 "Type"
msgstr "Tipus"
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"
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"
msgid "Your site runs WordPress"
msgstr "El teu lloc funciona amb WordPress"

Binary file not shown.

View file

@ -1,184 +1,235 @@
# Copyright (C) 2026 ROBOTSTXT
# This file is distributed under the GPL-3.0-or-later.
msgid ""
msgstr ""
"Project-Id-Version: Manager (by ROBOTSTXT) 0.1.0\n"
"Project-Id-Version: Manager (by ROBOTSTXT) 0.6.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-manager\n"
"POT-Creation-Date: 2026-08-12T13:09:24+00:00\n"
"PO-Revision-Date: 2026-08-12 13:15+0000\n"
"Last-Translator: ROBOTSTXT <info@robotstxt.es>\n"
"Language-Team: Español\n"
"Last-Translator: ROBOTSTXT <hola@robotstxt.es>\n"
"Language-Team: Español (España) <es_ES@robotstxt.es>\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Domain: robotstxt-manager\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Domain: robotstxt-manager\n"
msgid "Manager (by ROBOTSTXT)"
msgstr "Manager (by ROBOTSTXT)"
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."
msgid "Client-side dashboard for the ROBOTSTXT plugin ecosystem. Lists the catalog from a remote Plugins Core install, resolves local install/update state, and surfaces subscription health. Phase 1: read-only catalog view."
msgstr "Panel de control del lado del cliente para el ecosistema de plugins de ROBOTSTXT. Lista el catálogo desde una instalación remota de Plugins Core, resuelve el estado local de instalación/actualización, y muestra el estado de las suscripciones. Fase 1: vista de catálogo de solo lectura."
msgid "%s activated."
msgstr "%s activado."
msgid "ROBOTSTXT"
msgstr "ROBOTSTXT"
msgid "%s installed. Activate it from the list below."
msgstr "%s instalado. Actívalo desde la lista de abajo."
msgid "Manager (by ROBOTSTXT) — Plugins"
msgstr "Manager (by ROBOTSTXT) — Plugins"
msgid "%s updated."
msgstr "%s actualizado."
msgid "You do not have sufficient permissions to access this page."
msgstr "No tienes permisos suficientes para acceder a esta página."
msgid "(about %s)"
msgstr "(sobre %s)"
msgid "Insufficient permissions."
msgstr "Permisos insuficientes."
msgid "A key is stored (last 4 characters: <code>%s</code>). Leave blank to keep the existing key; enter a new value to replace it."
msgstr "Hay una clave guardada (últimos 4 caracteres: <code>%s</code>). Déjalo en blanco para mantener la clave actual; escribe un valor nuevo para sustituirla."
msgid "Manager (by ROBOTSTXT) — Settings"
msgstr "Manager (by ROBOTSTXT) — Ajustes"
msgid "Settings"
msgstr "Ajustes"
msgid "Connection"
msgstr "Conexión"
msgid "Store URL"
msgstr "URL del store"
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 "Data on Uninstall"
msgstr "Datos al desinstalar"
msgid "Testing…"
msgstr "Probando…"
msgid "Test connection"
msgstr "Probar conexión"
msgid "Deleting…"
msgstr "Eliminando…"
msgid "Delete API key"
msgstr "Eliminar clave API"
msgid "Delete the stored API key? The catalog and subscription data will stop working until a new key is entered."
msgstr "¿Eliminar la clave API almacenada? Los datos del catálogo y las suscripciones dejarán de funcionar hasta que se introduzca una nueva clave."
msgid "API key deleted. Save changes to persist."
msgstr "Clave API eliminada. Guarda los cambios para persistir."
msgid "An unexpected error occurred."
msgstr "Ocurrió 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 desde la que este sitio obtendrá el catálogo de plugins."
msgid "A key is stored (last 4 characters: <code>%s</code>). Leave blank to keep the existing key; enter a new value to replace it."
msgstr "Hay una clave almacenada (últimos 4 caracteres: <code>%s</code>). Déjalo en blanco para mantener la clave existente; introduce un nuevo valor para reemplazarla."
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 almacenada pero no se pudo decodificar. Puedes reemplazarla introduciendo un nuevo valor arriba, o eliminarla con el botón de abajo."
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 de nivel de cuenta emitida por el store de ROBOTSTXT. Necesaria para autenticar las peticiones de catálogo y suscripción. El valor se cifra antes de almacenarse."
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 cachea la respuesta del catálogo de Core en un transient. Por defecto: 60 minutos. Valores más bajos actualizan más a menudo a costa de más peticiones a Core. Máximo: 1440 (24 horas)."
msgid "Delete all plugin data when the plugin is uninstalled."
msgstr "Eliminar todos los datos del plugin cuando se desinstale."
msgid "Catalog refreshed."
msgstr "Catálogo actualizado."
msgid "ROBOTSTXT Manager is not configured yet. <a href=\"%s\">Set the Store URL and API key</a> to see your plugin catalog."
msgstr "ROBOTSTXT Manager aún no está configurado. <a href=\"%s\">Configura la URL del store y la clave API</a> para ver tu catálogo de plugins."
msgid "Connected."
msgstr "Conectado."
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 "El store de ROBOTSTXT no devolvió ningún plugin. Comprueba la URL del store y la clave API en la página de Ajustes, o haz clic en Actualizar para reintentar."
msgid "Connection"
msgstr "Conexión"
msgid "Refresh catalog"
msgstr "Actualizar catálogo"
msgid "Plugin"
msgstr "Plugin"
msgid "Type"
msgstr "Tipo"
msgid "Price"
msgstr "Precio"
msgid "Requires WP"
msgstr "Requiere WP"
msgid "Requires PHP"
msgstr "Requiere PHP"
msgid "Local state"
msgstr "Estado local"
msgid "Action"
msgstr "Acción"
msgid "Premium"
msgstr "Premium"
msgid "Free"
msgstr "Gratis"
msgid "Your site runs WordPress"
msgstr "Tu sitio usa WordPress"
msgid "Your server runs PHP"
msgstr "Tu servidor usa PHP"
msgid "Not installed"
msgstr "No instalado"
msgid "Installed (inactive)"
msgstr "Instalado (inactivo)"
msgid "Update available (v%1$s → v%2$s)"
msgstr "Actualización disponible (v%1$s → v%2$s)"
msgid "Up to date"
msgstr "Actualizado"
msgid "Incompatible"
msgstr "Incompatible"
msgid "Buy"
msgstr "Comprar"
msgid "Install (soon)"
msgstr "Instalar (próximamente)"
msgid "Update (soon)"
msgstr "Actualizar (próximamente)"
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 PHP de este sitio."
msgstr[1] "%d plugins del catálogo no son compatibles con la versión de WordPress o PHP de este sitio."
msgid "This site runs WordPress %1$s on PHP %2$s."
msgstr "Este sitio usa WordPress %1$s en PHP %2$s."
msgid "Store URL is not configured."
msgstr "La URL del store no está configurada."
msgid "API key is not configured."
msgstr "La clave API no está configurada."
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 "Connected."
msgstr "Conectado."
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 "Local state"
msgstr "Estado local"
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 "Premium"
msgstr "Premium"
msgid "Price"
msgstr "Precio"
msgid "ROBOTSTXT"
msgstr "ROBOTSTXT"
msgid "ROBOTSTXT Manager is not configured yet. <a href=\"%s\">Set the Store URL and API key</a> to see your plugin catalog."
msgstr "ROBOTSTXT Manager aún no está configurado. <a href=\"%s\">Configura la URL de la tienda y la clave API</a> para ver tu catálogo de plugins."
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 "Show more information"
msgstr "Mostrar más información"
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 "Type"
msgstr "Tipo"
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"
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"
msgid "Your site runs WordPress"
msgstr "Tu sitio funciona con WordPress"

View file

@ -2,275 +2,233 @@
# This file is distributed under the GPL-3.0-or-later.
msgid ""
msgstr ""
"Project-Id-Version: Manager (by ROBOTSTXT) 0.1.3\n"
"Project-Id-Version: Manager (by ROBOTSTXT) 0.6.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-manager\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2026-08-12T14:17:17+00:00\n"
"POT-Creation-Date: 2026-08-15T12:00:00+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.12.0\n"
"X-Generator: manual\n"
"X-Domain: robotstxt-manager\n"
#. Plugin Name of the plugin
#: robotstxt-manager.php
msgid "Manager (by ROBOTSTXT)"
msgid "%d plugin in the catalog is not compatible with this site's WordPress or PHP version."
msgstr ""
#. Plugin URI of the plugin
#: robotstxt-manager.php
msgid "https://git.robotstxt.es/ROBOTSTXT/robotstxt-manager"
msgid "%s activated."
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 surfaces subscription health. Phase 1: read-only catalog view."
msgid "%s installed. Activate it from the list below."
msgstr ""
#. Author of the plugin
#: robotstxt-manager.php
#: admin/class-robotstxt-manager-admin.php:48
msgid "ROBOTSTXT"
msgid "%s updated."
msgstr ""
#. Author URI of the plugin
#: robotstxt-manager.php
msgid "https://www.robotstxt.es/"
msgid "(about %s)"
msgstr ""
#: admin/class-robotstxt-manager-admin.php:47
#: admin/views/page-catalog.php:40
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 ""
#: admin/class-robotstxt-manager-admin.php:83
#: admin/class-robotstxt-manager-settings.php:364
#: admin/class-robotstxt-manager-settings.php:390
msgid "Insufficient permissions."
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:398
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: <code>%s</code>). 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 issued by the ROBOTSTXT store. Required to authenticate catalog and subscription requests. The value is encrypted before storage."
msgid "API Key"
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)."
msgid "API key deleted. Save changes to persist."
msgstr ""
#: admin/class-robotstxt-manager-settings.php:313
msgid "Delete all plugin data when the plugin is uninstalled."
msgstr ""
#: admin/views/page-catalog.php:43
msgid "Catalog refreshed."
msgstr ""
#. translators: %s: settings URL.
#: admin/views/page-catalog.php:53
#, php-format
msgid "ROBOTSTXT Manager is not configured yet. <a href=\"%s\">Set the Store URL and API key</a> to see your plugin catalog."
msgstr ""
#: admin/views/page-catalog.php:63
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:66
#: admin/views/page-catalog.php:69
msgid "Refresh catalog"
msgstr ""
#: admin/views/page-catalog.php:75
msgid "Plugin"
msgstr ""
#: admin/views/page-catalog.php:76
msgid "Type"
msgstr ""
#: admin/views/page-catalog.php:77
msgid "Price"
msgstr ""
#: admin/views/page-catalog.php:78
msgid "Requires WP"
msgstr ""
#: admin/views/page-catalog.php:79
msgid "Requires PHP"
msgstr ""
#: admin/views/page-catalog.php:80
msgid "Local state"
msgstr ""
#: admin/views/page-catalog.php:81
msgid "Action"
msgstr ""
#: admin/views/page-catalog.php:135
msgid "Premium"
msgstr ""
#: admin/views/page-catalog.php:135
msgid "Free"
msgstr ""
#: admin/views/page-catalog.php:150
msgid "Your site runs WordPress"
msgstr ""
#: admin/views/page-catalog.php:162
msgid "Your server runs PHP"
msgstr ""
#: admin/views/page-catalog.php:172
msgid "Not installed"
msgstr ""
#: admin/views/page-catalog.php:174
msgid "Installed (inactive)"
msgstr ""
#. translators: 1: installed version, 2: available version.
#: admin/views/page-catalog.php:179
#, php-format
msgid "Update available (v%1$s → v%2$s)"
msgstr ""
#: admin/views/page-catalog.php:185
msgid "Up to date"
msgstr ""
#: admin/views/page-catalog.php:192
msgid "Incompatible"
msgstr ""
#: admin/views/page-catalog.php:194
msgid "Buy"
msgstr ""
#: admin/views/page-catalog.php:196
msgid "Install (soon)"
msgstr ""
#: admin/views/page-catalog.php:199
msgid "Update (soon)"
msgstr ""
#. translators: %d: number of incompatible plugins.
#: admin/views/page-catalog.php:214
#, 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:223
#, php-format
msgid "This site runs WordPress %1$s on PHP %2$s."
msgstr ""
#: includes/class-robotstxt-manager-core-client.php:128
msgid "Store URL is not configured."
msgstr ""
#: includes/class-robotstxt-manager-core-client.php:135
msgid "API key is not configured."
msgstr ""
#. translators: %s: HTTP transport error message.
#: includes/class-robotstxt-manager-core-client.php:145
#, php-format
msgid "Account-level API key issued by the ROBOTSTXT store. Required to authenticate catalog and subscription requests. The value is encrypted before storage."
msgstr ""
msgid "Action"
msgstr ""
msgid "Activate"
msgstr ""
msgid "An unexpected error occurred."
msgstr ""
msgid "Base URL of the remote Plugins Core installation that this site will pull the plugin catalog from."
msgstr ""
msgid "Buy"
msgstr ""
msgid "Cache"
msgstr ""
msgid "Catalog Cache (minutes)"
msgstr ""
msgid "Catalog refreshed."
msgstr ""
msgid "Connected."
msgstr ""
msgid "Connection"
msgstr ""
msgid "Could not create a temporary file for download."
msgstr ""
msgid "Could not reach Plugins Core: %s"
msgstr ""
#: includes/class-robotstxt-manager-core-client.php:154
msgid "Connected."
msgid "Data on Uninstall"
msgstr ""
msgid "Delete API key"
msgstr ""
msgid "Delete all plugin data when the plugin is uninstalled."
msgstr ""
msgid "Delete the stored API key? The catalog and subscription data will stop working until a new key is entered."
msgstr ""
msgid "Deleting…"
msgstr ""
msgid "Download failed (HTTP %d)."
msgstr ""
msgid "Download failed: %s"
msgstr ""
msgid "Free"
msgstr ""
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 ""
msgid "Incompatible"
msgstr ""
msgid "Install"
msgstr ""
msgid "Installation failed."
msgstr ""
msgid "Installation failed: %s"
msgstr ""
msgid "Installed (inactive)"
msgstr ""
msgid "Insufficient permissions."
msgstr ""
msgid "Local state"
msgstr ""
msgid "Manager (by ROBOTSTXT) — Plugins"
msgstr ""
msgid "Manager (by ROBOTSTXT) — Settings"
msgstr ""
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 ""
msgid "Not installed"
msgstr ""
msgid "Plugin"
msgstr ""
msgid "Plugin is not installed."
msgstr ""
msgid "Plugin not found in catalog."
msgstr ""
msgid "Premium"
msgstr ""
msgid "Price"
msgstr ""
msgid "ROBOTSTXT"
msgstr ""
msgid "ROBOTSTXT Manager is not configured yet. <a href=\"%s\">Set the Store URL and API key</a> to see your plugin catalog."
msgstr ""
msgid "Refresh catalog"
msgstr ""
msgid "Requires PHP"
msgstr ""
msgid "Requires WP"
msgstr ""
msgid "Settings"
msgstr ""
msgid "Show more information"
msgstr ""
msgid "Store URL"
msgstr ""
msgid "Store URL is not configured."
msgstr ""
msgid "Store is not configured."
msgstr ""
msgid "Test connection"
msgstr ""
msgid "Testing…"
msgstr ""
msgid "The API key format is invalid. Copy the full key from your ROBOTSTXT account page."
msgstr ""
msgid "The store responded with HTTP %d. Check the Store URL and API key."
msgstr ""
msgid "The store returned an invalid file."
msgstr ""
msgid "This site runs WordPress %1$s on PHP %2$s."
msgstr ""
msgid "Too many refreshes. Please wait a minute before refreshing again."
msgstr ""
msgid "Type"
msgstr ""
msgid "Up to date"
msgstr ""
msgid "Update"
msgstr ""
msgid "Update available (v%1$s → v%2$s)"
msgstr ""
msgid "Visit website"
msgstr ""
msgid "You do not have sufficient permissions to access this page."
msgstr ""
msgid "Your server runs PHP"
msgstr ""
msgid "Your site runs WordPress"
msgstr ""

View file

@ -3,9 +3,9 @@ Contributors: javiercasares, robotstxt
Tags: dashboard, catalog, updates, subscriptions, management
Requires at least: 4.4
Tested up to: 7.1
Stable tag: 0.5.3
Stable tag: 0.6.0
Requires PHP: 8.0
Version: 0.5.3
Version: 0.6.0
License: GPL-3.0-or-later
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
@ -89,6 +89,13 @@ Encrypted at rest using AES-256-CBC with a key derived from your site's WordPres
== Changelog ==
= 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_

View file

@ -3,7 +3,7 @@
* Plugin Name: Manager (by ROBOTSTXT)
* Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-manager
* Description: 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.
* Version: 0.5.3
* Version: 0.6.0
* Requires at least: 4.4
* Requires PHP: 8.0
* Author: ROBOTSTXT
@ -21,7 +21,7 @@ if ( ! defined( 'ABSPATH' ) ) {
}
/** Plugin version. */
define( 'ROBOTSTXT_MANAGER_VERSION', '0.5.3' );
define( 'ROBOTSTXT_MANAGER_VERSION', '0.6.0' );
/** Absolute path to the plugin directory, with trailing slash. */
define( 'ROBOTSTXT_MANAGER_DIR', plugin_dir_path( __FILE__ ) );