Files
descrybe/apps/web/src/lib/i18n/messages/es.ts
T

5662 lines
426 KiB
TypeScript
Raw Normal View History

2026-08-16 18:49:02 +02:00
import type { MessageDict } from "./types";
2026-08-17 00:39:25 +02:00
/** Spanish (es) UI pack — keys must stay in sync with en.ts. */
export const es: MessageDict = {
"app.name": "Descrybe",
"app.home": "Inicio de Descrybe",
"common.cancel": "Cancelar",
"common.save": "Guardar cambios",
"common.saveShort": "Guardar",
"common.continue": "Continuar",
"common.open": "Abrir",
"common.markDone": "Marcar como hecho",
"common.viewAll": "Ver todo",
"common.close": "Cerrar",
"common.askAdmin": "Pregunta a un administrador de la empresa",
2026-08-17 00:39:25 +02:00
"common.you": "Tú",
"common.active": "Activo",
"common.pending": "Pendiente",
2026-08-17 00:39:25 +02:00
"common.email": "Correo electrónico",
"common.password": "Contraseña",
"common.name": "Tu nombre",
"common.viewPricing": "Ver precios",
2026-08-17 00:39:25 +02:00
"common.backToSignIn": "Volver a iniciar sesión",
"common.signingOut": "Cerrando sesión…",
"common.signOutAndContinue": "Cerrar sesión y continuar",
"common.staySignedIn": "Seguir conectado",
"a11y.skipToContent": "Saltar al contenido",
"theme.switchToDark": "Cambiar a tema oscuro",
"theme.switchToLight": "Cambiar a tema claro",
2026-08-17 00:39:25 +02:00
"header.signOut": "Cerrar sesión",
"header.signingOut": "Cerrando sesión…",
"status.emDash": "—",
"status.pending": "Pendiente",
"status.processing": "Procesando",
"status.completed": "Completado",
"status.failed": "Fallido",
"status.cancelled": "Cancelado",
"nav.section.overview": "Resumen",
2026-08-17 00:39:25 +02:00
"nav.section.catalog": "Catálogo",
"nav.section.feeds": "Feeds",
"nav.section.stores": "Tiendas",
"nav.section.processing": "Procesando",
"nav.section.marketing": "Marketing",
"nav.section.integrations": "Integraciones",
"nav.section.account": "Cuenta",
"nav.section.platform": "Plataforma",
"nav.dashboard": "Panel",
"nav.products": "Productos",
2026-08-17 00:39:25 +02:00
"nav.categories": "Categorías",
"nav.attributes": "Atributos",
"nav.fields": "Campos",
"nav.feeds": "Feeds",
"nav.exports": "Exportaciones",
"nav.stores": "Tiendas",
"nav.jobs": "Trabajos",
2026-08-17 00:39:25 +02:00
"nav.campaigns": "Campañas",
"nav.calendar": "Calendario",
"nav.seo": "SEO",
"nav.brand": "Marca",
2026-08-17 00:39:25 +02:00
"nav.reviews": "Reseñas",
"nav.ai": "IA",
2026-08-17 00:39:25 +02:00
"nav.email": "Correo electrónico",
"nav.billing": "Facturación",
"nav.settings": "Configuración",
"nav.support": "Soporte",
"nav.admin": "Admin",
2026-08-17 00:39:25 +02:00
"nav.main": "Navegación principal",
"nav.sidebar": "Barra lateral de la app",
2026-08-17 00:39:25 +02:00
"nav.close": "Cerrar navegación",
"nav.closeMenu": "Cerrar menú",
"nav.open": "Abrir navegación",
"nav.commandPalette": "Buscar páginas",
"nav.commandPaletteLabel": "Buscar",
2026-08-17 00:39:25 +02:00
"auth.login.title": "Iniciar sesión",
"auth.login.description": "Usa tu correo y contraseña de Descrybe.",
"auth.login.submit": "Iniciar sesión",
"auth.login.submitting": "Iniciando sesión…",
"auth.login.failed": "Error al iniciar sesión",
"auth.login.passwordNotSet": "Esta cuenta aún necesita una contraseña. Abre el enlace de invitación o pide a un administrador que emita uno nuevo.",
"auth.login.setPasswordFirstTitle": "Establece la contraseña primero:",
"auth.login.setPasswordFirstBody": "usa el enlace de invitación de tu correo. Si el enlace fue a una dirección antigua (cambio de correo), pide a un administrador de la empresa que emita una nueva invitación para establecer contraseña a {email}.",
"auth.login.yourEmail": "tu correo",
"auth.login.platformAdminsReissue": "Los administradores de plataforma pueden reemitir desde",
2026-08-17 00:39:25 +02:00
"auth.login.adminUsersLink": "Admin → Usuarios",
"auth.login.haveToken": "¿Tienes un token? Abrir aceptar invitación",
"auth.login.noAccount": "¿Sin cuenta?",
"auth.login.createCompany": "Crear empresa",
2026-08-17 00:39:25 +02:00
"auth.login.haveInvite": "¿Tienes una invitación o un enlace para establecer contraseña?",
"auth.login.acceptInvite": "Aceptar invitación",
"auth.login.forgotPassword": "¿Olvidaste la contraseña?",
"auth.login.forgotPasswordHelp": "Introduce tu correo en la página de restablecimiento. Si nunca configuraste una contraseña, usa el enlace de invitación / establecer contraseña.",
"auth.forgot.title": "Olvidé la contraseña",
"auth.forgot.description": "Introduce el correo de tu cuenta. Si coincide con una cuenta activa, enviaremos un enlace de restablecimiento.",
"auth.forgot.submit": "Enviar enlace",
2026-08-17 00:39:25 +02:00
"auth.forgot.submitting": "Enviando…",
"auth.forgot.failed": "No se pudo solicitar el restablecimiento",
"auth.forgot.sentTitle": "Revisa tu correo",
2026-08-17 00:39:25 +02:00
"auth.forgot.sentBody": "Si existe una cuenta con esa dirección, el enlace de restablecimiento está en camino. Caduca en una hora.",
"auth.forgot.backToSignIn": "Volver a iniciar sesión",
"auth.reset.title": "Restablecer contraseña",
"auth.reset.description": "Elige una nueva contraseña para tu cuenta de Descrybe (al menos 8 caracteres).",
"auth.reset.submit": "Guardar nueva contraseña",
"auth.reset.submitting": "Guardando…",
"auth.reset.failed": "No se pudo restablecer la contraseña",
"auth.reset.doneTitle": "Contraseña actualizada",
"auth.reset.doneDescription": "Inicia sesión con tu correo y la nueva contraseña.",
"auth.reset.goToSignIn": "Ir a iniciar sesión",
"auth.reset.passwordConfirm": "Confirmar contraseña",
"auth.reset.passwordMismatch": "Las contraseñas no coinciden",
"auth.reset.missingTitle": "Falta el enlace de restablecimiento",
2026-08-17 00:39:25 +02:00
"auth.reset.missingDescription": "Abre el enlace de tu correo para elegir una nueva contraseña.",
"auth.reset.requestNewLink": "Solicitar un nuevo enlace de restablecimiento",
2026-08-17 00:39:25 +02:00
"auth.reset.tokenMissing": "No se proporcionó un enlace de restablecimiento. Usa el enlace de tu correo o solicita uno nuevo.",
"auth.reset.tokenInvalid": "Este enlace de restablecimiento no es válido o ha caducado. Solicita uno nuevo en la página de olvidé la contraseña.",
"auth.reset.linkRecognized": "Enlace de restablecimiento reconocido. Introduce una nueva contraseña abajo — el secreto no se muestra en esta página.",
"auth.reset.tokenLabel": "Token de restablecimiento",
"auth.reset.passwordHint": "Al menos 8 caracteres. Sin otras reglas de complejidad.",
"auth.register.title": "Crear empresa",
"auth.register.description": "Registra una empresa y su usuario administrador.",
"auth.register.companyName": "Nombre de la empresa",
"auth.register.submit": "Crear cuenta",
2026-08-17 00:39:25 +02:00
"auth.register.submitting": "Creando…",
"auth.register.failed": "Error en el registro",
2026-08-17 00:39:25 +02:00
"auth.register.haveAccount": "¿Ya tienes una cuenta?",
"auth.register.signIn": "Iniciar sesión",
"auth.invite.title": "Aceptar invitación",
"auth.invite.setPasswordTitle": "Establecer contraseña",
"auth.invite.description": "Establece tu contraseña para unirte a la empresa. Tu administrador asignó Miembro (trabajo diario) o Admin (equipo y facturación).",
"auth.invite.setPasswordDescription": "Elige una contraseña para tu cuenta Descrybe migrada (al menos 8 caracteres).",
"auth.invite.checking": "Comprobando invitación…",
"auth.invite.forEmail": "Invitación para {email}.",
"auth.invite.linkRecognized": "Enlace de invitación reconocido. Introduce una contraseña abajo para continuar — el secreto no se muestra en esta página.",
"auth.invite.resetLinkRecognized": "Enlace de restablecimiento reconocido. Introduce una contraseña abajo para continuar — el secreto no se muestra en esta página.",
"auth.invite.tokenLabel": "Token de invitación",
"auth.invite.resetTokenLabel": "Token de restablecimiento",
2026-08-17 00:39:25 +02:00
"auth.invite.tokenHelp": "Pega el token del correo de invitación. Se muestra enmascarado en este campo.",
"auth.invite.passwordHint": "Al menos 8 caracteres. Sin otras reglas de complejidad.",
2026-08-17 00:39:25 +02:00
"auth.invite.submit": "Aceptar invitación",
"auth.invite.setPasswordSubmit": "Establecer contraseña",
"auth.invite.accepting": "Aceptando…",
"auth.invite.saving": "Guardando…",
"auth.invite.verifyFailed": "No se pudo verificar la invitación",
"auth.invite.verifySetPasswordFailed": "No se pudo verificar el enlace para establecer contraseña",
"auth.invite.acceptFailed": "No se pudo aceptar la invitación",
"auth.invite.setPasswordFailed": "No se pudo establecer la contraseña",
"auth.invite.expired": "Esta invitación no es válida o ha caducado. Pide a tu administrador de la empresa que envíe una nueva invitación y abre el nuevo enlace (o pega el nuevo token abajo).",
"auth.invite.setPasswordExpired": "Este enlace para establecer contraseña no es válido o ha caducado. Pide a un administrador de la empresa o de la plataforma que lo reemita y abre el nuevo enlace (o pega el nuevo token abajo).",
"auth.invite.emailMismatchDefault": "Has iniciado sesión con un correo distinto al de esta invitación.",
"auth.invite.expiredFooter": "¿Enlace caducado? Pide a un administrador que lo reemita — no hay API de reenvío autoservicio. Administradores de plataforma:",
"auth.invite.adminUsersLink": "Admin → Usuarios",
"auth.invite.doneTitle": "Ya formas parte del equipo",
2026-08-17 00:39:25 +02:00
"auth.invite.doneSetPasswordTitle": "Contraseña guardada",
"auth.invite.doneDescription": "Tu cuenta está lista. A continuación, abre el panel para trabajar con feeds y productos, o revisa la configuración de la empresa.",
"auth.invite.doneSetPasswordDescription": "Inicia sesión con tu correo y la nueva contraseña para abrir tu espacio de trabajo.",
"auth.invite.openDashboard": "Abrir panel",
2026-08-17 00:39:25 +02:00
"auth.invite.companySettings": "Configuración de la empresa",
"auth.invite.goToSignIn": "Ir a iniciar sesión",
"auth.invite.afterSignInNote": "Tras iniciar sesión llegas a tu espacio de trabajo — se omite el recorrido de configuración inicial.",
"auth.invite.mismatchTitle": "Cuenta incorrecta para esta invitación",
"auth.invite.mismatchDescription": "Este enlace es para un correo distinto al de la sesión actual. Cierra sesión para continuar como el usuario invitado, o permanece conectado y pide a un administrador que reemita la invitación.",
"auth.invite.mismatchDetail": "Sesión iniciada como {session}, pero esta invitación es para {invite}.",
"auth.invite.mismatchFallback": "El correo de la sesión no coincide con esta invitación.",
"auth.invite.switchAccountTitle": "Cambiar de cuenta:",
2026-08-17 00:39:25 +02:00
"auth.invite.switchAccountBody": "cierra sesión y completa este formulario con el correo invitado{emailSuffix}.",
"auth.invite.reissueTitle": "Vía de reemisión:",
"auth.invite.reissueBody": "si cambió tu correo real de acceso (desfase de correo), pide a un administrador de la empresa que revoque esta invitación y envíe una nueva al correo con el que inicias sesión. Los administradores de plataforma también pueden reemitir enlaces para establecer contraseña desde Admin → Usuarios.",
"locale.switcher": "Idioma de la interfaz",
"locale.menu": "Elegir idioma de la interfaz",
"locale.label": "Idioma del panel",
2026-08-17 00:39:25 +02:00
"locale.help": "Cambia las etiquetas de la navegación y la configuración. El idioma del contenido generado se define por separado en Empresa.",
"settings.contentLanguage": "Idioma del contenido",
2026-08-17 00:39:25 +02:00
"settings.contentLanguageHelp": "Idioma usado para títulos, descripciones y otro contenido generado",
"settings.tab.profile": "Perfil",
"settings.tab.company": "Empresa",
"settings.tab.alerts": "Alertas",
"settings.tab.apiKeys": "Claves API",
"settings.tab.team": "Equipo",
2026-08-17 00:39:25 +02:00
"settings.title": "Configuración",
"settings.description": "Cuenta, empresa, claves API y equipo.",
2026-08-17 00:39:25 +02:00
"settings.accessDenied": "No tienes permiso para abrir la configuración de la empresa. Pide ayuda a un administrador de la empresa.",
"settings.loadFailed": "Error al cargar la configuración",
"settings.profileHeading": "Perfil",
2026-08-17 00:39:25 +02:00
"settings.personalInfo": "Información personal",
"settings.personalInfoHelp": "Actualiza tus datos personales",
"settings.firstName": "Nombre",
"settings.firstNamePlaceholder": "Tu nombre",
"settings.lastName": "Apellidos",
"settings.lastNamePlaceholder": "Tus apellidos",
2026-08-17 00:39:25 +02:00
"settings.email": "Correo electrónico",
"settings.profileUpdated": "Perfil actualizado.",
"settings.profileUpdateFailed": "No se pudo actualizar el perfil",
"settings.role.member": "Miembro",
"settings.role.admin": "Admin",
2026-08-17 00:39:25 +02:00
"settings.cannotRemoveOwner": "Transfer ownership before removing the company owner.",
"settings.transferFailed": "Could not transfer ownership",
"settings.ownershipTransferred": "{email} is now the company owner.",
"settings.transferOwnershipConfirm": "Make {email} the company owner? They will handle billing for this company.",
"settings.transferOwnership": "Transfer ownership",
"settings.ownerBadge": "Owner",
"settings.role.owner": "Owner",
"settings.teamHeading": "Miembros del equipo",
"settings.inviteUser": "Invitar usuario",
2026-08-17 00:39:25 +02:00
"settings.teamAdminOnly": "Solo los administradores de la empresa pueden invitar, ascender, degradar o eliminar compañeros.",
"settings.shareAcceptLink": "Compartir enlace de aceptación",
2026-08-17 00:53:51 +02:00
"settings.shareAcceptLinkHelp": "Copy this one-time link and send it to the invitee (chat, SMS, etc.). They'll set a password (at least 8 characters) and join with the role you chose.",
2026-08-17 00:39:25 +02:00
"settings.acceptLinkLabel": "Enlace de aceptación de invitación de un solo uso",
"settings.copyLink": "Copiar enlace",
2026-08-17 00:39:25 +02:00
"settings.linkCopied": "Enlace de aceptación copiado.",
"settings.table.email": "Correo electrónico",
"settings.table.role": "Rol",
"settings.table.status": "Estado",
"settings.table.joined": "Alta / caduca",
"settings.table.actions": "Acciones",
"settings.teamForbidden": "No tienes permiso para ver la lista del equipo. Pide ayuda a un administrador de la empresa.",
2026-08-17 00:39:25 +02:00
"settings.noTeammates": "Aún no hay compañeros",
"settings.noTeammatesHelp": "Invita a colegas como Miembro (productos y feeds) o Admin (equipo y configuración de la empresa). Las invitaciones pendientes aparecen aquí hasta que se acepten.",
"settings.noTeammatesMemberHelp": "Aún no hay compañeros en la lista. Pide a un administrador de la empresa que envíe invitaciones.",
"settings.memberActions": "Acciones del miembro",
"settings.makeAdmin": "Hacer admin",
"settings.makeMember": "Hacer miembro",
"settings.removeMember": "Eliminar",
2026-08-17 00:39:25 +02:00
"settings.revokeInvite": "Revocar invitación",
"settings.needOneAdmin": "Las empresas necesitan al menos un administrador",
"settings.expires": "Caduca el {date}",
2026-08-17 00:39:25 +02:00
"settings.invalidEmail": "Introduce una dirección de correo válida.",
2026-08-17 00:53:51 +02:00
"settings.inviteCreatedNoMail": "Invite created for {email} as {role}. Copy the accept link below and share it with them.",
"settings.inviteSent": "Invite created for {email} as {role}. Share the accept link before it expires.",
"settings.inviteFailed": "Could not create invite",
2026-08-17 00:39:25 +02:00
"settings.revokeConfirm": "¿Revocar esta invitación?",
"settings.revoked": "Invitación revocada.",
"settings.revokeFailed": "No se pudo revocar la invitación",
"settings.removeConfirm": "¿Eliminar a {email} de esta empresa?",
"settings.memberRemoved": "{email} eliminado.",
"settings.removeFailed": "No se pudo eliminar al usuario",
2026-08-17 00:39:25 +02:00
"settings.roleChangeConfirm": "¿{action} a {email} a {role}?",
"settings.roleChanged": "{email} ahora es {role}.",
"settings.roleChangeFailed": "No se pudo actualizar el rol",
"settings.promote": "Ascender",
"settings.demote": "Degradar",
2026-08-17 00:39:25 +02:00
"settings.inviteTitle": "Invitar compañero",
2026-08-17 00:53:51 +02:00
"settings.inviteDescription": "Enter their email, then copy the one-time link and share it. They'll set a password (at least 8 characters) and join this company.",
2026-08-17 00:39:25 +02:00
"settings.inviteEmail": "Correo electrónico",
"settings.inviteEmailPlaceholder": "colega@ejemplo.com",
"settings.inviteRole": "Rol",
2026-08-17 00:39:25 +02:00
"settings.inviteRoleHint": "Los miembros gestionan productos y feeds. Los administradores también pueden invitar compañeros y cambiar la configuración de la empresa.",
2026-08-17 00:53:51 +02:00
"settings.sendInvite": "Create invite link",
2026-08-17 00:39:25 +02:00
"settings.companyHeading": "Configuración de la empresa",
"settings.activeCompany": "Empresa activa",
2026-08-17 00:39:25 +02:00
"settings.creditsOverview": "Resumen de créditos",
"settings.plan": "Plan tarifario",
"settings.used": "Usados",
2026-08-17 00:39:25 +02:00
"settings.companyInfo": "Información de la empresa",
"settings.companyInfoHelp": "Actualiza los datos de tu empresa",
"settings.companyName": "Nombre de la empresa",
"settings.companyNamePlaceholder": "Nombre de tu empresa",
2026-08-17 00:39:25 +02:00
"settings.contentSettings": "Configuración de contenido",
"settings.mergeProducts": "Fusionar productos con el mismo GTIN",
2026-08-17 00:39:25 +02:00
"settings.emailIntegration": "Integración de correo",
"settings.aiIntegrations": "Integraciones de IA",
"settings.alertsHeading": "Alertas del operador",
"settings.inAppToasts": "Toasts en la app",
"settings.emailAlerts": "Alertas por correo",
"settings.apiKeysHeading": "Claves API",
"settings.createApiKey": "Crear clave API",
"settings.createApiKeyShort": "Crear clave API",
"settings.createApiKeyTitle": "Crear clave API",
"settings.apiKeyLabel": "Clave API",
"settings.keyName": "Nombre de la clave",
2026-08-17 00:39:25 +02:00
"settings.storeKeySafe": "Guárdala en un lugar seguro — no podrás ver el secreto completo de nuevo.",
"settings.apiKeysIntro": "Crea una clave API de empresa para llamar a los endpoints públicos /api/v1. El secreto completo se muestra solo una vez al crearla — cópialo de inmediato.",
"settings.apiKeysUseWhere": "Envíala como Authorization: Bearer <key> (preferido) o X-API-Key.",
"settings.apiKeysDocsLink": "Documentación de autenticación API",
"settings.apiKeyOnceWarning": "Esta es la única vez que se muestra el secreto completo. Cópialo ahora antes de cerrar este diálogo.",
"settings.table.name": "Nombre",
"settings.table.key": "Clave",
2026-08-17 00:39:25 +02:00
"settings.table.lastUsed": "Último uso",
"dashboard.demoSandbox": "Zona de pruebas demo",
2026-08-17 00:39:25 +02:00
"dashboard.demoEmptyTitle": "La zona de pruebas demo está vacía",
"dashboard.demoEmptyHint": "La zona de pruebas demo está vacía — cambia a A1 o conecta un feed para ver estadísticas reales del catálogo.",
"dashboard.overviewTitle": "Resumen",
2026-08-17 00:39:25 +02:00
"dashboard.quickLinks": "Enlaces rápidos",
"dashboard.whatsNew": "Novedades",
"dashboard.startTutorial": "Iniciar tutorial",
"dashboard.resumeTutorial": "Reanudar tutorial",
"dashboard.restartTutorial": "Reiniciar tutorial",
"dashboard.tourTopics": "Temas del tour",
"dashboard.browseTutorialSections": "Explorar secciones del tutorial",
"dashboard.connectFeed": "Conectar un feed",
"dashboard.processProducts": "Procesar productos",
"dashboard.openProducts": "Abrir productos",
"dashboard.welcomeTo": "Bienvenido a {name}",
"dashboard.trialBadge": "Prueba",
"dashboard.actions": "Acciones del panel",
2026-08-17 00:39:25 +02:00
"dashboard.emptyPaygHint": "Descrybe importa un catálogo, lo enriquece y procesa, y luego exporta o lo envía a las tiendas. Usa Primeros pasos abajo.",
"dashboard.emptyCreditsHint": "Descrybe importa un catálogo, lo enriquece y procesa, y luego exporta o lo envía a las tiendas. Tienes {credits} — empieza con Primeros pasos abajo.",
"dashboard.workflowTitle": "Flujo del catálogo",
"dashboard.recentActivity": "Actividad reciente",
"dashboard.loadFailed": "No se pudo cargar el panel",
"dashboard.workspaceFallback": "Este espacio de trabajo",
"dashboard.jobFallback": "Trabajo {id}",
"dashboard.workflow.feeds.connect": "Conectar un origen",
"dashboard.workflow.feeds.sources": "{count} fuente",
"dashboard.workflow.feeds.sourcesPlural": "{count} fuentes",
2026-08-17 00:39:25 +02:00
"dashboard.workflow.products.build": "Crear catálogo",
"dashboard.workflow.products.count": "{count} en el catálogo",
"dashboard.workflow.map": "Map",
2026-08-17 00:39:25 +02:00
"dashboard.workflow.map.detail": "Empareja columnas después de añadir un feed",
"dashboard.workflow.map.ready": "Abrir Map en un feed",
"dashboard.workflow.sync": "Sync",
"dashboard.workflow.sync.detail": "Extrae una muestra tras el mapeo",
"dashboard.workflow.sync.ready": "Sincronizar una muestra en productos",
"dashboard.workflow.process": "Procesar",
"dashboard.workflow.processActive": "{count} activos",
"dashboard.workflow.processWaiting": "{count} en espera",
"dashboard.workflow.processDone": "{count} listos",
"dashboard.workflow.processRun": "Ejecutar trabajos de IA",
"dashboard.workflow.export": "Exportar",
"dashboard.workflow.exportReady": "Plantillas y descarga",
"dashboard.workflow.exportMap": "Mapear y exportar",
2026-08-17 00:39:25 +02:00
"dashboard.workflowHint": "Catálogo dentro → enriquecer / procesar → exportar o enviar a tiendas. Salta al siguiente paso para {name}.",
"dashboard.overviewHint": "Totales en vivo para {name}",
2026-08-17 00:39:25 +02:00
"dashboard.demoEmptyMessage": "Cambia a A1 (u otra empresa con datos) en el encabezado, o conecta un feed aquí para poblar esta zona de pruebas.",
"dashboard.emptyTitle": "Importa un catálogo",
"dashboard.emptyMessage": "Catálogo dentro → enriquecer / procesar → exportar o enviar a tiendas. Empieza con Primeros pasos abajo (o conecta un feed / sube un CSV).",
"dashboard.connectFeedAnyway": "Conectar feed de todos modos",
"dashboard.connectFeedShort": "Conectar feed",
"dashboard.uploadCsv": "Subir CSV",
2026-08-17 00:39:25 +02:00
"dashboard.goToBilling": "Ir a Facturación",
"dashboard.freePlanTitle": "Estás en el plan Free",
"dashboard.freePlanMessageWithLimit": "{used} de {max} productos usados. El mapeo de feeds, la limpieza básica y las etiquetas energéticas de la UE (EPREL) están incluidos; actualiza para títulos y descripciones con IA, y más capacidad.",
"dashboard.freePlanMessage": "El mapeo de feeds, la limpieza básica y las etiquetas energéticas de la UE (EPREL) están incluidos; actualiza para títulos y descripciones con IA, y más capacidad.",
"dashboard.outOfCreditsTitle": "Te has quedado sin créditos de IA",
"dashboard.outOfCreditsMessage": "Compra más créditos o actualiza tu plan para seguir procesando.",
"dashboard.productLimitTitle": "Límite de productos alcanzado",
"dashboard.productLimitMessage": "Tu plan {plan} permite {max} productos ({count} en el catálogo). Actualiza para procesar más.",
"dashboard.productLimitMessageFull": "Se alcanzó el límite de productos de tu plan {plan}. Actualiza para procesar más.",
"dashboard.comparePlans": "Comparar planes",
"dashboard.viewPlans": "Ver planes",
2026-08-17 00:39:25 +02:00
"dashboard.trialTitle": "Prueba · {plan}",
"dashboard.trialMessageDated": "La prueba termina el {date}. {credits} créditos restantes.",
"dashboard.trialMessage": "{credits} créditos restantes en tu prueba.",
"dashboard.lowCreditsTitle": "Créditos bajos",
"dashboard.lowCreditsMessage": "Quedan {remaining} de {total} créditos. Recarga o actualiza antes de que se detengan los trabajos.",
"dashboard.latestJobs": "Últimos trabajos de procesamiento",
"dashboard.noJobsEmpty": "Aún no hay trabajos — importa productos primero.",
"dashboard.noJobsReady": "No hay trabajos recientes. Inicia uno desde Productos cuando estés listo.",
"dashboard.startJob": "Iniciar un trabajo desde Productos",
2026-08-17 00:39:25 +02:00
"dashboard.quickLinksHint": "Feeds, productos, trabajos y exportación.",
"dashboard.feedsImportMap": "Importar y mapear",
"dashboard.productsBrowse": "Explorar y procesar",
"dashboard.jobsMonitor": "Supervisar tareas",
"dashboard.exportsTemplates": "Plantillas y descarga",
"activation.title": "Primeros pasos",
2026-08-17 00:39:25 +02:00
"activation.description": "Descrybe importa un catálogo, lo enriquece y procesa, y luego exporta o lo envía a las tiendas. Termina el paso actual y continúa — el recorrido demo explica las pantallas sin cambiar el progreso de la lista.",
"activation.descriptionShort": "Empieza por el paso resaltado abajo — una acción a la vez. Conectar tienda es opcional.",
"activation.nextCta": "Hacer este paso",
2026-08-17 00:39:25 +02:00
"activation.valueProp": "Descrybe importa un catálogo, lo enriquece y procesa, y luego exporta o lo envía a tus tiendas.",
"activation.alreadyDone": "Ya hecho",
"activation.skipForNow": "Omitir por ahora",
"activation.showAllSteps": "Mostrar los {total} pasos",
"activation.showFewerSteps": "Mostrar menos pasos",
"activation.corePathLabel": "En resumen",
2026-08-17 00:39:25 +02:00
"activation.corePath": "Catálogo dentro → Enriquecer / procesar → Exportar o enviar a tiendas",
"activation.storeWizardHint": "No hace falta para feeds o exportaciones — omítelo salvo que quieras enviar productos a una tienda en vivo.",
"activation.storeWizardCta": "Iniciar configuración guiada",
"activation.focus.map": "Siguiente: abre Map en un feed, empareja columnas y guarda. Añade un feed primero si la lista está vacía.",
"activation.focus.sync": "Siguiente: sincroniza una muestra tras guardar el mapeo. Usa Sync en un feed mapeado — evita sincronizar orígenes sin mapear.",
"activation.focus.dismiss": "Cerrar aviso",
"activation.dismiss": "Descartar lista",
"hypercare.report.title": "Hypercare de corte",
2026-08-17 00:39:25 +02:00
"hypercare.report.message": "¿Faltan o están incorrectos datos tras la migración? Repórtalo para que podamos corregir tu espacio de trabajo.",
"hypercare.report.cta": "Reportar datos faltantes o incorrectos",
"hypercare.report.dismiss": "Descartar",
"hypercare.report.adminTriage": "Abrir cola de hypercare",
"etl.gaps.title": "What did not migrate",
2026-08-17 00:39:25 +02:00
"etl.gaps.message": "These areas were intentionally left empty or partial after the Descrybe platform cutover. Nothing is “broken” — recreate or reconnect as needed.",
"etl.gaps.dismiss": "Dismiss",
"etl.gaps.apiKeys.title": "API keys",
2026-08-17 00:39:25 +02:00
"etl.gaps.apiKeys.body": "Legacy API key secrets were not migrated. Create a new key to restore API access — the secret is shown only once.",
"etl.gaps.apiKeys.cta": "Open API keys",
"etl.gaps.blobs.title": "File contents (blobs)",
2026-08-17 00:39:25 +02:00
"etl.gaps.blobs.body": "Upload records may exist as metadata only. File bytes were not copied — re-upload CSVs or resync object storage if you need the originals.",
"etl.gaps.blobs.countHint": "{count} file records are metadata-only (bytes were not migrated).",
"etl.gaps.blobs.cta": "Open Files",
"etl.gaps.jobs.title": "Processing history",
"etl.gaps.jobs.body": "Legacy job and task history was not backfilled for cutover. New jobs you start here will appear normally.",
2026-08-17 00:39:25 +02:00
"etl.gaps.jobs.emptyHint": "Optional jobs domain was not run — empty history is expected.",
"etl.gaps.jobs.migratedHint": "{count} jobs were tagged migrated from an optional backfill.",
"etl.gaps.jobs.cta": "Open Processing",
"etl.gaps.woo.title": "Store credentials",
2026-08-17 00:39:25 +02:00
"etl.gaps.woo.body": "WooCommerce and Shopify secrets may need to be re-entered after cutover — that is a reconnect step, not a broken sync.",
"etl.gaps.woo.cta": "Open Stores",
"etl.gaps.settings.title": "Company settings",
"etl.gaps.settings.body": "Only language and merge-products settings were imported. Re-check other company preferences in Settings.",
"etl.gaps.settings.cta": "Open company settings",
"activation.progress": "{done} de {total} completados",
2026-08-17 00:39:25 +02:00
"activation.stepsLabel": "Pasos de activación",
"activation.pausedTitle": "Primeros pasos en pausa",
2026-08-17 00:39:25 +02:00
"activation.pausedBody": "Reanuda cuando quieras — desde campos de producto hasta exportar. Conectar tienda sigue siendo opcional.",
"activation.resume": "Reanudar lista",
"activation.step.enable-fields.title": "Activar campos de producto",
2026-08-17 00:39:25 +02:00
"activation.step.enable-fields.body": "Elige qué columnas de producto estándar debe mapear y limpiar Descrybe.",
"activation.step.connect-source.title": "Añadir un feed de productos",
"activation.step.connect-source.body": "Añade un feed de catálogo CSV o XML para que los productos entren en Descrybe. Conectar una tienda en vivo es un paso opcional posterior.",
"activation.step.map.title": "Mapear columnas del feed",
"activation.step.map.body": "En Feeds, abre Map en tu feed, empareja las columnas del proveedor con Descrybe y guarda.",
"activation.step.sync-sample.title": "Sincronizar una muestra",
2026-08-17 00:39:25 +02:00
"activation.step.sync-sample.body": "En Feeds, sincroniza una muestra pequeña de un feed mapeado para verificar el mapeo antes de la ejecución completa.",
"activation.step.process.title": "Procesar productos",
2026-08-17 00:39:25 +02:00
"activation.step.process.body": "Abre productos sin procesar y ejecuta el procesamiento para generar contenido de catálogo limpio.",
"activation.step.store-connect.title": "Conectar una tienda",
"activation.step.store-connect.body": "Opcional. Vincula WooCommerce o Shopify para enviar productos a tu tienda. Omite si solo usas feeds y exportaciones.",
2026-08-17 00:39:25 +02:00
"activation.step.export.title": "Crear una exportación",
"activation.step.export.body": "Crea un feed de exportación para descargar o publicar productos limpios como XML o CSV.",
"stats.products": "Productos importados",
2026-08-17 00:39:25 +02:00
"stats.categories": "Categorías",
"stats.attributes": "Atributos",
"stats.feeds": "Feeds",
2026-08-17 00:39:25 +02:00
"stats.credits": "Créditos",
"stats.openCatalog": "Abrir catálogo",
"stats.productsHint": "Catálogo {processed} · cola {unprocessed} (conteos separados)",
"stats.catalogTree": "Árbol del catálogo",
"stats.attributeLibrary": "Biblioteca de atributos",
2026-08-17 00:39:25 +02:00
"stats.importSources": "Orígenes de importación",
"stats.payAsYouGo": "Pago por uso",
2026-08-17 00:39:25 +02:00
"stats.walletBilling": "Monedero · Facturación",
"stats.enterpriseBilling": "Empresarial · Facturación",
"stats.usedBilling": "{used} usados · Facturación",
"processing.jobStatus.processing": "Procesando",
"processing.jobStatus.completed": "Completado",
"processing.jobStatus.failed": "Fallido",
"processing.jobStatus.cancelled": "Cancelado",
"processing.jobStatus.pending": "Pendiente",
"processing.jobStatus.queued": "En cola",
"processing.jobStatus.skipped": "Omitido",
"processing.jobStatus.unknown": "Desconocido",
"processing.job.error.all_failed": "Fallaron los {count} productos.",
"processing.job.error.partial_failed": "Fallaron {count} productos.",
"processing.step.normalize": "Normalizar",
"processing.step.parse_specs": "Analizar specs",
"processing.step.fill_fields": "Rellenar campos",
"processing.step.eprel": "EPREL",
"processing.step.ai_enhance": "Mejora con IA",
"processing.type.full": "Procesamiento completo",
"processing.type.enhance_only": "Solo mejorar",
2026-08-17 00:39:25 +02:00
"processing.type.title": "Solo título",
"processing.type.description": "Solo descripción",
"processing.type.attributes": "Atributos",
2026-08-17 00:39:25 +02:00
"processing.type.category": "Categoría",
"processing.type.eprel": "EPREL",
"processing.type.seo": "SEO",
"processing.type.normalize": "Normalizar",
"errors.requestFailed": "Error en la solicitud",
2026-08-17 00:39:25 +02:00
"errors.maintenance": "El sistema está en mantenimiento. Inténtalo más tarde.",
"errors.readOnly": "El sistema está en modo de solo lectura. Los cambios están temporalmente deshabilitados.",
"errors.companyAdminDenied": "Solo los administradores de la empresa pueden {action}. Pide ayuda a un administrador.",
"errors.companyAdminDenied.actionDefault": "hacer esto",
2026-08-17 00:39:25 +02:00
"docs.tryIt.memberCannotCreate": "Solo los admins de la empresa pueden crear claves API. Las antiguas no se migraron — pega una clave abajo o pide a un admin que cree una nueva.",
"docs.tryIt.noKeysLegacyAdmin": "Las claves API antiguas no se migraron. Crea una nueva con Use my API key o Ajustes → Claves API — el secreto solo se muestra una vez.",
"docs.tryIt.noKeysLegacyMember": "No hay claves API. Las antiguas no se migraron — pide a un admin que cree una, o pega una clave dk_.",
"errors.couldNotUpdateLanguage": "No se pudo actualizar el idioma",
"toast.support.replyTitle": "Respuesta de soporte",
2026-08-17 00:39:25 +02:00
"toast.support.replyBody": "El equipo respondió a tu ticket de soporte.",
"toast.support.replyRe": "Re: {subject}",
"toast.support.statusTitle": "Estado del ticket actualizado",
2026-08-17 00:39:25 +02:00
"toast.support.statusBody": "El estado de tu ticket de soporte cambió.",
"toast.support.updateTitle": "Actualización de soporte",
"assistant.label": "Asistente",
"assistant.open": "Abrir el asistente del sistema",
"assistant.close": "Cerrar el asistente del sistema",
"tutorial.demoTour": "Tour demo",
"tutorial.jumpToTopic": "Ir a un tema",
2026-08-17 00:39:25 +02:00
"tutorial.whereNeedHelp": "¿En qué necesitas ayuda?",
"tutorial.skipTour": "Omitir tour",
"tutorial.skipAria": "Omitir tutorial",
2026-08-17 00:39:25 +02:00
"tutorial.pickerBody": "Elige una sección para reabrir esa parte de la demo. Explorar el tour no cambia los datos de tu cuenta.",
"tutorial.sectionsAria": "Secciones del tutorial",
"tutorial.open": "Abrir",
"tutorial.close": "Cerrar",
2026-08-17 00:39:25 +02:00
"tutorial.resumeLastStep": "Reanudar último paso",
"tutorial.startFromBeginning": "Empezar desde el principio",
"tutorial.stepOf": "Paso {current} de {total}",
2026-08-17 00:39:25 +02:00
"tutorial.jumpTo": "Ir a…",
"tutorial.jumpToSectionAria": "Ir a la sección",
"tutorial.back": "Atrás",
"tutorial.pause": "Pausar",
"tutorial.continue": "Continuar",
"tutorial.finishTour": "Finalizar tour",
2026-08-17 00:39:25 +02:00
"tutorial.missingTargetHint": "Ese control aún no está en esta pantalla. Aun así puedes Continuar: el tour nunca exige guardar ni sincronizar.",
"tutorial.section.welcome": "Welcome",
"tutorial.section.catalog": "Catalog setup",
"tutorial.section.sources": "Feeds",
"tutorial.section.mapping": "Map & sync",
"tutorial.section.products": "Process",
"tutorial.section.export": "Export & stores",
"tutorial.section.grow": "Grow",
"tutorial.section.done": "Done",
"tutorial.step.welcome.title": "Bienvenido a Descrybe",
2026-08-17 00:39:25 +02:00
"tutorial.step.welcome.body": "El bucle principal de Descrybe es Feeds → Process → Export / Stores. Esta demo guiada destaca esas pantallas en tu panel real — sin pedirte guardar, sincronizar, activar campos ni crear feeds. Pausa cuando quieras; reanuda desde la cabecera. Salta a una sección si solo necesitas ayuda con un tema.",
"tutorial.step.welcome.tip": "Demo tour — your data stays unchanged until you choose to act outside the tour.",
"tutorial.step.welcome.nextLabel": "Start tour",
2026-08-17 00:39:25 +02:00
"tutorial.step.welcome.missingHint": "You’re on the dashboard — continue when ready.",
"tutorial.step.dashboard-overview.title": "Tu centro de mando",
2026-08-17 00:39:25 +02:00
"tutorial.step.dashboard-overview.body": "La franja de flujo del catálogo muestra el camino diario: Feeds → Map → Sync → Process. Getting started sigue el progreso real del espacio de trabajo (aparte de esta demo). Cuando quieras trabajar de verdad, usa Manage feeds o Start processing — luego exporta o conecta una tienda.",
"tutorial.step.dashboard-overview.tip": "Completing this tour does not mark checklist steps done — only real workspace progress does.",
"tutorial.step.dashboard-overview.missingHint": "The workflow strip and checklist appear after the dashboard loads.",
2026-08-17 00:39:25 +02:00
"tutorial.step.enable-fields.title": "Campos estándar",
"tutorial.step.enable-fields.body": "Standard Fields son las columnas de producto que Descrybe mapea, procesa y exporta — título, descripción, GTIN, imágenes y más. Enable recommended activa un conjunto por defecto sensato para la mayoría de catálogos. Puedes refinar la lista después sin romper mapeos existentes.",
"tutorial.step.enable-fields.tip": "In the demo you don’t need to click Enable recommended — Continue when you understand the idea.",
"tutorial.step.enable-fields.warning": "Enabling or disabling fields affects mapping and processing for this company. Prefer Enable recommended once, then tweak carefully.",
"tutorial.step.enable-fields.missingHint": "Wait for the Fields page to load, or open Fields from the Catalog section in the sidebar.",
2026-08-17 00:39:25 +02:00
"tutorial.step.catalog-depth.title": "Categorías y atributos",
"tutorial.step.catalog-depth.body": "En la sección Catalog de la barra lateral también están Categories y Attributes. Categories organizan el catálogo; los atributos impulsan filtros y descripciones estructuradas. No hace falta configurarlos para terminar este tour.",
"tutorial.step.catalog-depth.tip": "Return to this section anytime from Jump to… if you revisit taxonomy later.",
"tutorial.step.catalog-depth.missingHint": "Expand Catalog in the sidebar to open Categories or Attributes after the tour.",
2026-08-17 00:39:25 +02:00
"tutorial.step.connect-source.title": "Añadir un origen de productos",
"tutorial.step.connect-source.body": "Los feeds son cómo entran los catálogos de proveedores en Descrybe — archivos CSV, XML o por URL. Add Feed crea un origen nuevo; cada fila muestra el estado (listo para mapear, mapeado, activo). Map abre la pantalla de correspondencia de campos de ese feed.",
"tutorial.step.connect-source.tip": "You don’t need to add a feed for the demo. When ready for real setup, add one sample file first.",
"tutorial.step.connect-source.warning": "Avoid deleting live feeds unless you intend to remove that source and its sync history.",
2026-08-17 00:39:25 +02:00
"tutorial.step.connect-source.missingHint": "Open Feeds from the sidebar if this screen hasn’t loaded.",
"tutorial.step.map.title": "Mapear campos de origen",
2026-08-17 00:39:25 +02:00
"tutorial.step.map.body": "En la pantalla Map de un feed emparejas columnas del proveedor con los standard fields de Descrybe. Auto-map sugiere coincidencias por nombres de columna; confirma las aproximadas y corrige lo que falle. Save Mappings guarda el mapa para que la sincronización y el procesamiento sepan leer cada fila.",
"tutorial.step.map.tip": "Demo tip: open Map on a feed when you have one — you are not required to save.",
"tutorial.step.map.warning": "Don’t Save Mappings until Auto-map looks right — a bad map makes bad products.",
"tutorial.step.map.missingHint": "Add a feed and click Map to see the mapping UI; or Continue to keep learning.",
2026-08-17 00:39:25 +02:00
"tutorial.step.sync-sample.title": "Sincronizar una muestra (cuando estés listo)",
"tutorial.step.sync-sample.body": "Tras guardar los mapeos, Sync + Process sample extrae un lote pequeño y ejecuta el procesamiento para verificar títulos, imágenes y atributos antes de una ejecución completa. Full Sync now en la lista de feeds sirve para importaciones mayores cuando la muestra se vea bien.",
"tutorial.step.sync-sample.tip": "Skip Sync during the demo — use it only after Save Mappings on a real feed.",
"tutorial.step.sync-sample.warning": "Syncing writes products into this company. Prefer a sample first; avoid Sync now on unmapped feeds.",
"tutorial.step.sync-sample.missingHint": "Sync controls appear on feed rows and on the mapping screen footer.",
"tutorial.step.process.title": "Revisar productos",
2026-08-17 00:39:25 +02:00
"tutorial.step.process.body": "Products lista ítems sincronizados y procesados. Filtra por estado, abre una fila para el detalle y usa insignias EPREL cuando haya etiqueta energética. Aquí detectas errores de mapeo antes de exportar o sincronizar tiendas.",
"tutorial.step.process.tip": "Browsing products is read-only for exploration — editing a row changes live catalog data.",
"tutorial.step.process.missingHint": "Wait for the products table, or Continue if the catalog is still empty.",
"tutorial.step.processing-hub.title": "Procesamiento en segundo plano",
2026-08-17 00:39:25 +02:00
"tutorial.step.processing-hub.body": "Los trabajos en Processing muestran el progreso de AI y del pipeline: ejecuciones completadas y fallos. Inicia trabajos desde el panel o productos cuando quieras gastar créditos en un lote a propósito.",
"tutorial.step.processing-hub.tip": "Jobs consume credits — watch Billing before large runs.",
"tutorial.step.processing-hub.missingHint": "Open Jobs from the Processing section in the sidebar if the page is empty.",
"tutorial.step.stores-hub.title": "Tiendas y plataformas",
2026-08-17 00:39:25 +02:00
"tutorial.step.stores-hub.body": "Tras procesar productos, Stores conecta WooCommerce o Shopify para enviar el catálogo limpio a tu tienda. Úsalo cuando un marketplace o CMS sea el destino — o salta a Export feeds si los partners solo necesitan un archivo/URL.",
"tutorial.step.stores-hub.tip": "Reconnect banners appear if a token expires — fix those before relying on sync.",
"tutorial.step.stores-hub.missingHint": "Open Stores from the sidebar to see connection cards.",
"tutorial.step.export.title": "Exportar productos limpios",
2026-08-17 00:39:25 +02:00
"tutorial.step.export.body": "Los export feeds publican productos limpios como XML o CSV para canales, partners o tu tienda. Crea una exportación, elige formato y filtros, luego comparte la URL del feed o descarga. Las exportaciones leen datos de catálogo procesados — mapea y procesa primero para mejores resultados.",
"tutorial.step.export.tip": "You don’t need to create an export during the demo.",
"tutorial.step.export.warning": "Creating or deleting export feeds affects what partners can download — avoid deleting production feeds casually.",
"tutorial.step.export.missingHint": "Wait for Export feeds to load, or open Exports from the Feeds section in the sidebar.",
2026-08-17 00:39:25 +02:00
"tutorial.step.billing-hub.title": "Créditos y facturación",
"tutorial.step.billing-hub.body": "Billing muestra tu plan, monedero y créditos restantes. El procesamiento y algunas funciones de AI consumen este saldo. Vigila el uso antes de ejecuciones grandes de catálogo.",
"tutorial.step.billing-hub.tip": "Demo accounts may show unlimited or large balances — treat production credits carefully.",
"tutorial.step.billing-hub.missingHint": "Open Billing from the Account section in the sidebar.",
2026-08-17 00:39:25 +02:00
"tutorial.step.grow-hub.title": "Campañas, SEO y reseñas",
"tutorial.step.grow-hub.body": "En Marketing: Campaigns genera contenido, Content calendar planifica publicaciones, SEO comprueba listados y Reviews se integra con WooCommerce. Se apoyan en un catálogo bien mapeado — termina Feeds → Process → Export / Stores antes de depender de ellos.",
"tutorial.step.grow-hub.tip": "Jump back here when you’re ready to market, not during first mapping.",
"tutorial.step.grow-hub.missingHint": "Open Campaigns from Marketing in the sidebar, or Continue.",
"tutorial.step.tour-done.title": "Listo para explorar",
2026-08-17 00:39:25 +02:00
"tutorial.step.tour-done.body": "Ese es el mapa del producto: Feeds → Map → Sync → Process → Export / Stores. Usa Getting started en el panel para la configuración real. Reanuda o reinicia este tour desde la cabecera en cualquier momento, o Jump to… una sección cuando necesites un repaso. Skip tour termina la demo sin cambiar tu checklist.",
"tutorial.step.tour-done.tip": "Demo complete — no cleanup needed. Your account was not modified by Continue alone.",
"tutorial.step.tour-done.nextLabel": "Finish tour",
"tutorial.step.tour-done.missingHint": "Return to the dashboard to finish.",
"news.uxImprovements.title": "Mejoras de experiencia de usuario",
"flash.contentLanguageUpdated": "Idioma del contenido actualizado.",
"theme.darkMode": "Modo oscuro",
"theme.lightMode": "Modo claro",
"forbidden.title.accessRestricted": "Acceso restringido",
"forbidden.title.permissionDenied": "Permiso denegado",
2026-08-17 00:39:25 +02:00
"forbidden.message.support": "Esta área solo está disponible para personal de soporte y administradores de la plataforma.",
"forbidden.message.platform": "Esta área solo está disponible para administradores de la plataforma.",
"forbidden.message.company": "No tienes permiso para esto. Pide ayuda a un administrador de la empresa.",
"forbidden.backToDashboard": "Volver al panel",
"admin.chrome.platformOps": "Ops de plataforma",
"admin.chrome.sidebar": "Barra lateral de ops de plataforma",
"admin.chrome.nav": "Ops de plataforma",
2026-08-17 00:39:25 +02:00
"admin.chrome.mobileMenu": "Menú móvil de ops de plataforma",
"admin.chrome.opsBadge": "Ops",
"admin.chrome.backToApp": "Volver a la app",
"admin.chrome.uiLanguage": "Idioma de la UI",
"admin.chrome.staff.supportDesk": "Mesa de soporte",
"admin.chrome.staff.platformAdmin": "Admin de plataforma",
"admin.chrome.staff.staff": "Personal",
"admin.chrome.staff.admin": "Admin",
"admin.nav.section.overview": "Resumen",
"admin.nav.section.directory": "Directorio",
"admin.nav.section.support": "Soporte",
"admin.nav.section.ops": "Operaciones",
"admin.nav.section.commerce": "Comercio",
"admin.nav.section.system": "Sistema",
"admin.nav.commandCenter": "Centro de mando",
2026-08-17 00:39:25 +02:00
"admin.nav.analytics": "Analíticas",
"admin.nav.usersOrgs": "Usuarios y orgs",
"admin.nav.tickets": "Tickets",
"admin.nav.knowledge": "Conocimiento",
2026-08-17 00:39:25 +02:00
"admin.nav.diagnostics": "Diagnósticos",
"admin.nav.stuckProducts": "Productos atascados",
"admin.nav.orphanProcessed": "Orphan processed",
2026-08-17 00:39:25 +02:00
"admin.nav.billing": "Facturación",
"admin.nav.sales": "Sales",
"admin.nav.translations": "Traducciones",
2026-08-17 00:39:25 +02:00
"admin.nav.settings": "Configuración",
"admin.sales.title": "Sales leads",
"admin.sales.description": "Inbound Contact sales messages and custom payment quotes.",
"admin.sales.listTitle": "Leads",
"admin.sales.listDesc": "{total} matching leads",
2026-08-17 00:39:25 +02:00
"admin.sales.searchPlaceholder": "Search name, email, company…",
"admin.sales.statusAll": "All statuses",
"admin.sales.status.new": "New",
"admin.sales.status.contacted": "Contacted",
"admin.sales.status.quoted": "Quoted",
"admin.sales.status.won": "Won",
"admin.sales.status.closed": "Closed",
"admin.sales.empty": "No sales leads yet.",
"admin.sales.loadError": "Could not load sales leads.",
"admin.sales.saveError": "Could not save lead.",
"admin.sales.saved": "Lead updated.",
"admin.sales.notFound": "Lead not found.",
"admin.sales.leadTitle": "Lead details",
"admin.sales.estimatedSkus": "Estimated SKUs",
"admin.sales.linkCompany": "Link company",
"admin.sales.noCompany": "No company linked",
"admin.sales.adminNotes": "Admin notes",
"admin.sales.companyRequired": "Link a company before creating a payment quote.",
"admin.sales.prepareQuote": "Prepare custom plan",
"admin.sales.prepareQuoteDesc": "Creates an is_custom plan and optional Stripe Checkout link (one-time or installments).",
"admin.sales.planName": "Plan name",
"admin.sales.monthlyCredits": "Monthly AI credits",
"admin.sales.maxProducts": "Max SKUs",
"admin.sales.unlimitedHint": "Leave blank for unlimited",
"admin.sales.totalUsd": "Total price (USD)",
"admin.sales.termMonths": "Term (months)",
"admin.sales.installmentCount": "Installments",
"admin.sales.installmentInterval": "Interval",
"admin.sales.interval.month": "Monthly",
"admin.sales.interval.quarter": "Quarterly",
"admin.sales.interval.year": "Yearly",
"admin.sales.prepareCheckoutNow": "Create Stripe Checkout link now",
"admin.sales.createQuote": "Create quote",
"admin.sales.quoteCreated": "Quote created.",
"admin.sales.quoteError": "Could not create quote.",
"admin.sales.quotesTitle": "Quotes",
"admin.sales.noQuotes": "No quotes yet for this lead.",
"admin.sales.prepareCheckout": "Prepare Checkout",
"admin.sales.checkoutReady": "Checkout link ready.",
"admin.sales.checkoutError": "Could not prepare Checkout.",
"admin.sales.markSent": "Mark sent",
"admin.sales.markedSent": "Quote marked as sent.",
"admin.sales.col.name": "Name",
"admin.sales.col.email": "Email",
"admin.sales.col.company": "Company",
"admin.sales.col.status": "Status",
"admin.sales.col.created": "Created",
"sales.contact.title": "Contact sales",
2026-08-17 00:39:25 +02:00
"sales.contact.lead": "Tell us about your catalog and capacity needs — we will prepare a custom plan you can pay online.",
"sales.contact.formTitle": "Send a message",
"sales.contact.formLead": "Enterprise and custom deals are prepared by our team, then paid via Stripe Checkout.",
"sales.contact.name": "Name",
"sales.contact.email": "Work email",
"sales.contact.company": "Company",
"sales.contact.phone": "Phone (optional)",
"sales.contact.estimatedSkus": "Estimated SKUs (optional)",
"sales.contact.message": "How can we help?",
"sales.contact.submit": "Send message",
2026-08-17 00:39:25 +02:00
"sales.contact.submitting": "Sending…",
"sales.contact.error": "Could not send your message. Please try again.",
2026-08-17 00:39:25 +02:00
"sales.contact.toast.success": "Message sent — we will follow up soon.",
"sales.contact.thanksTitle": "Thanks — we got your message",
"sales.contact.thanksBody": "A platform admin will review your request and can send a Checkout link for a custom plan.",
"sales.contact.bookDemo": "Book a live demo",
"sales.contact.orBookDemo": "Or book a Calendly demo",
"sales.contact.backPricing": "Back to pricing",
"admin.overview.eyebrow": "Centro de mando",
"admin.overview.title": "Resumen de la plataforma",
2026-08-17 00:39:25 +02:00
"admin.overview.description": "Pulso en vivo de la plataforma desde el resumen de analíticas — salta a operaciones, información y soporte.",
"admin.overview.tokens": "Fichas",
2026-08-17 00:39:25 +02:00
"admin.overview.tokensHint": "Todo el tiempo · período",
"admin.overview.credits": "Créditos",
"admin.overview.creditsHint": "En todas las empresas",
"admin.overview.jobs": "Trabajos",
2026-08-17 00:39:25 +02:00
"admin.overview.jobsHint": "Instantánea de cola",
"admin.overview.platform": "Plataforma",
2026-08-17 00:39:25 +02:00
"admin.overview.platformHint": "Inquilinos · volumen",
"admin.overview.signals": "Señales recientes",
"admin.overview.shortcuts": "Atajos de ops",
"admin.overview.providers": "Mix de proveedores de IA",
"admin.overview.internalAi": "IA interna",
"admin.overview.internalAiHint": "Ajustes de plataforma",
"admin.overview.popularKeys": "Claves populares",
"admin.overview.popularKeysHint": "Proveedores populares del inquilino",
"admin.overview.customUrl": "URL personalizada",
"admin.overview.customUrlHint": "URL base personalizada del inquilino",
2026-08-17 00:39:25 +02:00
"admin.overview.linkBilling": "Facturación",
"admin.overview.linkSettings": "Configuración",
"admin.overview.shortcut.diagnostics.title": "Diagnósticos",
"admin.overview.shortcut.diagnostics.desc": "Comprobaciones de salud, cola, fallos recientes",
2026-08-17 00:39:25 +02:00
"admin.overview.shortcut.analytics.title": "Analíticas",
"admin.overview.shortcut.analytics.desc": "Tokens, trabajos, altas, proveedores",
"admin.overview.shortcut.knowledge.title": "Conocimiento",
2026-08-17 00:39:25 +02:00
"admin.overview.shortcut.knowledge.desc": "Artículos, plantillas, respuesta automática",
"admin.overview.shortcut.users.title": "Usuarios y orgs",
"admin.overview.shortcut.users.desc": "Cuentas, empresas, invitaciones",
"admin.overview.shortcut.stuck.title": "Productos atascados",
2026-08-17 00:39:25 +02:00
"admin.overview.shortcut.stuck.desc": "En ejecución más de 2 horas",
"admin.overview.signal.stuckTitle": "{count} trabajo atascado",
"admin.overview.signal.stuckTitlePlural": "{count} trabajos atascados",
2026-08-17 00:39:25 +02:00
"admin.overview.signal.stuckDetail": "En ejecución más de 2 horas — revisa y restablece si hace falta.",
"admin.overview.signal.stuckCta": "Abrir trabajos atascados",
2026-08-17 00:39:25 +02:00
"admin.overview.signal.failedTitle": "{count} fallidos en los últimos {days} d",
"admin.overview.signal.failedDetail": "{completed} completados en la misma ventana.",
2026-08-17 00:39:25 +02:00
"admin.overview.signal.failedDetailRate": "{rate}% tasa de fallos · {completed} completados.",
"admin.overview.signal.failedCta": "Abrir diagnósticos",
"admin.overview.signal.runningTitle": "{count} trabajo en ejecución",
"admin.overview.signal.runningTitlePlural": "{count} trabajos en ejecución",
"admin.overview.signal.runningDetail": "Trabajos de procesamiento activos ahora mismo.",
"admin.overview.signal.runningCta": "Ver cola",
"admin.overview.signal.ticketsTitle": "{count} ticket de soporte abierto",
"admin.overview.signal.ticketsTitlePlural": "{count} tickets de soporte abiertos",
"admin.overview.signal.ticketsDetail": "Tickets abiertos o pendientes en la mesa de soporte.",
"admin.overview.signal.ticketsCta": "Abrir soporte",
2026-08-17 00:39:25 +02:00
"admin.overview.signal.clearTitle": "Sin señales elevadas",
"admin.overview.signal.clearDetail": "Sin trabajos atascados, fallos del período ni tickets abiertos en el resumen en vivo (últimos {days} d).",
"admin.overview.signal.clearCta": "Confirmar en diagnósticos",
"admin.overview.badge.action": "Acción",
"admin.overview.badge.watch": "Vigilar",
"admin.overview.badge.live": "En vivo",
"admin.overview.badge.clear": "Limpiar",
"admin.overview.summaryLoadFailed": "No se pudo cargar el resumen en vivo. Los atajos de abajo siguen funcionando.",
2026-08-17 00:39:25 +02:00
"admin.overview.keyMetrics": "Métricas clave",
"admin.overview.summaryWindow": "Últimos {days} d · endpoint de resumen",
"admin.overview.tokensPeriod": "{count} en los últimos {days} d",
"admin.overview.creditsFoot": "{remaining} restantes de {allocated} asignados",
2026-08-17 00:39:25 +02:00
"admin.overview.jobsFoot": "{failed} fallidos · {running} en curso · {stuck} atascados",
"admin.overview.platformFoot": "{users} usuarios · {processed} procesados · {feeds} feeds de entrada",
"admin.overview.fullDiagnostics": "Diagnósticos completos",
"admin.overview.also": "También:",
"admin.overview.linkSupport": "Mesa de soporte",
2026-08-17 00:39:25 +02:00
"admin.overview.charts": "Gráficos",
"admin.overview.providerFoot": "{jobs} trabajos · {products} productos",
"admin.analytics.eyebrow": "Insights",
2026-08-17 00:39:25 +02:00
"admin.analytics.title": "Analítica e informes",
"admin.analytics.description": "KPI y tendencias en vivo de la plataforma a partir de tokens, trabajos, altas, feeds, tickets y facturación.",
"admin.analytics.period": "Período",
"admin.analytics.refreshing": "Actualizando…",
"admin.analytics.llmTokens": "Tokens LLM",
2026-08-17 00:39:25 +02:00
"admin.analytics.credits": "Créditos",
"admin.analytics.jobs": "Trabajos",
"admin.analytics.volume": "Volumen",
"admin.analytics.failureRate": "Tasa de fallos",
"admin.analytics.stuckJobs": "Trabajos atascados",
"admin.analytics.apiKeys": "Claves API",
"admin.analytics.signups": "Altas",
"admin.analytics.internalAi": "IA interna",
"admin.analytics.internalAiHint": "OpenAI de plataforma (ajustes admin)",
"admin.analytics.popularKeys": "Claves populares",
2026-08-17 00:39:25 +02:00
"admin.analytics.popularKeysHint": "OpenAI / Groq / … del inquilino",
"admin.analytics.customUrl": "URL/modelo personalizado",
"admin.analytics.customUrlHint": "URL base del inquilino + modelo + clave",
2026-08-17 00:39:25 +02:00
"admin.analytics.tokensByDay": "Tokens por día",
"admin.analytics.tokensByProvider": "Tokens por clase de proveedor",
"admin.analytics.tokensByProviderAria": "Tokens por clase de proveedor",
"admin.analytics.internalCount": "Interno {count}",
"admin.analytics.popularCount": "Popular {count}",
"admin.analytics.customCount": "Personalizado {count}",
2026-08-17 00:39:25 +02:00
"admin.analytics.jobsByDay": "Trabajos por día",
"admin.analytics.jobsByDayHint": "Trabajos creados (secundario = fallidos).",
2026-08-17 00:39:25 +02:00
"admin.analytics.signupsByDay": "Altas por día",
"admin.analytics.signupsByDayHint": "Nuevos usuarios (principal) y empresas (secundario)",
"admin.analytics.processingJobsStatus": "processing_jobs por estado",
"admin.analytics.feedSyncStatus": "feed_sync_jobs por estado",
"admin.analytics.ticketsStatus": "support_tickets por estado",
"admin.analytics.providerDetail": "Detalle del proveedor",
2026-08-17 00:39:25 +02:00
"admin.analytics.providerDetailHint": "Modos de proveedor principales (limitados por tamaño de payload).",
"admin.analytics.noProviderRows": "Sin filas de proveedor",
"admin.analytics.provider": "Proveedor",
"admin.analytics.class": "Clase",
"admin.analytics.tokensCol": "Fichas",
"admin.analytics.productsCol": "Productos",
"admin.analytics.companiesHint": "Principales empresas por tokens con desglose de proveedor",
"admin.analytics.noCompanies": "Sin empresas",
2026-08-17 00:39:25 +02:00
"admin.analytics.noCompaniesMsg": "La lista de empresas está vacía.",
"admin.analytics.company": "Empresa",
"admin.analytics.internal": "Interno",
"admin.analytics.popular": "Popular",
"admin.analytics.custom": "Personalizado",
2026-08-17 00:39:25 +02:00
"admin.analytics.noBillingCycles": "Aún no hay ciclos de facturación",
"admin.analytics.linkDiagnostics": "Diagnósticos",
"admin.analytics.linkStuck": "Productos atascados",
"admin.users.eyebrow": "Admin de plataforma",
"admin.users.title": "Usuarios y organizaciones",
2026-08-17 00:39:25 +02:00
"admin.users.description": "Directorio de usuarios de la plataforma, roles de personal y asignación de planes de empresa.",
"admin.users.staffRoleUnavailable": "Las actualizaciones de rol de personal aún no están disponibles en este despliegue. Contacta al administrador de la plataforma si las necesitas.",
"admin.users.search": "Buscar",
"admin.users.tabUsers": "Usuarios",
"admin.users.tabCompanies": "Empresas",
"admin.users.filterWithoutPlan": "Without plan",
"admin.users.filterWithoutApiKeys": "Keys needing reissue",
"admin.users.needsApiKeyReissue": "Needs API key reissue",
"admin.users.colName": "Nombre",
"admin.users.colStaffRole": "Rol del personal",
"admin.users.colStatus": "Estado",
"admin.users.colCreated": "Creado",
"admin.users.colActions": "Acciones",
2026-08-17 00:39:25 +02:00
"admin.users.mustSetPassword": "Debe establecer contraseña",
"admin.users.inactive": "Inactivo",
2026-08-17 00:39:25 +02:00
"admin.users.reissueInvite": "Reemitir invitación",
"admin.users.setLocalPassword": "Establecer contraseña local",
"admin.users.inviteLinkReady": "Copy the set-password link below and share it securely.",
"admin.users.inviteLinkCopied": "Set-password link copied.",
"admin.users.inviteLinkLabel": "One-time set-password / accept invite link",
"admin.users.copyInviteLink": "Copy link",
"admin.users.switchToUser": "Cambiar a usuario",
"admin.users.colCompany": "Empresa",
"admin.users.colPlan": "Plan tarifario",
2026-08-17 00:39:25 +02:00
"admin.users.colCredits": "Créditos",
"admin.users.colLanguage": "Idioma",
"admin.users.assignPlan": "Asignar plan",
2026-08-16 11:37:42 +02:00
"admin.users.cloneCatalog": "Copiar a mi empresa",
2026-08-17 00:39:25 +02:00
"admin.users.cloneCatalogAria": "Copiar el catálogo de {name} a tu empresa sandbox",
"admin.users.cloneCatalogTitle": "Copiar catálogo de empresa",
2026-08-16 11:37:42 +02:00
"admin.users.cloneCatalogDesc": "Sigues en tu cuenta de admin. Los datos de origen no cambian.",
"admin.users.cloneCatalogFrom": "Origen: {name}",
"admin.users.cloneCatalogInto": "Destino: {name}",
2026-08-17 00:39:25 +02:00
"admin.users.cloneCatalogWarning": "Sustituye categorías, feeds, productos, atributos, mappings y marca en el destino. Plan, facturación, miembros, claves API y conectores de tienda no se copian.",
2026-08-16 11:37:42 +02:00
"admin.users.cloneCatalogCancel": "Cancelar",
2026-08-17 00:39:25 +02:00
"admin.users.cloneCatalogConfirm": "Copiar catálogo",
2026-08-16 11:37:42 +02:00
"admin.users.cloneDestFallback": "tu empresa sandbox",
2026-08-16 18:49:02 +02:00
"admin.users.cloneDestLabel": "Destination company",
"admin.users.cloneDestSelect": "Select destination",
"admin.users.cloneDestRequired": "Choose a destination company different from the source.",
2026-08-16 18:36:56 +02:00
"admin.users.syncA1": "Sincronizar A1",
"admin.users.syncA1Aria": "Sync A1 categories from dump and repair catalog hygiene for {name}",
2026-08-17 00:39:25 +02:00
"admin.users.syncA1Title": "Sincronizar catálogo A1",
2026-08-17 09:33:07 +02:00
"admin.users.syncA1Desc": "Applies Title/Description/Meta/Attributes category prompts from the repo seed (scripts/seed/wp_product_categories.sql), optionally backfills mapped categories from a MySQL product dump on the API host, then runs catalog hygiene. Does not wipe or reimport the full catalog.",
2026-08-16 18:36:56 +02:00
"admin.users.syncA1Company": "Company: {name}",
2026-08-17 09:33:07 +02:00
"admin.users.syncA1Warning": "Category prompts load automatically from scripts/seed/wp_product_categories.sql on the API host (SEED_A1_WP_CATEGORIES overrides). Optional: place descrybe_new.sql on the API server for product-dump category coverage. No mass reprocess.",
2026-08-16 18:36:56 +02:00
"admin.users.syncA1Cancel": "Cancelar",
"admin.users.syncA1Confirm": "Sincronizar A1",
2026-08-17 00:39:25 +02:00
"admin.users.noUsers": "Ningún usuario coincide con este filtro.",
"admin.users.noCompanies": "Ninguna empresa coincide con este filtro.",
"admin.users.assignRoleTitle": "Asignar rol de personal",
"admin.users.assignRoleDesc": "Los roles de plataforma controlan el panel admin (Admin y Developer) y la mesa de soporte (personal de soporte).",
"admin.users.staffRole": "Rol del personal",
"admin.users.saveRole": "Guardar rol",
"admin.users.assignPlanTitle": "Asignar plan",
2026-08-17 00:39:25 +02:00
"admin.users.assignPlanDesc": "Adjuntar un plan público, legacy o personalizado a esta empresa.",
"admin.users.selectPlan": "Seleccionar plan",
"admin.users.assign": "Asignar",
"admin.settings.title": "Ajustes de plataforma",
"admin.settings.description": "Credenciales de plataforma, roles de IA, correo e integraciones para este despliegue",
2026-08-17 00:39:25 +02:00
"admin.settings.intro": "Configure aquí roles de IA de plataforma, SMTP, OAuth, EPREL, Pinecone y Stripe. Deje en blanco los secretos para conservar el valor guardado. Las claves por empresa quedan en Integraciones del inquilino.",
"admin.settings.aiRolesUnavailable": "Los roles de IA completos aún no están disponibles en este despliegue. El procesamiento sigue guardándose vía ajustes OpenAI de plataforma; otros roles se persistirán cuando estén soportados.",
"admin.settings.tab.integrations": "Resumen",
"admin.settings.tab.ai": "Roles de IA",
"admin.settings.tab.mail": "Correo",
"admin.settings.tab.other": "Otro",
"admin.settings.tab.admins": "Usuarios admin",
2026-08-17 00:39:25 +02:00
"admin.settings.mailCardDesc": "Invitaciones para establecer contraseña y correo saliente de la plataforma",
"admin.settings.integrationsCardDesc": "OAuth, EPREL, Pinecone, Stripe, feeds",
"admin.settings.tenantVsPlatform": "Inquilino vs plataforma",
2026-08-17 00:39:25 +02:00
"admin.settings.hostSecrets": "Secretos de base de datos, sesión y firma del servidor — configurar solo en el host",
"admin.settings.linkAi": "IA",
"admin.settings.linkEmail": "Correo",
2026-08-17 00:39:25 +02:00
"admin.settings.linkBilling": "Facturación",
"admin.settings.provider": "Proveedor",
"admin.settings.model": "Modelo",
"admin.settings.baseUrl": "URL base",
"admin.settings.apiKey": "Clave API",
"admin.settings.embeddingDims": "Dimensiones de embedding (opcional)",
"admin.settings.smtpHost": "Host SMTP",
"admin.settings.port": "Puerto",
"admin.settings.username": "Usuario",
2026-08-17 00:39:25 +02:00
"admin.settings.fromAddress": "Dirección remitente",
"admin.settings.testRecipient": "Destinatario de prueba (opcional)",
"admin.settings.testRecipientPlaceholder": "Por defecto tu correo de admin",
"admin.settings.googleOauth": "Google OAuth",
"admin.settings.googleOauthDesc": "Credenciales de cliente Google OAuth de plataforma opcionales.",
"admin.settings.clientId": "ID de cliente",
"admin.settings.eprel": "EPREL",
"admin.settings.timeout": "Tiempo de espera",
"admin.settings.ficheLanguage": "Idioma de la ficha",
"admin.settings.pinecone": "Pinecone",
"admin.settings.host": "Host",
"admin.settings.namespace": "Espacio de nombres",
"admin.settings.namespacePlaceholder": "opcional",
"admin.settings.stripe": "Stripe",
"admin.settings.priceStarterMo": "ID de precio mensual Starter",
"admin.settings.priceStarterYr": "ID de precio anual Starter",
"admin.settings.pricePlusMo": "Plus monthly price ID",
"admin.settings.pricePlusYr": "Plus yearly price ID",
"admin.settings.priceGrowthMo": "ID de precio mensual Growth",
"admin.settings.priceGrowthYr": "ID de precio anual Growth",
"admin.settings.priceBusinessMo": "ID de precio mensual Business",
"admin.settings.priceBusinessYr": "ID de precio anual Business",
"admin.settings.priceScaleMo": "Scale monthly price ID",
"admin.settings.priceScaleYr": "Scale yearly price ID",
"admin.settings.creditPackPrices": "AI credit pack price IDs (one-time)",
2026-08-17 00:39:25 +02:00
"admin.settings.creditPackPricesHint": "Create one-time Prices in Stripe (mode=payment products). Paste Price IDs here — same sync path as plan subscriptions.",
"admin.settings.syncCreditPacks": "Sync Stripe packs",
"admin.settings.syncCreditPacksOk": "Synced {count} credit pack price(s) ({mode} mode).",
"admin.settings.syncCreditPacksModeHint": "Stripe mode for this sync: {mode}. Switch the secret key (sk_test_ vs sk_live_) to sync the other environment.",
"admin.settings.syncCreditPacksFailed": "Could not sync credit packs to Stripe.",
"admin.settings.pricePackSmall": "Starter pack (500 credits) price ID",
"admin.settings.pricePackMedium": "Growth pack (2,000 credits) price ID",
"admin.settings.pricePackLarge": "Catalog pack (10,000 credits) price ID",
"admin.settings.pricePackXL": "Scale pack (40,000 credits) price ID",
"admin.settings.feedAllowlist": "Lista permitida de URL privadas de feeds",
"admin.settings.allowlist": "Lista permitida",
"admin.settings.platformAdmins": "Administradores de plataforma",
"admin.settings.colUserId": "ID de usuario",
"admin.settings.colEmail": "Correo",
"admin.settings.colName": "Nombre",
2026-08-17 00:39:25 +02:00
"admin.settings.colAddedOn": "Añadido el",
"admin.settings.colRole": "Rol",
"admin.settings.platformAdminBadge": "Admin de plataforma",
"admin.settings.noAdmins": "No se encontraron usuarios admin",
2026-08-17 00:39:25 +02:00
"admin.settings.adminStatusCheck": "Comprobación de estado admin",
"admin.settings.bootstrapPage": "página bootstrap",
"admin.readiness.title": "Preparación del corte",
"admin.readiness.detail": "Contadores de hypercare que aún requieren atención antes del cambio de DNS.",
"admin.readiness.mustSetPassword": "{count} usuarios deben establecer contraseña",
"admin.readiness.withoutAdmin": "{count} empresas sin administrador",
"admin.readiness.withoutPlan": "{count} empresas sin plan activo",
"admin.readiness.withoutApiKeys": "{count} companies needing API key reissue",
2026-08-17 00:39:25 +02:00
"admin.readiness.linksAria": "Enlaces profundos de preparación",
"admin.readiness.linkUsers": "Usuarios",
2026-08-17 00:39:25 +02:00
"admin.readiness.linkBilling": "Facturación",
"admin.readiness.linkSettings": "Ajustes",
"admin.readiness.linkApiKeys": "Keys needing reissue",
"admin.diagnostics.eyebrow": "Plataforma",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.title": "Diagnósticos",
"admin.diagnostics.description": "Consola ops de salud de la app, profundidad de cola, trabajos recientes y flags de configuración. Nunca se muestran secretos ni DSN; los errores de trabajos están sanitizados.",
"admin.diagnostics.filterAria": "Filtro de estado del trabajo",
"admin.diagnostics.queue": "Cola",
"admin.diagnostics.noJobsInQueue": "No hay trabajos en cola.",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.sanitizedErrors": "Errores sanitizados · máx. 25",
"admin.diagnostics.colId": "ID",
"admin.diagnostics.colCompany": "Empresa",
"admin.diagnostics.colStatus": "Estado",
"admin.diagnostics.colProgress": "Progreso",
"admin.diagnostics.colUpdated": "Actualizado",
"admin.diagnostics.colError": "Error",
"admin.diagnostics.colTicket": "Ticket",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.colWhen": "Cuándo",
"admin.diagnostics.noJobsFilter": "No hay trabajos para este filtro.",
"admin.stuck.title": "Productos atascados",
2026-08-17 00:39:25 +02:00
"admin.stuck.description": "Revisa trabajos de procesamiento recientes y restablece los atascados más de 2 horas",
"admin.stuck.noJobs": "No se encontraron trabajos.",
"admin.stuck.filterAria": "Filtrar trabajos por estado",
"admin.orphan.title": "Orphan processed",
2026-08-17 00:39:25 +02:00
"admin.orphan.description": "Cutover ops #7 — report stale catalog rows first (dry-run), then confirm delete only if needed.",
"admin.orphan.cutoverHint": "Safe by default: refresh and dry-run never delete. Confirm delete sends confirm=true only after you approve the dialog.",
"admin.orphan.refreshReport": "Refresh report",
"admin.orphan.dryRunBtn": "Dry-run cleanup",
2026-08-17 00:39:25 +02:00
"admin.orphan.deleteBtn": "Confirm delete…",
"admin.orphan.loadFailed": "Could not load orphan report",
"admin.orphan.dryRunFailed": "Dry-run cleanup failed",
"admin.orphan.deleteFailed": "Confirmed orphan cleanup failed",
"admin.orphan.metric.total": "Total orphans",
"admin.orphan.metric.missingRaw": "Missing raw",
"admin.orphan.metric.unprocessedRaw": "Unprocessed raw",
"admin.orphan.samplesTitle": "Sample rows",
"admin.orphan.samplesDesc": "Up to 25 most recently updated orphan catalog rows",
"admin.orphan.cleanBadge": "Clean",
"admin.orphan.needsCleanupBadge": "Needs cleanup",
2026-08-17 00:39:25 +02:00
"admin.orphan.noneFound": "No orphan processed rows — cutover ops #7 report is clean.",
"admin.orphan.noSamples": "No sample rows in this report.",
"admin.orphan.colProcessed": "Processed ID",
"admin.orphan.colCompany": "Company",
"admin.orphan.colRaw": "Raw ID",
"admin.orphan.colReason": "Reason",
"admin.orphan.colRawStatus": "Raw status",
"admin.orphan.reason.missingRaw": "Missing raw",
"admin.orphan.reason.unprocessedRaw": "Unprocessed raw",
"admin.orphan.reason.other": "Other",
"admin.orphan.rawProcessedYes": "is_processed=true",
"admin.orphan.rawProcessedNo": "is_processed=false",
"admin.orphan.confirmTitle": "Delete orphan processed rows?",
"admin.orphan.confirmDesc": "This permanently deletes {total} processed_products row(s) whose raw is missing or unprocessed. Job product links use ON DELETE SET NULL.",
"admin.orphan.confirmDelete": "Delete orphans",
2026-08-17 00:39:25 +02:00
"admin.billing.title": "Admin de facturación",
"admin.billing.description": "Gestiona planes, créditos, permisos de funciones por paquete e interruptores de funciones de toda la plataforma.",
"admin.billing.noCompanies": "No se encontraron empresas.",
"admin.billing.noCompaniesFilter": "Ninguna empresa coincide con este filtro.",
"admin.billing.assignPlanTitle": "Asignar plan",
2026-08-17 00:39:25 +02:00
"admin.billing.assignPlanDesc": "Adjunta un plan de facturación a una empresa. Los créditos de prueba opcionales restablecen el saldo de la empresa para el período de prueba.",
"admin.billing.creditsTitle": "Añadir / ajustar créditos",
"admin.billing.creditsDesc": "Acreditar o debitar el saldo de una empresa.",
2026-08-17 00:39:25 +02:00
"admin.billing.searchCompany": "Buscar empresa…",
"admin.knowledge.draft": "Borrador",
"admin.knowledge.badge.draft": "Borrador",
2026-08-17 00:39:25 +02:00
"admin.knowledge.newArticle": "Nuevo artículo",
"admin.knowledge.editArticle": "Editar artículo",
"admin.knowledge.noMatchingArticles": "No hay artículos coincidentes",
"admin.knowledge.noArticles": "No hay artículos de conocimiento",
"admin.knowledge.emptyCategoryMsg": "La categoría “{category}” está lista — añade un artículo base para que un agente de contenido lo complete.",
"admin.knowledge.emptyArticlesMsg": "Añade plantillas tipo FAQ con categorías y palabras clave. Deja marcadores en el cuerpo para agentes de contenido.",
"admin.knowledge.col.title": "Título",
"admin.knowledge.col.name": "Nombre",
"admin.knowledge.edit": "Editar",
"admin.knowledge.newTemplate": "Nueva plantilla",
"admin.knowledge.editTemplate": "Editar plantilla",
"admin.knowledge.allCategories": "Todo",
"admin.settings.enablePlatformSmtp": "Activar SMTP de plataforma",
2026-08-17 00:39:25 +02:00
"admin.plans.title": "Planes de suscripción",
"admin.plans.description": "Público ladder, A1 / Legado, Plataforma Demo, and custom deals. Ephemeral test and obsolete ladder rows stay under Oculto.",
"admin.plans.searchPlaceholder": "Buscar nombre o descripción…",
"admin.plans.searchAria": "Buscar planes",
"admin.plans.filterAria": "Filtrar planes por visibilidad",
2026-08-17 00:39:25 +02:00
"admin.plans.filter.catalog": "Catálogo",
"admin.plans.filter.public": "Público",
"admin.plans.filter.legacy": "Legacy",
"admin.plans.filter.custom": "Personalizado",
"admin.plans.filter.hidden": "Oculto",
"admin.plans.filter.all": "Todo",
"admin.plans.col.plan": "Plan tarifario",
"admin.plans.col.visibility": "Visibilidad",
2026-08-17 00:39:25 +02:00
"admin.plans.col.monthlyCredits": "Créditos mensuales",
"admin.plans.col.maxProducts": "Productos máx.",
"admin.plans.col.term": "Plazo",
"admin.plans.customPackageFlag": "Marca de paquete personalizado",
2026-08-17 00:39:25 +02:00
"admin.plans.visibility.public": "Público",
"admin.plans.visibility.legacy": "Legacy",
"admin.plans.visibility.hidden": "Oculto",
"admin.plans.visibility.custom": "Personalizado",
"admin.plans.edit": "Editar",
"admin.plans.editAria": "Editar {name}",
"admin.plans.assign": "Asignar",
"admin.plans.assignAria": "Asignar {name}",
"admin.plans.permissions": "Permisos del plan",
"admin.plans.permissionsAria": "Editar permisos del plan for {name}",
"admin.plans.showing": "Mostrando {filtered} de {total} planes",
"admin.plans.unlimited": "Ilimitado",
2026-08-17 00:39:25 +02:00
"admin.plans.optionLabel": "{name} ({credits} créditos) · {kind}",
"admin.permissions.noteStrong": "Solo derechos del plan.",
2026-08-17 00:39:25 +02:00
"admin.permissions.noteBody": "These toggles set what this package may include. Plataforma-wide on/desactivado masters are on the {global} tab — a plan can enable a feature that still stays desactivado when the platform switch is desactivado.",
"admin.permissions.globalTab": "Interruptores globales",
"admin.permissions.title": "Permisos del plan",
"admin.permissions.descCount": "{enabled}/{total} activados",
"admin.permissions.matchesProfile": "coincide con {profile}",
"admin.permissions.customizedOverrides": "anulaciones personalizadas",
"admin.permissions.planDefaults": "valores predeterminados del plan",
"admin.permissions.badge.legacy": "Paquete legado migrado",
2026-08-17 00:39:25 +02:00
"admin.permissions.badge.publicLadder": "Público ladder",
"admin.permissions.badge.ladderCustom": "Público ladder · personalizado flag",
"admin.permissions.badge.customDeal": "Personalizado deal",
"admin.permissions.badge.clientDeal": "Acuerdo con cliente",
"admin.permissions.badge.customOverrides": "Personalizado overrides",
"admin.permissions.badge.defaults": "Valores predeterminados",
"admin.permissions.badge.customFlag": "Personalizado flag",
"admin.permissions.package": "Paquete",
"admin.permissions.noPlans": "Sin planes",
2026-08-17 00:39:25 +02:00
"admin.permissions.suffix.legacy": "· legacy",
"admin.permissions.suffix.default": " · predeterminado",
"admin.permissions.suffix.custom": " · personalizado",
"admin.permissions.section": "Sección",
"admin.permissions.allSections": "Todas las secciones",
"admin.permissions.state": "Estado",
"admin.permissions.stateAll": "Todo",
"admin.permissions.stateOn": "Activado",
"admin.permissions.stateOff": "Desactivado",
"admin.permissions.stateDiffers": "Difiere from default",
"admin.permissions.search": "Buscar",
"admin.permissions.searchPlaceholder": "Filtrar por clave o etiqueta",
"admin.permissions.profilesAria": "Perfiles de funciones del plan",
"admin.permissions.applyProfile": "Aplicar perfil",
"admin.permissions.applyLegacy": "Aplicar perfil legado",
"admin.permissions.profilesHint": "One-click matrices for public ladder packages and migrated legacy navigation. Guardars overrides for the seleccionado package only.",
"admin.permissions.applyNamed": "Aplicar {label}",
"admin.permissions.applyGeneric": "Aplicar perfil",
"admin.permissions.enableAll": "Activar todo",
"admin.permissions.disableAll": "Desactivar todo",
"admin.permissions.clearOverrides": "Borrar anulaciones",
"admin.permissions.globallyOff": "Globally desactivado",
2026-08-17 00:39:25 +02:00
"admin.permissions.enableSection": "Activar sección",
"admin.permissions.disableSection": "Desactivar sección",
"admin.permissions.noMatch": "Ninguna función coincide con los filtros actuales.",
"admin.permissions.differs": "Difiere",
"admin.permissions.platformOffHint": "Desactivado en toda la plataforma even if this plan enables it.",
"admin.permissions.sectionToggled": "{label} {state} para este plan.",
"admin.permissions.state.enabled": "activado",
"admin.permissions.state.disabled": "desactivado",
"admin.permissions.loadFailed": "Error al cargar permisos del plan",
"admin.permissions.saveFailed": "Error al guardar feature",
2026-08-17 00:39:25 +02:00
"admin.permissions.enableAllFailed": "Activar todo falló",
"admin.permissions.disableAllFailed": "Desactivar todo falló",
"admin.permissions.profileFailed": "Error al apply profile",
"admin.permissions.resetFailed": "Error al reset defaults",
2026-08-17 00:39:25 +02:00
"admin.permissions.sectionFailed": "Sección update falló",
"admin.profile.legacy.label": "Legacy",
2026-08-17 00:39:25 +02:00
"admin.profile.legacy.description": "Migrated legacy navigation: catalog, feeds, facturación, and configuración; no Atrásground Tasks, tiendas, or marketing.",
"admin.profile.free.label": "Gratis",
2026-08-17 00:39:25 +02:00
"admin.profile.free.description": "Público Free ladder — AI, clave APIs, live email, and own-key AI desactivado.",
"admin.profile.starter.label": "Starter",
2026-08-17 00:39:25 +02:00
"admin.profile.starter.description": "Público Starter — AI on; own-key AI desactivado.",
"admin.profile.growth.label": "Growth",
2026-08-17 00:39:25 +02:00
"admin.profile.growth.description": "Todas las funciones del catálogo activadas.",
"admin.profile.business.label": "Business",
2026-08-17 00:39:25 +02:00
"admin.profile.business.description": "Todas las funciones del catálogo activadas.",
"admin.profile.enterprise.label": "Enterprise / todo activado",
"admin.profile.enterprise.description": "Full matriz de funciones (custom and Enterprise default).",
"admin.gates.noteStrong": "Plataforma-wide masters.",
2026-08-17 00:39:25 +02:00
"admin.gates.noteBody": "Estos interruptores se aplican a todos los paquetes. El acceso efectivo es {combo}. Los derechos por paquete están en la pestaña {permissions}.",
"admin.gates.combo": "permiso del plan Y sección global Y función global",
"admin.gates.permissionsTab": "Permisos del plan",
"admin.gates.sectionsOff": "{count} section desactivado",
"admin.gates.sectionsOffPlural": "{count} sections desactivado",
"admin.gates.featuresOff": "{count} feature master desactivado",
"admin.gates.featuresOffPlural": "{count} feature masters desactivado",
"admin.gates.title": "Maestros de funciones globales",
"admin.gates.description": "Disable a feature here to turn it desactivado for every package, even when a plan enables it.",
2026-08-17 00:39:25 +02:00
"admin.gates.section": "Sección",
"admin.gates.allSections": "Todas las secciones",
"admin.gates.search": "Buscar",
"admin.gates.searchPlaceholder": "Filtrar por clave o etiqueta",
2026-08-17 00:39:25 +02:00
"admin.gates.sectionOff": "Sección desactivado",
"admin.gates.noMatch": "Ninguna función coincide con los filtros actuales.",
"admin.gates.featureAria": "{label} global",
2026-08-17 00:39:25 +02:00
"admin.gates.sectionsTitle": "Interruptores de sección global",
"admin.gates.sectionsDesc": "Turn an entire producto area on or desactivado for all packages. “Sección + features” also updates every feature master in that section.",
"admin.gates.sectionAria": "Sección global {label}",
"admin.gates.enableSectionFeatures": "Activar sección + funciones",
"admin.gates.disableSectionFeatures": "Desactivar sección + funciones",
"admin.gates.sectionSuccess": "{label} {state} para todos los paquetes.",
2026-08-17 00:39:25 +02:00
"admin.gates.sectionSuccessWithFeatures": "{label} {state} para todos los paquetes (maestros de sección y función).",
"admin.gates.featureSuccess": "{key} {state} globalmente.",
"admin.gates.state.enabled": "activado",
"admin.gates.state.disabled": "desactivado",
"admin.gates.loadFailed": "Error al cargar global feature switches",
"admin.gates.sectionFailed": "Error al update global section",
"admin.gates.saveFailed": "Error al guardar global feature",
"admin.billing.createPlan": "Crear plan",
"admin.billing.assignPlanBtn": "Asignar plan",
"admin.billing.stat.plans": "Planes",
2026-08-17 00:39:25 +02:00
"admin.billing.stat.catalogHidden": "{catalog} catálogo · {hidden} ocultos",
"admin.billing.stat.creditsAllocated": "Créditos allocated",
"admin.billing.stat.acrossCompanies": "Across empresas on this page (first 50)",
2026-08-17 00:39:25 +02:00
"admin.billing.stat.creditsUsed": "Créditos used",
"admin.billing.stat.creditsConsumed": "Créditos consumed on this page",
"admin.billing.stat.noActivePlan": "Sin plan activo",
"admin.billing.stat.noActivePlanHint": "Empresas with no active subscription (this page)",
"admin.billing.tab.plans": "Planes",
"admin.billing.tab.permissions": "Permisos del plan",
"admin.billing.tab.global": "Interruptores globales",
"admin.billing.tab.companies": "Empresas",
2026-08-17 00:39:25 +02:00
"admin.billing.cyclesTitle": "Facturación cycles",
"admin.billing.cyclesDesc": "Process due renewals for empresas on scheduled ciclos de facturación.",
"admin.billing.runCycles": "Run due ciclos de facturación",
"admin.billing.companiesTitle": "Empresas",
2026-08-17 00:39:25 +02:00
"admin.billing.companiesDesc": "Saldos de créditos y estado del plan — asigna planes o ajusta créditos.",
"admin.billing.searchCompaniesAria": "Buscar empresas",
"admin.billing.planStatusAria": "Estado del plan",
"admin.billing.filter.all": "Todo empresas",
"admin.billing.filter.withPlan": "Tiene plan activo",
"admin.billing.filter.withoutPlan": "Sin plan activo",
"admin.billing.col.company": "Empresa",
"admin.billing.col.planStatus": "Estado del plan",
2026-08-17 00:39:25 +02:00
"admin.billing.col.creditsRemaining": "Créditos restantes",
"admin.billing.col.total": "Total",
"admin.billing.col.used": "Usados",
"admin.billing.col.usagePct": "% de uso",
"admin.billing.badge.noPlan": "Sin plan",
"admin.billing.badge.active": "Activo",
"admin.billing.assignPlanAria": "Asignar plan a {name}",
2026-08-17 00:39:25 +02:00
"admin.billing.addCredits": "Añadir créditos",
"admin.billing.addCreditsAria": "Añadir credits for {name}",
"admin.billing.showingCompanies": "Mostrando {filtered} de {total} empresas",
"admin.billing.editPlanTitle": "Editar plan",
"admin.billing.createPlanTitle": "Crear plan",
"admin.billing.editPlanDesc": "Update credits, producto caps, and whether this plan is marked custom.",
"admin.billing.createPlanDesc": "Crear a package. Personalizado plans stay hidden from public pricing.",
"admin.billing.field.name": "Nombre",
2026-08-17 00:39:25 +02:00
"admin.billing.field.description": "Descripción",
"admin.billing.field.descriptionPlaceholder": "Opcional short summary for admins",
2026-08-17 00:39:25 +02:00
"admin.billing.field.monthlyCredits": "Créditos mensuales",
"admin.billing.field.yearlyCredits": "Créditos anuales",
"admin.billing.field.maxProducts": "Productos máx.",
"admin.billing.field.maxProductsPlaceholder": "Vacío = ilimitado",
"admin.billing.field.term": "Plazo",
"admin.billing.term.monthly": "Mensual",
"admin.billing.term.yearly": "Anual",
"admin.billing.customPackage": "Personalizado package",
2026-08-17 00:39:25 +02:00
"admin.billing.customPackageHint": "Oculto from public pricing. Use for client deals; leave desactivado for Free–Business.",
"admin.billing.previewBadge": "Insignia de vista previa: {preview}.",
"admin.billing.company": "Empresa",
"admin.billing.selectCompany": "Seleccionar empresa",
2026-08-17 00:39:25 +02:00
"admin.billing.noPlanSuffix": "· no plan",
"admin.billing.plan": "Plan tarifario",
"admin.billing.selectPlan": "Seleccionar plan",
2026-08-17 00:39:25 +02:00
"admin.billing.trialAssignment": "Asignación de prueba",
"admin.billing.trialHint": "Opcional trial flag + credit grant for sales or evaluation trials.",
2026-08-17 00:39:25 +02:00
"admin.billing.trialCredits": "Créditos de prueba",
"admin.billing.assign": "Asignar",
"admin.billing.amount": "Importe",
"admin.billing.amountHint": "Usa un valor negativo para debitar.",
"admin.billing.apply": "Aplicar",
"admin.billing.planUpdated": "Plan actualizado.",
"admin.billing.planCreated": "Plan creado.",
2026-08-17 00:39:25 +02:00
"admin.billing.loadFailed": "Error al cargar facturación data",
"admin.billing.updateFailed": "Update plan falló",
"admin.billing.createFailed": "Crear plan falló",
"admin.billing.assignFailed": "Assign falló",
"admin.billing.creditsFailed": "Add credits falló",
"admin.billing.cyclesFailed": "Run cycles falló",
"admin.knowledge.supportInbox": "Soporte inbox",
"admin.knowledge.aiRoles": "Roles de IA",
2026-08-17 00:39:25 +02:00
"admin.knowledge.tab.articles": "Artículos",
"admin.knowledge.tab.templates": "Plantillas",
2026-08-17 00:39:25 +02:00
"admin.knowledge.tab.settings": "Respuesta automática",
"admin.knowledge.allStatuses": "Todo statuses",
"admin.knowledge.published": "Publicado",
"admin.knowledge.createArticle": "Crear article",
2026-08-17 00:39:25 +02:00
"admin.knowledge.col.categories": "Categorías",
"admin.knowledge.col.status": "Estado",
"admin.knowledge.col.keywords": "Palabras clave",
"admin.knowledge.badge.published": "Publicado",
"admin.knowledge.createTemplate": "Crear template",
"admin.knowledge.badge.active": "Activo",
"admin.knowledge.badge.inactive": "Inactivo",
2026-08-17 00:39:25 +02:00
"admin.knowledge.autoFirstResponses": "Activar primeras respuestas automáticas",
"admin.knowledge.faqMatching": "Coincidencia FAQ / plantilla",
"admin.knowledge.retryOnReply": "Reintentar on first customer reply (if no prior auto)",
"admin.knowledge.matchThreshold": "Umbral de confianza de coincidencia",
"admin.knowledge.enableAiFallback": "Activar respaldo de IA",
"admin.knowledge.deliveryMode": "Modo de entrega",
"admin.knowledge.delivery.draft": "Solo borrador (nota interna)",
2026-08-17 00:39:25 +02:00
"admin.knowledge.delivery.autoSend": "Envío automático al cliente",
"admin.knowledge.aiThreshold": "Umbral de confianza de la IA",
"admin.knowledge.usePlatformRole": "Use platform soporte AI role (recommended)",
"admin.knowledge.modelOverride": "Modelo override",
"admin.knowledge.providerOverride": "Proveedor override",
2026-08-17 00:39:25 +02:00
"admin.knowledge.baseUrlOverride": "Anulación de URL base",
"admin.knowledge.supportAiRoleTitle": "Soporte AI role (fallback provider)",
"admin.knowledge.configured": "Configurado",
"admin.knowledge.notReadyBadge": "No listo",
"admin.knowledge.enabled": "Activado",
"admin.knowledge.disabled": "Desactivado",
2026-08-17 00:39:25 +02:00
"admin.knowledge.openAiRoles": "Abrir Plataforma configuración → AI roles",
"admin.knowledge.field.title": "Título",
"admin.knowledge.field.slug": "Slug",
"admin.knowledge.field.body": "Cuerpo (markdown)",
"admin.knowledge.field.keywords": "Palabras clave",
"admin.knowledge.keywordsPlaceholder": "separados por comas",
2026-08-17 00:39:25 +02:00
"admin.knowledge.field.intents": "Claves de intención",
"admin.knowledge.intentsPlaceholder": "separados por comas",
2026-08-17 00:39:25 +02:00
"admin.knowledge.field.categories": "Categoría slugs",
"admin.knowledge.categoriesPlaceholder": "facturación, account…",
"admin.knowledge.field.weight": "Peso de prioridad",
"admin.knowledge.publishedEligible": "Publicado (elegible para coincidencia)",
"admin.knowledge.field.name": "Nombre",
"admin.knowledge.field.templateBody": "Cuerpo",
"admin.knowledge.active": "Activo",
"admin.settings.card.aiRolesTitle": "Plataforma AI roles",
2026-08-17 00:39:25 +02:00
"admin.settings.card.aiRolesDesc": "Procesamiento, vectorization, docs/API, and soporte — separate keys/models",
"admin.settings.roleOff": " (desactivado)",
2026-08-17 00:39:25 +02:00
"admin.settings.roleNotSet": "· not set",
"admin.settings.someRolesUnavailable": "Some AI roles are not disponible on this deployment yet. Procesamiento still uses the platform AbrirAI configuración until all roles are soporteed.",
"admin.settings.configure": "Configurar",
"admin.settings.card.smtpTitle": "Plataforma SMTP",
"admin.settings.configured": "Configurado",
"admin.settings.notConfigured": "No configurado",
"admin.settings.source": "origen: {source}",
"admin.settings.smtpEnabled": "SMTP activado",
"admin.settings.smtpDisabled": "SMTP desactivado",
2026-08-17 00:39:25 +02:00
"admin.settings.passwordSet": "· password set",
"admin.settings.card.otherTitle": "Otras integraciones",
"admin.settings.oauthSet": "Google OAuth configurado",
"admin.settings.oauthOff": "Google OAuth desactivado",
"admin.settings.eprelOn": "EPREL activado",
"admin.settings.eprelOff": "EPREL desactivado",
"admin.settings.pineconeSet": "Pinecone configurado",
"admin.settings.pineconeOff": "Pinecone desactivado",
"admin.settings.stripeSet": "Stripe configurado",
"admin.settings.stripeOff": "Stripe desactivado",
2026-08-17 00:39:25 +02:00
"admin.settings.password": "Contraseña",
"admin.settings.passwordSavedHint": "(guardado — leave blank to keep)",
"admin.settings.secretKey": "Clave secreta",
2026-08-17 00:39:25 +02:00
"admin.settings.secretConfiguredHint": "(configurado — deja en blanco para mantener)",
"admin.settings.passwordConfigured": "Contraseña configured",
"admin.settings.noSmtpPassword": "Sin contraseña SMTP",
"admin.settings.enabled": "Activado",
"admin.settings.disabled": "Desactivado",
"admin.settings.saveRole": "Guardar {label}",
2026-08-17 00:39:25 +02:00
"admin.settings.testConnection": "Probar conexión",
"admin.settings.saveMail": "Guardar mail configuración",
"admin.settings.saveIntegrations": "Guardar integrations",
"admin.settings.eprelEnabled": "EPREL enrichment activado",
2026-08-17 00:39:25 +02:00
"admin.settings.loadFailed": "Plataforma configuración could not be loaded. Saving is desactivado until reload succeeds.",
"admin.settings.testAccepted": "Mensaje de prueba aceptado por SMTP",
2026-08-17 00:39:25 +02:00
"admin.stuck.cleanupBtn": "Limpieza de trabajos atascados (>2 h en ejecución)",
"admin.stuck.jobsTitle": "Trabajos de procesamiento",
2026-08-17 00:39:25 +02:00
"admin.stuck.jobsDesc": "Últimos 100 trabajos · {running} en ejecución",
"admin.stuck.filterAll": "Todo",
2026-08-17 00:39:25 +02:00
"admin.stuck.filterRunning": "En ejecución",
"admin.stuck.filterFailed": "Fallido",
"admin.stuck.filterPending": "Pendiente",
"admin.stuck.filterCompleted": "Completado",
"admin.stuck.colId": "ID",
"admin.stuck.colCompany": "Empresa",
"admin.stuck.colStatus": "Estado",
"admin.stuck.colProgress": "Progreso",
"admin.stuck.colUpdated": "Actualizado",
"admin.stuck.colError": "Error",
"admin.stuck.loadFailed": "No se pudieron cargar los trabajos",
2026-08-17 00:39:25 +02:00
"admin.stuck.cleanupFailed": "Falló la limpieza",
"admin.support.knowledgeLink": "Conocimiento y respuesta automática",
"admin.support.queueTitle": "Cola de tickets",
2026-08-17 00:39:25 +02:00
"admin.support.queueMeta": "{total} · ámbito {scope}",
"admin.support.queueMetaStatus": "· estado {status}",
"admin.support.ticketCountOne": "{count} ticket",
"admin.support.ticketCountMany": "{count} tickets",
"admin.support.statusAll": "Todo statuses",
"admin.support.scopeAll": "Todo tickets",
"admin.support.scopeInbox": "Bandeja",
2026-08-17 00:39:25 +02:00
"admin.support.scopeMine": "Míos",
"admin.support.scopeUnassigned": "Sin asignar",
"admin.support.flagAny": "Cualquier estado auto",
"admin.support.flagNeedsHuman": "Necesita humano",
"admin.support.flagAiDraft": "Borrador IA",
"admin.support.colSubject": "Asunto",
"admin.support.colStatus": "Estado",
"admin.support.colAuto": "Auto",
"admin.support.colPriority": "Prioridad",
"admin.support.colAssignee": "Asignado",
"admin.support.colCompany": "Empresa",
"admin.support.colUpdated": "Actualizado",
"admin.support.colActions": "Acciones",
"admin.support.autoOff": "Auto desactivado",
"admin.support.claim": "Reclamar",
"admin.support.claimAria": "Reclamar ticket {subject}",
"admin.support.unassigned": "Sin asignar",
2026-08-17 00:39:25 +02:00
"admin.support.you": "Tú",
"admin.support.assigned": "Asignado",
"admin.support.loadQueueFailed": "No se pudo cargar la cola de soporte",
"admin.support.claimFailed": "No se pudo reclamar el ticket",
"admin.support.ticketFallbackTitle": "Soporte ticket",
2026-08-17 00:39:25 +02:00
"admin.support.ticketMeta": "{company} · {requester}",
"admin.support.ticketMetaFallback": "Hilo de revisión del personal",
"admin.support.companyFallback": "Empresa",
"admin.support.requesterFallback": "solicitante",
"admin.support.backQueue": "Cola",
"admin.support.resolve": "Resolver",
"admin.support.markPending": "Marcar pendiente",
"admin.support.reopen": "Reabrir",
"admin.support.assigneeLabel": "Asignado:",
2026-08-17 00:39:25 +02:00
"admin.support.unassign": "Quitar asignación",
"admin.support.assignToStaff": "Asignar al personal",
"admin.support.apply": "Aplicar",
"admin.support.autoPanelTitle": "Auto-match / asistencia IA",
2026-08-17 00:39:25 +02:00
"admin.support.autoPanelDesc": "Resultado solo para el personal del match FAQ y borrador/envío IA. Los clientes nunca ven borradores.",
"admin.support.autoDisabledBadge": "Auto desactivado",
"admin.support.autoStatusLabel": "Estado:",
2026-08-17 00:39:25 +02:00
"admin.support.lastAttempt": "Último intento:",
"admin.support.reenableAuto": "Reactivar auto",
"admin.support.disableAuto": "Desactivar auto para este ticket",
"admin.support.aiDraftTitle": "Borrador IA (aprobar o editar)",
2026-08-17 00:39:25 +02:00
"admin.support.aiDraftDesc": "El modo solo borrador dejó una nota interna. Edite si hace falta, luego envíe al cliente — o descarte y tome el control manualmente.",
"admin.support.confidence": "Confianza {value}",
2026-08-17 00:39:25 +02:00
"admin.support.statusAfterSend": "Estado tras el envío",
"admin.support.approveSend": "Aprobar y enviar",
"admin.support.discardDraft": "Descartar borrador",
"admin.support.threadTitle": "Hilo",
2026-08-17 00:39:25 +02:00
"admin.support.threadMeta": "{count} · última actividad {when}",
"admin.support.messageCountOne": "{count} mensaje",
"admin.support.messageCountMany": "{count} mensajes",
"admin.support.replyTitle": "Responder",
2026-08-17 00:39:25 +02:00
"admin.support.replyDesc": "Las respuestas públicas notifican al cliente. Las notas internas solo las ve el personal. El estado por defecto tras una respuesta pública es pendiente.",
"admin.support.internalNote": "Nota interna (no visible para el cliente)",
"admin.support.setStatus": "Establecer estado",
"admin.support.statusDefault": "Predeterminado",
"admin.support.saveNote": "Guardar nota",
"admin.support.sendReply": "Enviar respuesta",
"admin.support.replyAndResolve": "Responder y resolver",
2026-08-17 00:39:25 +02:00
"admin.support.closedBanner": "Este ticket está cerrado. Reábralo para continuar la conversación.",
"admin.support.priorityMeta": "prioridad {priority}",
"admin.support.authorAiDraft": "Borrador IA (solo personal)",
"admin.support.authorInternal": "Nota interna",
"admin.support.authorStaff": "Personal",
"admin.support.authorCustomer": "Cliente",
"admin.support.flash.noteSaved": "Nota interna guardada.",
"admin.support.flash.replySent": "Respuesta enviada.",
"admin.support.flash.resolved": "Ticket marcado como resuelto.",
"admin.support.flash.pending": "Ticket marcado como pendiente (esperando al cliente).",
"admin.support.flash.reopened": "Ticket reabierto.",
"admin.support.flash.statusSet": "Estado del ticket establecido en {status}.",
2026-08-17 00:39:25 +02:00
"admin.support.flash.autoDisabled": "Respuestas automáticas desactivadas para este ticket.",
"admin.support.flash.autoEnabled": "Respuestas automáticas reactivadas para este ticket.",
"admin.support.loadTicketFailed": "Error al cargar el ticket",
"admin.support.replyFailed": "No se pudo enviar la respuesta",
"admin.support.statusFailed": "No se pudo actualizar el estado",
2026-08-17 00:39:25 +02:00
"admin.support.unassignFailed": "No se pudo quitar la asignación",
"admin.support.assignFailed": "No se pudo asignar el ticket",
2026-08-17 00:39:25 +02:00
"admin.support.autoFailed": "No se pudo actualizar la respuesta automática",
"admin.support.approveFailed": "No se pudo aprobar el borrador IA",
"admin.support.discardFailed": "No se pudo descartar el borrador IA",
"admin.settings.sourceResolved": "Resuelto desde {sources}",
2026-08-17 00:39:25 +02:00
"admin.settings.sourceUpdated": " · actualizado {when}",
"admin.settings.updatedAt": "Actualizado {when}",
2026-08-17 00:39:25 +02:00
"admin.settings.tenantDesc": "Las claves de IA y el correo de marketing de la empresa permanecen en Integraciones. Los secretos de sesión y cifrado quedan en el entorno del servidor y no se editan aquí.",
"admin.settings.perCompanyAiEmail": "IA/correo por empresa —",
"admin.settings.plansCredits": "Planes y créditos —",
"admin.settings.fromDatabase": "Desde la base de datos",
"admin.settings.fromEnvironment": "Desde el entorno",
"admin.settings.sourceBadge": "Origen: {source}",
"admin.settings.storedKey": "Clave guardada: {masked}",
"admin.settings.enableRole": "Activar este rol",
"admin.settings.clearApiKey": "Borrar clave API guardada",
2026-08-17 00:39:25 +02:00
"admin.settings.apiKeyKeepPlaceholder": "•••• déjela en blanco para conservar",
"admin.settings.apiKeyNewPlaceholder": "sk-… o local",
"admin.settings.smtpCardTitle": "Plataforma SMTP",
2026-08-17 00:39:25 +02:00
"admin.settings.smtpCardDesc": "Se usa para invitaciones de contraseña y correo saliente de plataforma. Resend/SMTP de marketing sigue por empresa en Integraciones → Correo.",
"admin.settings.smtpBadgeOn": "SMTP activado",
"admin.settings.smtpBadgeOff": "SMTP desactivado",
"admin.settings.enableSmtp": "Activar SMTP de plataforma",
2026-08-17 00:39:25 +02:00
"admin.settings.storedPassword": "Contraseña guardada: {masked}",
"admin.settings.clearSmtpPassword": "Borrar contraseña SMTP guardada",
"admin.settings.sendTestEmail": "Enviar correo de prueba",
"admin.settings.enableGoogle": "Activar Google OAuth",
"admin.settings.clientSecret": "Secreto de cliente",
2026-08-17 00:39:25 +02:00
"admin.settings.leaveBlankKeep": "(déjelo en blanco para conservar)",
"admin.settings.storedSecret": "Secreto guardado: {masked}",
"admin.settings.clearClientSecret": "Borrar secreto de cliente guardado",
2026-08-17 00:39:25 +02:00
"admin.settings.eprelDesc": "Datos públicos gratuitos de etiquetas energéticas de la UE durante el procesamiento. Activado por defecto en todos los planes — sin activación ni mejora de pago. Use los controles solo para desactivar o ajustar el cliente.",
"admin.settings.optionalKeySaved": "Clave API opcional guardada",
"admin.settings.noApiKeyNeeded": "No se necesita clave API",
"admin.settings.optionalApiKey": "Clave API opcional",
2026-08-17 00:39:25 +02:00
"admin.settings.optionalApiKeySavedHint": "(guardado — leave blank to keep)",
"admin.settings.optionalApiKeyPublicHint": "(la API pública funciona sin ella)",
"admin.settings.clearEprelKey": "Borrar clave API EPREL guardada",
2026-08-17 00:39:25 +02:00
"admin.settings.pineconeDesc": "Sugerencias opcionales de categoría vectorial durante el procesamiento. Se usan valores del entorno del host cuando estos campos quedan vacíos.",
"admin.settings.apiKeyConfigured": "Clave API configurada",
"admin.settings.noApiKey": "Sin clave API",
"admin.settings.apiKeyLabel": "Clave API",
"admin.settings.clearPineconeKey": "Borrar clave API Pinecone guardada",
2026-08-17 00:39:25 +02:00
"admin.settings.stripeDesc": "Anulaciones opcionales de la configuración Stripe del servidor. Prefiera campos de contraseña; los valores no se vuelven a mostrar tras guardar.",
"admin.settings.stripeMock": "Forzar modo mock de Stripe (solo no producción — desactiva cargos reales)",
"admin.settings.webhookSecret": "Secreto del webhook",
"admin.settings.clearStripeSecret": "Borrar clave secreta de Stripe",
"admin.settings.clearStripeWebhook": "Borrar secreto de webhook de Stripe",
"admin.settings.feedAllowlistDesc": "Hosts/CIDR separados por comas permitidos para URL de feeds privadas.",
"admin.settings.adminsDesc": "Administradores de plataforma actualmente en este despliegue",
2026-08-17 00:39:25 +02:00
"admin.settings.onboardingTitle": "Ayudas de incorporación de admins",
"admin.settings.onboardingDesc": "Use correos de invitación set-password para incorporar usuarios elegibles que aún necesitan una contraseña.",
"admin.settings.sendInvites": "Enviar correos set-password",
"admin.settings.adminStatusBefore": "Los admins de plataforma no se pueden crear desde esta pantalla. Confirme su acceso en la",
"admin.settings.adminStatusAfter": ", o pida a un admin/ops existente que promocione su cuenta.",
"admin.settings.loadUsersFailed": "No se pudieron cargar los usuarios admin",
2026-08-17 00:39:25 +02:00
"admin.settings.sendFailed": "Envío fallido",
"admin.settings.saveMailFailed": "No se pudieron guardar los ajustes de correo",
2026-08-17 00:39:25 +02:00
"admin.settings.smtpNotConfigured": "SMTP no está configurado — active y guarde los ajustes de correo primero.",
"admin.settings.smtpTestFailed": "Prueba SMTP fallida",
"admin.settings.testEmailFailed": "No se pudo enviar el correo de prueba",
2026-08-17 00:39:25 +02:00
"admin.settings.saveIntegrationFailed": "No se pudieron guardar los ajustes de integración",
"admin.settings.aiSaved": "Configuración de IA de {label} guardada. Las claves API no se vuelven a mostrar.",
"admin.settings.aiSaveFailed": "No se pudieron guardar los ajustes de IA de {label}",
2026-08-17 00:39:25 +02:00
"admin.settings.aiTestOk": "{label}: conexión correcta",
"admin.settings.aiTestSkipped": "{label}: omitido — guarde credenciales (y active el rol) para probar.",
"admin.settings.aiTestFailed": "{label}: conexión fallida",
"admin.settings.aiTestError": "No se pudo probar la conexión de {label}",
"admin.settings.aiRole.processing.label": "Procesamiento",
2026-08-17 00:39:25 +02:00
"admin.settings.aiRole.processing.desc": "Chat/completions del pipeline de productos (títulos, descripciones, mejora).",
"admin.settings.aiRole.vectorization.label": "Vectorización",
"admin.settings.aiRole.vectorization.desc": "Embeddings para búsqueda / indexación Pinecone (coincidir dimensiones del índice).",
"admin.settings.aiRole.docs_api.label": "Docs / API",
2026-08-17 00:39:25 +02:00
"admin.settings.aiRole.docs_api.desc": "Ranura futura de asistente docs/API — /docs Ask sigue basado en reglas y no debe llamar nunca a este rol.",
"admin.settings.aiRole.support.label": "Soporte",
2026-08-17 00:39:25 +02:00
"admin.settings.aiRole.support.desc": "IA de respaldo para auto-respuesta de tickets — configure proveedor/clave/modelo aquí; active el envío en Conocimiento de soporte → Auto-respuesta.",
"admin.settings.providerOption.openai": "OpenAI",
"admin.settings.providerOption.openrouter": "OpenRouter",
"admin.settings.providerOption.azure": "Azure OpenAI",
"admin.settings.providerOption.ollama": "Ollama",
"admin.settings.providerOption.custom": "Personalizado / otro",
"admin.support.title": "Centro de soporte",
2026-08-17 00:39:25 +02:00
"admin.support.description": "Bandeja del personal — reclama de la cola, filtra por ámbito, abre hilos y resuelve",
"admin.support.unavailable": "La cola de soporte no está disponible. Contacta al administrador de la plataforma si persiste.",
"admin.support.noTickets": "No hay tickets en esta cola.",
"admin.support.ticketNotFound": "Ticket no encontrado.",
2026-08-17 00:39:25 +02:00
"admin.support.notAvailable": "El soporte no está disponible en este despliegue.",
"admin.support.loadFailed": "No se pudo cargar este ticket.",
2026-08-17 00:39:25 +02:00
"admin.support.noMessages": "Aún no hay mensajes.",
"admin.support.queueScopeAria": "Ámbito de cola",
"admin.support.statusFilterAria": "Filtro de estado",
"admin.support.autoAssistFilterAria": "Filtro de autoasistencia",
"admin.support.searchPlaceholder": "Buscar asunto, correo o empresa",
"admin.support.searchAria": "Buscar tickets",
"admin.support.assignStaffAria": "Asignar al personal",
"admin.support.aiDraftAria": "Borrador IA",
2026-08-17 00:39:25 +02:00
"admin.support.replyPlaceholder": "Escribe una respuesta…",
"admin.support.replyAria": "Cuerpo de la respuesta",
"admin.knowledge.eyebrow": "Admin de plataforma",
"admin.knowledge.title": "Base de conocimiento",
2026-08-17 00:39:25 +02:00
"admin.knowledge.description": "Estructura artículos de ayuda para coincidencia automática de FAQ. Los agentes de contenido rellenan cuerpos — mantén los hechos precisos.",
"admin.knowledge.notReady": "El conocimiento de soporte no está listo",
"admin.knowledge.noTemplates": "Sin plantillas de respuesta",
2026-08-17 00:39:25 +02:00
"admin.knowledge.articleDesc": "El cuerpo Markdown admite imágenes mediante subida segura. No inventes hechos de producto — deja marcadores para agentes de contenido.",
"admin.knowledge.templateDesc": "Marcadores permitidos: subject, category.",
2026-08-17 00:39:25 +02:00
"admin.knowledge.searchPlaceholder": "Buscar título, slug, palabras clave…",
"admin.knowledge.searchAria": "Buscar artículos",
"admin.knowledge.publishFilterAria": "Filtro de estado de publicación",
"admin.knowledge.deleteArticleAria": "Eliminar artículo",
"admin.knowledge.deleteTemplateAria": "Eliminar plantilla",
"admin.support.autoReplyStatus.matched": "FAQ coincidente",
"admin.support.autoReplyStatus.aiDraft": "Borrador IA pendiente",
"admin.support.autoReplyStatus.aiSent": "Respuesta IA enviada",
"admin.support.autoReplyStatus.skipped": "Auto omitido",
"admin.support.autoReplyStatus.failed": "Auto fallido",
"admin.support.autoReplyStatus.handedOff": "Requiere humano",
"admin.support.autoReplyStatus.none": "Sin intento auto",
"admin.support.autoSource.kb": "Base de conocimiento",
"admin.support.autoSource.template": "Plantilla",
"admin.support.autoSource.ai": "Asistido por IA",
"admin.support.autoSource.automated": "Automatizado",
2026-08-17 00:39:25 +02:00
"admin.knowledge.categoriesHeading": "Categorías",
"admin.knowledge.categoriesHint": "Cubos vacíos semilla para agentes de contenido.",
"admin.knowledge.showingArticles": "Mostrando {shown} artículos (el cuerpo se carga al editar).",
"admin.knowledge.showingArticlesOf": "Mostrando {shown} de {total} artículos (el cuerpo se carga al editar).",
"admin.knowledge.templatesHint": "Respuestas predefinidas con marcadores opcionales {{subject}} / {{category}}.",
2026-08-17 00:39:25 +02:00
"admin.knowledge.faqAutoMatchTitle": "Coincidencia FAQ automática",
"admin.knowledge.faqAutoMatchDesc": "Coincidencia de palabras clave al crear el ticket. Umbral por defecto 0.78 (rango 0.50–0.95).",
"admin.knowledge.aiFallbackTitle": "Respaldo de IA",
2026-08-17 00:39:25 +02:00
"admin.knowledge.aiFallbackDesc": "Se usa cuando la coincidencia FAQ está por debajo del umbral. Las respuestas usan el rol de IA de plataforma {role}.",
"admin.knowledge.noModel": "sin modelo",
2026-08-17 00:39:25 +02:00
"admin.knowledge.keyLast4": "clave …{last4}",
"admin.knowledge.sourceLabel": "origen {source}",
"admin.knowledge.apiKeyNote": "La clave API siempre proviene de este rol; los overrides de arriba solo cambian proveedor / modelo / URL base.",
"admin.knowledge.saveAutoSettings": "Guardar ajustes de auto-respuesta",
"admin.knowledge.insertImage": "Insertar imagen",
2026-08-17 00:39:25 +02:00
"admin.knowledge.uploading": "Subiendo…",
"admin.knowledge.imageUploadHint": "PNG / JPEG / WebP, máx. 2 MiB. Se almacena en UPLOAD_DIR/support-kb (URL pública HMAC).",
"admin.knowledge.unavailableMsg": "La base de conocimiento de soporte no está disponible en este despliegue. Contacte a su administrador de plataforma.",
"admin.knowledge.loadFailed": "No se pudo cargar el conocimiento de soporte",
2026-08-17 00:39:25 +02:00
"admin.knowledge.loadArticleFailed": "No se pudo cargar el artículo",
"admin.knowledge.loadTemplateFailed": "No se pudo cargar la plantilla",
2026-08-17 00:39:25 +02:00
"admin.knowledge.saveArticleFailed": "No se pudo guardar el artículo",
"admin.knowledge.saveTemplateFailed": "No se pudo guardar la plantilla",
2026-08-17 00:39:25 +02:00
"admin.knowledge.deleteArticleFailed": "No se pudo eliminar el artículo",
"admin.knowledge.deleteTemplateFailed": "No se pudo eliminar la plantilla",
"admin.knowledge.saveAutoFailed": "No se pudieron guardar los ajustes de auto-respuesta",
"admin.knowledge.uploadImageFailed": "No se pudo subir la imagen",
"admin.translations.eyebrow": "Plataforma",
"admin.translations.title": "Traducciones",
"admin.translations.description": "Revisa la cobertura de la UI del panel y edita packs de locale basados en archivos.",
"admin.translations.unavailable": "Traducciones no disponibles",
"admin.translations.sourceOfTruth": "Fuente de verdad",
"admin.translations.sourceOfTruthLabel": "Fuente de verdad:",
"admin.translations.colLocale": "Idioma",
"admin.translations.colTranslated": "Traducido",
"admin.translations.colMissing": "Faltantes",
"admin.translations.colStatus": "Estado",
"admin.translations.badgeBase": "Base",
"admin.translations.badgeComplete": "Completo",
"admin.translations.badgeUnregistered": "No registrado",
"admin.translations.badgeGaps": "Huecos",
"admin.translations.language": "Idioma",
"admin.translations.show": "Mostrar",
"admin.translations.filterMissing": "Solo faltantes",
"admin.translations.filterTranslated": "Solo traducidos",
"admin.translations.filterAll": "Todas las claves",
"admin.translations.search": "Buscar",
2026-08-17 00:39:25 +02:00
"admin.translations.searchPlaceholder": "Clave o texto…",
"admin.translations.noKeysMatch": "Ninguna clave coincide",
"admin.translations.badgeMissing": "Faltantes",
"admin.translations.badgeUnsaved": "Sin guardar",
2026-08-17 00:39:25 +02:00
"admin.translations.english": "Inglés",
"admin.bootstrap.title": "Acceso admin bootstrap",
"admin.bootstrap.description": "Confirma si tu cuenta ya tiene acceso de admin de plataforma. Los nuevos admins deben ser concedidos por un administrador existente.",
"admin.bootstrap.statusTitle": "Estado de admin de plataforma",
"admin.bootstrap.statusDesc": "El acceso de admin de plataforma lo concede un administrador existente. No hay bootstrap de autoservicio para este rol.",
"admin.bootstrap.alreadyAdmin": "Ya tienes acceso de admin de plataforma.",
2026-08-17 00:39:25 +02:00
"admin.bootstrap.signedInAs": "Sesión iniciada como {email}. Abre el panel admin para continuar.",
"admin.bootstrap.signedInAsShort": "Sesión iniciada como {email}",
"admin.bootstrap.notAdminTitle": "No eres admin de plataforma",
2026-08-17 00:39:25 +02:00
"admin.bootstrap.notAdminMsg": "Tu cuenta ha iniciado sesión pero no está marcada como admin de plataforma. Pide a un admin existente que te conceda acceso, luego cierra sesión y vuelve a entrar.",
"admin.bootstrap.goToPanel": "Ir al panel admin",
"admin.bootstrap.loadFailed": "Error al cargar el perfil",
2026-08-17 00:39:25 +02:00
"admin.migrate.title": "Migración de organización",
"admin.migrate.description": "Esta herramienta de migración está retirada y no cambia ningún dato.",
"admin.migrate.notAvailable": "No disponible",
2026-08-17 00:39:25 +02:00
"admin.migrate.body": "La migración de organización del proveedor de identidad anterior ya no es necesaria. Las empresas y la auth local se gestionan en Usuarios y organizaciones.",
"admin.migrate.hint": "Si abriste esto desde un marcador antiguo, continúa con Usuarios y organizaciones, Facturación de plataforma o Productos atascados.",
"admin.migrate.adminHome": "Inicio admin",
"admin.migrate.users": "Usuarios",
2026-08-17 00:39:25 +02:00
"admin.redirect.diagnostics": "Redirigiendo a Diagnósticos…",
"admin.redirect.stuck": "Redirigiendo a Productos atascados…",
"common.refresh": "Actualizar",
"common.delete": "Eliminar",
2026-08-17 00:39:25 +02:00
"common.clearSearch": "Borrar búsqueda",
"common.loading": "Cargando…",
"common.never": "Nunca",
2026-08-17 00:39:25 +02:00
"common.back": "Atrás",
"common.startOver": "Empezar de nuevo",
"common.create": "Crear",
"common.required": "Obligatorio",
"common.actions": "Acciones",
"common.status": "Estado",
"common.nameCol": "Nombre",
"common.products": "Productos",
2026-08-17 00:39:25 +02:00
"common.more": "+{count} más",
"feeds.title": "Tus feeds",
2026-08-17 00:39:25 +02:00
"feeds.loadingDesc": "Cargando tus feeds de proveedor…",
"feeds.desc": "{page} en esta página · {total} feeds en total — URL CSV/XML de proveedor y subidas. Conecta desde Tiendas para opciones guiadas.",
"feeds.storesHub": "Centro de tiendas",
2026-08-17 00:39:25 +02:00
"feeds.addFeed": "Añadir Feed",
"feeds.searchPlaceholder": "Buscar feeds...",
2026-08-17 00:39:25 +02:00
"feeds.emptyTitle": "Aún no hay feeds de productos",
"feeds.emptyMessage": "Conecta una URL CSV/XML de proveedor o sube un archivo para sincronizar productos en tu catálogo.",
"feeds.connectFeed": "Conectar feed",
"feeds.uploadCsvCta": "Subir CSV",
"feeds.noMatchTitle": "No hay feeds coincidentes",
2026-08-17 00:39:25 +02:00
"feeds.noMatchMessage": "Prueba otro término de búsqueda, o limpia la búsqueda para ver todos los feeds.",
"feeds.col.source": "Origen",
"feeds.col.mapping": "Mapeo",
2026-08-17 00:39:25 +02:00
"feeds.col.lastData": "Última sync",
"feeds.copyUrl": "Copiar URL",
"feeds.fieldsMapped": "{count} campos",
"feeds.fieldsMappedTitle": "{count} campo mapeado",
"feeds.fieldsMappedTitlePlural": "{count} campos mapeados",
"feeds.mappingsSaved": "Mapeos de campos guardados",
"feeds.mapped": "Mapeado",
"feeds.notMapped": "Sin mapear",
2026-08-17 00:39:25 +02:00
"feeds.notMappedTitle": "Aún no hay mapeos de campos — abre Mapear para configurar",
"feeds.productsFromFeed": "{count} productos de este feed",
2026-08-17 00:39:25 +02:00
"feeds.noProductsYet": "Aún no se han importado productos de este feed",
"feeds.syncing": "Sincronizando…",
"feeds.syncingShort": "Sincronizando",
"feeds.syncingHint": "Puede tardar unos minutos en feeds grandes",
"feeds.liveSync": "Sync del feed",
2026-08-17 00:39:25 +02:00
"feeds.productData": "Datos del catálogo",
"feeds.mapFields": "Mapear campos",
"feeds.map": "Mapear",
"feeds.sync": "Sincronizar",
"feeds.syncNow": "Sincronizar ahora",
2026-08-17 00:39:25 +02:00
"feeds.syncManualTitle": "Ejecutar una sincronización puntual ahora. La sincronización automática usa el intervalo definido al editar el feed.",
"feeds.syncInProgress": "Sync en curso",
2026-08-17 00:39:25 +02:00
"feeds.addTitle": "Añadir Feed",
"feeds.addDesc": "Conecta una URL de feed de productos o sube un CSV. Usa las muestras de abajo para coincidir con la estructura esperada.",
"feeds.field.name": "Nombre",
"feeds.field.namePlaceholder": "Mi feed de productos",
"feeds.tab.url": "URL del feed",
"feeds.tab.file": "Archivo CSV",
"feeds.field.url": "URL del feed",
2026-08-17 00:39:25 +02:00
"feeds.field.urlPlaceholder": "https://…",
"feeds.field.type": "Tipo",
"feeds.field.file": "Archivo CSV",
2026-08-17 00:39:25 +02:00
"feeds.fileHint": "Máx. 5 MiB. Tras crear, mapea columnas y luego sincroniza — mismo flujo que feeds por URL.",
"feeds.field.interval": "Intervalo de sincronización automática (minutos)",
"feeds.field.intervalHint": "Cada cuánto debe Descrybe tirar de este feed automáticamente mientras esté activo. Usa Sync en la lista para un tirón puntual — eso no cambia este horario.",
"feeds.createFeed": "Crear feed",
"feeds.editTitle": "Editar Feed",
2026-08-17 00:39:25 +02:00
"feeds.editDesc": "Actualiza nombre, tipo, programación de sincronización automática o URL de origen. Sync en la lista de feeds ejecuta un tirón puntual.",
"feeds.csvSource": "Origen CSV",
"feeds.uploadedCsv": "CSV subido",
"feeds.replaceFileHint": "Para reemplazar el archivo, crea un feed nuevo. La sync vuelve a leer la subida guardada.",
"feeds.csvTypeLocked": "Los feeds CSV subidos siguen siendo de tipo CSV.",
"feeds.saveChanges": "Guardar cambios",
"feeds.historyTitle": "Historial de sync",
2026-08-17 00:39:25 +02:00
"feeds.historyDesc": "Trabajos de sync recientes de “{name}”.",
"feeds.historyLastSynced": "Última sync correcta {relative} ({absolute}).",
"feeds.historyNeverSynced": "Aún no hay una sync correcta.",
"feeds.historyLoading": "Cargando historial de sync…",
"feeds.historyEmpty": "Aún no hay trabajos de sync.",
"feeds.history.started": "Iniciado",
"feeds.history.completed": "Completado",
"feeds.loadFailed": "Error al cargar feeds",
"feeds.copyFailed": "No se pudo copiar la URL",
"feeds.created": "Feed creado",
"feeds.updated": "Feed actualizado.",
"feeds.mapBeforeSync": "Mapea los campos antes de sincronizar este feed.",
"feeds.activateBeforeSync": "Activa el feed antes de sincronizar.",
2026-08-17 00:39:25 +02:00
"feeds.syncFinished": "Sincronización finalizada",
"feeds.viewProducts": "Ver productos",
"feeds.processing": "Procesamiento",
2026-08-17 00:39:25 +02:00
"feeds.syncFailed": "Error de sincronización",
"feeds.statusUpdateFailed": "No se pudo actualizar el estado",
2026-08-17 00:39:25 +02:00
"feeds.deleteConfirm": "¿Eliminar el feed “{name}”? Esto no se puede deshacer.",
"feeds.deleted": "Feed eliminado.",
"feeds.deleteFailed": "No se pudo eliminar el feed",
"feeds.historyLoadFailed": "No se pudo cargar el historial de sync",
2026-08-17 00:39:25 +02:00
"feeds.ftpUnsupported": "La sync FTP/FTPS no está disponible. Pide a tu proveedor una URL HTTPS pública, sube un feed CSV aquí o importa un archivo desde Uploads.",
"feeds.ftpUnsupportedShort": "Sync FTP no disponible",
"feeds.ftpBadge": "FTP",
2026-08-17 00:39:25 +02:00
"feeds.ftpMigrateBanner": "Algunos feeds aún usan FTP/FTPS. Descrybe no puede descargarlos. Cambia a una URL HTTPS pública, añade un feed CSV o sube desde Uploads.",
"feeds.ftpUploadCta": "Ir a Uploads",
2026-08-17 00:39:25 +02:00
"feeds.ftpHttpsCta": "Añadir feed HTTPS",
"feeds.ftpCsvCta": "Subir feed CSV",
"feeds.status.mappingIncomplete": "Mapeo incompleto",
"feeds.status.readyForMapping": "Listo para mapear",
"feeds.status.mapped": "Mapeado",
"feeds.status.active": "Activo",
"feeds.status.inactive": "Inactivo",
"feeds.status.error": "Error",
"feeds.status.unknown": "Desconocido",
"feeds.actions.menu": "Acciones del feed",
"feeds.actions.menuSyncing": "Acciones del feed (sync en curso)",
"feeds.actions.editFeed": "Editar Feed",
"feeds.actions.editMapping": "Editar mapeo",
"feeds.actions.syncNow": "Sincronizar ahora",
2026-08-17 00:39:25 +02:00
"feeds.actions.syncInProgress": "Sync en curso…",
"feeds.actions.activateToSync": "Activar feed para sincronizar",
"feeds.actions.viewHistory": "Ver historial de sync",
"feeds.actions.deactivate": "Desactivar feed",
"feeds.actions.activate": "Activar feed",
"feeds.actions.delete": "Eliminar feed",
"feeds.stats.totalFeeds": "Feeds totales",
2026-08-17 00:39:25 +02:00
"feeds.stats.activeMapped": "{active} activos · {mapped} mapeados",
"feeds.stats.activeOnly": "{active} activos",
"feeds.stats.totalProducts": "Productos importados",
2026-08-17 00:39:25 +02:00
"feeds.stats.acrossFeeds": "Filas en bruto (no catálogo + cola)",
"feeds.stats.processed": "En catálogo",
"feeds.stats.readyCatalog": "Filas de catálogo — no es parte del total importado",
"feeds.stats.unprocessed": "En espera de procesar",
2026-08-17 00:39:25 +02:00
"feeds.stats.waiting": "Cola en bruto — no es parte del total importado",
"feeds.format.howTo": "Cómo estructurar tu feed",
"feeds.format.required": "Obligatorio:",
"feeds.preview.title": "Vista previa del origen del feed",
"feeds.preview.truncated": "Truncado",
"feeds.preview.refresh": "Actualizar vista previa",
"feeds.preview.copy": "Copiar vista previa",
2026-08-17 00:39:25 +02:00
"feeds.preview.loading": "Cargando vista previa…",
"feeds.preview.empty": "Extrae el esquema para previsualizar el origen del feed.",
2026-08-17 00:39:25 +02:00
"feeds.schema.search": "Buscar campos…",
"feeds.schema.fieldName": "Nombre del campo",
"feeds.schema.sourcePath": "Ruta de origen",
"feeds.schema.confirm": "Confirmar",
"feeds.schema.apply": "Aplicar",
"feeds.preflight.missingItemPath": "Selecciona una ruta de elemento de producto antes de sincronizar.",
"feeds.preflight.emptyMappings": "Mapea al menos un campo de origen antes de sincronizar.",
"feeds.preflight.missingRequired": "Mapea los campos obligatorios antes de sincronizar: {fields}.",
2026-08-17 00:39:25 +02:00
"feeds.preflight.unknownSource": "Algunas fuentes mapeadas no se encontraron en el esquema extraído: {fields}{more}. Vuelve a extraer o corrige rutas antes de confiar en valores de muestra.",
"feeds.preflight.emptySample": "Los campos obligatorios tienen valores de muestra vacíos: {fields}. Revisa las columnas de origen antes de una sync completa.",
"feeds.preflight.fix": "Corrige los mapeos de campos antes de sincronizar.",
"mapping.title": "Mapeo del feed",
"mapping.titleNamed": "Mapear: {name}",
2026-08-17 00:39:25 +02:00
"mapping.description": "Selecciona el elemento de producto que se repite, extrae los campos de origen y asígnalos a los campos de producto de Descrybe.",
"mapping.autoMap": "Auto-mapear",
"mapping.fuzzy": "{count} aproximados",
"mapping.extractSchema": "Extraer esquema",
"mapping.backToFeeds": "Volver a Feeds",
2026-08-17 00:39:25 +02:00
"mapping.ftpStillEdit": "{message} Aún puedes editar los mapeos. Para actualizar productos, pasa a HTTPS o sube un archivo.",
"mapping.ftpUploadCta": "Ir a Uploads",
2026-08-17 00:39:25 +02:00
"mapping.ftpHttpsCta": "Añadir feed HTTPS",
"mapping.ftpCsvCta": "Subir feed CSV",
2026-08-17 00:39:25 +02:00
"mapping.loading": "Cargando detalles del feed…",
"mapping.step1": "Seleccionar elemento de producto",
"mapping.step2": "Mapear campos",
"mapping.step1Heading": "Paso 1: Seleccionar elemento de producto",
2026-08-17 00:39:25 +02:00
"mapping.csvHint": "Los feeds CSV usan los encabezados de columna como campos de origen. Extrae el esquema para cargar las columnas y continúa con el mapeo.",
"mapping.howToSelect": "Cómo seleccionar el elemento de producto:",
"mapping.howToHint": "Guía opcional",
"mapping.howTo.1": "Extrae el esquema o haz clic en una etiqueta repetida en la vista previa",
"mapping.howTo.2": "Cada elemento debe contener los datos de un solo producto",
"mapping.howTo.3": "Confirma la ruta (por ejemplo",
2026-08-17 00:39:25 +02:00
"mapping.howTo.4": "Continúa mapeando los campos de origen a los campos de producto",
"mapping.productElementPath": "Ruta del elemento de producto",
"mapping.pathPlaceholder": "p. ej. rss/channel/item o products/product",
2026-08-17 00:39:25 +02:00
"mapping.continue": "Continuar →",
"mapping.continueFields": "Continuar al mapeo de campos →",
"mapping.discovered": "Se descubrieron {fields} campos de origen en {rows} fila(s) de muestra.",
2026-08-17 00:39:25 +02:00
"mapping.suggestionsCount": "· {count} sugerencia(s) de auto-mapeo",
"mapping.step2Heading": "Paso 2: Mapear campos",
"mapping.requiredFieldsBadge": "{count} campos obligatorios",
"mapping.unmappedRequired": "{count} obligatorios sin mapear",
"mapping.sourceFieldsBadge": "{count} campos de origen",
"mapping.suggestedBadge": "{count} sugeridos",
"mapping.step2Help": "Asigna columnas o nodos XPath a tus campos de producto. Los obligatorios llevan *. Pasa el cursor por el icono de ayuda para ver una tip breve.",
"mapping.requiredFields": "Campos obligatorios",
2026-08-17 00:39:25 +02:00
"mapping.requiredMapped": "· {mapped}/{total} mapeados",
"mapping.requiredProgressDone": "Todos los campos obligatorios asignados — listo para el siguiente paso.",
"mapping.requiredProgressHint": "Los campos marcados con * deben mapearse antes de que este feed pueda sincronizar productos.",
"mapping.requiredProgressAria": "Progreso de campos obligatorios: {mapped} de {total} mapeados",
"mapping.nextAfterSaveReady": "Mappings saved. Next, sync a small sample to check products look right.",
"mapping.nextAfterSaveIncomplete": "Mappings saved. Finish the remaining required fields, then sync a sample.",
"mapping.nextCtaSyncSample": "Sync + process sample",
"mapping.nextCtaFinishRequired": "Show missing required fields",
"mapping.highConfidence": "{count} mapeo de alta confianza listo",
"mapping.highConfidencePlural": "{count} mapeos de alta confianza listos",
2026-08-17 00:39:25 +02:00
"mapping.highConfidenceHelp": "Coincidencias exactas y alias (por ejemplo EAN → GTIN). Aplica todas o acepta chips por fila en la tabla.",
"mapping.reviewMappings": "Revisar mapeos",
"mapping.needItemPath": "Introduce una ruta de elemento de producto antes de mapear campos.",
"mapping.removeMapping": "Quitar mapeo",
"mapping.sourcePlaceholder": "nombre de columna o xpath",
2026-08-17 00:39:25 +02:00
"mapping.processAfterSync": "Productos a procesar tras la sincronización",
"mapping.noFuzzyLeft": "No quedan coincidencias aproximadas por confirmar.",
"mapping.syncedQueued": "Feed sincronizado y {queued} producto(s) en cola para procesar{jobId}.",
"mapping.saveMappings": "Guardar mapeos",
"mapping.syncProcessSample": "Sincronizar + procesar muestra",
"mapping.badgeCsv": "CSV",
"mapping.requiredAria": "Ayuda de campos obligatorios",
"mapping.applySuggestions": "Aplicar sugerencias ({count})",
"mapping.confirmFuzzy": "Confirmar aproximados ({count})",
"mapping.fuzzyNeedConfirm": "{count} coincidencia aproximada por confirmar",
"mapping.fuzzyNeedConfirmPlural": "{count} coincidencias aproximadas por confirmar",
2026-08-17 00:39:25 +02:00
"mapping.fuzzyHelp": "Las coincidencias de baja confianza no se aplican solas. Confírmalas aquí o acéptalas por fila en la tabla.",
"mapping.missingRequiredTitle": "Los campos obligatorios aún necesitan un mapeo de origen:",
"mapping.applyTip": "Consejo: aplica las sugerencias de arriba — muchos campos obligatorios coinciden con nombres habituales.",
"mapping.formatLabel": "Formato:",
2026-08-17 00:39:25 +02:00
"mapping.itemPathLabel": "Ruta del ítem:",
"mapping.reExtract": "Volver a extraer",
"mapping.manualRows": "Filas manuales",
"mapping.schemaTable": "Tabla de esquema",
2026-08-17 00:39:25 +02:00
"mapping.addField": "Añadir campo",
"mapping.noSchemaYet": "Aún no hay esquema extraído.",
"mapping.orManualRows": "o usa las filas manuales abajo.",
"mapping.sourceField": "Campo de origen",
2026-08-17 00:39:25 +02:00
"mapping.selectSource": "Seleccionar origen…",
"mapping.mapsTo": "Se asigna a",
"mapping.none": "Ninguno",
2026-08-17 00:39:25 +02:00
"mapping.backToItem": "← Volver a selección de elemento",
"mapping.unsaved": "Cambios sin guardar",
"mapping.requiredFieldsColon": "Campos obligatorios:",
"mapping.sampleOptions": "Opciones de muestra",
2026-08-17 00:39:25 +02:00
"mapping.sampleSize": "Tamaño de muestra",
"mapping.noExactAlias": "No hay sugerencias exactas/alias que aplicar. Revisa las coincidencias aproximadas abajo.",
2026-08-17 00:39:25 +02:00
"mapping.noSuggestionsExtract": "No hay sugerencias — extrae primero el esquema.",
"mapping.schemaExtracted": "Esquema extraído: {fields} campos de {rows} fila(s) de muestra.",
"mapping.saved": "Mapeos de campos guardados{version}.",
"mapping.savedVersion": " (v{version})",
2026-08-17 00:39:25 +02:00
"mapping.syncNoProducts": "Sincronización terminada; no hay productos que procesar.",
"mapping.jobSuffix": " (trabajo {jobId})",
"mapping.appliedReplace": "Se aplicaron {count} mapeo(s) {kind}.",
"mapping.appliedNew": "Se aplicaron {count} mapeo(s) {kind} nuevos ({total} en total).",
"mapping.kindHighConfidence": "de alta confianza",
"mapping.kindFuzzy": "aproximado(s)",
2026-08-17 00:39:25 +02:00
"mapping.fuzzyConfirmFlash": "{count} coincidencia aproximada por confirmar — usa Confirmar aproximados abajo o los chips por fila.",
"mapping.fuzzyConfirmFlashPlural": "{count} coincidencias aproximadas por confirmar — usa Confirmar aproximados abajo o los chips por fila.",
"mapping.formatHelp.title": "Cómo estructurar tu feed",
"mapping.formatHelp.required": "Obligatorio:",
"mapping.formatHelp.requiredBody": "{gtin} (EAN/UPC), {title} (o {name}), {brand}",
2026-08-17 00:39:25 +02:00
"mapping.formatHelp.https": "Usa URLs HTTPS públicas para feeds remotos (no FTP ni localhost). La carga CSV sirve para archivos locales.",
"mapping.formatHelp.specs": "Especificaciones como pares Etiqueta: valor (p. ej. {ram}). Dimensiones: {height}, {width}, {depth}, {mass}",
2026-08-17 00:39:25 +02:00
"mapping.formatHelp.also": "También admitidos: precios, stock, imágenes, categoría, garantía, ID EPREL, descripciones HTML, imágenes extra, URL de vídeo y más — descarga la muestra completa.",
"mapping.formatHelp.downloadXml": "Descargar XML de muestra",
"mapping.formatHelp.downloadCsv": "Descargar CSV de muestra",
"mapping.formatHelp.xmlExample": "Ejemplo XML",
"mapping.formatHelp.csvExample": "Ejemplo CSV (cabecera + filas)",
"mapping.sourcePreview.title": "Vista previa del origen del feed",
"mapping.sourcePreview.truncated": "Truncado",
"mapping.sourcePreview.refresh": "Actualizar vista previa",
"mapping.sourcePreview.copy": "Copiar vista previa",
2026-08-17 00:39:25 +02:00
"mapping.sourcePreview.loading": "Cargando muestra del feed…",
"mapping.sourcePreview.errorHint": "Aún puedes introducir la ruta del elemento de producto a mano. Extrae el esquema cuando la URL del feed sea accesible.",
"mapping.sourcePreview.retry": "Reintentar",
2026-08-17 00:39:25 +02:00
"mapping.sourcePreview.empty": "Aún no hay vista previa",
"mapping.sourcePreview.emptyHintXml": "Haz clic en «Extraer esquema» para descargar una muestra y descubrir campos, o introduce una ruta de ítem a mano.",
"mapping.sourcePreview.emptyHintCsv": "Haz clic en «Extraer esquema» para descargar una muestra y descubrir campos.",
"mapping.sourcePreview.selectPath": "Seleccionar ruta: {path}",
2026-08-17 00:39:25 +02:00
"mapping.sourcePreview.clickTag": "Haz clic en una línea de etiqueta para fijar la ruta del elemento de producto.",
"mapping.table.search": "Buscar campos…",
"mapping.table.all": "Todos los campos",
"mapping.table.mapped": "Mapeado",
"mapping.table.unmapped": "Sin mapear",
"mapping.table.fieldName": "Nombre del campo",
"mapping.table.sourcePath": "Ruta de origen",
"mapping.table.sampleValues": "Valores de muestra",
"mapping.table.type": "Tipo",
"mapping.table.mapTo": "Mapear a",
2026-08-17 00:39:25 +02:00
"mapping.table.emptySchema": "Extrae el esquema del feed para rellenar los campos de origen, o añade mapeos a mano.",
"mapping.table.noMatch": "Ningún campo coincide con tus criterios.",
"mapping.table.unique": "{count} únicos",
"mapping.table.nested": "anidado",
"mapping.table.apply": "Aplicar",
"mapping.table.confirm": "Confirmar",
"mapping.table.suggestedMatch": "Coincidencia sugerida ({confidence})",
"mapping.table.confirmFuzzyMatch": "Confirmar coincidencia aproximada ({percent}%)",
"mapping.preview.title": "Vista previa del mapeo",
2026-08-17 00:39:25 +02:00
"mapping.preview.subtitle": "Forma de producto de muestra según tus mapeos actuales",
"mapping.preview.usingSamples": "· usando muestras extraídas",
"mapping.preview.formatCsv": "formato: csv",
2026-08-17 00:39:25 +02:00
"mapping.preview.item": "ítem: {path}",
"mapping.preview.sourceFields": "· {count} campos de origen",
"mapping.preview.empty": "Aún no hay campos mapeados",
"mapping.preview.emptyHint": "Asigna columnas o nodos XPath a campos de producto. Aquí aparecerá una vista previa de muestra.",
"mapping.preview.rawSample": "Fragmento de muestra en bruto",
"imports.title": "Subidas",
2026-08-17 00:39:25 +02:00
"imports.description": "Importaciones CSV guardadas en este espacio de trabajo: productos, categorías y atributos.",
"imports.importProducts": "Importar productos",
2026-08-17 00:39:25 +02:00
"imports.emptyTitle": "Aún no hay subidas",
"imports.emptyMessage": "Las importaciones CSV de productos, categorías y atributos aparecerán aquí tras subirlas.",
"imports.goProducts": "Ir a productos",
2026-08-17 00:39:25 +02:00
"imports.categories": "Categorías",
"imports.recent": "Subidas recientes",
"imports.fileCount": "{count} archivo",
"imports.fileCountPlural": "{count} archivos",
"imports.col.fileName": "Nombre de archivo",
"imports.col.kind": "Tipo",
"imports.col.uploaded": "Subido",
2026-08-17 00:39:25 +02:00
"imports.col.size": "Tamaño",
"imports.actions": "Acciones de subida",
"imports.loadFailed": "Error al cargar las subidas",
2026-08-17 00:39:25 +02:00
"imports.metadataOnlyNotice": "{count} upload records are metadata-only — file bytes were not migrated. Re-upload or resync storage if you need the originals.",
"imports.metadataOnlyBadge": "Metadata only (blob not migrated)",
2026-08-17 00:39:25 +02:00
"imports.deleteConfirm": "¿Eliminar “{name}”? Se elimina el registro de subida (y el blob local si existe).",
"imports.deleted": "Subida eliminada.",
"imports.deleteFailed": "No se pudo eliminar la subida",
"imports.status.uploaded": "Subido",
2026-08-17 00:39:25 +02:00
"reviews.redirectLoading": "Abriendo reseñas de WooCommerce…",
"reviews.tab": "Reseñas",
"reviews.syncTitle": "Importación de reseñas (tienda → Descrybe)",
"reviews.syncDesc": "Importación entrante — trae reseñas de productos WooCommerce a Descrybe para campañas y reputación",
"reviews.syncQueued": "Sync de reseñas en cola",
"reviews.statusBadge": "Reseñas: {status}",
"reviews.syncedCount": "{count} sincronizados",
2026-08-17 00:39:25 +02:00
"reviews.lastSync": "Última sync: {date}",
"reviews.noSyncYet": "Aún no se ha completado ninguna sync de reseñas.",
"reviews.needsReconnect": "La importación de reseñas no puede ejecutarse hasta reconectar las credenciales tras la migración. En la pestaña Conexión: Guardar, luego Probar la conexión.",
"reviews.queueImport": "Encolar importación de reseñas (tienda → Descrybe)",
"reviews.queueing": "Encolando...",
2026-08-17 00:39:25 +02:00
"reviews.saveTestFirst": "Guarda las credenciales y prueba la conexión antes de sincronizar",
"reviews.refreshList": "Actualizar lista",
2026-08-17 00:39:25 +02:00
"reviews.loading": "Cargando reseñas…",
"reviews.emptyTitle": "Aún no hay reseñas",
"reviews.emptyMessage": "Encola una sincronización de reseñas tras conectar tu tienda. Esta pestaña sigue usable con lista vacía.",
"reviews.col.product": "Producto",
2026-08-17 00:39:25 +02:00
"reviews.col.reviewer": "Reseñador",
"reviews.col.rating": "Valoración",
"reviews.col.review": "Revisar",
2026-08-17 00:39:25 +02:00
"reviews.queuedSuccess": "Sincronización de reseñas en cola. Se ejecutará en breve.",
"reviews.queueFailed": "No se pudo encolar la sincronización de reseñas",
"campaigns.title": "Campañas",
"campaigns.description": "Crea campañas de email de temporada a partir de tu catálogo: elige una temporada, selecciona productos, define la audiencia y genera.",
"campaigns.new": "Nueva campaña",
"campaigns.loading": "Cargando campañas…",
"campaigns.loadFailed": "Error al cargar campañas",
"campaigns.deleteConfirm": "¿Eliminar la campaña “{name}”? Esto no se puede deshacer.",
"campaigns.deleted": "Campaña eliminada",
"campaigns.deleteFailed": "Error al eliminar la campaña",
"campaigns.partialUnavailable": "Las campañas no están del todo accesibles ahora. Generar y enviar pueden fallar hasta que vuelva el servicio.",
"campaigns.searchPlaceholder": "Buscar campañas…",
"campaigns.unavailableTitle": "Campañas no disponibles",
"campaigns.unavailableMessage": "El servicio de campañas no está accesible. Puedes abrir el asistente, pero generar y enviar esperarán a que vuelva.",
"campaigns.openWizard": "Abrir asistente de creación",
"campaigns.backDashboard": "Volver al panel",
"campaigns.browseProducts": "Explorar productos",
2026-08-17 00:39:25 +02:00
"campaigns.emptyTitle": "Aún no hay campañas",
"campaigns.noMatches": "Sin coincidencias",
2026-08-17 00:39:25 +02:00
"campaigns.emptyMessage": "Cree una campaña de Black Friday, Navidad o personalizada en pocos pasos — hay plantillas de temporada listas para empezar.",
"campaigns.noMatchesMessage": "Prueba otro nombre, temporada o estado.",
2026-08-17 00:39:25 +02:00
"campaigns.create": "Crear campaña",
"campaigns.col.season": "Temporada",
"campaigns.col.updated": "Actualizado",
"campaigns.scheduled": "Programado {date}",
2026-08-17 00:39:25 +02:00
"campaigns.newTitle": "Nueva campaña",
"campaigns.newDesc": "Elige una temporada, selecciona productos y audiencia, escribe el prompt, luego genera, prueba y programa.",
2026-08-17 00:39:25 +02:00
"campaigns.editTitle": "Editar campaña",
"campaigns.editDesc": "Actualiza la temporada, los productos y la audiencia; luego vuelve a generar, envía una prueba o programa.",
"campaignWizard.loading": "Cargando asistente de campaña…",
"campaignWizard.apiMissing": "La API de campañas no está disponible temporalmente. Puedes explorar el asistente; guardar / generar / enviar necesitan /api/campaigns accesible.",
"campaignWizard.upgradeTitle": "Las campañas IA son una función de pago",
"campaignWizard.upgradeMessage": "Los planes Free pueden preparar temporadas y audiencias, pero Generar IA requiere Starter o superior. Mejora el plan para desbloquear borradores de email IA.",
"campaignWizard.comparePlans": "Comparar planes",
"campaignWizard.step.season": "Temporada",
"campaignWizard.step.catalog": "Productos",
"campaignWizard.step.audience": "Audiencia",
"campaignWizard.step.prompt": "Prompt",
"campaignWizard.step.preview": "Vista previa",
"campaignWizard.step.send": "Enviar",
"campaignWizard.pickSeason": "Elige una temporada",
2026-08-17 00:39:25 +02:00
"campaignWizard.pickSeasonHelp": "Empieza desde una plantilla — puedes editarlo todo después.",
"campaignWizard.name": "Nombre de campaña",
"campaignWizard.namePlaceholder": "Black Friday 2026",
2026-08-17 00:39:25 +02:00
"campaignWizard.catalogTitle": "Categorías y productos",
"campaignWizard.catalogHelp": "Elige qué debe destacar este email. Solo categorías bastan para un inicio rápido.",
"campaignWizard.categories": "Categorías",
"campaignWizard.noCategories": "Aún no hay categorías — añade algunas en Catálogo.",
"campaignWizard.categoriesSelected": "{count} categoría seleccionada",
"campaignWizard.categoriesSelectedPlural": "{count} categorías seleccionadas",
"campaignWizard.productsOptional": "Productos (opcional)",
"campaignWizard.selectedCount": "{count} seleccionados",
2026-08-17 00:39:25 +02:00
"campaignWizard.searchProducts": "Buscar productos…",
"campaignWizard.noProducts": "No se encontraron productos.",
2026-08-17 00:39:25 +02:00
"campaignWizard.audienceTitle": "¿Quién debería recibirlo?",
"campaignWizard.audienceHelp": "Por defecto a todos. Acota con categorías o compradores previos cuando haya pedidos sincronizados.",
"campaignWizard.audience.all": "Todos los contactos",
2026-08-17 00:39:25 +02:00
"campaignWizard.audience.allHint": "Enviar a toda tu lista (cuando el proveedor de email esté configurado).",
"campaignWizard.audience.byCategory": "Por interés de categoría",
"campaignWizard.audience.byCategoryHint": "Personas asociadas a las categorías seleccionadas.",
"campaignWizard.audience.purchased": "Comprado en categoría",
"campaignWizard.audience.purchasedHint": "Clientes que compraron productos en las categorías de audiencia (desde pedidos sync).",
"campaignWizard.audience.notPurchased": "Aún no comprado",
"campaignWizard.audience.notPurchasedHint": "Contactos que no han comprado esas categorías — ideal para recuperar.",
"campaignWizard.ordersHint": "La segmentación comprado / no comprado aparece tras sync de pedidos WooCommerce.",
"campaignWizard.audienceCategories": "Categorías de audiencia",
"campaignWizard.promptTitle": "Prompt del email",
2026-08-17 00:39:25 +02:00
"campaignWizard.promptHelp": "Rellenamos un valor sólido por defecto para {season}. Edítalo o déjalo.",
"campaignWizard.promptSeasonFallback": "esta temporada",
"campaignWizard.useDefaultPrompt": "Usar prompt estacional por defecto",
"campaignWizard.promptLabel": "Prompt",
"campaignWizard.advanced": "Opciones avanzadas",
2026-08-17 00:39:25 +02:00
"campaignWizard.advancedHelp": "La generación IA usa tu kit de marca (si hay) y productos seleccionados. La vista previa solo plantilla omite la IA y sirve de borrador de diseño.",
"campaignWizard.planFree": "Gratis",
"campaignWizard.planPaid": "De pago",
"campaignWizard.planLine": "Plan:",
2026-08-17 00:39:25 +02:00
"campaignWizard.aiLocked": "— Generar IA está bloqueado.",
"campaignWizard.generateAi": "Generar IA",
"campaignWizard.templatePreview": "Vista previa de plantilla",
"campaignWizard.saveDraft": "Guardar borrador",
"campaignWizard.previewTitle": "Vista previa",
"campaignWizard.status": "Estado:",
"campaignWizard.generateToSee": "Genera un borrador para ver el cuerpo del email.",
2026-08-17 00:39:25 +02:00
"campaignWizard.noPreview": "Aún no hay vista previa. Vuelve a Prompt y ejecuta Generar IA o Vista previa de plantilla.",
"campaignWizard.backToPrompt": "Volver al prompt",
"campaignWizard.subject": "Asunto",
"campaignWizard.emailPreview": "Vista previa del email",
"campaignWizard.regenerateAi": "Regenerar con IA",
"campaignWizard.regenerate": "Regenerar",
"campaignWizard.continueSend": "Continuar para enviar",
2026-08-17 00:39:25 +02:00
"campaignWizard.testSend": "Envío de prueba",
"campaignWizard.testSendHelp": "Envíate una copia antes de programar.",
"campaignWizard.testEmail": "Email de prueba",
"campaignWizard.testEmailPlaceholder": "tu@empresa.com",
"campaignWizard.sendTest": "Enviar prueba",
"campaignWizard.scheduleTitle": "Programar",
2026-08-17 00:39:25 +02:00
"campaignWizard.scheduleHelp": "Elige cuándo debe salir esta campaña.",
"campaignWizard.sendAt": "Enviar a las",
2026-08-17 00:39:25 +02:00
"campaignWizard.schedule": "Programar campaña",
"campaignWizard.generateToContinue": "Genera para continuar",
"campaignWizard.done": "Hecho",
"campaignWizard.loadFailed": "Error al cargar el asistente",
2026-08-17 00:39:25 +02:00
"campaignWizard.pickCatalog": "Elige al menos una categoría o producto",
"campaignWizard.pickAudienceCats": "Elige categorías de audiencia para este filtro",
"campaignWizard.completeStep": "Completa este paso para continuar",
"campaignWizard.aiDraftReady": "Borrador de IA generado",
"campaignWizard.templateReady": "Vista previa de plantilla lista",
2026-08-17 00:39:25 +02:00
"campaignWizard.unavailableSave": "Las campañas no están disponibles ahora. No se pueden guardar borradores hasta que la función esté activa.",
"campaignWizard.generateFailed": "Error al generar",
"campaignWizard.generateFirst": "Genera primero una vista previa",
2026-08-17 00:39:25 +02:00
"campaignWizard.enterTestEmail": "Introduce una dirección de correo de prueba",
"campaignWizard.testFailed": "Error en el envío de prueba",
"campaignWizard.pickSchedule": "Elige una fecha y hora",
2026-08-17 00:39:25 +02:00
"campaignWizard.scheduled": "Campaña programada",
"campaignWizard.scheduleFailed": "Error al programar",
"campaignWizard.draftSaved": "Borrador guardado",
2026-08-17 00:39:25 +02:00
"campaignWizard.unavailableShort": "Las campañas no están disponibles ahora.",
"campaignWizard.saveFailed": "Error al guardar",
"marketing.calendarTitle": "Calendario de contenido",
2026-08-17 00:39:25 +02:00
"marketing.calendarDesc": "Vincula campañas estacionales a fechas y prepara un feed de exportación con valores de shopping.",
"marketing.loadFailed": "Error al cargar el calendario",
2026-08-17 00:39:25 +02:00
"marketing.prepared": "Campaña preparada",
"marketing.alreadyReady": "La campaña ya está lista",
"marketing.exportFeedsHint": "{name} → Feeds de exportación",
"marketing.prepareFailed": "No se pudo preparar la campaña",
"marketing.requestFailed": "Error en la solicitud",
"marketing.emptyTitle": "No hay presets estacionales",
2026-08-17 00:39:25 +02:00
"marketing.emptyMessage": "Los presets del calendario aparecerán aquí cuando la API de marketing esté disponible.",
"marketing.openCampaigns": "Abrir campañas de email",
"marketing.window": "Ventana:",
2026-08-17 00:39:25 +02:00
"marketing.linkedExport": "Exportación vinculada:",
"marketing.openPrepared": "Abrir feed preparado",
2026-08-17 00:39:25 +02:00
"marketing.preparing": "Preparando…",
"marketing.prepareNamed": "Preparar campaña {name}",
"marketing.footer": "Las campañas de email están en {link} — esta página solo prepara feeds de exportación del catálogo.",
"common.done": "Hecho",
"common.copied": "Copiado al portapapeles.",
2026-08-17 00:39:25 +02:00
"common.copyFailed": "No se pudo copiar. Selecciona el texto y cópialo manualmente.",
"common.submitting": "Enviando…",
"common.sending": "Enviando…",
"settings.companyAdminOnlyView": "Solo los admins de la empresa pueden cambiar la configuración. Puedes ver los detalles del espacio de trabajo actual.",
"settings.activeCompanyHelp": "Espacio de trabajo para catálogo, feeds, facturación y claves API. Cámbialo cuando quieras desde aquí o la cabecera.",
"settings.noCompanySelected": "Ninguna empresa seleccionada",
2026-08-17 00:39:25 +02:00
"settings.creditsOverviewHelp": "Saldo de créditos de IA de la empresa activa. El uso detallado está en Facturación.",
"settings.billingLabel": "Facturación",
"settings.remainingLabel": "Restantes",
2026-08-17 00:39:25 +02:00
"settings.creditsUnavailable": "El saldo de créditos aún no está disponible para este espacio de trabajo.",
"settings.openBilling": "Abrir uso y facturación",
"settings.companyNameHelp": "Este nombre aparece en invitaciones y ajustes de la organización",
"settings.contentSettingsHelp": "Configura el idioma y la coincidencia de productos para el contenido generado",
2026-08-17 00:39:25 +02:00
"settings.mergeProductsHelp": "Si está activado, las importaciones CSV combinan filas con el mismo GTIN en un producto. Desactívalo para mantener cada fila independiente.",
"settings.emailIntegrationHelp": "Configura Resend o SMTP para invitaciones, campañas y correo transaccional.",
"settings.configureEmail": "Configurar correo",
2026-08-17 00:39:25 +02:00
"settings.aiIntegrationsHelp": "Créditos de plataforma o tu propia clave, más prompts editables para títulos, descripciones, SEO y campañas. Claves cifradas en reposo.",
"settings.openAiIntegrations": "Abrir integraciones de IA",
"settings.companyNameRequired": "Introduce un nombre de empresa.",
"settings.companySaved": "Ajustes de empresa guardados.",
"settings.companyUpdateFailed": "No se pudo actualizar la empresa",
2026-08-17 00:39:25 +02:00
"settings.mergeOn": "Los productos con el mismo GTIN se fusionarán entre feeds.",
"settings.mergeOff": "Los productos con el mismo GTIN se mantienen separados.",
2026-08-17 00:39:25 +02:00
"settings.mergeUpdateFailed": "No se pudo actualizar el ajuste de fusión",
"settings.inAppToastsHelp": "Solo en este navegador. Los fallos están activados por defecto; las finalizaciones se silencian para reducir ruido. El feedback de formularios y Deshacer nunca se silencian.",
"settings.emailAlertsHelp": "Las preferencias de alertas por correo llegarán pronto. Las alertas de fallo estarán activas por defecto (como en la app); los correos de finalización permanecerán desactivados salvo que te suscribas.",
"settings.emailAlertsBody": "Por ahora, configura el correo transaccional en Empresa → Integración de correo. Las alertas in-app de arriba siguen aplicando.",
"settings.apiKeysLegacyNotice": "Las claves API antiguas no se migraron. Crea una nueva para restaurar el acceso — el secreto se muestra solo una vez.",
"settings.apiKeysAdminOnly": "Solo los administradores pueden crear o revocar claves API. Puedes ver los prefijos existentes.",
2026-08-17 00:39:25 +02:00
"settings.apiKeysCopyUnavailableNotice": "Copia no disponible para claves existentes — solo se guarda el prefijo. Crea una nueva para copiar el secreto completo una vez y revoca la antigua si hace falta.",
"settings.apiKeysForbidden": "No tienes permiso para ver las claves API. Pide ayuda a un administrador de la empresa.",
2026-08-17 00:39:25 +02:00
"settings.noApiKeys": "Aún no hay claves API",
"settings.noApiKeysHelpAdmin": "Las claves API antiguas no se migraron. Crea una nueva para autenticar solicitudes Descrybe (X-API-Key). El secreto completo se muestra solo una vez.",
2026-08-17 00:39:25 +02:00
"settings.noApiKeysHelpMember": "Aún no hay claves API para esta empresa. Las antiguas no se migraron — pide a un administrador que cree una.",
"settings.unnamedKey": "Clave sin nombre",
"settings.neverUsed": "Nunca usado",
"settings.apiKeyActions": "Acciones de clave API",
"settings.copyUnavailable": "Copia no disponible",
"settings.copyUnavailableTitle": "El secreto completo se muestra solo una vez al crear la clave",
"settings.revoke": "Revocar",
"settings.apiKeyNameRequired": "Introduce un nombre para esta clave API.",
2026-08-17 00:39:25 +02:00
"settings.apiKeyCreatedOnce": "Clave API creada. Cópiala ahora: no se volverá a mostrar.",
"settings.apiKeyCreated": "Clave API creada.",
"settings.apiKeyCreateFailed": "No se pudo crear la clave API",
2026-08-17 00:39:25 +02:00
"settings.apiKeyRevokeConfirm": "¿Revocar esta clave API? Las solicitudes que la usen dejarán de funcionar.",
"settings.apiKeyRevoked": "Clave API revocada.",
"settings.apiKeyRevokeFailed": "No se pudo revocar la clave API",
"settings.apiKeyCopied": "Clave API copiada.",
2026-08-17 00:39:25 +02:00
"settings.createApiKeyOnceHelp": "Copia esta clave ahora — no se volverá a mostrar. Úsala como Authorization: Bearer o X-API-Key en /api/v1.",
"settings.createApiKeyNameHelp": "Ponle nombre a la clave para distinguirla después. Tras crearla, envíala como Authorization: Bearer (preferido) o X-API-Key.",
"settings.keyNamePlaceholder": "p. ej. Production",
"settings.newApiKeyAria": "Nueva clave API mostrada una vez",
"settings.copyApiKeyAria": "Copiar clave API",
"settings.alert.sync_fail.title": "Fallos de sync",
2026-08-17 00:39:25 +02:00
"settings.alert.sync_fail.description": "Cuando una sincronización de feed agota el tiempo o la API devuelve un error.",
"settings.alert.sync_done.title": "Sync completada",
2026-08-17 00:39:25 +02:00
"settings.alert.sync_done.description": "Cuando una sincronización de feed termina correctamente.",
"settings.alert.ai_fail.title": "Fallos de IA / procesamiento",
2026-08-17 00:39:25 +02:00
"settings.alert.ai_fail.description": "Cuando falla el inicio o la ejecución de un trabajo de procesamiento.",
"settings.alert.ai_done.title": "IA / procesamiento completado",
"settings.alert.ai_done.description": "Cuando un trabajo en segundo plano termina correctamente. Los toasts de inicio permanecen siempre activos para que Deshacer siga disponible.",
2026-08-17 00:39:25 +02:00
"settings.alert.export_fail.title": "Fallos de exportación",
"settings.alert.export_fail.description": "Cuando falla la exportación de un producto o feed de exportación.",
"settings.alert.export_done.title": "Exportación completada",
"settings.alert.export_done.description": "Cuando una exportación termina correctamente.",
"settings.alert.support_reply.title": "Respuestas del personal de soporte",
"settings.alert.support_reply.description": "Cuando un agente de la plataforma responde a tu ticket de soporte.",
"settings.alert.support_status.title": "Cambios de estado de soporte",
"settings.alert.support_status.description": "Cuando un ticket de soporte pasa a pendiente o resuelto.",
"empty.forbidden.title.company": "Permiso denegado",
"empty.forbidden.title.platform": "Acceso restringido",
"empty.forbidden.message.company": "No tienes permiso para esto. Pide ayuda a un administrador de la empresa.",
2026-08-17 00:39:25 +02:00
"empty.forbidden.message.platform": "Esta área solo está disponible para administradores de la plataforma.",
"empty.forbidden.message.support": "Esta área solo está disponible para personal de soporte y administradores de la plataforma.",
"empty.forbidden.backDashboard": "Volver al panel",
"empty.forbidden.apiKeys": "No tienes permiso para ver las claves API. Pide ayuda a un administrador de la empresa.",
2026-08-17 00:39:25 +02:00
"empty.forbidden.ai": "No tienes permiso para ver la configuración del proveedor de IA. Pide ayuda a un administrador.",
"empty.forbidden.email": "No tienes permiso para ver la configuración del proveedor de correo. Pide ayuda a un administrador.",
"confirm.defaultTitle": "Confirmar eliminación",
"confirm.defaultDescription": "¿Estás seguro?",
"confirm.defaultConfirm": "Confirmar",
2026-08-17 00:39:25 +02:00
"confirm.deleteFeed": "¿Eliminar el feed “{name}”? Esto no se puede deshacer.",
"confirm.deleteCampaign": "¿Eliminar la campaña “{name}”? Esto no se puede deshacer.",
"confirm.deleteExportFeed": "¿Seguro que quieres eliminar este feed de exportación?",
"confirm.rotateExportToken": "Rotar el token de la URL del feed? La URL publica anterior dejara de funcionar de inmediato.",
2026-08-17 00:39:25 +02:00
"confirm.deleteUpload": "¿Eliminar “{name}”? Se elimina el registro de subida (y el blob local si existe).",
"confirm.revokeApiKey": "¿Revocar esta clave API? Las solicitudes que la usen dejarán de funcionar.",
"confirm.deleteKnowledgeArticle": "¿Eliminar este artículo de conocimiento?",
"confirm.deleteReplyTemplate": "¿Eliminar esta plantilla de respuesta?",
"confirm.deleteStructuredField": "¿Seguro que quieres eliminar este campo? Esta acción no se puede deshacer.",
"toast.campaign.pickAudience": "Elige al menos una categoría o producto",
"toast.campaign.pickCategories": "Elige categorías de audiencia para este filtro",
"toast.campaign.completeStep": "Completa este paso para continuar",
"toast.campaign.aiDraft": "Borrador de IA generado",
"toast.campaign.templatePreview": "Vista previa de plantilla lista",
"toast.campaign.generateFirst": "Genera primero una vista previa",
"toast.campaign.testSent": "Correo de prueba enviado a {email}",
2026-08-17 00:39:25 +02:00
"toast.campaign.scheduled": "Campaña programada",
"toast.campaign.draftSaved": "Borrador guardado",
2026-08-17 00:39:25 +02:00
"toast.campaign.deleted": "Campaña eliminada",
"toast.campaign.prepared": "Campaña preparada",
"toast.campaign.alreadyReady": "La campaña ya está lista",
"toast.campaign.prepareFailed": "No se pudo preparar la campaña",
"toast.campaign.deleteFailed": "Error al eliminar la campaña",
"toast.feed.copyFailed": "No se pudo copiar la URL",
"toast.feed.created": "Feed creado",
"toast.feed.updated": "Feed actualizado.",
"toast.feed.mapBeforeSync": "Mapea los campos antes de sincronizar este feed.",
"toast.feed.activateBeforeSync": "Activa el feed antes de sincronizar.",
2026-08-17 00:39:25 +02:00
"toast.feed.syncFinished": "Sincronización finalizada",
"toast.feed.deleted": "Feed eliminado.",
"toast.feed.mappingLoadFailed": "No se pudieron cargar las asignaciones. Abre el mapeo para corregirlas antes de sincronizar.",
2026-08-17 00:39:25 +02:00
"toast.feed.syncFailed": "Error de sincronización",
"toast.feed.statusFailed": "No se pudo actualizar el estado",
"toast.feed.deleteFailed": "No se pudo eliminar el feed",
"toast.feed.beforeSampling": "Antes del muestreo",
"toast.processing.jobCompleted": "Procesamiento finalizado",
"toast.processing.jobFailed": "Procesamiento fallido",
"toast.products.startFailed": "No se pudo iniciar el procesamiento",
"toast.products.jobStarted": "Trabajo de procesamiento iniciado",
2026-08-17 00:39:25 +02:00
"toast.products.acceptUndone": "Aceptación deshecha",
"toast.products.resetComplete": "Restablecimiento completado",
2026-08-17 00:39:25 +02:00
"toast.products.nameAcceptUndone": "Aceptación del nombre deshecha",
"toast.products.descAcceptUndone": "Aceptación de la descripción deshecha",
"toast.products.cancelOne": "Procesamiento cancelado",
"toast.products.cancelMany": "Trabajos de procesamiento cancelados",
"toast.products.startJobFailed": "No se pudo iniciar el trabajo de procesamiento",
"toast.products.acceptFailed": "No se pudo aceptar el enriquecimiento",
"toast.products.updateFailed": "No se pudo actualizar el producto",
2026-08-17 00:39:25 +02:00
"toast.products.undoAcceptFailed": "No se pudo deshacer la aceptación",
"toast.products.undoFieldAcceptFailed": "No se pudo deshacer la aceptación del campo",
"toast.products.undoFieldDiscardFailed": "No se pudo deshacer el descarte del campo",
"toast.products.rejectFailed": "No se pudo rechazar el enriquecimiento",
"toast.products.exportFailed": "No se pudieron exportar los productos seleccionados",
"toast.products.resetFailed": "No se pudieron restablecer los productos",
"toast.products.cancelFailed": "No se pudo cancelar el trabajo de procesamiento",
"toast.support.ticketCreated": "Ticket creado",
"toast.support.replySent": "Respuesta enviada",
2026-08-17 00:39:25 +02:00
"toast.support.thanksFeedback": "Gracias por tu opinión",
"toast.support.createFailed": "No se pudo crear el ticket",
"toast.support.unavailable": "Soporte no disponible",
"toast.support.loadFailed": "Error al cargar los tickets de soporte",
"toast.support.loadTicketFailed": "Error al cargar el ticket",
"toast.support.replyFailed": "No se pudo enviar la respuesta",
2026-08-17 00:39:25 +02:00
"toast.support.ratingUnavailable": "Valoración no disponible",
"toast.support.alreadyRated": "Ya valorado",
2026-08-17 00:39:25 +02:00
"toast.support.ratingFailed": "No se pudo enviar la valoración",
"toast.structured.fieldAdded": "Campo añadido",
"toast.structured.fieldAddedBody": "Se ha añadido el campo de descripción estructurada.",
"toast.structured.fieldDeleted": "Campo eliminado",
2026-08-17 00:39:25 +02:00
"toast.structured.fieldDeletedBody": "Se ha eliminado el campo de descripción estructurada.",
"toast.structured.addFailed": "Error al añadir el campo",
"toast.structured.deleteFailed": "No se pudo eliminar el campo",
"toast.brand.saved": "Kit de marca guardado",
"toast.brand.logoUploaded": "Logo subido",
"toast.brand.saveFailed": "Error al guardar el kit de marca",
"toast.brand.uploadFailed": "Error al subir el logo",
2026-08-17 00:39:25 +02:00
"toast.vector.indexCreated": "Índice vectorial creado correctamente",
"toast.vector.dbInitialized": "Base de datos vectorial inicializada correctamente",
2026-08-17 00:39:25 +02:00
"toast.vector.indexFailed": "Error al crear el índice vectorial",
"toast.vector.initFailed": "Error al inicializar la base de datos vectorial",
2026-08-17 00:39:25 +02:00
"toast.vector.searchFailed": "Error al buscar categorías",
"toast.export.refreshFailed": "Error al actualizar el feed",
"toast.mapping.loadFailed": "Error al cargar el mapeo del feed",
"toast.mapping.extractFailed": "Error al extraer el esquema",
"toast.mapping.saveFailed": "Error al guardar las asignaciones de campos",
2026-08-17 00:39:25 +02:00
"toast.mapping.sampleFailed": "Falló sincronizar + procesar la muestra",
"toast.attrs.createFailed": "Error al crear",
2026-08-17 00:39:25 +02:00
"toast.attrs.importFailed": "Error de importación",
"toast.attrs.updateFailed": "Error al actualizar",
"toast.attrs.deleteFailed": "Error al eliminar",
"toast.switcher.loadUsersFailed": "No se pudieron cargar los usuarios conmutables",
"toast.switcher.switchFailed": "No se pudo cambiar de usuario",
"toast.switcher.returnFailed": "No se pudo volver al usuario original",
"toast.switcher.companyFailed": "No se pudo cambiar de empresa",
"toast.requestFailed": "Error en la solicitud",
2026-08-17 00:39:25 +02:00
"flash.campaign.unavailableDraft": "Las campañas no están disponibles ahora. No se pueden guardar borradores hasta que la función esté activa.",
"flash.campaign.testEmailRequired": "Introduce una dirección de correo de prueba",
"flash.campaign.scheduleRequired": "Elige una fecha y hora",
2026-08-17 00:39:25 +02:00
"flash.campaign.unavailable": "Las campañas no están disponibles ahora.",
"flash.campaign.generateFailed": "Error al generar",
2026-08-17 00:39:25 +02:00
"flash.campaign.testFailed": "Error en el envío de prueba",
"flash.campaign.scheduleFailed": "Error al programar",
"flash.campaign.saveFailed": "Error al guardar",
"flash.feed.copyFailed": "No se pudo copiar la URL",
"flash.feed.csvRequired": "Elige un archivo .csv.",
"flash.feed.csvFileRequired": "Elige un archivo CSV.",
"flash.feed.urlRequired": "La URL del feed es obligatoria.",
"flash.feed.updated": "Feed actualizado.",
2026-08-17 00:39:25 +02:00
"flash.feed.syncFinishedNamed": "Sincronización terminada para \"{name}\" ({status}: {products}).",
"flash.feed.deleted": "Feed eliminado.",
"flash.feed.createFailed": "No se pudo crear el feed",
"flash.feed.updateFailed": "No se pudo actualizar el feed",
"flash.settings.companyNameRequired": "Introduce un nombre de empresa.",
"flash.settings.companySaved": "Ajustes de empresa guardados.",
"flash.settings.companyFailed": "No se pudo actualizar la empresa",
2026-08-17 00:39:25 +02:00
"flash.settings.mergeFailed": "No se pudo actualizar el ajuste de fusión",
"flash.settings.apiKeyNameRequired": "Introduce un nombre para esta clave API.",
"flash.settings.apiKeyCreatedFailed": "No se pudo crear la clave API",
"flash.settings.apiKeyRevoked": "Clave API revocada.",
"flash.settings.apiKeyRevokeFailed": "No se pudo revocar la clave API",
2026-08-17 00:39:25 +02:00
"flash.settings.copyFailed": "No se pudo copiar. Selecciona el texto y cópialo manualmente.",
"flash.products.accepted": "Se aceptaron {count} producto(s) — movidos a Procesados.",
"flash.products.updated": "Producto actualizado.",
2026-08-17 00:39:25 +02:00
"flash.products.enrichmentAccepted": "Enriquecimiento aceptado — movido a Procesados.",
"flash.products.originalEmpty": "El valor original está vacío; el enriquecimiento no se puede borrar vía PATCH.",
"flash.products.selectExport": "Selecciona al menos un producto para exportar.",
2026-08-17 00:39:25 +02:00
"flash.products.exported": "Se exportaron {count} producto(s) vía feed de exportación.",
"flash.support.missingId": "Falta el id del ticket",
"flash.support.notFound": "Ticket no encontrado",
2026-08-17 00:39:25 +02:00
"flash.support.unavailable": "El soporte no está disponible temporalmente.",
"flash.support.ratingUnavailable": "La valoración no está disponible temporalmente. Inténtalo más tarde.",
"flash.support.alreadyRated": "Ya valoraste este ticket.",
2026-08-17 00:39:25 +02:00
"flash.support.queueUnavailable": "La cola de soporte no está disponible en este despliegue.",
"flash.support.deploymentUnavailable": "El soporte no está disponible en este despliegue.",
"flash.support.replyRequired": "El cuerpo de la respuesta es obligatorio.",
"flash.support.draftRequired": "El cuerpo del borrador es obligatorio antes de aprobar.",
"flash.support.claimed": "Ticket reclamado.",
"flash.support.unassigned": "Ticket sin asignar.",
"flash.support.assigneeCleared": "Asignado borrado.",
"flash.support.assigneeUpdated": "Asignado actualizado.",
"flash.support.draftApproved": "Borrador de IA aprobado y enviado al cliente.",
"flash.support.draftSent": "Borrador enviado como respuesta del personal.",
"flash.support.draftDiscarded": "Borrador de IA descartado. Ticket enviado a la cola humana.",
2026-08-17 00:39:25 +02:00
"flash.support.autoReplyDisabled": "Respuesta automática desactivada (el borrador queda como nota interna).",
"flash.structured.keyRequired": "La clave del campo es obligatoria",
2026-08-17 00:39:25 +02:00
"flash.category.nameRequired": "El nombre y el ID único son obligatorios.",
"flash.category.textEmpty": "El texto no puede estar vacío",
"flash.export.noConfigs": "Aún no hay feeds de exportación. Cree uno en Feeds de exportación y vuelva para exportar su selección.",
"flash.export.selectFormat": "Seleccione un feed de exportación.",
"flash.files.deleted": "Subida eliminada.",
2026-08-17 00:39:25 +02:00
"flash.mapping.noSuggestions": "No hay sugerencias — revisa los nombres de los campos de origen.",
"flash.mapping.allMapped": "Todas las sugerencias ya están mapeadas. Revisa los chips de confianza en la tabla.",
"flash.mapping.extractFirst": "No hay sugerencias — extrae primero el esquema.",
"flash.mapping.pathRequired": "Introduce una ruta de elemento de producto antes de mapear campos.",
2026-08-17 00:39:25 +02:00
"flash.billing.checkoutCanceled": "El pago se canceló. No se hicieron cambios.",
"flash.billing.portalReturn": "Regresaste del portal de facturación. Gestiona tu plan aquí o en Planes.",
"flash.billing.invalidAmount": "Introduce una cantidad de créditos válida.",
"flash.billing.companyNotFound": "Empresa no encontrada.",
2026-08-17 00:39:25 +02:00
"flash.billing.creditsAdded": "Se han añadido {amount} créditos.",
"flash.unsubscribe.missingToken": "Falta el token de baja.",
"flash.unsubscribe.loadFailed": "No se pudo cargar el estado de baja.",
"flash.unsubscribe.failed": "Error al darse de baja.",
2026-08-17 00:39:25 +02:00
"flash.seo.filledMeta": "Meta rellenada para “{label}” ({mode}).",
"flash.shopify.saved": "Configuración de Shopify guardada.",
"flash.woo.saved": "Configuración de WooCommerce guardada.",
"flash.woo.syncSaved": "Configuración de sincronización guardada.",
"flash.woo.autoCategories": "Se mapearon automáticamente {count} categorías.",
"flash.woo.autoAttributes": "Se mapearon automáticamente {count} atributos.",
"flash.ai.promptsSaved": "Plantillas de prompt guardadas. Se aplican a la próxima ejecución de IA.",
"flash.ai.promptRestored": "Prompt predeterminado restaurado.",
2026-08-17 00:39:25 +02:00
"flash.ai.connectionOk": "Conexión OK ({detail}).",
"flash.ai.connectionByok": ", tu propia clave",
2026-08-17 00:39:25 +02:00
"flash.email.saved": "Proveedor de correo guardado. Verifica el dominio y envía una prueba.",
"flash.email.testDryRun": "Prueba registrada en modo dry-run — no se envió ningún correo.",
"flash.email.testSent": "Correo de prueba enviado. La dirección de origen se marca como verificada si la entrega tiene éxito.",
"flash.fields.apiUnavailable": "La API de campos estándar no está disponible. No se pueden guardar los cambios.",
"flash.fields.updated": "Campo actualizado correctamente",
"flash.fields.created": "Campo creado correctamente",
"flash.fields.enabledRecommended": "Campos de ecommerce recomendados activados",
"flash.fields.deleted": "Campo eliminado correctamente",
"flash.fields.groupUpdated": "Grupo actualizado correctamente",
"flash.fields.groupCreated": "Grupo creado correctamente",
"flash.fields.groupDeleted": "Grupo eliminado correctamente",
2026-08-17 00:39:25 +02:00
"flash.processing.cancelled": "\"{name}\" se canceló.",
"flash.processing.retried": "\"{name}\" en cola para reintento.",
"flash.admin.staffRoleUpdated": "Rol de personal actualizado para {email}.",
2026-08-17 00:39:25 +02:00
"flash.admin.staffRoleUnavailable": "Las actualizaciones de rol de personal aún no están disponibles en este servidor.",
2026-08-16 18:18:39 +02:00
"flash.admin.catalogCloned": "Copied {source} into {dest}: {products} products, {categories} taxonomy categories, {mapped_with} with mapped category.",
2026-08-17 00:39:25 +02:00
"flash.admin.syncA1Success": "Synced A1 for {name}: dump_mapped {dump_mapped} ({dump_status}), prompts {prompts}, hashes {hashes}, processed←mapped {categories}, mapped←processed {mapped_backfilled}. Coverage: {mapped_with}/{mapped_total} ({taxonomy} taxonomy).",
"flash.admin.syncA1Error": "Falló la sincronización A1 de {name}.",
"flash.admin.planAssigned": "Plan asignado a {name}.",
"flash.admin.planAssignedShort": "Plan asignado.",
2026-08-17 00:39:25 +02:00
"flash.admin.creditsUpdated": "Créditos actualizados.",
"flash.admin.cyclesProcessed": "Ciclos de facturación procesados: {count}",
"flash.admin.invitesSummary": "Invitaciones para establecer contraseña: {parts}. Entrega de correo: {smtp}.",
"flash.admin.smtpOn": "activado",
"flash.admin.smtpOff": "desactivado",
2026-08-17 00:39:25 +02:00
"flash.admin.localPasswordSet": "Contraseña local establecida para {email}.",
"flash.admin.localPasswordUnavailable": "Las herramientas de contraseña local no están disponibles en este entorno.",
"flash.admin.switchedUser": "Usuario cambiado. Recargando…",
"flash.admin.switchUnavailable": "El cambio de usuario no está disponible en este entorno.",
"flash.admin.diagnosticsRateLimit": "Límite de diagnósticos alcanzado (20/min). Espera un minuto y actualiza.",
"flash.admin.smtpSaved": "Configuración SMTP de la plataforma guardada. Las contraseñas permanecen ocultas.",
"flash.admin.integrationSaved": "Configuración de integración guardada. Los campos secretos nunca se vuelven a mostrar completos.",
"flash.admin.aiSaved": "Configuración de IA de {label} guardada. Las claves API no se vuelven a mostrar.",
"flash.admin.cleanup": "Limpieza: {jobs} trabajos fallaron, {products} productos restablecidos.",
2026-08-17 00:39:25 +02:00
"flash.admin.orphanDryRun": "Dry-run only — {total} orphan(s) would be deleted. Nothing removed.",
"flash.admin.orphanDeleted": "Deleted {deleted} orphan row(s). Remaining: {remaining}.",
2026-08-17 00:39:25 +02:00
"flash.admin.articleUpdated": "Artículo actualizado.",
"flash.admin.articleCreated": "Artículo creado.",
"flash.admin.templateUpdated": "Plantilla actualizada.",
"flash.admin.templateCreated": "Plantilla creada.",
2026-08-17 00:39:25 +02:00
"flash.admin.articleDeleted": "Artículo eliminado.",
"flash.admin.templateDeleted": "Plantilla eliminada.",
2026-08-17 00:39:25 +02:00
"flash.admin.autoReplySaved": "Configuración de respuesta automática guardada.",
"flash.admin.imageUploaded": "Imagen subida e insertada en markdown.",
2026-08-17 00:39:25 +02:00
"flash.admin.translationsSaved": "Se guardaron {count} cadena(s) para {locale}. Haz commit del pack cuando esté listo.",
"flash.admin.featuresUpdated": "Actualizado {key}.",
"flash.admin.featuresAllOn": "Todas las funciones activadas para este plan.",
"flash.admin.featuresAllOff": "Todas las funciones desactivadas para este plan.",
"flash.admin.profileApplied": "Perfil {label} aplicado a {name}.",
2026-08-17 00:39:25 +02:00
"flash.admin.overridesCleared": "Anulaciones borradas — se usan los valores predeterminados del plan.",
"empty.plans.none": "No se encontraron planes.",
2026-08-17 00:39:25 +02:00
"empty.plans.noMatch": "Ningún plan coincide con este filtro.",
"empty.plans.selectPackage": "Selecciona un paquete para editar funciones.",
"empty.products.processingTitle": "No hay productos en procesamiento",
2026-08-17 00:39:25 +02:00
"empty.products.processingMessageCan": "El progreso en vivo está en Procesamiento. Abre un trabajo en curso allí para ver el estado de los pasos; esta pestaña listará productos en vuelo cuando el filtrado por ítems esté disponible.",
"empty.products.processingMessageCannot": "Los productos en un trabajo aparecen aquí cuando el procesamiento ha comenzado desde el catálogo.",
"empty.products.reviewTitle": "No hay productos que necesiten revisión",
"empty.products.reviewMessage": "Cuando termina un trabajo, los productos enriquecidos aparecen aquí. Abre una fila para comparar original vs enriquecido y Aceptar, editar o Rechazar.",
"empty.products.errorTitle": "No hay productos con errores",
2026-08-17 00:39:25 +02:00
"empty.products.errorMessage": "Cuando un trabajo falla para un producto, aparecerá aquí para que puedas reintentar.",
"empty.products.filterTitleUnprocessed": "Sin coincidencias sin procesar",
2026-08-17 00:39:25 +02:00
"empty.products.filterTitle": "Ningún producto coincide",
"empty.products.filterMessage": "Prueba otra búsqueda, categoría o feed — o borra los filtros para verlo todo.",
"empty.products.unprocessedTitle": "Aún no hay productos sin procesar",
"empty.products.unprocessedMessage": "Conecta un feed de proveedor o sube un CSV para importar productos al catálogo.",
"empty.products.noneTitle": "Aún no hay productos",
"empty.products.noneMessageStores": "Importa desde un feed o tienda y luego inicia un trabajo para construir el catálogo.",
"empty.products.noneMessage": "Importa desde un feed o sube un CSV y luego inicia un trabajo para construir el catálogo.",
"empty.products.viewJobs": "Ver trabajos",
"empty.products.startJob": "Iniciar un trabajo",
"empty.products.clearFilters": "Borrar filtros",
"empty.products.viewProcessed": "Ver procesados",
2026-08-17 00:39:25 +02:00
"empty.products.retryCatalog": "Reintentar desde el catálogo",
"empty.products.connectFeed": "Conectar feed",
2026-08-17 00:39:25 +02:00
"empty.products.addProduct": "Añadir producto",
"empty.products.uploadCsv": "Subir CSV",
2026-08-17 00:39:25 +02:00
"empty.feeds.noneTitle": "Aún no hay feeds de productos",
"empty.feeds.noneMessage": "Conecta una URL CSV/XML de proveedor o sube un archivo. Siguiente: Map → Sync → Process.",
"empty.feeds.noMatchTitle": "No hay feeds coincidentes",
2026-08-17 00:39:25 +02:00
"empty.feeds.noMatchMessage": "Prueba otro término de búsqueda, o limpia la búsqueda para ver todos los feeds.",
"empty.export.loadFailedTitle": "No se pudieron cargar los feeds de exportación",
"empty.export.loadFailedMessage": "Algo falló al cargar tus exportaciones. Reintenta o revisa el error de arriba.",
"empty.export.noneTitle": "Aún no hay feeds de exportación",
"empty.export.noneMessage": "Cree un feed de Google Shopping, Meta o CSV/XML personalizado para elegir qué productos y campos salen. Genere una URL pública para Merchant Center o cualquier socio — o exporte un subconjunto desde Productos.",
"empty.export.noMatchTitle": "No hay feeds coincidentes",
2026-08-17 00:39:25 +02:00
"empty.export.noMatchMessage": "Prueba otro término de búsqueda.",
"empty.files.noneTitle": "Aún no hay subidas",
"empty.files.noneMessage": "Las importaciones CSV de productos, categorías y atributos aparecen aquí tras subirlas. Tras una migración de plataforma, no se copiaron los contenidos de archivo (blobs) — vuelve a subirlos si los necesitas.",
"empty.files.uploadCta": "Subir CSV",
"empty.export.fromProductsCta": "Exportar desde Productos",
"empty.dashboard.noJobsTitle": "No hay trabajos recientes",
2026-08-17 00:39:25 +02:00
"empty.dashboard.noJobsMessage": "Los trabajos aparecen aquí cuando inicias el procesamiento desde Productos. Enriquece títulos y descripciones antes de exportar.",
"empty.stores.noneTitle": "Aún no hay tienda conectada",
"empty.stores.noneMessage": "Conecta WooCommerce o Shopify para sincronizar catálogo y pedidos. ¿Prefieres un archivo de proveedor? Usa URL de feed o subida CSV.",
"empty.stores.noneTitleMember": "Aún no hay tienda conectada",
"empty.stores.noneMessageMember": "Solo los admins de la empresa pueden conectar WooCommerce o Shopify. Pide ayuda a un admin, o usa Feed URL/CSV si tu rol lo permite.",
2026-08-17 00:39:25 +02:00
"empty.woo.openConnection": "Abrir ajustes de conexión",
"empty.shopify.openConnection": "Abrir ajustes de conexión",
"empty.processing.noneTitle": "Aún no hay trabajos",
"empty.processing.noneMessage": "Inicia un trabajo desde Productos cuando quieras. El progreso y el historial aparecerán aquí.",
"empty.campaigns.unavailableTitle": "Campañas no disponibles",
"empty.campaigns.unavailableMessage": "El servicio de campañas no está accesible. Puedes abrir el asistente, pero generar y enviar esperarán a que vuelva.",
"empty.calendar.noneTitle": "No hay presets estacionales",
2026-08-17 00:39:25 +02:00
"empty.calendar.noneMessage": "Los presets del calendario aparecerán aquí cuando la API de marketing esté disponible.",
"empty.seo.noneTitle": "No hay catálogo para puntuar",
"empty.seo.noneMessage": "Procesa productos o añade categorías primero. Las puntuaciones SEO aparecen cuando hay datos de catálogo.",
"empty.vector.unavailableTitle": "Categorías vectoriales no disponibles",
"empty.vector.noMatchTitle": "Aún no hay coincidencias",
"empty.vector.noMatchMessage": "Introduce una descripción de producto y busca para ver coincidencias de categorías vectoriales.",
"empty.structured.unavailableTitle": "Descripciones estructuradas no disponibles",
2026-08-17 00:39:25 +02:00
"empty.structured.unavailableMessage": "Esta API aún no está en este backend. No puedes gestionar campos Export ID aquí hasta que /api/structured-descriptions esté conectada.",
"empty.structured.noneTitle": "Aún no hay campos de descripción estructurada",
"empty.structured.noneMessage": "Añade un campo aquí o crea Export IDs en una fórmula de descripción de categoría — aparecerán para usar en feeds de exportación.",
"empty.support.unavailableTitle": "Soporte no disponible",
2026-08-17 00:39:25 +02:00
"empty.support.noneTitle": "Aún no hay tickets",
"empty.support.unavailableMessage": "La API de soporte no está accesible. Inténtalo pronto o abre un ticket nuevo cuando el servicio esté activo.",
"empty.support.filterMessage": "Ningún ticket coincide con este estado. Prueba otro filtro o crea uno nuevo.",
"empty.support.noneMessage": "Describe tu problema y el equipo responderá en este hilo. También recibirás una notificación en la app cuando responda el personal.",
"empty.support.createTicket": "Crear ticket",
"empty.support.clearFilter": "Borrar filtro",
"empty.support.ticketNotFoundTitle": "Ticket no encontrado",
"empty.support.ticketNotFoundMessage": "Este ticket puede haberse eliminado o no tienes acceso.",
"empty.support.noMessagesTitle": "Sin mensajes",
2026-08-17 00:39:25 +02:00
"empty.support.noMessagesMessage": "Este hilo aún no tiene mensajes.",
"empty.settings.noApiKeysTitle": "Aún no hay claves API",
"empty.shopify.noOrdersTitle": "Aún no hay pedidos",
"empty.shopify.noOrdersMessage": "Los pedidos aparecen tras conectar Shopify y ejecutar una importación de pedidos. Las listas vacías son normales hasta el primer sync.",
"empty.woo.noOrdersTitle": "Aún no hay pedidos",
"empty.woo.noOrdersMessage": "Los pedidos aparecen tras conectar WooCommerce y ejecutar una sincronización de pedidos. Las listas vacías son normales hasta el primer sync.",
"empty.woo.noReviewsTitle": "Aún no hay reseñas",
"empty.woo.noReviewsMessage": "Las reseñas aparecen tras poner en cola una importación desde una tienda conectada. Esta pestaña sigue usable con la lista vacía.",
"empty.admin.noProviderTitle": "Sin filas de proveedor",
2026-08-17 00:39:25 +02:00
"empty.admin.noProviderMessage": "Los tokens aparecen aquí cuando los productos registran un tipo de proveedor.",
"empty.admin.noCompaniesTitle": "Sin empresas",
2026-08-17 00:39:25 +02:00
"empty.admin.noCompaniesMessage": "La lista de empresas está vacía.",
"empty.admin.noCyclesTitle": "Aún no hay ciclos de facturación",
"empty.admin.noCyclesMessage": "Los ciclos aparecen cuando las ejecuciones de facturación crean filas históricas.",
"empty.admin.noCompaniesFound": "No se encontraron empresas.",
"empty.admin.noCompaniesMatch": "Ninguna empresa coincide con este filtro.",
"empty.admin.notPlatformTitle": "No eres admin de plataforma",
2026-08-17 00:39:25 +02:00
"empty.admin.notPlatformMessage": "Tu cuenta ha iniciado sesión pero no está marcada como admin de plataforma. Pide a un admin existente que te conceda acceso, luego cierra sesión y vuelve a entrar.",
"empty.admin.noJobsFilter": "No hay trabajos para este filtro.",
"empty.admin.noAdminUsers": "No se encontraron usuarios admin",
"empty.admin.noJobs": "No se encontraron trabajos.",
2026-08-17 00:39:25 +02:00
"empty.admin.queueUnavailable": "La cola de soporte no está disponible. Contacta al administrador de la plataforma si persiste.",
"empty.admin.noTicketsQueue": "No hay tickets en esta cola.",
"empty.admin.knowledgeTitle": "Base de conocimiento",
2026-08-17 00:39:25 +02:00
"empty.admin.knowledgeNotReadyTitle": "El conocimiento de soporte no está listo",
"empty.admin.knowledgeNotReadyMessage": "Los artículos y la respuesta automática aún no están configurados en este despliegue.",
"empty.admin.noTemplatesTitle": "Sin plantillas de respuesta",
2026-08-17 00:39:25 +02:00
"empty.admin.noTemplatesMessage": "Las plantillas se emparejan como artículos y se publican como respuestas automáticas etiquetadas.",
"empty.admin.ticketNotFound": "Ticket no encontrado.",
2026-08-17 00:39:25 +02:00
"empty.admin.supportUnavailable": "El soporte no está disponible en este despliegue.",
"empty.admin.ticketLoadFailed": "No se pudo cargar este ticket.",
2026-08-17 00:39:25 +02:00
"empty.admin.noMessages": "Aún no hay mensajes.",
"empty.admin.translationsUnavailableTitle": "Traducciones no disponibles",
2026-08-17 00:39:25 +02:00
"empty.admin.translationsUnavailableMessage": "El endpoint del catálogo de traducciones no está disponible en esta build.",
"empty.admin.noKeysMatchTitle": "Ninguna clave coincide",
2026-08-17 00:39:25 +02:00
"empty.admin.noKeysMatchMessage": "Prueba otro filtro o búsqueda, o actualiza cuando se añadan claves nuevas al inglés.",
"empty.admin.noUsersMatch": "Ningún usuario coincide con este filtro.",
"empty.admin.noCompaniesMatchFilter": "Ninguna empresa coincide con este filtro.",
2026-08-17 00:39:25 +02:00
"blast.title": "Confirmar envío masivo",
"blast.dryRunDescription": "El modo de prueba está activo — no saldrá ningún correo real de Descrybe. Confirma para registrar el envío de prueba.",
"blast.liveDescription": "Esto enviará correos reales a tu audiencia. Escribe I understand para continuar.",
"blast.recipients": "Destinatarios en esta solicitud: {count}",
2026-08-17 00:39:25 +02:00
"blast.typePhrase": "Escribe “I understand”",
"blast.placeholder": "I understand",
"blast.runDryRun": "Ejecutar prueba",
"blast.send": "Enviar blast",
2026-08-17 00:39:25 +02:00
"marketing.footerBefore": "Las campañas de email están en",
"marketing.footerAfter": "— esta página solo prepara feeds de exportación del catálogo.",
"support.title": "Centro de soporte",
2026-08-17 00:39:25 +02:00
"support.description": "Abrir a ticket for facturación, bugs, or account help. Personal replies show here and as in-app notifications.",
"support.newTicket": "Nuevo ticket",
"support.createTicket": "Crear ticket",
2026-08-17 00:39:25 +02:00
"support.loadingTickets": "Cargando tickets…",
"support.loadFailed": "Error al cargar los tickets de soporte",
"support.unavailableBanner": "Soporte is not fully disponible yet. You can still prepare a ticket; submitting may wait until the service is ready.",
"support.yourTickets": "Tus tickets",
"support.ticketCount": "{count} tickets",
"support.ticketCountOne": "{count} ticket",
2026-08-17 00:39:25 +02:00
"support.statusFilterSuffix": "· estado {status}",
"support.filterByStatus": "Filtrar by status",
"support.unavailableTitle": "Soporte no disponible",
2026-08-17 00:39:25 +02:00
"support.emptyTitle": "Aún no hay tickets",
"support.unavailableEmpty": "La API de soporte no está accesible. Inténtalo pronto o abre un ticket nuevo cuando el servicio esté activo.",
"support.emptyFiltered": "Ningún ticket coincide con este estado. Prueba otro filtro o crea uno nuevo.",
"support.emptyHelp": "Describe tu problema y el equipo responderá en este hilo. También recibirás una notificación en la app cuando responda el personal.",
"support.clearFilter": "Borrar filtro",
"support.table.subject": "Asunto",
2026-08-17 00:39:25 +02:00
"support.table.category": "Categoría",
"support.table.status": "Estado",
"support.table.priority": "Prioridad",
"support.table.updated": "Actualizado",
"support.openTicketAria": "Abrir ticket {subject}",
"support.status.all": "Todo",
"support.status.open": "Abrir",
"support.status.pending": "Pendiente",
"support.status.resolved": "Resuelto",
"support.status.closed": "Cerrado",
"support.new.title": "Nuevo ticket de soporte",
2026-08-17 00:39:25 +02:00
"support.new.description": "Cuéntanos en qué necesitas ayuda. Incluye pasos, mensajes de error o datos de factura si aplica.",
"support.new.back": "Atrás to tickets",
"support.new.details": "Detalles del ticket",
"support.new.detailsHelp": "Estado starts as open. You may get an automated answer first; a human teammate can take over anytime from the same thread.",
"support.new.subject": "Asunto",
"support.new.subjectPlaceholder": "Resumen breve",
2026-08-17 00:39:25 +02:00
"support.new.category": "Categoría",
"support.new.priority": "Prioridad",
"support.new.optional": "Opcional details",
2026-08-17 00:39:25 +02:00
"support.new.optionalHint": "(SKU, etiquetas — ayuda al enrutado)",
"support.new.relatedSku": "SKU relacionado",
"support.new.relatedSkuPlaceholder": "p. ej. ABC-123",
"support.new.relatedSkuHelp": "Producto or feed SKU if this is about a specific item.",
"support.new.tags": "Etiquetas",
"support.new.tagsPlaceholder": "login, factura (separados por comas)",
2026-08-17 00:39:25 +02:00
"support.new.tagsHelp": "Hasta 10 etiquetas cortas. Normalizamos espacios y puntuación.",
"support.new.tagsWillSend": "Se enviará: {tags}",
"support.new.message": "Mensaje",
"support.new.messagePlaceholder": "Describe el problema, lo que esperabas y cualquier detalle que ayude a reproducirlo.",
"support.new.createdTitle": "Ticket creado",
"support.new.createdBody": "Responderemos en este hilo. Atiende las notificaciones in-app.",
"support.new.viewTicket": "Ver ticket",
2026-08-17 00:39:25 +02:00
"support.new.unavailable": "Soporte is temporarily no disponible. Your message was not submitted — try again shortly.",
"support.new.unavailableTitle": "Soporte no disponible",
"support.new.createFailed": "No se pudo crear el ticket",
"support.ticket.fallbackTitle": "Soporte ticket",
"support.ticket.description": "Conversation thread with Descrybe soporte.",
2026-08-17 00:39:25 +02:00
"support.ticket.meta": "{category} · {priority} · Actualizado {when}",
"support.ticket.allTickets": "Todo tickets",
2026-08-17 00:39:25 +02:00
"support.ticket.loading": "Cargando ticket…",
"support.ticket.missingId": "Falta el id del ticket",
"support.ticket.notFound": "Ticket no encontrado",
"support.ticket.notFoundMessage": "Este ticket puede haberse eliminado o no tienes acceso.",
2026-08-17 00:39:25 +02:00
"support.ticket.backCenter": "Atrás to Soporte Center",
"support.ticket.unavailable": "El soporte no está disponible temporalmente.",
"support.ticket.loadFailed": "Error al cargar el ticket",
2026-08-17 00:39:25 +02:00
"support.ticket.openedMeta": "Abrired {when} · {category} · {priority} priority",
"support.ticket.sku": "SKU {sku}",
"support.ticket.messagesAria": "Mensajes del ticket",
"support.ticket.noMessages": "Sin mensajes",
2026-08-17 00:39:25 +02:00
"support.ticket.noMessagesHelp": "Este hilo aún no tiene mensajes.",
"support.ticket.yourReply": "Tu respuesta",
2026-08-17 00:39:25 +02:00
"support.ticket.replyPlaceholder": "Add details or reply to soporte…",
"support.ticket.sendReply": "Enviar respuesta",
"support.ticket.replySent": "Respuesta enviada",
2026-08-17 00:39:25 +02:00
"support.ticket.reopened": "Ticket reabierto para revisión del equipo.",
"support.ticket.replyAdded": "Tu mensaje se añadió al hilo.",
"support.ticket.replyFailed": "No se pudo enviar la respuesta",
"support.ticket.reopenHint": "Responder reabre este ticket para el equipo.",
2026-08-17 00:39:25 +02:00
"support.ticket.humanHint": "Replying asks a human teammate to continue from aquí.",
"support.ticket.closedBanner": "This ticket is closed. Crear a new ticket if you still need help.",
2026-08-17 00:39:25 +02:00
"support.kind.you": "Tú",
"support.kind.human": "Soporte",
"support.kind.auto": "Automatizado",
"support.kind.ai": "Asistido por IA",
"support.kind.system": "Sistema",
2026-08-17 00:39:25 +02:00
"support.kind.autoBadge": "Respuesta automática",
"support.kind.aiBadge": "Asistido por IA",
"support.progress.closed.title": "Ticket cerrado",
"support.progress.closed.message": "This conversation is closed. Abrir a new ticket if you still need help.",
"support.progress.resolved.title": "Marcado como resuelto",
2026-08-17 00:39:25 +02:00
"support.progress.resolved.message": "Creemos que está resuelto. Responde para reabrir, o deja una valoración rápida abajo.",
"support.progress.quickAnswer.title": "Respuesta rápida enviada",
"support.progress.quickAnswer.message": "We shared an automated reply below. If it does not solve it, reply aquí — a human will take over.",
"support.progress.onIt.title": "Estamos en ello",
"support.progress.onIt.handedMessage": "A soporte teammate has your ticket and will reply in this thread.",
"support.progress.onIt.pendingMessage": "Soporte is reviewing your message. You will see updates in this thread.",
"support.progress.received.title": "Ticket recibido",
2026-08-17 00:39:25 +02:00
"support.progress.received.message": "Gracias — tenemos tu solicitud. Puede aparecer ayuda automática pronto, o un compañero responderá.",
"support.category.billing": "Facturación",
"support.category.billing.help": "Facturas, payment methods, plan changes, and Stripe receipts.",
2026-08-17 00:39:25 +02:00
"support.category.billing_credits": "Facturación / credits",
"support.category.billing_credits.help": "Saldo de créditos, cuotas de uso y recargas.",
"support.category.bug": "Bug / error",
"support.category.bug.help": "Errores inesperados, pantallas rotas o pasos que fallan siempre.",
"support.category.account": "Cuenta / acceso",
"support.category.account.help": "Login, invites, empresa membership, and permissions.",
"support.category.integrations": "Integraciones",
2026-08-17 00:39:25 +02:00
"support.category.integrations.help": "WooCommerce, Shopify, API pública o configuración del conector.",
"support.category.processing": "Procesamiento / AI",
"support.category.processing.help": "Producto procesamiento, AI prompts, and generation quality.",
"support.category.export": "Exportar / channels",
"support.category.export.help": "Exportar feeds, channels, and sync destinations.",
2026-08-17 00:39:25 +02:00
"support.category.migration": "Migración / datos",
"support.category.migration.help": "Datos faltantes o incorrectos tras el corte — productos, feeds, tiendas, facturación o equipo.",
"support.category.other": "Otro",
2026-08-17 00:39:25 +02:00
"support.category.other.help": "Cualquier otra cosa — lo enviaremos al compañero adecuado.",
"support.priority.low": "Bajo",
2026-08-17 00:39:25 +02:00
"support.priority.low.help": "Deseable o no bloqueante — lo atenderemos en orden.",
"support.priority.normal": "Normal",
2026-08-17 00:39:25 +02:00
"support.priority.normal.help": "Solicitud estándar. La mayoría de tickets usan esto.",
"support.priority.high": "Alto",
2026-08-17 00:39:25 +02:00
"support.priority.high.help": "Bloquea el trabajo o afecta a ingresos — úsalo con moderación.",
"support.csat.thanks": "Gracias por tu opinión",
"support.csat.unavailable": "La valoración no está disponible temporalmente. Inténtalo más tarde.",
"support.csat.unavailableTitle": "Valoración no disponible",
"support.csat.alreadyRated": "Ya valoraste este ticket.",
"support.csat.alreadyRatedTitle": "Ya valorado",
2026-08-17 00:39:25 +02:00
"support.csat.submitFailed": "No se pudo enviar la valoración",
"support.csat.yourRating": "Tu valoración",
"support.csat.ratedOutOf": "Valoraste este ticket con {score} de 5",
2026-08-17 00:39:25 +02:00
"support.csat.howDidWeDo": "¿Cómo lo hicimos?",
"support.csat.formHelp": "This ticket is {status}. Rate your experience (1–5). Opcional comment helps us improve.",
"support.csat.rating": "Valoración",
"support.csat.scoreAria": "{value} — {label}",
"support.csat.whatWentWrong": "What went wrong? (opcional)",
"support.csat.whatWentWrongPlaceholder": "Una nota breve nos ayuda a hacer seguimiento.",
"support.csat.anythingElse": "Anything else? (opcional)",
"support.csat.optionalFeedback": "Opcional feedback",
2026-08-17 00:39:25 +02:00
"support.csat.submit": "Enviar valoración",
"support.csat.score.1": "Muy insatisfecho",
"support.csat.score.2": "Insatisfecho",
"support.csat.score.3": "Aceptar",
"support.csat.score.4": "Satisfecho",
"support.csat.score.5": "Muy satisfecho",
"catalog.delete": "Eliminar",
2026-08-17 00:39:25 +02:00
"catalog.deleting": "Eliminando…",
"catalog.saving": "Guardando…",
"catalog.adding": "Añadiendo…",
"catalog.assigning": "Asignando…",
"catalog.uploading": "Subiendo…",
"catalog.create": "Crear",
"catalog.createFailed": "Error al crear",
"catalog.updateFailed": "Error al actualizar",
"catalog.deleteFailed": "Error al eliminar",
2026-08-17 00:39:25 +02:00
"catalog.importFailed": "Error de importación",
"catalog.confirm": "Confirmar",
2026-08-17 00:39:25 +02:00
"catalog.confirmDeletion": "Confirmar eliminación",
"catalog.areYouSure": "¿Estás seguro?",
"catalog.previous": "Anterior",
"catalog.next": "Siguiente",
"catalog.expand": "Expandir",
"catalog.collapse": "Contraer",
2026-08-17 00:39:25 +02:00
"catalog.clearSearch": "Borrar búsqueda",
"catalog.clearFilters": "Borrar filtros",
2026-08-17 00:39:25 +02:00
"catalog.clearSelection": "Limpiar selección",
"catalog.add": "Añadir",
"catalog.update": "Actualizar",
"catalog.edit": "Editar",
"catalog.accept": "Aceptar",
"catalog.reject": "Rechazar",
"catalog.reset": "Restablecer",
"catalog.undo": "Deshacer",
"catalog.close": "Cerrar",
"catalog.closePanel": "Cerrar panel",
2026-08-17 00:39:25 +02:00
"catalog.closeMenus": "Cerrar menús",
"catalog.openMenu": "Abrir menú",
"catalog.loading": "Cargando…",
"catalog.empty": "Vacío",
"catalog.required": "Obligatorio",
"catalog.optional": "Opcional",
"catalog.features": "Funciones",
2026-08-17 00:39:25 +02:00
"catalog.csvImportFinished": "Importación CSV finalizada.",
"catalog.comparePlans": "Comparar planes",
"catalog.saveChanges": "Guardar cambios",
2026-08-17 00:39:25 +02:00
"catalog.saveFormula": "Guardar fórmula",
"catalog.saveFormulaShort": "Guardar fórmula",
"catalog.noResults": "Sin resultados",
"products.title": "Productos",
2026-08-17 00:39:25 +02:00
"products.description": "Explora, revisa y procesa tu catálogo.",
"products.loadFailed": "Error al cargar productos",
"products.unnamed": "Producto sin nombre",
"products.tabs.navLabel": "Vistas de productos",
"products.tab.processed": "Procesados",
"products.tab.processedHint": "Productos terminados listos para exportar o sincronizar",
2026-08-17 00:39:25 +02:00
"products.tab.needsReview": "Necesita revisión",
"products.tab.needsReviewHint": "Productos enriquecidos pendientes de aceptar, editar o rechazar",
"products.tab.needsReviewShort": "Revisar",
"products.tab.error": "Errores",
"products.tab.errorHint": "Productos que fallaron durante un trabajo",
"products.tab.processing": "En curso",
2026-08-17 00:39:25 +02:00
"products.tab.processingHint": "Productos en un trabajo en ejecución",
"products.tab.busy": "En curso",
"products.tab.unprocessed": "Sin procesar",
2026-08-17 00:39:25 +02:00
"products.tab.unprocessedHint": "Productos del catálogo aún no procesados",
"products.tab.raw": "Sin procesar",
"products.status.processed": "Procesados",
2026-08-17 00:39:25 +02:00
"products.status.needsReview": "Necesita revisión",
"products.status.processing": "Procesamiento",
"products.status.error": "Error",
"products.status.failed": "Fallido",
"products.status.unprocessed": "Sin procesar",
"products.status.pending": "Pendiente",
"products.status.unknown": "Desconocido",
2026-08-17 00:39:25 +02:00
"products.pagination.showing": "Mostrando {start}–{end} de {total}",
"products.empty.processing.title": "Aún no hay trabajos",
"products.empty.processing.messageJobs": "No hay nada en ejecución. Inicia un trabajo desde Sin procesar, o abre Procesamiento para ver el progreso.",
"products.empty.processing.messageBasic": "Los productos aparecen aquí mientras hay un trabajo en curso.",
"products.empty.needsReview.title": "No hay productos que necesiten revisión",
"products.empty.needsReview.message": "Cuando termina un trabajo, los productos enriquecidos aparecen aquí. Abre una fila para comparar original vs enriquecido y Aceptar, editar o Rechazar.",
"products.empty.error.title": "No hay productos con errores",
2026-08-17 00:39:25 +02:00
"products.empty.error.message": "Cuando un trabajo falla para un producto, aparecerá aquí para que puedas reintentar.",
"products.empty.noUnprocessedMatches": "Sin coincidencias sin procesar",
2026-08-17 00:39:25 +02:00
"products.empty.noMatch": "Ningún producto coincide",
"products.empty.filtersHint": "Prueba otra búsqueda, categoría o feed — o borra los filtros para verlo todo.",
"products.empty.noUnprocessed.title": "Aún no hay productos sin procesar",
"products.empty.noUnprocessed.message": "Conecta un feed de proveedor o sube un CSV para importar productos al catálogo.",
"products.empty.none.title": "Aún no hay productos",
"products.empty.none.messageStores": "Completa primero Feeds → Map → Sync y luego Process. Importa desde un feed o una tienda.",
"products.empty.none.messageBasic": "Completa primero Feeds → Map → Sync y luego Process. Conecta un feed o sube un CSV.",
"products.actions.viewJobs": "Ver trabajos",
"products.actions.startJob": "Iniciar un trabajo",
"products.actions.viewProcessed": "Ver procesados",
2026-08-17 00:39:25 +02:00
"products.actions.retryFromCatalog": "Reintentar desde el catálogo",
"products.actions.connectFeed": "Conectar feed",
2026-08-17 00:39:25 +02:00
"products.actions.addProduct": "Añadir producto",
"products.actions.uploadCsv": "Subir CSV",
"products.actions.exportSelected": "Exportar seleccionados",
"products.export.title": "Exportar productos seleccionados",
2026-08-17 00:39:25 +02:00
"products.export.confirm": "Confirmar exportación",
"products.export.loadFailed": "No se pudieron cargar las opciones de feed de exportación. Inténtalo de nuevo.",
"products.export.noneFound": "Aún no hay feeds de exportación. Cree uno en Feeds de exportación y vuelva para exportar su selección.",
"products.export.selectFormat": "Seleccione un feed de exportación.",
"products.export.failed": "No se pudieron exportar los productos seleccionados",
"products.upload.title": "Subir CSV",
2026-08-17 00:39:25 +02:00
"products.upload.description": "Importa productos desde un CSV (GTIN/EAN, nombre, categoría, …). Descarga la muestra para ver el conjunto completo de columnas.",
"products.upload.submit": "Subir e importar",
"products.upload.chooseFirst": "Elige primero un archivo CSV.",
"products.upload.csvOnly": "Sube un archivo CSV.",
"products.upload.tooLarge": "CSV must be 5 MB or smaller.",
"products.processing.started": "Trabajo de procesamiento iniciado",
"products.processing.startFailed": "No se pudo iniciar el procesamiento",
"products.processing.startJobFailed": "No se pudo iniciar el trabajo de procesamiento",
"products.processing.cancelled": "Procesamiento cancelado",
"products.processing.jobsCancelled": "Trabajos de procesamiento cancelados",
"products.processing.cancelFailed": "No se pudo cancelar el trabajo de procesamiento",
2026-08-17 00:39:25 +02:00
"products.processing.justCancelled": "Se canceló el trabajo recién iniciado.",
"products.processing.viewInProcessing": "Ver en Procesamiento",
"products.processing.confirm": "Confirmar procesamiento",
2026-08-17 00:39:25 +02:00
"products.processing.freePlanTitle": "Plan Free — procesamiento sin IA",
"products.processing.freePlanBody": "Normalizar, especificaciones, completar y EPREL no consumen créditos. Los títulos/descripciones con AI requieren un plan de pago o créditos.",
"products.enrichment.acceptTitle": "¿Aceptar enriquecimiento?",
"products.enrichment.acceptConfirm": "Confirmar aceptar enriquecimiento",
2026-08-17 00:39:25 +02:00
"products.enrichment.acceptSelected": "¿Aceptar el enriquecimiento de {count} producto(s) seleccionado(s)? Pasarán a Procesados.",
"products.enrichment.rejectConfirm": "Confirmar rechazar enriquecimiento",
2026-08-17 00:39:25 +02:00
"products.enrichment.rejectBody": "¿Rechazar el enriquecimiento y devolver este producto a sin procesar? Puedes volver a procesar después.",
"products.enrichment.rejectSelectedConfirm": "Confirmar rechazar seleccionados",
"products.enrichment.resetConfirm": "Confirmar restablecer a sin procesar",
2026-08-17 00:39:25 +02:00
"products.enrichment.resetSelected": "¿Restablecer {count} producto(s) seleccionado(s) a sin procesar? Volverán a aparecer como elementos sin procesar.",
"products.enrichment.accepted": "Enriquecimiento aceptado — movido a Procesados.",
"products.enrichment.rejected": "Enriquecimiento rechazado — producto devuelto a sin procesar.",
"products.enrichment.acceptFailed": "No se pudo aceptar el enriquecimiento",
"products.enrichment.rejectFailed": "No se pudo rechazar el enriquecimiento",
2026-08-17 00:39:25 +02:00
"products.enrichment.acceptUndone": "Aceptación deshecha",
"products.enrichment.undoAcceptFailed": "No se pudo deshacer la aceptación",
"products.enrichment.resetDone": "Producto devuelto a sin procesar.",
"products.enrichment.resetFailed": "No se pudieron restablecer los productos",
"products.enrichment.valueReset": "Valor enriquecido restablecido al original.",
2026-08-17 00:39:25 +02:00
"products.enrichment.originalEmpty": "El valor original está vacío; el enriquecimiento no se puede borrar vía PATCH.",
"products.enrichment.staysNeedsReview": "El producto permanece en Needs Review hasta que aceptes todo.",
2026-08-17 00:39:25 +02:00
"products.field.nameAcceptUndone": "Aceptación del nombre deshecha",
"products.field.descriptionAcceptUndone": "Aceptación de la descripción deshecha",
"products.field.nameDiscardUndone": "Descarte del nombre deshecho",
2026-08-17 00:39:25 +02:00
"products.field.descriptionDiscardUndone": "Descarte de la descripción deshecho",
"products.field.undoAcceptFailed": "No se pudo deshacer la aceptación del campo",
"products.field.undoDiscardFailed": "No se pudo deshacer el descarte del campo",
"products.updateFailed": "No se pudo actualizar el producto",
"products.keyboardTips": "Atajos de teclado",
"products.keyboardTipsShort": "Atajos de teclado (?)",
2026-08-17 00:39:25 +02:00
"products.option.categories": "Categorías",
"products.option.attributes": "Atributos / especificaciones",
2026-08-17 00:39:25 +02:00
"products.option.titlesAi": "Títulos (IA)",
"products.option.descriptionsAi": "Descripciones (IA)",
"products.enrichment.piece.name": "Nombre",
2026-08-17 00:39:25 +02:00
"products.enrichment.piece.description": "Descripción",
"products.enrichment.piece.attributes": "Atributos",
2026-08-17 00:39:25 +02:00
"products.enrichment.piece.category": "Categoría",
"products.enrichment.state.processed": "Procesados",
"products.enrichment.state.feed": "Del feed",
"products.enrichment.state.missing": "Faltantes",
2026-08-17 00:39:25 +02:00
"products.enrichment.help.name": "Título del producto. Verde = nombre procesado con AI; naranja = solo nombre del feed/original; gris = ausente.",
"products.enrichment.help.description": "Descripción del producto. Verde = procesada con AI; naranja = solo feed/original; gris = ausente.",
"products.enrichment.help.attributes": "Especificaciones y atributos. Verde = atributos AI/enriquecidos; naranja = solo del feed; gris = ninguno.",
2026-08-17 00:39:25 +02:00
"products.enrichment.help.category": "Categoría asignada. Verde = categoría definida; gris = ausente.",
"products.enrichment.chipTitle": "{label}: {state}. {help}",
2026-08-17 00:39:25 +02:00
"products.enrichment.complete": "Completo — {parts}",
"products.enrichment.missingSummary": "Falta {missing} — {parts}",
"products.issue.title": "título",
"products.issue.gtin": "GTIN",
2026-08-17 00:39:25 +02:00
"products.issue.category": "categoría",
"products.filters.allCategories": "Todas las categorías",
"products.filters.allFeeds": "Todos los feeds",
"products.filters.allCoverage": "Toda la cobertura",
"products.filters.anyFeedChange": "Cualquier cambio de feed",
"products.filters.eprelAll": "EPREL: todos",
"products.filters.feedChangesAll": "Cambios de feed: todos",
2026-08-17 00:39:25 +02:00
"products.filters.byCategory": "Filtrar por categoría",
"products.filters.byCoverage": "Filtrar por cobertura",
"products.filters.byFeed": "Filtrar por feed",
"products.filters.byEprel": "Filtrar por EPREL",
2026-08-17 00:39:25 +02:00
"products.filters.byFeedSync": "Filtrar por cambios de sincronización del feed",
"products.filters.coverageHint": "Filtrar por completitud de Nombre / Descripción / Atributos / Categoría",
"products.filters.feedSyncHint": "Filtrar por cambios de precio/stock/título de la última sincronización del feed",
"products.filters.eprelHint": "Filtrar productos que tienen o carecen de un id de registro EPREL de etiqueta energética",
"products.filters.availabilityChanged": "Disponibilidad cambiada",
"products.eprel.badgeTitle": "Id EPREL presente en este producto (European Product Registry for Energy Labelling).",
2026-08-17 00:39:25 +02:00
"products.eprel.help": "El id del European Product Registry for Energy Labelling (EPREL) está presente en este producto.",
"products.feedData": "Datos del feed",
"attributes.title": "Atributos",
2026-08-17 00:39:25 +02:00
"attributes.description": "Define campos de producto, valores de lista y asignaciones de categoría.",
"attributes.loadFailed": "No se pudieron cargar los atributos",
2026-08-17 00:39:25 +02:00
"attributes.loading": "Cargando atributos…",
"attributes.zero": "0 atributos",
2026-08-17 00:39:25 +02:00
"attributes.addNew": "Añadir nuevo atributo",
"attributes.create": "Crear atributo",
"attributes.edit": "Editar atributo",
"attributes.delete": "Eliminar atributo",
"attributes.displayName": "Nombre para mostrar del atributo",
"attributes.actions": "Acciones de atributo",
"attributes.created": "Atributo creado.",
2026-08-17 00:39:25 +02:00
"attributes.createdAssignFailed": "Atributo creado, pero falló la asignación de categoría.",
"attributes.updated": "Atributo actualizado.",
"attributes.deleted": "Atributo eliminado.",
2026-08-17 00:39:25 +02:00
"attributes.addValue": "Añadir valor",
"attributes.manageValues": "Añade, edita o elimina valores de este atributo de lista.",
"attributes.valueTypeHint": "Elige cómo se introducen los valores de este atributo.",
"attributes.createDescription": "Crea una nueva definición de atributo. Puedes asignarlo a una categoría durante la creación.",
"attributes.assignToCategories": "Asignar atributos a categorías",
"attributes.assignFailed": "No se pudo asignar el atributo a la categoría seleccionada.",
"attributes.bulkAssignFailed": "Falló la asignación masiva",
"attributes.filterByCategory": "Filtrar por categoría",
"attributes.saveValueFailed": "No se pudo guardar el valor",
"attributes.deleteValueFailed": "No se pudo eliminar el valor",
"attributes.csvNeedHeader": "El CSV debe incluir una cabecera y al menos una fila",
"attributes.csvNeedColumns": "El CSV debe incluir las columnas \"category_id\" y \"attribute_key\"",
"attributes.type.string": "Texto",
2026-08-17 00:39:25 +02:00
"attributes.type.stringHint": "Texto libre — nombres, modelos, notas cortas",
"attributes.type.number": "Número",
"attributes.type.numberHint": "Valor numérico; añade unidad si ayuda (cm, kg, W)",
"attributes.type.boolean": "Sí / No",
"attributes.type.booleanHint": "Verdadero o falso — p. ej. tiene GPS, carga inalámbrica",
"attributes.type.date": "Fecha",
2026-08-17 00:39:25 +02:00
"attributes.type.dateHint": "Una fecha de calendario (lanzamiento, fin de garantía, …)",
"attributes.type.list": "Lista desplegable",
2026-08-17 00:39:25 +02:00
"attributes.type.listHint": "Elige exactamente una opción de una lista definida",
"attributes.type.multiselect": "Selección múltiple",
"attributes.type.multiselectHint": "Elige una o más opciones de una lista",
"attributes.color": "Color",
2026-08-17 00:39:25 +02:00
"categories.title": "Categorías",
"categories.description": "Organiza la jerarquía del catálogo. Edita una categoría para abrir fórmulas de título/descripción y prompts IA.",
"categories.loadFailed": "Error al cargar las categorías",
"categories.add": "Añadir categoría",
"categories.edit": "Editar categoría",
"categories.delete": "Eliminar categoría",
"categories.deleteConfirm": "¿Seguro que quieres eliminar esta categoría? Esta acción no se puede deshacer.",
"categories.name": "Nombre de categoría",
"categories.namePlaceholder": "Nombre de categoría",
"categories.descriptionPlaceholder": "Descripción opcional de la categoría",
"categories.uniqueIdPlaceholder": "Identificador único opcional",
"categories.searchPlaceholder": "Buscar por nombre o ID...",
"categories.created": "{name} se ha creado.",
2026-08-17 00:39:25 +02:00
"categories.updated": "La categoría se actualizó correctamente.",
"categories.deleted": "La categoría se eliminó correctamente.",
"categories.notFound": "Categoría no encontrada.",
"categories.loadCategoryFailed": "Error al cargar la categoría",
"categories.noCategoriesYet": "Aún no hay categorías",
"categories.noMatch": "Ninguna categoría coincide con “{query}”. Borra la búsqueda o prueba otro término.",
"categories.emptyHint": "Añade una categoría o importa un CSV para construir tu árbol.",
"categories.promptCountOne": "{count} categoría tiene un prompt de generación IA. Abre el menú ⋮ → Editar prompt IA, o edita una categoría y elige Editar prompt IA.",
"categories.promptCountMany": "{count} categorías tienen un prompt de generación IA. Abre el menú ⋮ → Editar prompt IA, o edita una categoría y elige Editar prompt IA.",
"categories.actions": "Acciones de categoría",
"categories.chooseCsv": "Elegir CSV",
2026-08-17 00:39:25 +02:00
"categories.createSingleOrImport": "Crea una sola categoría o importa muchas desde CSV.",
"categories.createSingle": "Crear una sola categoría.",
"categories.missingNameColumn": "Falta la columna obligatoria 'name'",
"categories.missingUniqueIdColumn": "Falta la columna obligatoria 'unique_id'",
2026-08-17 00:39:25 +02:00
"categories.nameAndIdRequired": "El nombre y el ID único son obligatorios.",
"categories.csvNeedRows": "El archivo debe tener una fila de cabecera y al menos una fila de datos",
2026-08-17 00:39:25 +02:00
"categories.titleFormula": "Fórmula de título",
"categories.descriptionFormula": "Fórmula de descripción",
"categories.setTitleFormula": "Definir fórmula de título",
"categories.editTitleFormula": "Editar fórmula de título",
"categories.setDescriptionFormula": "Definir fórmula de descripción",
"categories.editDescriptionFormula": "Editar fórmula de descripción",
"categories.setAiPrompt": "Definir prompt IA",
"categories.editAiPrompt": "Editar prompt IA",
"categories.editAiPromptShort": "Editar prompt IA",
2026-08-17 00:39:25 +02:00
"categories.aiPromptSet": "Hay un prompt de generación IA configurado",
"categories.aiPromptTitle": "Prompt IA de categoría",
"categories.aiPromptDescription": "Plantilla de generación por categoría usada al enriquecer productos de esta categoría.",
"categories.aiPromptSaved": "Prompt IA guardado.",
2026-08-17 00:39:25 +02:00
"categories.aiPromptCleared": "Prompt IA borrado (se aplicará el predeterminado de la empresa).",
"categories.aiPromptSaveFailed": "Error al guardar el prompt",
"categories.aiPromptAssignFailed": "Error al asignar el prompt",
"categories.assignAiPrompt": "Asignar prompt IA",
2026-08-17 00:39:25 +02:00
"categories.assignAiPromptHelp": "Copia este prompt de generación IA a otras categorías.",
"categories.loadingPrompt": "Cargando prompt…",
"categories.brandVoice": "Voz de marca",
"categories.productName": "Nombre del producto",
"categories.gtin": "GTIN",
2026-08-17 00:39:25 +02:00
"categories.backToCategories": "Volver a categorías",
"categories.cancelReturn": "Cancelar y volver a categorías",
"categories.assignFormula": "Asignar fórmula",
"categories.assignFormulaOther": "Asignar fórmula a otras categorías",
"categories.assignTitleFormula": "Asignar fórmula de título",
"categories.assignDescriptionFormula": "Asignar fórmula de descripción",
"categories.assignSelectHelp": "Selecciona las categorías a las que aplicar esta plantilla.",
"categories.assignTitleHelp": "Selecciona las categorías a las que aplicar esta plantilla de fórmula de título.",
"categories.assignDescriptionHelp": "Selecciona las categorías a las que aplicar esta plantilla de fórmula de descripción.",
"categories.searchCategories": "Buscar categorías…",
"categories.matching": " coincidentes",
2026-08-17 00:39:25 +02:00
"categories.titleFormulaHelp": "Construye títulos de producto con variables y texto fijo para esta categoría.",
"categories.descriptionFormulaHelp": "Define el texto meta SEO y las secciones de cuerpo que la IA debe generar para esta categoría.",
"categories.loadingFormula": "Cargando fórmula…",
"categories.titleFormulaSaved": "Fórmula de título guardada correctamente",
"categories.titleFormulaRemoved": "Fórmula de título eliminada correctamente",
"categories.titleFormulaSaveFailed": "Error al guardar la fórmula de título",
"categories.titleFormulaAssignFailed": "Error al asignar la fórmula de título",
"categories.descriptionFormulaRemoved": "Fórmula de descripción eliminada correctamente",
"categories.descriptionFormulaSaved": "Fórmula de descripción guardada correctamente",
"categories.descriptionFormulaSavedWithExports": "Fórmula de descripción guardada correctamente y sincronizados {count} IDs de exportación",
"categories.descriptionFormulaSaveFailed": "Error al guardar la fórmula de descripción",
"categories.descriptionFormulaAssignFailed": "Error al asignar la fórmula de descripción",
"categories.seoTitlePlaceholder": "Indica a la IA cómo escribir el título SEO…",
"categories.seoDescriptionPlaceholder": "Indica a la IA cómo escribir la descripción SEO…",
"categories.sectionPromptPlaceholder": "¿Qué debe escribir la IA en esta sección?",
"categories.sectionKeyPlaceholder": "p. ej., short_description (letras, números, _)",
"categories.formulaElementTypes": "Tipos de elemento de fórmula",
"categories.formulaElements": "Elementos de fórmula",
"categories.elementSeparator": "Separador de elementos",
"categories.elementSeparatorHint": "Espacio, guion, etc.",
"categories.dragToReorder": "Arrastra para reordenar",
2026-08-17 00:39:25 +02:00
"categories.addCustomVariable": "Añadir variable personalizada",
"categories.editCustomVariable": "Editar variable personalizada",
2026-08-17 00:39:25 +02:00
"categories.customVariableHelp": "Define una variable reutilizable para fórmulas de título.",
"categories.manageVariables": "Gestionar variables",
2026-08-17 00:39:25 +02:00
"categories.manageVariablesHelp": "Ver, editar y añadir variables para tus fórmulas de título.",
"categories.searchVariables": "Buscar variables…",
"categories.variableAdded": "Variable añadida correctamente",
"categories.variableUpdated": "Variable actualizada correctamente",
"categories.variableDeleted": "Variable eliminada correctamente",
"categories.variableDeleteFailed": "Error al eliminar la variable",
"categories.variableNameRequired": "El nombre de la variable es obligatorio",
"categories.displayNameRequired": "El nombre para mostrar es obligatorio",
2026-08-17 00:39:25 +02:00
"categories.variableNamePattern": "El nombre solo puede contener letras, números y guiones bajos",
"categories.deleteVariableConfirm": "¿Seguro que quieres eliminar esta variable? Puede afectar a fórmulas que la usan.",
"categories.removeElementConfirm": "¿Seguro que quieres quitar este elemento de tu fórmula?",
"categories.addTextElement": "Añadir elemento de texto",
"categories.addTextElementHelp": "Añade un elemento de texto fijo a tu fórmula.",
"categories.editTextElement": "Editar elemento de texto",
2026-08-17 00:39:25 +02:00
"categories.editTextElementHelp": "Edita el elemento de texto de tu fórmula.",
"categories.staticTextPlaceholder": "Introducir texto fijo",
2026-08-17 00:39:25 +02:00
"categories.textCannotBeEmpty": "El texto no puede estar vacío",
"categories.exampleProductName": "Nombre del producto",
"categories.exampleWidget": "Acme Widget Pro (ejemplo)",
2026-08-17 00:39:25 +02:00
"fields.title": "Campos estándar",
"fields.description": "Define campos de producto estándar y organízalos en grupos",
"fields.loading": "Cargando campos estándar…",
"fields.loadFailed": "No se pudieron cargar los campos",
"fields.loadGroupsFailed": "No se pudieron cargar los grupos de campos",
2026-08-17 00:39:25 +02:00
"fields.addField": "Añadir campo nuevo",
"fields.addGroup": "Añadir grupo nuevo",
"fields.createField": "Crear campo",
"fields.createGroup": "Crear grupo",
"fields.editField": "Editar campo",
"fields.editGroup": "Editar grupo",
2026-08-17 00:39:25 +02:00
"fields.basicInfo": "Información básica",
"fields.createFieldHelp": "Crea un nuevo campo estándar para tus datos de producto",
"fields.editFieldHelp": "Actualiza los detalles de este campo estándar",
"fields.createGroupHelp": "Crea un nuevo grupo para organizar tus campos estándar",
"fields.editGroupHelp": "Actualiza los detalles de este grupo de campos",
"fields.dataTypeHint": "Tipo de datos de este campo",
"fields.defaultValueOptional": "Valor predeterminado (opcional)",
2026-08-17 00:39:25 +02:00
"fields.fieldDescriptionPlaceholder": "Introduce una descripción para este campo",
"fields.groupDescriptionPlaceholder": "Introduce una descripción para este grupo",
"fields.keyHint": "Solo letras minúsculas, números y guiones bajos",
"fields.exampleTitle": "Título del producto",
"fields.noFields": "No se encontraron campos. Haz clic en \"Añadir campo\" para crear uno.",
"fields.noFieldsMatch": "Ningún campo coincide con tu búsqueda",
"fields.noGroups": "No se encontraron grupos. Crea tu primer grupo.",
2026-08-17 00:39:25 +02:00
"fields.noGroupsMatch": "Ningún grupo coincide con tu búsqueda",
"fields.fieldCreated": "Campo creado correctamente",
"fields.fieldUpdated": "Campo actualizado correctamente",
"fields.fieldDeleted": "Campo eliminado correctamente",
"fields.groupCreated": "Grupo creado correctamente",
"fields.groupUpdated": "Grupo actualizado correctamente",
"fields.groupDeleted": "Grupo eliminado correctamente",
"fields.saveFieldFailed": "No se pudo guardar el campo",
"fields.saveGroupFailed": "No se pudo guardar el grupo",
"fields.updateFieldFailed": "No se pudo actualizar el campo",
"fields.updateUnitFailed": "No se pudo actualizar la unidad",
"fields.deleteFieldFailed": "No se pudo eliminar el campo",
"fields.deleteGroupFailed": "No se pudo eliminar el grupo",
2026-08-17 00:39:25 +02:00
"fields.bulkUpdateFailed": "Falló la actualización masiva",
"fields.enableRecommendedFailed": "No se pudieron activar los campos recomendados",
"fields.enabledRecommended": "Campos de ecommerce recomendados activados",
2026-08-17 00:39:25 +02:00
"fields.deleteFieldConfirm": "Esta acción no se puede deshacer. Eliminará permanentemente el campo y lo quitará de cualquier plantilla que lo use.",
"fields.deleteGroupConfirm": "Esta acción no se puede deshacer. Eliminará permanentemente el grupo. Los campos de este grupo deberán reasignarse.",
"fields.type.string": "Texto",
2026-08-17 00:39:25 +02:00
"fields.type.stringHint": "Texto libre — nombres, códigos, notas cortas",
"fields.type.number": "Número",
"fields.type.numberHint": "Valor numérico; añade unidad si ayuda (EUR, uds)",
"fields.type.boolean": "Sí / No",
"fields.type.booleanHint": "Verdadero o falso",
"fields.type.date": "Fecha",
"fields.type.dateHint": "Una fecha de calendario",
"fields.type.url": "URL",
2026-08-17 00:39:25 +02:00
"fields.type.urlHint": "Enlace web (página de producto, vídeo, fabricante)",
"fields.type.image": "Imagen",
2026-08-17 00:39:25 +02:00
"fields.type.imageHint": "URL de imagen o imagen de galería",
"fields.type.dimension": "Dimensión",
"fields.type.dimensionHint": "Medida de longitud (ancho, alto, fondo)",
"fields.type.weight": "Peso",
2026-08-17 00:39:25 +02:00
"fields.type.weightHint": "Masa / peso de envío",
"fields.type.color": "Color",
2026-08-17 00:39:25 +02:00
"fields.type.colorHint": "Nombre o código de color",
"fields.type.custom": "Personalizado",
"fields.type.customHint": "Campo especial / de forma libre",
"empty.admin.knowledgeHeading": "Base de conocimiento",
"empty.admin.translationsHeading": "Traducciones",
2026-08-17 00:39:25 +02:00
"flash.attrs.createdLinkFailed": "Atributo creado, pero falló la asignación de categoría.",
"flash.attrs.created": "Atributo creado.",
2026-08-17 00:39:25 +02:00
"flash.attrs.csvImported": "Importación CSV finalizada.",
"flash.attrs.updated": "Atributo actualizado.",
"flash.attrs.deleted": "Atributo eliminado.",
"flash.attrs.valueDeleted": "Valor eliminado.",
2026-08-17 00:39:25 +02:00
"flash.attrs.assignedLinks": "Se asignaron {count} vínculo(s) categoría–atributo.",
"flash.brand.saved": "Kit de marca guardado.",
"flash.brand.logoType": "El logo debe ser PNG, JPEG o WebP",
2026-08-17 00:39:25 +02:00
"flash.brand.logoSize": "El logo supera el límite de 2 MiB",
"flash.brand.logoUploaded": "Logo subido.",
2026-08-17 00:39:25 +02:00
"flash.categories.updated": "La categoría se actualizó correctamente.",
"flash.categories.deleted": "La categoría se eliminó correctamente.",
"flash.categories.csvImported": "Importación CSV finalizada.",
"flash.products.csvImported": "Product CSV import finished.",
2026-08-17 00:39:25 +02:00
"flash.categories.descFormulaAssigned": "Fórmula de descripción asignada a {count} categorías",
"flash.categories.promptAssigned": "Prompt asignado a {count} {noun}.",
2026-08-17 00:39:25 +02:00
"flash.categories.promptNounOne": "categoría",
"flash.categories.promptNounMany": "categorías",
"flash.categories.titleFormulaAssigned": "Fórmula de título asignada a {count} {noun}",
"flash.categories.variableDeleted": "Variable eliminada correctamente",
2026-08-17 00:39:25 +02:00
"flash.export.updated": "Feed de exportación actualizado.",
"flash.export.created": "Feed de exportación creado.",
"flash.export.urlCopied": "URL pública del feed {format} copiada. Pégala en cualquier sistema que obtenga feeds de productos.",
"flash.export.copyFailed": "Error al copiar la URL al portapapeles",
"flash.export.refreshed": "Feed actualizado.",
"flash.export.refreshedWithCount": "Feed actualizado ({count} productos).",
2026-08-17 00:39:25 +02:00
"flash.export.deleted": "Feed de exportación eliminado correctamente.",
"flash.export.tokenRotated": "Token de URL publica rotado. Actualiza los sistemas que usen la URL anterior.",
"common.edit": "Editar",
"common.previous": "Anterior",
"common.next": "Siguiente",
2026-08-17 00:39:25 +02:00
"common.saving": "Guardando…",
"common.deleting": "Eliminando…",
"common.adding": "Añadiendo…",
"common.processing": "Procesando…",
"common.upload": "Subir",
"common.expand": "Expandir",
"common.collapse": "Contraer",
"common.optional": "Opcional",
"common.enabled": "Activado",
"common.on": "Activado",
"common.off": "Desactivado",
"common.system": "Sistema",
"common.type": "Tipo",
"common.unit": "Unidad",
"common.group": "Grupo",
"common.search": "Buscar",
2026-08-17 00:39:25 +02:00
"common.openMenu": "Abrir menú",
"common.areYouSure": "¿Estás seguro?",
"common.selectGroup": "Seleccionar un grupo",
2026-08-17 00:39:25 +02:00
"attributes.addAttribute": "Añadir atributo",
"attributes.searchPlaceholder": "Buscar atributos…",
"attributes.searchAria": "Buscar atributos (pulsa Enter para buscar)",
2026-08-17 00:39:25 +02:00
"attributes.filterCategoryAria": "Filtrar por categoría",
"attributes.allCategories": "Todas las categorías",
"attributes.col.name": "Nombre",
"attributes.col.key": "Clave de atributo",
"attributes.col.type": "Tipo",
"attributes.col.unit": "Unidad",
2026-08-17 00:39:25 +02:00
"attributes.col.categories": "Categorías",
"attributes.col.updated": "Última actualización",
"attributes.col.actions": "Acciones",
"attributes.emptyTitle": "No se encontraron atributos",
2026-08-17 00:39:25 +02:00
"attributes.emptyFiltered": "Prueba a borrar la búsqueda o el filtro de categoría.",
"attributes.emptyHint": "Añade un atributo o importa un CSV para empezar.",
"attributes.noValues": "Sin valores",
"attributes.actionsAria": "Acciones de atributo",
"attributes.editDetails": "Editar detalles",
"attributes.loadingValues": "Cargando valores...",
2026-08-17 00:39:25 +02:00
"attributes.noValuesYetHint": "Aún no hay valores. Usa \"Gestionar valores\" para añadirlos.",
"attributes.pageZero": "0 atributos",
2026-08-17 00:39:25 +02:00
"attributes.pageShowing": "Mostrando {from}–{to} de {total} atributos",
"attributes.linkCategoryFailed": "No se pudo asignar el atributo a la categoría seleccionada.",
"attributes.createdLinkFailed": "Atributo creado, pero falló la asignación de categoría.",
"attributes.createFailed": "Error al crear",
2026-08-17 00:39:25 +02:00
"attributes.importFinished": "Importación CSV finalizada.",
"attributes.importFailed": "Error de importación",
"attributes.updateFailed": "Error al actualizar",
"attributes.deleteFailed": "Error al eliminar",
"attributes.valueUpdated": "Valor actualizado.",
2026-08-17 00:39:25 +02:00
"attributes.valueAdded": "Valor añadido.",
"attributes.valueSaveFailed": "No se pudo guardar el valor",
"attributes.valueDeleted": "Valor eliminado.",
"attributes.valueDeleteFailed": "No se pudo eliminar el valor",
"attributes.csvNeedRows": "El CSV debe incluir una cabecera y al menos una fila",
2026-08-17 00:39:25 +02:00
"attributes.rowUnknown": "Fila {row}: categoría o atributo desconocido",
"attributes.rowLinkFailed": "Fila {row}: {detail}",
2026-08-17 00:39:25 +02:00
"attributes.linkFailedShort": "falló el vínculo",
"attributes.assignedLinks": "Se asignaron {count} vínculo(s) categoría–atributo.",
"attributes.rowsFailed": "{count} fila(s) fallaron.",
2026-08-17 00:39:25 +02:00
"attributes.addTitle": "Añadir nuevo atributo",
"attributes.addDesc": "Crea una nueva definición de atributo. Puedes asignarlo a una categoría durante la creación.",
"attributes.tab.single": "Individual",
2026-08-17 00:39:25 +02:00
"attributes.tab.bulk": "Importación masiva",
"attributes.field.key": "Clave de atributo",
"attributes.field.keyPlaceholder": "atributo-key",
"attributes.field.displayName": "Nombre para mostrar",
"attributes.field.displayNamePlaceholder": "Nombre para mostrar del atributo",
"attributes.field.type": "Tipo",
2026-08-17 00:39:25 +02:00
"attributes.field.typeDefaultHint": "Elige cómo se introducen los valores de este atributo.",
"attributes.field.category": "Categoría",
"attributes.field.categoryPlaceholder": "Selecciona una categoría…",
"attributes.field.categoryHint": "Selecciona la categoría a la que pertenece este atributo. Los atributos deben asignarse a una categoría.",
"attributes.field.unitOptional": "Unidad (opcional)",
"attributes.field.unitPlaceholder": "p. ej., cm, kg, etc.",
"attributes.field.exampleOptional": "Ejemplo (opcional)",
"attributes.field.examplePlaceholder": "p. ej., 100x200",
"attributes.createAttribute": "Crear atributo",
"attributes.bulk.fileLabel": "Archivo CSV o TSV",
"attributes.bulk.downloadCsv": "Descargar plantilla CSV",
"attributes.bulk.downloadTsv": "Descargar plantilla TSV",
"attributes.bulk.uploadHint": "Sube un archivo CSV o TSV con las siguientes columnas:",
2026-08-17 00:39:25 +02:00
"attributes.bulk.col.key": "Identificador único (obligatorio)",
"attributes.bulk.col.name": "Nombre para mostrar (obligatorio)",
2026-08-17 00:39:25 +02:00
"attributes.bulk.col.valueType": "string (Texto), number, boolean (Sí/No), date, list (Desplegable), multiselect",
"attributes.bulk.col.categoryId": "ID único de categoría",
"attributes.bulk.col.unitExample": "opcional",
"attributes.bulk.col.parentKey": "Clave padre para valores de lista",
"attributes.editTitle": "Editar atributo",
"attributes.editDesc": "Actualiza los detalles del atributo \"{name}\"",
2026-08-17 00:39:25 +02:00
"attributes.field.keyHint": "Identificador único de este atributo",
"attributes.field.displayNameHint": "El nombre que verán los usuarios",
"attributes.deleteTitle": "Eliminar atributo",
2026-08-17 00:39:25 +02:00
"attributes.deleteDesc": "¿Seguro que quieres eliminar \"{name}\"? Esta acción no se puede deshacer.",
"attributes.deleteWarningValues": "Aviso: también se eliminarán todos los valores asociados a este atributo.",
"attributes.manageTitleNamed": "Gestionar valores de {name}",
"attributes.manageTitle": "Gestionar valores",
2026-08-17 00:39:25 +02:00
"attributes.manageDesc": "Añade, edita o elimina valores de este atributo de lista.",
"attributes.valueKey": "Clave del valor",
2026-08-17 00:39:25 +02:00
"attributes.valueKeyHint": "Identificador único de este valor",
"attributes.displayValue": "Valor para mostrar",
"attributes.displayValuePlaceholder": "Valor a mostrar",
2026-08-17 00:39:25 +02:00
"attributes.displayValueHint": "El nombre que se mostrará para este valor",
"attributes.updateValue": "Actualizar valor",
2026-08-17 00:39:25 +02:00
"attributes.noValuesYet": "Aún no hay valores.",
"attributes.assignTitle": "Asignar atributos a categorías",
"attributes.assignDesc": "Sube un CSV que mapee IDs únicos de categoría a claves de atributo.",
"attributes.downloadTemplate": "Descargar plantilla",
"attributes.csvFile": "Archivo CSV",
"attributes.assignSuccess": "Asignaciones aplicadas correctamente.",
2026-08-17 00:39:25 +02:00
"attributes.assigning": "Asignando…",
"attributes.uploadAndAssign": "Subir y asignar",
"attributes.type.string.label": "Texto",
2026-08-17 00:39:25 +02:00
"attributes.type.string.hint": "Texto libre — nombres, modelos, notas cortas",
"attributes.type.number.label": "Número",
"attributes.type.number.hint": "Valor numérico; añade unidad si ayuda (cm, kg, W)",
"attributes.type.boolean.label": "Sí / No",
"attributes.type.boolean.hint": "Verdadero o falso — p. ej. tiene GPS, carga inalámbrica",
"attributes.type.date.label": "Fecha",
2026-08-17 00:39:25 +02:00
"attributes.type.date.hint": "Una fecha de calendario (lanzamiento, fin de garantía, …)",
"attributes.type.list.label": "Lista desplegable",
2026-08-17 00:39:25 +02:00
"attributes.type.list.hint": "Elige exactamente una opción de una lista definida",
"attributes.type.multiselect.label": "Selección múltiple",
"attributes.type.multiselect.hint": "Elige una o más opciones de una lista",
"standardFields.title": "Campos estándar",
"standardFields.description": "Define campos de producto estándar y organízalos en grupos",
"standardFields.apiUnavailable": "La API de campos estándar no está disponible. No se pueden guardar los cambios.",
"standardFields.apiUnreachable": "La API de campos estándar no es accesible ahora. Crear/editar permanece desactivado hasta que respondan /api/standard-fields y /api/field-groups.",
"standardFields.loading": "Cargando campos estándar…",
"standardFields.tab.fields": "Campos",
"standardFields.tab.groups": "Grupos",
2026-08-17 00:39:25 +02:00
"standardFields.heading": "Campos estándar",
"standardFields.headingHint": "Activa campos para mapeo y procesamiento — un interruptor por fila.",
"standardFields.enableRecommended": "Activar recomendados",
"standardFields.enableSelected": "Activar seleccionados ({count})",
"standardFields.disableSelected": "Desactivar seleccionados",
2026-08-17 00:39:25 +02:00
"standardFields.addField": "Añadir campo",
"standardFields.searchFields": "Buscar campos...",
"standardFields.col.enabled": "Activado",
"standardFields.col.name": "Nombre",
"standardFields.col.key": "Clave",
"standardFields.col.type": "Tipo",
"standardFields.col.unit": "Unidad",
"standardFields.col.group": "Grupo",
"standardFields.col.status": "Estado",
2026-08-17 00:39:25 +02:00
"standardFields.emptySearch": "Ningún campo coincide con tu búsqueda",
"standardFields.emptyHint": "No se encontraron campos. Haz clic en \"Añadir campo\" para crear uno.",
"standardFields.selectFieldAria": "Seleccionar {name}",
"standardFields.enableFieldAria": "Activar {name}",
2026-08-17 00:39:25 +02:00
"standardFields.systemFieldTitle": "Campo de sistema — no se puede eliminar",
"standardFields.groupsHeading": "Grupos de campos",
2026-08-17 00:39:25 +02:00
"standardFields.addGroup": "Añadir grupo",
"standardFields.searchGroups": "Buscar grupos...",
2026-08-17 00:39:25 +02:00
"standardFields.col.description": "Descripción",
"standardFields.col.displayOrder": "Orden de visualización",
"standardFields.emptyGroupsSearch": "Ningún grupo coincide con tu búsqueda",
"standardFields.emptyGroupsHint": "No se encontraron grupos. Crea tu primer grupo.",
"standardFields.unknownGroup": "Grupo desconocido",
"standardFields.loadGroupsFailed": "No se pudieron cargar los grupos de campos",
"standardFields.loadFieldsFailed": "No se pudieron cargar los campos",
"standardFields.fieldUpdated": "Campo actualizado correctamente",
"standardFields.fieldCreated": "Campo creado correctamente",
"standardFields.saveFieldFailed": "No se pudo guardar el campo",
"standardFields.enabledNamed": "Activado {name}",
"standardFields.disabledNamed": "Desactivado {name}",
"standardFields.updateFieldFailed": "No se pudo actualizar el campo",
"standardFields.updateUnitFailed": "No se pudo actualizar la unidad",
"standardFields.bulkEnabled": "Se activaron {count} campo(s)",
"standardFields.bulkDisabled": "Se desactivaron {count} campo(s)",
2026-08-17 00:39:25 +02:00
"standardFields.bulkFailed": "Falló la actualización masiva",
"standardFields.recommendedEnabled": "Campos de ecommerce recomendados activados",
"standardFields.recommendedFailed": "No se pudieron activar los campos recomendados",
"standardFields.fieldDeleted": "Campo eliminado correctamente",
"standardFields.deleteFieldFailed": "No se pudo eliminar el campo",
"standardFields.groupUpdated": "Grupo actualizado correctamente",
"standardFields.groupCreated": "Grupo creado correctamente",
"standardFields.saveGroupFailed": "No se pudo guardar el grupo",
"standardFields.groupDeleted": "Grupo eliminado correctamente",
"standardFields.deleteGroupFailed": "No se pudo eliminar el grupo",
"standardFields.editField": "Editar campo",
2026-08-17 00:39:25 +02:00
"standardFields.addNewField": "Añadir campo nuevo",
"standardFields.editFieldDesc": "Actualiza los detalles de este campo estándar",
"standardFields.addFieldDesc": "Crea un nuevo campo estándar para tus datos de producto",
"standardFields.field.name": "Nombre",
2026-08-17 00:39:25 +02:00
"standardFields.field.namePlaceholder": "Título del producto",
"standardFields.field.nameHint": "Nombre para mostrar de este campo",
"standardFields.field.key": "Clave",
"standardFields.field.keyPlaceholder": "titulo_producto",
2026-08-17 00:39:25 +02:00
"standardFields.field.keyTitle": "Solo letras minúsculas, números y guiones bajos",
"standardFields.field.keyHint": "Identificador único (minúsculas, sin espacios)",
"standardFields.field.type": "Tipo",
"standardFields.field.typeDefaultHint": "Tipo de datos de este campo",
"standardFields.field.group": "Grupo",
"standardFields.field.groupHint": "Grupo al que pertenece este campo",
"standardFields.field.enabled": "Activado",
"standardFields.field.enabledHint": "Usar este campo en mapeo y procesamiento",
"standardFields.field.required": "Campo obligatorio",
"standardFields.field.requiredHint": "Los campos obligatorios deben mapearse en cada feed antes de poder sincronizar productos.",
"standardFields.field.unit": "Unidad",
2026-08-17 00:39:25 +02:00
"standardFields.field.unitPlaceholder": "kg, EUR, cm…",
"standardFields.field.unitHint": "Unidad opcional mostrada con este campo",
2026-08-17 00:39:25 +02:00
"standardFields.field.description": "Descripción",
"standardFields.field.descriptionPlaceholder": "Introduce una descripción para este campo",
"standardFields.field.default": "Valor predeterminado",
"standardFields.field.defaultPlaceholder": "Valor predeterminado (opcional)",
"standardFields.field.defaultHint": "Valor predeterminado cuando no se proporciona ninguno",
"standardFields.saveUnavailable": "Guardar (no disponible)",
"standardFields.updateField": "Actualizar campo",
"standardFields.createField": "Crear campo",
"standardFields.editGroup": "Editar grupo",
2026-08-17 00:39:25 +02:00
"standardFields.addNewGroup": "Añadir grupo nuevo",
"standardFields.editGroupDesc": "Actualiza los detalles de este grupo de campos",
2026-08-17 00:39:25 +02:00
"standardFields.addGroupDesc": "Crea un nuevo grupo para organizar tus campos estándar",
"standardFields.group.name": "Nombre",
2026-08-17 00:39:25 +02:00
"standardFields.group.namePlaceholder": "Información básica",
"standardFields.group.nameHint": "Nombre para mostrar de este grupo",
2026-08-17 00:39:25 +02:00
"standardFields.group.description": "Descripción",
"standardFields.group.descriptionPlaceholder": "Introduce una descripción para este grupo",
"standardFields.group.descriptionHint": "Descripción opcional del propósito de este grupo",
"standardFields.group.order": "Orden de visualización",
"standardFields.group.orderHint": "Los números más bajos aparecen primero",
"standardFields.updateGroup": "Actualizar grupo",
"standardFields.createGroup": "Crear grupo",
2026-08-17 00:39:25 +02:00
"standardFields.deleteFieldDesc": "Esta acción no se puede deshacer. Eliminará permanentemente el campo y lo quitará de cualquier plantilla que lo use.",
"standardFields.deleteGroupDesc": "Esta acción no se puede deshacer. Eliminará permanentemente el grupo. Los campos de este grupo deberán reasignarse.",
"standardFields.type.string.label": "Texto",
2026-08-17 00:39:25 +02:00
"standardFields.type.string.hint": "Texto libre — nombres, códigos, notas cortas",
"standardFields.type.number.label": "Número",
"standardFields.type.number.hint": "Valor numérico; añade unidad si ayuda (EUR, uds)",
"standardFields.type.boolean.label": "Sí / No",
"standardFields.type.boolean.hint": "Verdadero o falso",
"standardFields.type.date.label": "Fecha",
"standardFields.type.date.hint": "Una fecha de calendario",
"standardFields.type.url.label": "URL",
2026-08-17 00:39:25 +02:00
"standardFields.type.url.hint": "Enlace web (página de producto, vídeo, fabricante)",
"standardFields.type.image.label": "Imagen",
2026-08-17 00:39:25 +02:00
"standardFields.type.image.hint": "URL de imagen o imagen de galería",
"standardFields.type.dimension.label": "Dimensión",
"standardFields.type.dimension.hint": "Medida de longitud (ancho, alto, fondo)",
"standardFields.type.weight.label": "Peso",
2026-08-17 00:39:25 +02:00
"standardFields.type.weight.hint": "Masa / peso de envío",
"standardFields.type.color.label": "Color",
2026-08-17 00:39:25 +02:00
"standardFields.type.color.hint": "Nombre o código de color",
"standardFields.type.custom.label": "Personalizado",
"standardFields.type.custom.hint": "Campo especial / de forma libre",
"standardFields.fallback.gtin": "GTIN/EAN",
"standardFields.fallback.title": "Nombre del producto",
"standardFields.fallback.brand": "Marca",
2026-08-17 00:39:25 +02:00
"standardFields.fallback.description": "Descripción",
"standardFields.fallback.product_model": "Modelo de producto",
"standardFields.fallback.price": "Precio",
"standardFields.fallback.sale_price": "Precio de oferta",
"standardFields.fallback.purchase_price": "Precio de compra",
"standardFields.fallback.currency": "Moneda",
"standardFields.fallback.image_url": "URL de imagen",
"standardFields.fallback.main_image": "Imagen principal",
2026-08-17 00:39:25 +02:00
"standardFields.fallback.additional_image_urls": "Imágenes adicionales",
"standardFields.fallback.product_url": "URL del producto",
"standardFields.fallback.official_link": "Enlace oficial",
"standardFields.fallback.sku": "SKU",
"standardFields.fallback.mpn": "MPN",
2026-08-17 00:39:25 +02:00
"standardFields.fallback.category": "Categoría",
"standardFields.fallback.availability": "Disponibilidad",
"standardFields.fallback.stock": "Existencias",
"standardFields.fallback.color": "Color",
2026-08-17 00:39:25 +02:00
"standardFields.fallback.size": "Tamaño",
"standardFields.fallback.material": "Material",
2026-08-17 00:39:25 +02:00
"standardFields.fallback.warranty": "Garantía",
"standardFields.fallback.service": "Servicio",
"standardFields.fallback.weight": "Peso",
"standardFields.fallback.net_depth": "Profundidad neta",
"standardFields.fallback.net_height": "Altura neta",
"standardFields.fallback.net_width": "Anchura neta",
"standardFields.fallback.net_mass": "Masa neta",
2026-08-17 00:39:25 +02:00
"standardFields.fallback.video_url": "URL de vídeo",
"standardFields.fallback.eprel_id": "ID EPREL",
"standardFields.fallback.specs": "Especificaciones",
"standardFields.fallback.specifications": "Especificaciones (legacy)",
2026-08-17 00:39:25 +02:00
"standardFields.tip.gtin": "Global Trade Item Number — código de barras/EAN/UPC que identifica el producto.",
"standardFields.tip.title": "Nombre del producto orientado al cliente en catálogos y canales.",
"standardFields.tip.brand": "Nombre del fabricante o marca (no el minorista).",
"standardFields.tip.description": "Texto largo del producto; se usa para enriquecimiento y listados en canales.",
2026-08-17 00:39:25 +02:00
"standardFields.tip.product_model": "Nombre/número de modelo del fabricante.",
"standardFields.tip.price": "Precio de venta habitual (numérico; la moneda se mapea aparte).",
"standardFields.tip.sale_price": "Precio rebajado o promocional cuando hay oferta.",
"standardFields.tip.purchase_price": "Tu coste / precio de compra (interno).",
2026-08-17 00:39:25 +02:00
"standardFields.tip.currency": "Código ISO de moneda para precios (p. ej. EUR, USD).",
"standardFields.tip.image_url": "URL de la imagen principal del producto.",
2026-08-17 00:39:25 +02:00
"standardFields.tip.main_image": "URL de la imagen principal de galería (alias de image).",
"standardFields.tip.additional_image_urls": "URLs de imagen extra (separadas por comas o nodos repetidos).",
2026-08-17 00:39:25 +02:00
"standardFields.tip.product_url": "URL pública de la página de producto en tu tienda o sitio.",
"standardFields.tip.official_link": "URL de la página de producto del fabricante o marca.",
"standardFields.tip.sku": "Stock Keeping Unit — tu código interno de artículo.",
"standardFields.tip.mpn": "Manufacturer Part Number — código de pieza del proveedor.",
"standardFields.tip.category": "Categoría de producto o ruta de taxonomía.",
"standardFields.tip.availability": "Estado tipo en stock / agotado / preventa.",
2026-08-17 00:39:25 +02:00
"standardFields.tip.stock": "Cantidad numérica de inventario.",
"standardFields.tip.color": "Atributo de color para variantes.",
"standardFields.tip.size": "Atributo de talla para variantes.",
2026-08-17 00:39:25 +02:00
"standardFields.tip.material": "Material principal o composición.",
"standardFields.tip.warranty": "Plazo o texto de garantía.",
"standardFields.tip.service": "Notas de servicio o soporte.",
2026-08-17 00:39:25 +02:00
"standardFields.tip.weight": "Peso de envío o neto.",
"standardFields.tip.eprel_id": "Identificador de producto de etiqueta energética UE (EPREL).",
"standardFields.tip.specs": "Especificaciones técnicas estructuradas.",
"standardFields.tip.specifications": "Campo de specs legacy; prefiere specs cuando existan ambos.",
"export.dialog.title": "Exportar productos seleccionados",
2026-08-17 00:39:25 +02:00
"export.dialog.description": "Exportar {count} producto(s) seleccionado(s). Elija el feed de exportación que define formato y campos — como elegir qué sincronizar, pero para una descarga o un socio.",
"export.dialog.loadFailed": "No se pudieron cargar las opciones de feed de exportación. Inténtalo de nuevo.",
"export.dialog.selectPlaceholder": "Seleccione un feed de exportación…",
"export.dialog.help": "Su selección elige los productos; el feed elige el formato del canal y los campos mapeados.",
"export.dialog.emptyTitle": "Aún no hay feeds de exportación",
"export.dialog.emptyMessage": "Cree un feed de exportación para elegir formato y campos, luego vuelva a exportar esta selección.",
"export.dialog.createFeedCta": "Crear feed de exportación",
"export.dialog.confirmAria": "Confirmar exportación",
"export.dialog.export": "Exportar",
2026-08-17 00:39:25 +02:00
"billing.title": "Uso y facturación",
"billing.loadFailed": "No se pudo cargar la facturación",
"billing.usageLoadFailed": "No se pudo cargar el uso",
2026-08-17 00:39:25 +02:00
"billing.checkoutComplete": "Pago completado. Tu plan y créditos se actualizarán en breve.",
"billing.checkoutCompletePlan": "Plan actualizado. Tus créditos de {plan} están listos.",
"billing.checkoutCanceled": "El pago se canceló. No se realizaron cambios.",
"billing.portalReturned": "Has vuelto del portal de facturación. Gestiona tu plan aquí o en Planes.",
"billing.comparePlans": "Comparar planes",
"billing.managePayment": "Gestionar pago",
2026-08-17 00:39:25 +02:00
"billing.addCredits": "Añadir créditos",
"billing.addingCredits": "Añadiendo…",
"billing.addCreditsTitle": "Añadir créditos",
"billing.addCreditsDescription": "Solo administradores de plataforma. Los créditos están disponibles de inmediato para títulos, descripciones y otros pasos de pago.",
"billing.creditAmount": "Cantidad de créditos",
"billing.invalidCreditAmount": "Introduce una cantidad de créditos válida.",
"billing.companyNotFound": "Empresa no encontrada.",
2026-08-17 00:39:25 +02:00
"billing.creditsAdded": "Se han añadido {amount} créditos.",
"billing.addCreditsFailed": "No se pudieron añadir créditos. Puede requerirse acceso de administrador de plataforma.",
"billing.planApplied": "Plan aplicado. Tus créditos están listos.",
"billing.checkoutFailed": "El pago falló",
"billing.portalFailed": "No se pudo abrir el portal de facturación",
"billing.noPlanAssigned": "Sin plan asignado",
"billing.unlimited": "Ilimitado",
"billing.payAsYouGo": "Pago por uso",
2026-08-17 00:39:25 +02:00
"billing.noMonthlyAiCredits": "Sin créditos de IA mensuales",
"billing.header.noPlan": "Aún no hay plan asignado. Elige un plan o pide ayuda a un administrador.",
"billing.header.free": "Mapea feeds y limpia datos de producto sin créditos de IA.",
"billing.header.enterprise": "Productos y capacidad de IA ilimitados.",
2026-08-17 00:39:25 +02:00
"billing.header.payg": "Pago por uso — los créditos salen del monedero de la empresa.",
"billing.header.remaining": "{remaining} créditos de IA restantes en este periodo.",
"billing.na": "N/D",
2026-08-17 00:39:25 +02:00
"billing.range.7d": "últimos 7 días",
"billing.range.30d": "últimos 30 días",
"billing.range.cycle": "ciclo de facturación actual",
"billing.range.all": "todo el tiempo",
2026-08-17 00:39:25 +02:00
"billing.rangeOpt.7d": "Últimos 7 días",
"billing.rangeOpt.30d": "Últimos 30 días",
"billing.rangeOpt.cycle": "Ciclo actual",
"billing.rangeOpt.all": "Todo el tiempo",
2026-08-17 00:39:25 +02:00
"billing.freeBannerTitle": "Estás en el plan Free",
"billing.freeBannerMessage": "Mejora para títulos y descripciones con IA, y límites de producto más altos.",
"billing.outOfCreditsTitle": "Te has quedado sin créditos de IA",
"billing.productLimitTitle": "Límite de productos alcanzado",
"billing.outOfCreditsMessage": "Los títulos y descripciones con IA están pausados hasta que añadas créditos o mejores el plan.",
"billing.productLimitMessage": "Mejora el plan para más capacidad de productos.",
"billing.lowCreditsTitle": "Créditos bajos",
"billing.lowCreditsMessage": "Solo quedan {remaining} créditos en {plan}. Mejora antes del próximo lote grande.",
"billing.currentPlan": "Plan actual",
2026-08-17 00:39:25 +02:00
"billing.periodEnds": "El periodo de facturación termina el {date}",
"billing.openEndedContract": "Contrato abierto",
2026-08-17 00:39:25 +02:00
"billing.creditWallet": "Monedero de créditos",
"billing.creditsRemaining": "Créditos restantes",
"billing.enterpriseCapacity": "Capacidad gestionada Enterprise",
2026-08-17 00:39:25 +02:00
"billing.paygUsed": "{used} usados · sin asignación mensual",
"billing.trialLeftover": "Créditos de prueba / restantes",
"billing.aiLockedFree": "IA bloqueada en Free",
"billing.usedOf": "{used} usados de {total}",
2026-08-17 00:39:25 +02:00
"billing.noBalanceTitle": "Aún no hay saldo de créditos",
"billing.noBalanceBody": "Los créditos de tu plan aparecerán aquí cuando la facturación esté configurada.",
"billing.needCapacity": "¿Necesitas más capacidad?",
"billing.selfServeUpgrade": "Mejora autoservicio a Starter, Growth o Business",
2026-08-17 00:39:25 +02:00
"billing.viaStripe": "vía Stripe",
2026-08-16 11:37:42 +02:00
"billing.checkoutUnavailable": "Las compras de autoservicio no estan disponibles hasta que Stripe este configurado. Contacta con ventas para un plan.",
"billing.upgradeToGrowth": "Mejorar a Growth",
"billing.askAdminPlan": "Pide a un administrador de la empresa que cambie el plan.",
"billing.usage": "Uso",
2026-08-17 00:39:25 +02:00
"billing.productsProcessed": "{count} productos procesados · {range}",
"billing.updating": "Actualizando…",
"billing.productsByDay": "Productos por día",
"billing.chartAmber": "Ámbar = tokens. Rango: {range}.",
"billing.chartRange": "Rango: {range}.",
2026-08-17 00:39:25 +02:00
"billing.nothingToChartTitle": "Nada que graficar aún",
"billing.nothingToChartBody": "Añade productos o conecta un feed — el uso aparecerá aquí.",
"billing.dailyChartsHint": "Los gráficos diarios están para los últimos 7 días, 30 días o el ciclo de facturación actual.",
"billing.noNewProducts": "No hay productos nuevos en {range}",
2026-08-17 00:39:25 +02:00
"billing.catalogOverall": "El catálogo tiene {count} productos en total.",
"billing.chartProducts": "Productos",
"billing.chartTokens": "Fichas",
"billing.chartEmpty": "No hay productos en este periodo.",
2026-08-17 00:39:25 +02:00
"billing.adminStats": "{tokens} tokens · {jobs} trabajos · {input} entrada / {export} feeds de exportación",
"billing.whatUsesCredits": "Qué consume créditos",
"billing.burnsCredits": "Consume créditos",
"billing.noCreditCost": "Sin coste de créditos",
"billing.publicPricing": "Precios públicos",
"billing.managePlanOnPlans": "Gestionar plan en Planes",
"billing.recovery.pastDueTitle": "Pago atrasado",
2026-08-17 00:39:25 +02:00
"billing.recovery.pastDueAdmin": "Falló el pago de la suscripción. Actualiza el pago en el Customer Portal — el acceso sigue abierto durante este periodo de gracia.",
"billing.recovery.pastDueMember": "La facturación necesita atención. Pide a un administrador que actualice el pago en el Customer Portal. El acceso sigue abierto durante este periodo de gracia.",
"billing.recovery.openPortal": "Abrir Customer Portal",
"billing.recovery.contactAdmin": "Contactar a un administrador",
2026-08-17 00:39:25 +02:00
"billing.recovery.goToBilling": "Ir a Facturación",
"billing.recovery.missingPlanTitle": "Sin plan asignado",
2026-08-17 00:39:25 +02:00
"billing.recovery.missingPlanMessage": "Esta empresa no tiene un plan activo (a menudo tras una migración omitida). Asigna un plan vía Checkout o pide soporte — no asumas capacidad Ilimitada.",
"billing.recovery.choosePlan": "Elegir un plan",
"billing.upgrade": "Mejorar plan",
"billing.askCompanyAdmin": "Preguntar a un administrador",
"billing.memberHint": "Solo los administradores de la empresa pueden cambiar planes o abrir Checkout.",
2026-08-17 00:39:25 +02:00
"billing.unlimitedPlanWallet": "Plan ilimitado · monedero {wallet}",
"billing.creditsSuffix": "{label} créditos",
"billing.perMonth": "{amount} / mes",
"billing.zeroPerMonth": "0 / mes",
"billing.upTo": "Hasta {count}",
"billing.skusUnlimited": "{used} SKUs (ilimitados)",
"billing.skusOnly": "{used} SKUs",
"billing.skusOf": "{used} / {max} SKUs",
"billing.planKind.none": "Sin plan activo",
"billing.planKind.enterprise": "Enterprise / personalizado",
"billing.planKind.trial": "Prueba",
2026-08-17 00:39:25 +02:00
"billing.planKind.standard": "Plan estándar",
"billing.creditUsage.normalize.label": "Normalizar, specs y relleno",
2026-08-17 00:39:25 +02:00
"billing.creditUsage.normalize.detail": "La limpieza de datos y el relleno de atributos no gastan créditos de IA.",
"billing.creditUsage.ai.label": "Títulos y descripciones con IA",
"billing.creditUsage.ai.detail": "Se cobra por producto según la función de IA y cuánto texto se genera.",
"billing.creditUsage.eprel.label": "EPREL / etiquetas energéticas",
"billing.creditUsage.eprel.detail": "Datos públicos EPREL de la UE gratis en todos los planes (sin créditos).",
"billing.creditUsage.campaign.label": "IA de campañas y marca",
"billing.creditUsage.campaign.detail": "Los pasos de IA de pago que usan el modelo gestionado gastan créditos de la empresa.",
"exports.title": "Feeds de exportación",
"exports.description": "Elija qué publicar por canal — qué productos y campos — y comparta una URL de feed pública (sin inicio de sesión).",
"exports.descriptionFiltered": "Enlaces públicos de Google Shopping, Meta y personalizados. Mostrando {filtered} de {total} feeds.",
"exports.loadFailed": "No se pudieron cargar los feeds de exportación",
"exports.loadFeedFailed": "No se pudo cargar el feed de exportación",
"exports.refresh": "Actualizar",
2026-08-17 00:39:25 +02:00
"exports.refreshing": "Actualizando…",
"exports.create": "Crear feed de exportación",
"exports.edit": "Editar feed de exportación",
"exports.editDescription": "Actualice el nombre, el estado, qué productos se incluyen y qué campos se mapean.",
"exports.howToTitle": "Cómo elegir qué exportar",
"exports.howTo.choose": "Qué entra en el feed",
"exports.howTo.chooseBody": "— configure el feed de origen y los estados de producto al crear o editar para que la URL pública solo incluya esos productos.",
"exports.howTo.subset": "Subconjunto puntual",
2026-08-17 00:39:25 +02:00
"exports.howTo.subsetBody": "— en",
"exports.howTo.productsLink": "Productos",
"exports.howTo.subsetTail": ", seleccione filas y Exporte para descargar solo esos productos con el formato y campos del feed.",
"exports.howTo.google": "Google Shopping",
2026-08-17 00:39:25 +02:00
"exports.howTo.googleBody": "— crea un preset CSV o XML, Genera, copia la URL pública en Merchant Center → Productos → Feeds → obtención programada.",
"exports.howTo.meta": "Catálogo Meta",
"exports.howTo.metaBody": "— preset CSV para fuentes de datos de Commerce Manager.",
"exports.howTo.custom": "CSV/XML personalizado",
2026-08-17 00:39:25 +02:00
"exports.howTo.customBody": "— cualquier partner; la misma URL pública sirve para cron / pollers tipo webhook.",
"exports.howTo.rest": "REST",
2026-08-17 00:39:25 +02:00
"exports.howTo.restBody": "— claves API en",
"exports.howTo.settingsApiKeys": "Ajustes → Claves API",
"exports.howTo.restTail": "(las claves antiguas no se migraron) consultan",
"exports.howTo.openapi": "OpenAPI",
"exports.feedStatus": "Estado del feed",
2026-08-17 00:39:25 +02:00
"exports.generating": "Generando exportación — puede tardar un momento en catálogos grandes.",
"exports.generationFailed": "La generación falló. Mira el error arriba y vuelve a Actualizar feed.",
"exports.exportedProducts": "Exportados {count} productos",
2026-08-17 00:39:25 +02:00
"exports.lastGenerated": "Última generación: {time}",
"exports.neverGenerated": "Nunca generado",
"exports.searchPlaceholder": "Buscar feeds...",
"exports.searchAria": "Buscar feeds",
2026-08-17 00:39:25 +02:00
"exports.clearSearch": "Limpiar búsqueda",
"exports.loading": "Cargando feeds…",
"exports.loadErrorTitle": "No se pudieron cargar los feeds de exportación",
"exports.loadErrorBody": "Algo falló al cargar tus exportaciones. Reintenta o revisa el error de arriba.",
"exports.tryAgain": "Reintentar",
2026-08-17 00:39:25 +02:00
"exports.emptyTitle": "Aún no hay feeds de exportación",
"exports.emptyBody": "Cree un feed de Google Shopping, Meta o CSV/XML personalizado para elegir qué productos y campos salen. Genere una URL pública para Merchant Center o cualquier socio — o exporte un subconjunto desde Productos.",
"exports.emptyCta": "Crear feed de Google Shopping",
2026-08-17 00:39:25 +02:00
"exports.noMatchTitle": "Ningún feed coincide",
"exports.noMatchBody": "Prueba otro término de búsqueda.",
"exports.col.name": "Nombre",
"exports.col.format": "Formato",
"exports.col.feedUrl": "URL del feed",
2026-08-17 00:39:25 +02:00
"exports.col.lastGenerated": "Última generación",
"exports.col.status": "Estado",
"exports.col.actions": "Acciones",
2026-08-17 00:39:25 +02:00
"exports.working": "Trabajando…",
"exports.generatingShort": "Generando…",
"exports.copyUrl": "Copiar URL",
2026-08-17 00:39:25 +02:00
"exports.openMenu": "Abrir menú",
"exports.preview": "Vista previa",
"exports.download": "Descargar",
"exports.refreshFeed": "Actualizar feed",
"exports.editAction": "Editar",
"exports.delete": "Eliminar",
"exports.rotateToken": "Rotar token de URL",
"exports.rotateFailed": "No se pudo rotar el token de URL del feed",
2026-08-17 00:39:25 +02:00
"exports.deleting": "Eliminando…",
"exports.channelPreset": "Preset de canal",
"exports.name": "Nombre",
"exports.format": "Formato",
"exports.sourceFeed": "Feed de origen (opcional)",
2026-08-17 00:39:25 +02:00
"exports.sourceFeedHelp": "Limite este feed a productos de un feed de entrada, o deje Todos los productos — así elige qué incluye la URL pública.",
"exports.allProducts": "Todos los productos",
2026-08-17 00:39:25 +02:00
"exports.rootElement": "Elemento raíz",
"exports.itemElement": "Elemento de ítem",
"exports.productStatuses": "Estados de producto (separados por comas)",
2026-08-17 00:39:25 +02:00
"exports.productStatusesHelp": "Incluya solo productos con estos estados (p. ej. active). Déjelo vacío para todos los estados.",
"exports.status": "Estado",
"exports.active": "Activo",
"exports.inactive": "Inactivo",
"exports.fieldMappings": "Mapeo de campos",
2026-08-17 00:39:25 +02:00
"exports.addField": "Añadir campo",
"exports.outputKey": "Clave de salida",
"exports.source": "Origen",
"exports.customSource": "Personalizado (attr.* / spec.*)",
"exports.removeField": "Quitar campo",
2026-08-17 00:39:25 +02:00
"exports.fieldHelp": "Las exportaciones leen productos procesados (con mapped_data en bruto como respaldo). Usa eprel_* / energy_* para EPREL, spec.* para una especificación, o specifications.* para expandir todas las specs como nodos XML.",
"exports.saving": "Guardando…",
"exports.saveChanges": "Guardar cambios",
"exports.createFeed": "Crear feed",
2026-08-17 00:39:25 +02:00
"exports.updated": "Feed de exportación actualizado.",
"exports.created": "Feed de exportación creado.",
"exports.saveFailed": "Error al guardar",
2026-08-17 00:39:25 +02:00
"exports.urlCopied": "URL pública del feed {format} copiada. Pégala en cualquier sistema que obtenga feeds de productos.",
"exports.copyFailed": "No se pudo copiar la URL al portapapeles",
"exports.refreshed": "Feed actualizado",
"exports.refreshedWithCount": "Feed actualizado ({count} productos).",
"exports.refreshFailed": "No se pudo actualizar el feed",
2026-08-17 00:39:25 +02:00
"exports.deleteConfirm": "¿Seguro que quieres eliminar este feed de exportación?",
"exports.deleted": "Feed de exportación eliminado correctamente.",
"exports.deleteFailed": "No se pudo eliminar el feed de exportación",
"exports.defaultName": "Nuevo feed de exportación",
"exports.fallbackName": "Feed de exportación",
"exports.dialog.selectTitle": "Exportar productos seleccionados",
2026-08-17 00:39:25 +02:00
"exports.dialog.selectDescription": "Elige una configuración de feed de exportación para los {count} productos seleccionados.",
"exports.dialog.noneFound": "No hay configuraciones de feed de exportación. Crea una en la sección Feeds de exportación.",
"exports.dialog.loadFailed": "No se pudieron cargar las opciones de export. Inténtalo de nuevo.",
"exports.dialog.selectRequired": "Selecciona un formato de feed de exportación.",
"exports.dialog.selectPlaceholder": "Selecciona un formato de feed…",
"exports.dialog.confirmAria": "Confirmar exportación",
"exports.dialog.export": "Exportar",
"exports.preset.google_shopping_csv.label": "Google Shopping (CSV)",
"exports.preset.google_shopping_csv.shortLabel": "Google Shopping CSV",
2026-08-17 00:39:25 +02:00
"exports.preset.google_shopping_csv.description": "Feed de productos de Merchant Center con las columnas estándar de Google (id, title, price, gtin, …).",
"exports.preset.google_shopping_csv.hint": "Tras actualizar el feed, copia la URL CSV pública en Google Merchant Center → Productos → Feeds → Añadir feed → Obtención programada.",
"exports.preset.google_shopping_csv.defaultName": "Google Shopping CSV",
"exports.preset.google_shopping_xml.label": "Google Shopping (XML)",
"exports.preset.google_shopping_xml.shortLabel": "Google Shopping XML",
2026-08-17 00:39:25 +02:00
"exports.preset.google_shopping_xml.description": "Las mismas columnas de Google como elementos XML (g:id, g:title, …) para feeds XML de Merchant Center.",
"exports.preset.google_shopping_xml.hint": "Pega la URL XML pública en Merchant Center como obtención programada. Mapea campos de tienda faltantes (link, price) en Mapeo de campos si hace falta.",
"exports.preset.google_shopping_xml.defaultName": "Google Shopping XML",
2026-08-17 00:39:25 +02:00
"exports.preset.meta_csv.label": "Catálogo Meta (CSV)",
"exports.preset.meta_csv.shortLabel": "Meta CSV",
2026-08-17 00:39:25 +02:00
"exports.preset.meta_csv.description": "Columnas de catálogo de Facebook / Instagram Commerce (id, title, availability, price, image_link, …).",
"exports.preset.meta_csv.hint": "En Meta Commerce Manager → Catálogo → Fuentes de datos → Añadir artículos → Usar feed de datos, pega la URL CSV pública.",
"exports.preset.meta_csv.defaultName": "Catálogo Meta CSV",
"exports.preset.custom_csv.label": "CSV personalizado",
"exports.preset.custom_csv.shortLabel": "CSV personalizado",
2026-08-17 00:39:25 +02:00
"exports.preset.custom_csv.description": "Elige tus propias columnas y orígenes de producto para cualquier partner o webhook.",
"exports.preset.custom_csv.hint": "Añade o renombra claves de salida libremente. La URL pública no requiere inicio de sesión.",
"exports.preset.custom_csv.defaultName": "Exportación CSV personalizada",
"exports.preset.custom_xml.label": "XML personalizado",
"exports.preset.custom_xml.shortLabel": "XML personalizado",
"exports.preset.custom_xml.description": "Construye una forma XML personalizada con tus nombres root/item y mapeos.",
"exports.preset.custom_xml.hint": "Define los elementos root e item, luego mapea cada clave de salida a un origen de producto.",
2026-08-17 00:39:25 +02:00
"exports.preset.custom_xml.defaultName": "Exportación XML personalizada",
"processing.title": "Procesamiento",
2026-08-17 00:39:25 +02:00
"processing.description": "Progreso en vivo de los trabajos de procesamiento de productos. Se actualiza solo mientras esta pestaña es visible. Los trabajos completados enlazan a Necesita revisión para aceptar / editar / rechazar.",
"processing.refresh": "Actualizar",
"processing.loadFailed": "No se pudieron cargar los trabajos de procesamiento",
2026-08-17 00:39:25 +02:00
"processing.tooManyRequests": "Demasiadas solicitudes — espera un momento e inténtalo de nuevo.",
"processing.serverError": "{fallback} (error del servidor {status}). Inténtalo en breve.",
"processing.httpError": "{fallback} (HTTP {status})",
"processing.cancelFailed": "No se pudo cancelar esta tarea",
"processing.retryFailed": "No se pudo reintentar esta tarea",
2026-08-17 00:39:25 +02:00
"processing.cancelledMsg": "\"{name}\" se canceló.",
"processing.queuedRetry": "\"{name}\" en cola para reintentar.",
"processing.jobFallback": "Trabajo {id}",
"processing.tasks": "Tareas",
2026-08-17 00:39:25 +02:00
"processing.pipelineHint": "Pipeline: normalizar → specs → relleno → EPREL → IA. Los inicios grandes pueden dividirse en trabajos hermanos.",
"processing.emptyTitle": "Aún no hay tareas en segundo plano",
"processing.emptyBody": "Aún no hay trabajos en segundo plano. Inicia un trabajo nuevo desde Productos cuando quieras.",
"processing.startJob": "Iniciar un trabajo",
"processing.connectFeed": "Conectar feed",
2026-08-17 00:39:25 +02:00
"processing.splitBatch": "Lote dividido · {jobs} trabajos · {products} productos",
"processing.col.task": "Tarea",
"processing.col.status": "Estado",
"processing.col.steps": "Pasos",
"processing.col.progress": "Progreso",
"processing.col.started": "Iniciado",
"processing.col.completed": "Completado",
"processing.col.actions": "Acciones",
2026-08-17 00:39:25 +02:00
"processing.partOfBatch": "· parte del lote",
"processing.nowStep": "Ahora: {step}",
"processing.skip": "(omitir)",
"processing.reviewResults": "Revisar resultados",
2026-08-17 00:39:25 +02:00
"processing.reviewTitle": "Abrir Necesita revisión para aceptar, editar o rechazar el enriquecimiento",
"processing.cancel": "Cancelar",
2026-08-17 00:39:25 +02:00
"processing.cancelling": "Cancelando…",
"processing.cancelTitle": "Cancelar este trabajo pendiente o en ejecución",
"processing.retry": "Reintentar",
2026-08-17 00:39:25 +02:00
"processing.retrying": "Reintentando…",
"processing.actions.onPage": "{count} en esta página",
"processing.actions.clearSelection": "Limpiar selección",
"processing.actions.processSelected": "Procesar selección",
"processing.actions.processAria": "Procesar productos seleccionados",
2026-08-17 00:39:25 +02:00
"processing.actions.processAriaCount": "Procesar {count} producto{plural} seleccionado{plural} en esta página",
"processing.actions.whatToProcess": "Qué procesar",
"processing.actions.freeNoAiTitle": "Plan Free — sin créditos de IA",
"processing.actions.freeNoAiBody": "Normalizar, specs, relleno y EPREL siguen funcionando. Los títulos/descripciones con IA requieren un plan de pago o créditos.",
"processing.actions.comparePlans": "Comparar planes",
"processing.actions.selectAll": "Seleccionar todo",
"processing.actions.selectAllAria": "Seleccionar todos los modos de proceso",
"processing.actions.upgradeRequired": "{label} (requiere mejora)",
2026-08-17 00:39:25 +02:00
"processing.actions.upgradeSuffix": " · mejorar",
"processing.actions.credits": "{credits} créditos",
"processing.actions.free": "gratis",
2026-08-17 00:39:25 +02:00
"processing.actions.autoCategorizeTitle": "Añadiendo categorización automáticamente",
"processing.actions.autoCategorizeBody": "{count} producto(s) necesitan categorización para el procesamiento de {types}",
"processing.actions.aiLocked": "Las opciones de IA están bloqueadas en Free. Mejora el plan para procesar títulos/descripciones.",
"processing.actions.totalCredits": "Créditos totales ({count} en esta página):",
"processing.actions.starting": "Iniciando…",
"processing.actions.processCount": "Procesar {count} en esta página",
"processing.actions.close": "Cerrar",
"processing.actions.accept": "Aceptar",
"processing.actions.acceptEnrichment": "Aceptar enriquecimiento",
"processing.actions.export": "Exportar",
2026-08-17 00:39:25 +02:00
"processing.actions.exportSelected": "Exportar selección",
"processing.actions.reject": "Rechazar",
"processing.actions.rejectReset": "Rechazar (restablecer)",
"processing.actions.resetUnprocessed": "Restablecer a sin procesar",
"processing.actions.confirmTitle": "Confirmar procesamiento",
2026-08-17 00:39:25 +02:00
"processing.actions.confirmBody": "Procesar {count} producto(s) en esta página por {credits} créditos. Los créditos se consumen al iniciar el trabajo y no se pueden deshacer desde esta acción.",
"processing.actions.confirmStart": "Iniciar procesamiento",
2026-08-17 00:39:25 +02:00
"processing.option.category": "Categorías",
"processing.option.attributes": "Atributos / specs",
2026-08-17 00:39:25 +02:00
"processing.option.title": "Títulos (IA)",
"processing.option.description": "Descripciones (IA)",
"processing.receipt.view": "Ver en Procesamiento",
"processing.receipt.undo": "Deshacer",
2026-08-17 00:39:25 +02:00
"processing.receipt.format": "{succeeded} correctos · {skipped} omitidos · {failed} fallidos",
"processing.receipt.cancelledOne": "Procesamiento cancelado",
"processing.receipt.cancelledMany": "Trabajos de procesamiento cancelados",
2026-08-17 00:39:25 +02:00
"processing.receipt.cancelledDesc": "El trabajo recién iniciado se canceló.",
"processing.receipt.cancelFailed": "No se pudo cancelar el trabajo de procesamiento",
2026-08-17 00:39:25 +02:00
"unsubscribe.title": "Cancelar suscripción",
"unsubscribe.me": "Cancelar mi suscripción",
"unsubscribe.invalidLink": "Enlace no válido",
"unsubscribe.failedShort": "Error al cancelar la suscripción",
"unsubscribe.already": "Ya estás dado de baja.",
"unsubscribe.confirmPrompt": "Confirma abajo para darte de baja de los emails de marketing.",
"unsubscribe.done": "Te has dado de baja.",
"stores.title": "Tiendas y fuentes",
2026-08-17 00:39:25 +02:00
"stores.description": "Conecta cualquier tienda o proveedor en un solo lugar — Woo, Shopify, URL de feed o CSV. Tiendas en vivo: productos Descrybe → tienda; pedidos/reseñas tienda → Descrybe. Exporta cuando el catálogo esté listo.",
"stores.allInputFeeds": "Todos los feeds de entrada",
2026-08-17 00:39:25 +02:00
"stores.exportFeeds": "Feeds de exportación",
"stores.migrationNote": "Tras una migración de plataforma Descrybe, puede que haya que volver a introducir las credenciales de WooCommerce y Shopify: es un paso de reconexión, no una sincronización rota.",
"stores.docsPrefix": "Docs:",
"stores.docsApiOverview": "Resumen de API",
2026-08-17 00:39:25 +02:00
"stores.docsSuffix": "para acceso público a productos; use WooCommerce o Shopify abajo para la sincronización en vivo de la tienda.",
"stores.connectorsHeading": "Conectores de tienda y catálogo",
"stores.statusAria": "Estado: {label}",
"stores.ctaAria": "{cta}: {title}",
2026-08-17 00:39:25 +02:00
"stores.startTitle": "¿Por dónde empiezo?",
"stores.startBody": "Tienda Woo → WooCommerce. Shopify u otra plataforma → URL de feed o carga CSV. Listo para Merchant Center o partners → Feeds de exportación (preset Google Shopping o campos personalizados). Tras una migración, vuelva a conectar Woo/Shopify antes de esperar que la sync funcione.",
"stores.startBodyMember": "Pide a un admin de la empresa que conecte WooCommerce o Shopify. Aún puedes abrir tiendas conectadas para sincronizar y explorar, y usar Feed URL, CSV o feeds de exportación según el plan.",
"stores.wizard.title": "Configuración guiada de tienda",
"stores.wizard.description": "Conecta una tienda, prueba la conexión, encola la primera sincronización de productos y listo.",
"stores.wizard.guidedSetup": "Configuración guiada",
"stores.wizard.guidedSetupAria": "Iniciar configuración guiada de tienda",
"stores.wizard.adminOnly": "Solo los admins de la empresa pueden ejecutar la configuración guiada (guardar credenciales y primer sync). Aún puedes abrir tiendas conectadas.",
"stores.wizard.pickChannel": "Elige un conector de tienda",
2026-08-17 00:39:25 +02:00
"stores.wizard.pickChannelBody": "Elige WooCommerce o Shopify. Completa conectar → probar → primera sync en la página del conector y vuelve aquí.",
"stores.wizard.channel.shopify": "Shopify",
"stores.wizard.channel.woocommerce": "WooCommerce",
"stores.wizard.channelLabel": "Configurando: {channel}",
"stores.wizard.changeChannel": "Cambiar conector",
"stores.wizard.noChannels": "No hay conectores de tienda en tu plan. Actualiza o pregunta a un admin.",
"stores.wizard.progress": "{done} de {total} completado",
2026-08-17 00:39:25 +02:00
"stores.wizard.stepsLabel": "Pasos de configuración de tienda",
"stores.wizard.step.connect.title": "Conectar",
2026-08-17 00:39:25 +02:00
"stores.wizard.step.connect.body": "Guarda las credenciales en la página del conector.",
"stores.wizard.step.test.title": "Probar conexión",
"stores.wizard.step.test.body": "Ejecuta Probar conexión hasta que tenga éxito.",
"stores.wizard.step.sync.title": "Primera sincronización",
"stores.wizard.step.sync.body": "Encola la primera sincronización de productos (activa sync si hace falta).",
"stores.wizard.step.done.title": "Listo",
2026-08-17 00:39:25 +02:00
"stores.wizard.step.done.body": "Tu tienda está conectada y se ha iniciado o completado una sync.",
"stores.wizard.openConnector": "Abrir conector",
"stores.wizard.viewProducts": "Ver productos",
"stores.wizard.backToHub": "Volver a tiendas",
2026-08-17 00:39:25 +02:00
"stores.wizard.banner.generic": "Configuración guiada: termina este paso y vuelve al asistente.",
"stores.wizard.banner.test": "Configuración guiada — prueba la conexión y vuelve al asistente.",
"stores.wizard.banner.sync": "Configuración guiada — encola la primera sync de productos y vuelve al asistente.",
"stores.wizard.banner.return": "Volver al asistente",
"stores.wizard.banner.dismiss": "Descartar",
"stores.woo.title": "WooCommerce",
2026-08-17 00:39:25 +02:00
"stores.woo.description": "Envía productos Descrybe → WooCommerce. Importa pedidos y reseñas WooCommerce → Descrybe.",
"stores.woo.ctaReconnect": "Reconectar Woo",
"stores.woo.ctaOpen": "Abrir Woo",
"stores.woo.ctaConnect": "Conectar Woo",
"stores.woo.ctaView": "Ver Woo",
"stores.shopify.title": "Shopify",
2026-08-17 00:39:25 +02:00
"stores.shopify.description": "Envía productos Descrybe → Shopify. Importa pedidos Shopify → Descrybe. Las reseñas no están disponibles en la Admin API de Shopify.",
"stores.shopify.ctaReconnect": "Reconectar Shopify",
"stores.shopify.ctaOpen": "Abrir Shopify",
"stores.shopify.ctaConnect": "Conectar Shopify",
"stores.shopify.ctaView": "Ver Shopify",
"stores.feedUrl.title": "URL del feed",
"stores.feedUrl.description": "Pull any supplier or tienda catalog from a public CSV or XML URL on a schedule. Map fields, then sync.",
2026-08-17 00:39:25 +02:00
"stores.feedUrl.cta": "Añadir URL del feed",
"stores.csv.title": "Subida CSV",
"stores.csv.description": "Sube un CSV de productos como feed de entrada. Ideal para archivos de proveedor puntuales o exportaciones del admin de Shopify.",
"stores.csv.cta": "Subir CSV",
"stores.export.title": "Exportar / REST",
2026-08-17 00:39:25 +02:00
"stores.export.description": "Publica Google Shopping o CSV/XML personalizado con una URL pública. O obtén productos con una clave API (/api/v1).",
"stores.export.cta": "Abrir exportaciones",
"stores.apiKeys.title": "Claves API",
2026-08-17 00:39:25 +02:00
"stores.apiKeys.description": "Las claves API antiguas no se migraron. Crea una nueva clave en Ajustes para restaurar el acceso a /api/v1 — el secreto solo se muestra una vez.",
"stores.apiKeys.descriptionMember": "Claves API de la empresa para /api/v1. Las antiguas no se migraron — solo los admins pueden crear o revocar; puedes ver prefijos en Ajustes.",
"stores.apiKeys.cta": "Gestionar claves API",
"stores.apiKeys.ctaView": "Ver claves API",
2026-08-17 00:39:25 +02:00
"stores.status.needsReconnect": "Necesita reconexión",
"stores.status.connected": "Conectado",
"stores.status.notConnected": "No conectado",
"stores.status.ready": "Listo",
"stores.status.outbound": "Saliente",
"stores.status.reissue": "Reemitir",
2026-08-17 00:39:25 +02:00
"store.tab.connection": "Conexión",
"store.tab.orders": "Pedidos",
2026-08-17 00:39:25 +02:00
"store.tab.settings": "Configuración",
"store.tab.categories": "Categorías",
"store.tab.attributes": "Atributos",
2026-08-17 00:39:25 +02:00
"store.tab.reviews": "Reseñas",
"store.badge.credentialsOnFile": "Credenciales guardadas",
2026-08-17 00:39:25 +02:00
"store.badge.syncEnabled": "Envío de productos activado",
"store.badge.syncDisabled": "Envío de productos desactivado",
"store.badge.syncQueued": "Envío de productos en cola",
"store.badge.dryRun": "Simulación",
"store.badge.testStatus": "Prueba: {status}",
2026-08-17 00:39:25 +02:00
"store.badge.syncStatus": "Envío de productos: {status}",
"store.badge.ordersQueued": "Sync de pedidos en cola",
"store.badge.ordersStatus": "Pedidos: {status}",
"store.badge.syncedCount": "{count} sincronizados",
"store.badge.mappedCount": "{count} mapeados",
"store.badge.productsCount": "{count} productos",
"store.badge.optionsCount": "{count} opciones",
2026-08-17 00:39:25 +02:00
"store.lastSync": "Última sync: {date}",
"store.noOrdersSyncYet": "Aún no se ha completado ninguna sync de pedidos.",
"store.save": "Guardar",
"store.saving": "Guardando...",
"store.testing": "Probando...",
2026-08-17 00:39:25 +02:00
"store.testConnection": "Probar conexión",
"store.queueing": "Encolando...",
2026-08-17 00:39:25 +02:00
"store.queueProductPush": "Encolar envío de productos (Descrybe → tienda)",
"store.queueFirstProductSync": "Encolar primer envío de productos (Descrybe → tienda)",
"store.queueOrdersImport": "Encolar importación de pedidos (tienda → Descrybe)",
"store.refreshList": "Actualizar lista",
"store.saveBeforeTest": "Guarda las credenciales antes de probar",
2026-08-17 00:39:25 +02:00
"store.saveTestBeforeQueue": "Guarda las credenciales y prueba la conexión antes de sincronizar",
"store.connectionOk": "Conexión OK",
"store.connectionSuccessful": "Conexión correcta",
"store.connectionSuccessfulDot": "Conexión correcta.",
"store.connectionFailed": "Conexión fallida",
"store.connectionFailedDot": "Conexión fallida.",
"store.connectionTestFailed": "Prueba de conexión fallida",
"store.testFailed": "Prueba fallida",
2026-08-17 00:39:25 +02:00
"store.setupSteps": "Pasos de configuración",
"store.col.order": "Pedido",
"store.col.customer": "Cliente",
"store.col.status": "Estado",
"store.col.total": "Total",
"store.col.date": "Fecha",
2026-08-17 00:39:25 +02:00
"store.loadingOrders": "Cargando pedidos…",
"store.loadingOrdersDot": "Cargando pedidos.",
2026-08-17 00:39:25 +02:00
"flash.store.saveFailed": "No se pudo guardar la configuración",
"flash.store.queueSyncFailed": "No se pudo encolar la sincronización",
"flash.store.queueOrdersFailed": "No se pudo encolar la sincronización de pedidos",
"flash.store.connectedTo": "Conectado a {name}.",
2026-08-17 00:39:25 +02:00
"flash.shopify.loadFailed": "Error al cargar la configuración de Shopify",
"flash.shopify.productSyncQueued": "Sincronización de productos en cola. El worker la ejecutará en breve.",
"flash.shopify.ordersSyncQueued": "Sincronización de pedidos en cola. El worker la ejecutará en breve.",
"flash.woo.loadFailed": "Error al cargar la configuración de WooCommerce",
"flash.woo.productSyncQueued": "Sincronización de productos en cola. Se ejecutará en breve.",
"flash.woo.ordersSyncQueued": "Sincronización de pedidos en cola. Se ejecutará en breve.",
"flash.woo.reviewsSyncQueued": "Sincronización de reseñas en cola. Se ejecutará en breve.",
"flash.woo.queueReviewsFailed": "No se pudo encolar la sincronización de reseñas",
"flash.woo.remoteMapsFailed": "Error al cargar los mapas remotos",
2026-08-17 00:39:25 +02:00
"flash.woo.syncSettingsFailed": "No se pudo guardar la configuración de sincronización",
"flash.woo.categoryAutoMapFailed": "Falló el auto-mapeo de categorías",
"flash.woo.attributeAutoMapFailed": "Falló el auto-mapeo de atributos",
"shopify.title": "Integración Shopify",
"shopify.description": "Connect a Shopify store with Dev Dashboard client credentials (recommended) or a legacy Admin API token. Products: Descrybe → Shopify. Orders: Shopify → Descrybe.",
"shopify.adminOnly": "Only empresa admins can change Shopify connection configuración. Sincronizar and browse stay disponible.",
"shopify.lockedTitle": "Conexión de Shopify bloqueada",
"shopify.noCredentialsMember": "Aún no hay credenciales de Shopify. Pide a un administrador de la empresa que conecte la tienda. La sincronización y los pedidos estarán disponibles cuando guarde y pruebe la conexión.",
"shopify.enterToken": "Introducir credenciales",
2026-08-17 00:39:25 +02:00
"shopify.noCredentials": "No hay credenciales de Shopify. Introduce tu dominio *.myshopify.com y el Client ID + secret del Dev Dashboard (o un token Admin API heredado), luego Guarda y Prueba la conexión. Tras una migración de plataforma, los secretos antiguos no se transfieren: reconecta con un token nuevo.",
"shopify.allConnectors": "Todos los conectores de tienda",
2026-08-17 00:39:25 +02:00
"shopify.setupDesc": "New Shopify apps are created in the Dev Dashboard (not Develop apps in Admin). Paste Client ID + secret below — Descrybe exchanges them for Admin API tokens and refreshes before they expire.",
"shopify.setup.oauthNote": "Still manual: create/install the app in Shopify and paste Client ID + secret here. Descrybe does not host a one-click App Store install. Legacy permanent shpat_ tokens from older Admin custom apps still work.",
"shopify.setup.scopesTitle": "Scopes de Admin API requeridos",
"shopify.setup.scopesIntro": "Add these scopes on the app version in the Dev Dashboard before you release and install:",
"shopify.setup.step3.scopes": "write_products, read_products, read_orders",
"shopify.setup.step3.mid": ", then",
"shopify.setup.step3.release": "Release",
"shopify.setup.step4.install": "Install app",
"shopify.setup.step5.before": "In app Settings, copy",
"shopify.setup.step5.clientId": "Client ID",
"shopify.setup.step5.and": "and",
"shopify.setup.step5.clientSecret": "Client secret",
2026-08-17 00:39:25 +02:00
"shopify.setup.step5.mid": ". Below: enter shop domain, paste both, enable sync →",
"shopify.setup.step5.save": "Save",
2026-08-17 00:39:25 +02:00
"shopify.setup.step5.arrow": "→",
"shopify.setup.step5.test": "Test Connection",
"shopify.setup.step5.after": ". Descrybe stores secrets encrypted and refreshes the short-lived access token automatically.",
"shopify.setup.step6.products": "Products",
2026-08-17 00:39:25 +02:00
"shopify.setup.step6.productsTail": "Descrybe → Shopify (outbound push).",
"shopify.setup.step6.orders": "Orders",
2026-08-17 00:39:25 +02:00
"shopify.setup.step6.ordersTail": "Shopify → Descrybe (inbound pull).",
"shopify.setup.step7.before": "No live shop yet? Enable",
"shopify.setup.step7.dryRun": "Dry run",
"shopify.setup.step7.after": "(or use the special dry-run access token) to walk through the flow without calling Shopify.",
"shopify.setup.openDevDashboard": "Open Dev Dashboard",
"shopify.setup.openDevelopApps": "Open shop Develop apps",
"shopify.setup.openDevelopAppsNeedDomain": "Enter your shop domain below to unlock a direct Admin link for this store.",
2026-08-17 00:39:25 +02:00
"shopify.setup.openDevelopAppsHint": "Opens Shopify Admin → Develop apps for this shop (legacy apps / install approvals). New apps start in the Dev Dashboard.",
"shopify.setup.copyScopes": "Copy required scopes",
"shopify.setup.scopesCopied": "Scopes copied",
"shopify.setup.docsCreate": "Create app docs",
"shopify.setup.docsTokens": "Access token docs",
2026-08-17 00:39:25 +02:00
"shopify.setup.showLegacyToken": "I have a legacy Admin API access token (shpat_…)",
"shopify.setup.hideLegacyToken": "Hide legacy token field",
2026-08-17 00:39:25 +02:00
"shopify.field.shopDomainHelp": "Admin API host only — use the *.myshopify.com name, not a custom storefront domain.",
"shopify.field.clientId": "Client ID",
"shopify.field.clientSecret": "Client secret",
2026-08-17 00:39:25 +02:00
"shopify.field.clientSecretHelp": "From Dev Dashboard → your app → Settings. Descrybe exchanges these for a short-lived Admin API token and refreshes it automatically.",
"shopify.field.accessTokenHelp": "Only for custom apps created in Shopify Admin before January 2026. New apps should use Client ID + secret instead.",
"shopify.placeholder.clientId": "Client ID from Dev Dashboard",
2026-08-17 00:39:25 +02:00
"shopify.placeholder.clientIdKeep": "Client ID on file — enter a new one to replace",
"shopify.placeholder.clientSecret": "Client secret",
2026-08-17 00:39:25 +02:00
"shopify.placeholder.clientSecretKeep": "Secret on file — enter a new one to replace",
"shopify.setup.scope.write_products": "write_products",
"shopify.setup.scope.write_productsWhy": "Crear y actualizar productos en Shopify (push saliente)",
"shopify.setup.scope.read_products": "read_products",
"shopify.setup.scope.read_productsWhy": "Encontrar productos existentes por SKU antes de actualizar",
"shopify.setup.scope.read_orders": "read_orders",
"shopify.setup.scope.read_ordersWhy": "Importar pedidos a Descrybe (entrante)",
2026-08-17 00:39:25 +02:00
"shopify.setup.step1": "Si conectaste Shopify antes de una migración de plataforma: crea una app nueva en el Dev Dashboard (o reconecta con un token heredado nuevo); los secretos antiguos no se transfieren.",
"shopify.setup.step2.before": "Open the",
"shopify.setup.step2.path": "Shopify Dev Dashboard",
2026-08-17 00:39:25 +02:00
"shopify.setup.step2.after": "→ Apps → Create app → Start from Dev Dashboard (or use the deep link below).",
"shopify.setup.step3.before": "Create a version: set App URL (default home is fine for API-only), add scopes",
"shopify.setup.step3.after": ".",
"shopify.setup.step4.before": "From the app Home tab,",
"shopify.setup.step4.after": "on your store (merchant must approve scopes).",
2026-08-17 00:39:25 +02:00
"shopify.testSectionTitle": "Verificar conexión",
"shopify.testHint": "Guarde primero el dominio de la tienda y el token, luego ejecute Probar conexión. Una prueba correcta confirma el token y los scopes antes de encolar la sync.",
"shopify.overwriteTitle": "¿Sobrescribir productos de Shopify?",
"shopify.overwriteBodyCount": "Esto encola un envío de productos saliente. {count} producto(s) de Shopify previamente vinculados pueden actualizarse con el contenido de Descrybe.",
"shopify.overwriteBody": "Esto encola un envío de productos saliente. Los productos de Shopify coincidentes pueden actualizarse con el contenido de Descrybe.",
"shopify.credentialsTitle": "Credenciales de la tienda",
"shopify.credentialsDesc.before": "El dominio de la tienda debe ser tu",
"shopify.credentialsDesc.code": "*.myshopify.com",
"shopify.credentialsDesc.after": "domain. Prefer Dev Dashboard Client ID + secret; legacy Admin API tokens still work.",
"shopify.field.shopDomain": "Dominio de la tienda",
"shopify.field.accessToken": "Token de acceso Admin API",
2026-08-17 00:39:25 +02:00
"shopify.field.apiVersion": "Versión de API",
"shopify.placeholder.tokenKeep": "******** (dejar en blanco para conservar)",
2026-08-17 00:39:25 +02:00
"shopify.enableSync": "Activar envío de productos (Descrybe → Shopify)",
"shopify.dryRunLabel": "Simulación (sin llamadas Shopify en vivo)",
"shopify.ordersTitle": "Importación de pedidos (Shopify → Descrybe)",
"shopify.ordersDesc": "Shopify → Descrybe — importa pedidos y líneas a Descrybe (no escribe de vuelta en Shopify).",
"shopify.ordersNeedsReconnect": "La importación de pedidos no puede ejecutarse hasta reconectar las credenciales tras la migración. En la pestaña Conexión: Guardar, luego Probar la conexión.",
"shopify.notesTitle": "Notas",
"shopify.notesDesc": "Capacidades del conector Shopify",
2026-08-17 00:39:25 +02:00
"shopify.notes.productsLabel": "Productos (Descrybe → Shopify)",
"shopify.notes.productsBody": "— los productos Descrybe procesados se crean o actualizan en Shopify (coincidencia por SKU vía GraphQL cuando no hay id de producto Shopify en caché). Una nueva sync puede sobrescribir campos remotos coincidentes.",
"shopify.notes.ordersLabel": "Pedidos (Shopify → Descrybe)",
"shopify.notes.ordersBody": "— importados para informes y futuros flujos de audiencia.",
"shopify.notes.reviewsLabel": "Reseñas",
"shopify.notes.reviewsBody": "-- not soporteed. Shopify has no first-party producto reviews Admin API (third-party review apps are out of scope here).",
"shopify.notes.encryption.before": "Los tokens se cifran en reposo con",
2026-08-17 00:39:25 +02:00
"woo.title": "Integración WooCommerce",
"woo.description": "Create a WordPress REST API key, connect your store, then push products (Descrybe → WooCommerce) and pull orders/reviews (WooCommerce → Descrybe).",
"woo.allStores": "Todas las tiendas",
2026-08-17 00:39:25 +02:00
"woo.adminOnly": "Solo los administradores de la empresa pueden cambiar la conexión y el mapeo de WooCommerce. La sincronización y la navegación siguen disponibles.",
"woo.enterCredentials": "Introducir credenciales",
2026-08-17 00:39:25 +02:00
"woo.noCredentials": "No hay credenciales de WooCommerce. Introduce la URL de la tienda, crea una clave REST API de lectura/escritura en WordPress, pega Consumer Key y Secret, luego Guarda y Prueba la conexión. Tras una migración de plataforma, los secretos antiguos no se transfieren: reconecta con una clave nueva.",
"woo.lockedTitle": "Conexión de WooCommerce bloqueada",
"woo.noCredentialsMember": "Aún no hay credenciales de WooCommerce. Pide a un administrador de la empresa que conecte la tienda. La sincronización, pedidos y reseñas estarán disponibles cuando guarde y pruebe la conexión.",
"woo.setupDesc": "Follow these steps to create a WooCommerce REST API key in WordPress and connect it here. Descrybe never creates keys on your store for you.",
2026-08-17 00:39:25 +02:00
"woo.setup.step1": "Si conectaste WooCommerce antes de una migración de plataforma: crea una clave REST API nueva; las credenciales guardadas antiguas no son utilizables.",
"woo.setup.step2.before": "Enter your store",
"woo.setup.step2.path": "HTTPS URL",
"woo.setup.step2.after": "in the form below (example: https://yourstore.com).",
"woo.setup.step3.before": "In WordPress admin, open",
2026-08-17 00:39:25 +02:00
"woo.setup.step3.path": "WooCommerce → Settings → Advanced → REST API",
"woo.setup.step3.after": "(or use the deep link once your store URL is filled in).",
"woo.setup.step4.before": "Click",
"woo.setup.step4.addKey": "Add key",
"woo.setup.step4.mid": ", set permissions to",
"woo.setup.step4.permissions": "Read/Write",
2026-08-17 00:39:25 +02:00
"woo.setup.step4.after": ", then copy the Consumer Key (ck_…) and Consumer Secret (cs_…). The secret is shown only once.",
"woo.setup.step5.before": "Paste the key and secret below, enable sync if ready, then",
"woo.setup.step5.save": "Save",
2026-08-17 00:39:25 +02:00
"woo.setup.step5.arrow": "→",
"woo.setup.step5.test": "Test Connection",
"woo.setup.step5.after": ".",
"woo.setup.step6.products": "Products",
2026-08-17 00:39:25 +02:00
"woo.setup.step6.productsTail": "Descrybe → WooCommerce (outbound push).",
"woo.setup.step6.orders": "Orders",
"woo.setup.step6.and": "and",
"woo.setup.step6.reviews": "reviews",
2026-08-17 00:39:25 +02:00
"woo.setup.step6.inboundTail": "WooCommerce → Descrybe (inbound pull). Sync runs in the background — check status badges on this page.",
"woo.setup.openKeys": "Abrir claves de REST API",
2026-08-17 00:39:25 +02:00
"woo.setup.addKey": "Añadir clave",
"woo.setup.openKeysHint": "Abre WordPress admin → WooCommerce → Ajustes → Avanzado → REST API.",
"woo.setup.openKeysNeedUrl": "Guarde primero una URL de tienda válida para abrir enlaces de admin.",
"woo.setup.docsLink": "Documentación de la REST API de WooCommerce",
"woo.overwriteTitle": "¿Sobrescribir productos de WooCommerce?",
"woo.overwriteBodyCount": "Esto encola un envío de productos saliente. {count} producto(s) de WooCommerce previamente vinculados pueden actualizarse con el contenido de Descrybe.",
"woo.overwriteBody": "Esto encola un envío de productos saliente. Los productos de WooCommerce coincidentes pueden actualizarse con el contenido de Descrybe.",
"woo.connectionTitle": "Store connection",
"woo.connectionDesc": "Paste your store URL and a Read/Write REST API key pair. Save, then Test Connection before queuing syncs.",
2026-08-17 00:39:25 +02:00
"woo.enableSync": "Activar envío de productos (Descrybe → WooCommerce)",
"woo.field.storeUrl": "URL de la tienda",
2026-08-17 00:39:25 +02:00
"woo.field.storeUrlHelp": "URL pública del sitio con https. Se usa para la REST API de WooCommerce y enlaces al admin de WordPress.",
"woo.field.consumerKey": "Consumer Key",
"woo.field.consumerSecret": "Consumer Secret",
2026-08-17 00:39:25 +02:00
"woo.field.credentialsHelp": "Consumer Key y Secret con permisos de lectura/escritura. Déjelos en blanco para conservar las credenciales existentes.",
"woo.placeholder.keep": "******** (sin cambios)",
"woo.keepCredentialsHint": "Deja clave/secreto en blanco al guardar para conservar las credenciales existentes.",
2026-08-17 00:39:25 +02:00
"woo.saveConfiguration": "Guardar configuración",
"woo.categoryMappingTitle": "Mapeo de categorías",
"woo.categoryMappingDesc": "Asigne sus categorías internas a las categorías de WooCommerce",
"woo.autoMapCategories": "Mapear categorías automáticamente",
"woo.autoMapping": "Mapeo automático...",
"woo.refreshCategories": "Actualizar categorías",
"woo.availableCategories": "Categorías WooCommerce disponibles",
"woo.categoriesEmptyHint": "Prueba la conexión y luego actualiza para cargar categorías WooCommerce.",
"woo.attributeMappingTitle": "Mapeo de atributos",
"woo.attributeMappingDesc": "Asigne sus atributos internos a los atributos de WooCommerce",
2026-08-17 00:39:25 +02:00
"woo.autoMapAttributes": "Mapear atributos automáticamente",
"woo.refreshAttributes": "Actualizar atributos",
"woo.availableAttributes": "Atributos WooCommerce disponibles",
2026-08-17 00:39:25 +02:00
"woo.attributesEmptyHint": "Prueba la conexión y luego actualiza para cargar atributos WooCommerce.",
"woo.ordersTitle": "Importación de pedidos (WooCommerce → Descrybe)",
"woo.ordersDesc": "WooCommerce → Descrybe — importa pedidos y líneas a Descrybe (no escribe de vuelta en la tienda).",
"woo.ordersNeedsReconnect": "La importación de pedidos no puede ejecutarse hasta reconectar las credenciales tras la migración. En la pestaña Conexión: Guardar, luego Probar la conexión.",
"woo.syncSettingsTitle": "Ajustes de sync",
2026-08-17 00:39:25 +02:00
"woo.syncSettingsDesc": "Configura cómo se envían los productos Descrybe → WooCommerce",
"woo.matchStrategy": "Producto Matching Strategy",
2026-08-17 00:39:25 +02:00
"woo.matchStrategyHelp": "El envío de productos (Descrybe → WooCommerce) empareja productos remotos por SKU o EAN/GTIN. Encola syncs desde la pestaña Conexión (manual).",
"woo.lastSyncLabel": "Última sync",
"woo.saveSyncSettings": "Guardar ajustes de sync",
"woo.match.sku": "SKU",
"woo.match.ean": "EAN/GTIN",
"plan.feature.section.shell": "Entorno",
"plan.feature.section.dashboard": "Panel",
2026-08-17 00:39:25 +02:00
"plan.feature.section.catalog": "Catálogo",
"plan.feature.section.feeds": "Feeds",
"plan.feature.section.stores": "Tiendas",
"plan.feature.section.processing": "Procesamiento",
"plan.feature.section.marketing": "Marketing",
"plan.feature.section.integrations": "Integraciones",
2026-08-17 00:39:25 +02:00
"plan.feature.section.billing": "Facturación",
"plan.feature.section.settings": "Configuración",
"plan.feature.section.support": "Soporte",
"plan.feature.section.capabilities": "Capacidades",
2026-08-17 00:39:25 +02:00
"plan.feature.shell.navigation": "Navegación lateral",
"plan.feature.shell.command_palette": "Paleta de comandos",
"plan.feature.shell.company_switcher": "Selector de empresa",
"plan.feature.shell.support_notifications": "Campana de notificaciones de soporte",
"plan.feature.shell.tutorial": "Tutorial del producto",
2026-08-17 00:39:25 +02:00
"plan.feature.shell.account_menu": "Menú de cuenta",
"plan.feature.shell.billing_recovery_banner": "Banner de recuperación de facturación",
"plan.feature.dashboard.overview": "Resumen del panel",
2026-08-17 00:39:25 +02:00
"plan.feature.dashboard.stats": "Tarjetas de estadísticas",
"plan.feature.dashboard.quick_links": "Enlaces rápidos",
"plan.feature.dashboard.recent_jobs": "Trabajos recientes",
"plan.feature.dashboard.news_feed": "Feed de noticias",
2026-08-17 00:39:25 +02:00
"plan.feature.dashboard.activation_checklist": "Lista de activación",
"plan.feature.dashboard.migrated_checklist": "Lista de cohorte migrada",
"plan.feature.dashboard.etl_gaps": "Panel de gaps ETL",
2026-08-17 00:39:25 +02:00
"plan.feature.dashboard.store_reconnect": "Banner de reconexión de tienda",
"plan.feature.dashboard.upgrade_banners": "Banners de actualización",
"plan.feature.catalog.products": "Productos",
2026-08-17 00:39:25 +02:00
"plan.feature.catalog.products.tab_processed": "Productos - pestaña Procesados",
"plan.feature.catalog.products.tab_needs_review": "Productos - pestaña Revisión pendiente",
"plan.feature.catalog.products.tab_error": "Productos - pestaña Error",
"plan.feature.catalog.products.tab_processing": "Productos - pestaña Procesando",
"plan.feature.catalog.products.tab_unprocessed": "Productos - pestaña Sin procesar",
"plan.feature.catalog.products.process_categories": "Procesar categorías",
"plan.feature.catalog.products.process_attributes": "Procesar atributos / especificaciones",
2026-08-17 00:39:25 +02:00
"plan.feature.catalog.products.process_ai_titles": "Procesar títulos con IA",
"plan.feature.catalog.products.process_ai_descriptions": "Procesar descripciones con IA",
2026-08-17 00:39:25 +02:00
"plan.feature.catalog.products.enrichment_review": "Panel de revisión de enriquecimiento",
"plan.feature.catalog.products.export_selection": "Exportar productos seleccionados",
2026-08-17 00:39:25 +02:00
"plan.feature.catalog.products.upgrade_prompt": "Avisos de actualización de productos",
"plan.feature.catalog.categories": "Categorías",
"plan.feature.catalog.categories.title_formula": "Fórmula de título de categoría",
"plan.feature.catalog.categories.description_formula": "Fórmula de descripción de categoría",
"plan.feature.catalog.attributes": "Atributos",
2026-08-17 00:39:25 +02:00
"plan.feature.catalog.attributes.bulk_import": "Importación masiva de atributos",
"plan.feature.catalog.standard_fields": "Campos estándar",
"plan.feature.catalog.standard_fields.groups": "Grupos de campos estándar",
"plan.feature.catalog.structured_descriptions": "Campos de descripción estructurada",
"plan.feature.catalog.vector_categories": "Categorías vectoriales",
"plan.feature.feeds.list": "Feeds de importación",
"plan.feature.feeds.add_url": "Añadir URL del feed",
"plan.feature.feeds.add_csv": "Añadir feed por carga CSV",
"plan.feature.feeds.sync": "Sincronizar feed",
"plan.feature.feeds.mapping": "Mapeo de feed",
2026-08-17 00:39:25 +02:00
"plan.feature.feeds.mapping.select_item": "Mapeo - seleccionar elemento de ítem",
"plan.feature.feeds.mapping.map_fields": "Mapeo - mapear campos",
2026-08-17 00:39:25 +02:00
"plan.feature.feeds.export_feeds": "Feeds de exportación",
"plan.feature.feeds.export_feeds.create": "Crear feed de exportación",
"plan.feature.feeds.export_feeds.generate": "Generar feed de exportación",
"plan.feature.feeds.uploads": "Cargas de archivos",
"plan.feature.stores.hub": "Centro de tiendas",
2026-08-17 00:39:25 +02:00
"plan.feature.stores.woocommerce": "Integración WooCommerce",
"plan.feature.stores.woocommerce.connection": "Conexión WooCommerce",
"plan.feature.stores.woocommerce.categories": "Sincronización de categorías WooCommerce",
"plan.feature.stores.woocommerce.attributes": "Sincronización de atributos WooCommerce",
"plan.feature.stores.woocommerce.orders": "Pedidos WooCommerce",
2026-08-17 00:39:25 +02:00
"plan.feature.stores.woocommerce.reviews": "Reseñas WooCommerce",
"plan.feature.stores.woocommerce.settings": "Ajustes WooCommerce",
2026-08-17 00:39:25 +02:00
"plan.feature.stores.shopify": "Integración Shopify",
"plan.feature.stores.shopify.connection": "Conexión Shopify",
"plan.feature.stores.shopify.orders": "Pedidos Shopify",
"plan.feature.stores.shopify.settings": "Ajustes Shopify",
"plan.feature.processing.monitor": "Monitor de procesamiento",
2026-08-17 00:39:25 +02:00
"plan.feature.marketing.campaigns": "Campañas",
"plan.feature.marketing.campaigns.create": "Asistente de nueva campaña",
"plan.feature.marketing.campaigns.generate_ai": "Generación de campaña con IA",
"plan.feature.marketing.campaigns.send": "Envío / blast de campaña",
"plan.feature.marketing.content_calendar": "Calendario de contenido",
"plan.feature.marketing.brand_kit": "Kit de marca",
"plan.feature.marketing.brand_ai_apply": "Aplicar marca IA en prompts",
"plan.feature.marketing.seo": "Recomendaciones SEO",
"plan.feature.marketing.seo.template_fill": "Relleno de plantilla SEO",
"plan.feature.marketing.seo.ai_rewrite": "Reescritura SEO con IA",
2026-08-17 00:39:25 +02:00
"plan.feature.marketing.reviews": "Reseñas",
"plan.feature.integrations.ai": "Integraciones de IA",
"plan.feature.integrations.ai.byok": "Usa tu propia clave de IA",
2026-08-17 00:39:25 +02:00
"plan.feature.integrations.email": "Envío de correo",
"plan.feature.integrations.email.test": "Envío de prueba de correo",
"plan.feature.integrations.email.blast": "Envío masivo de correo",
"plan.feature.billing.overview": "Resumen de facturación",
"plan.feature.billing.customer_portal": "Portal de cliente Stripe",
2026-08-17 00:39:25 +02:00
"plan.feature.billing.quick_upgrade": "Pago de actualización rápida",
"plan.feature.billing.plans_compare": "Comparar planes",
"plan.feature.billing.checkout": "Pago con Stripe",
"plan.feature.settings.profile": "Ajustes de perfil",
2026-08-17 00:39:25 +02:00
"plan.feature.settings.company": "Configuración de la empresa",
"plan.feature.settings.alerts": "Preferencias de alertas",
"plan.feature.settings.api_keys": "Claves API",
2026-08-17 00:39:25 +02:00
"plan.feature.settings.team": "Gestión del equipo",
"plan.feature.settings.team_invite": "Invitar compañero",
"plan.feature.support.center": "Centro de soporte",
"plan.feature.support.ticket_create": "Nuevo ticket de soporte",
"plan.feature.support.ticket_thread": "Hilo del ticket de soporte",
2026-08-17 00:39:25 +02:00
"plan.feature.capability.sku_cap": "Límite de SKU de producto",
"plan.feature.capability.ai_credits": "Cartera de créditos de IA",
"plan.feature.capability.ai_processing": "Trabajos de procesamiento con IA",
"plan.feature.capability.eprel": "Enriquecimiento EPREL",
"plan.feature.capability.normalize_specs_fill": "Normalizar / especificaciones / completar",
2026-08-17 00:39:25 +02:00
"plan.feature.capability.campaign_ai": "Generación de campaña con IA",
"plan.feature.capability.email_live_send": "Entrega de correo en vivo",
"plan.feature.capability.brand_ai_apply": "Voz de marca en prompts de IA",
"plan.feature.capability.seo_ai_rewrite": "Reescritura SEO con IA",
2026-08-17 00:39:25 +02:00
"plan.feature.capability.feed_source_limit": "Límite de fuentes de feed (marketing)",
"plan.feature.capability.export_feed_limit": "Límite de feeds de exportación (marketing)",
"plan.feature.capability.storage_limit": "Límite de almacenamiento (marketing)",
"plan.feature.capability.api_access": "Acceso a la API REST (marketing)",
"plan.feature.capability.byok": "Usa tu propia clave de IA",
"billing.plan.free": "Gratis",
"products.actions.selectAll": "Seleccionar todo",
2026-08-17 00:39:25 +02:00
"products.actions.upgradeSuffix": " · mejorar",
"products.actions.upgradeRequired": "{label} (mejora requerida)",
"products.actions.free": "gratis",
2026-08-17 00:39:25 +02:00
"products.actions.credits": "{credits} créditos",
"products.actions.autoCategorizeTitle": "Añadiendo categorización automáticamente",
"products.actions.autoCategorizeBody": "{count} producto(s) necesitan categorización para el procesamiento de {types}",
"products.actions.aiLocked": "Las opciones de IA están bloqueadas en Free. Mejora el plan para procesar títulos/descripciones.",
"products.actions.processSelected": "Procesar seleccionados",
"products.actions.markProcessed": "Marcar como procesado",
"products.actions.resetUnprocessed": "Restablecer a sin procesar",
"products.actions.export": "Exportar",
2026-08-17 00:39:25 +02:00
"products.upload.dropHint": "Suelta un CSV aquí o haz clic para explorar",
"products.upload.supportsHint": "Admite importaciones de productos .csv (ean, name, category…)",
"products.export.chooseConfig": "Exportar {count} producto(s) seleccionado(s). Elija el feed de exportación que define formato y campos.",
"products.export.selectPlaceholder": "Seleccione un feed de exportación…",
"fields.typeLabel": "Tipo",
"fields.groupLabel": "Grupo",
"fields.selectGroup": "Selecciona un grupo",
"fields.groupBelongsHint": "Grupo al que pertenece este campo",
2026-08-17 00:39:25 +02:00
"fields.addFieldShort": "Añadir campo",
"fields.enableRecommended": "Activar recomendados",
"feeds.activated": "Feed activado.",
"feeds.deactivated": "Feed desactivado.",
2026-08-17 00:39:25 +02:00
"feeds.syncTimeout": "Sincronizar timed out waiting for the server. The job may still finish — open Sincronizar History to check status.",
"feeds.createdMapHint": "Feed creado. Mapea campos antes de sincronizar.",
"feeds.createdPlain": "Feed creado.",
"feeds.createdMapDesc": "Mapea columnas de origen a campos de producto y luego sincroniza.",
2026-08-17 00:39:25 +02:00
"feeds.lastLiveSync": "Última sync correcta del feed: {when}",
"feeds.noLiveSyncProducts": "Aún no hay sync correcta del feed. Catálogo actualizado por última vez {when}.",
"feeds.noDataYet": "Aún no hay sync ni datos de catálogo.",
"products.filters.incomplete": "Incompleto",
"products.filters.complete44": "Completo (4/4)",
"products.filters.missingName": "Nombre faltante",
2026-08-17 00:39:25 +02:00
"products.filters.missingDescription": "Descripción faltante",
"products.filters.missingAttributes": "Atributos faltantes",
2026-08-17 00:39:25 +02:00
"products.filters.missingCategory": "Categoría faltante",
"products.filters.hasEprel": "Tiene EPREL",
"products.filters.noEprel": "Sin EPREL",
"products.filters.priceChanged": "Precio cambiado",
"products.filters.stockChanged": "Stock cambiado",
2026-08-17 00:39:25 +02:00
"products.filters.titleChanged": "Título cambiado",
"products.filters.newFromFeed": "Nuevo desde feed",
"products.filters.otherFieldChange": "Otro cambio de campo",
2026-08-17 00:39:25 +02:00
"products.filters.sortUpdatedNewest": "Actualizado (más reciente)",
"products.filters.sortUpdatedOldest": "Actualizado (más antiguo)",
"products.filters.sortNameAsc": "Nombre (A-Z)",
"products.filters.sortNameDesc": "Nombre (Z-A)",
"products.filters.searchPlaceholder": "Buscar productos...",
2026-08-17 00:39:25 +02:00
"products.filters.searchCategories": "Buscar categorías...",
"products.filters.selectFeed": "Seleccionar feed",
2026-08-17 00:39:25 +02:00
"products.filters.loadingFeeds": "Cargando feeds…",
"products.table.loading": "Cargando productos",
2026-08-17 00:39:25 +02:00
"products.table.uncategorized": "Sin categoría",
"products.table.assignCategory": "Asignar categoría",
"products.table.changeCategory": "Cambiar categoría de {name}",
"products.table.selectCategory": "Seleccionar categoría…",
"products.table.saveCategory": "Guardar categoría",
"products.table.cancelCategory": "Cancelar edición de categoría",
"products.table.categoryRequired": "Elige una categoría",
"products.table.noCategoriesAvailable": "Aún no hay categorías — crea una en Catálogo",
"products.table.qualityUnavailable": "Calidad no disponible",
"products.table.full": "Completo",
2026-08-17 00:39:25 +02:00
"products.table.empty": "Vacío",
"products.table.saveName": "Guardar nombre",
"products.table.cancelRename": "Cancelar renombre",
2026-08-17 00:39:25 +02:00
"products.table.noSyncYet": "Aún sin sync",
"products.feedSync.feedAndWhen": "{feed} · {when}",
"products.feedSync.syncedWhen": "Sincronizado {when}",
"products.table.productOptions": "Opciones de producto",
"products.edit.details": "Detalles del producto",
"products.edit.noEprel": "No hay id EPREL en este producto.",
2026-08-17 00:39:25 +02:00
"products.edit.specsPresent": "Las especificaciones técnicas están presentes en este producto.",
"products.edit.noEnrichedName": "Sin nombre enriquecido",
"products.edit.resetName": "Restablecer el nombre enriquecido al original",
2026-08-17 00:39:25 +02:00
"products.edit.cannotClearName": "El original está vacío — no se puede borrar el nombre enriquecido vía PATCH",
"products.edit.showPreview": "Mostrar vista previa",
"products.edit.editHtml": "Editar HTML",
2026-08-17 00:39:25 +02:00
"products.edit.noEnrichedDescription": "Sin descripción enriquecida",
"products.edit.resetDescription": "Restablecer la descripción enriquecida al original",
"products.edit.cannotClearDescription": "El original está vacío — no se puede borrar la descripción enriquecida vía PATCH",
"products.edit.unknownFeed": "Feed desconocido",
"products.edit.noProcessedName": "No hay nombre procesado disponible",
2026-08-17 00:39:25 +02:00
"products.edit.feedNamed": "Feed · {name}",
"products.edit.noAiDescription": "Sin descripción de IA",
"products.edit.sourceLabel": "Etiqueta de origen",
2026-08-17 00:39:25 +02:00
"products.edit.coverageTitle": "Cuántos de Nombre, Descripción, Atributos y Categoría están presentes (feed o procesados).",
"products.edit.coverageReady": "{count}/4 listos",
2026-08-17 00:39:25 +02:00
"products.edit.eprelPresentTitle": "El id del European Product Registry for Energy Labelling (EPREL) está presente en este producto.",
"products.edit.noEprelBadge": "Sin EPREL",
"products.edit.specsBadge": "Especs",
"products.edit.reviewBannerTitle": "Revisa los campos enriquecidos antes de aceptar",
2026-08-17 00:39:25 +02:00
"products.edit.reviewBannerHelp": "Usa la pestaña Revisar para comparar originales vs IA. Atajos: A aceptar · R rechazar · Alt+1/2 campo · ⌘/Ctrl+Enter aceptar todo.",
"products.edit.tab.review": "Revisar",
"products.edit.tab.details": "Detalles",
"products.edit.tab.content": "Contenido",
"products.edit.tab.attributes": "Atributos",
"products.edit.tab.feed": "Feed",
"products.edit.changed": "Cambiado",
"products.edit.matched": "Coincidente",
"products.edit.original": "Original",
"products.edit.enriched": "Enriquecido",
"products.edit.discardName": "Descartar nombre",
"products.edit.acceptName": "Aceptar nombre",
2026-08-17 00:39:25 +02:00
"products.edit.discardDescription": "Descartar descripción",
"products.edit.acceptDescription": "Aceptar descripción",
"products.edit.noCategory": "No Categoría",
"products.edit.whatsFilledIn": "Qué está rellenado",
"products.edit.coverageLegend": "Gris = faltante · Naranja = del feed · Verde = procesado",
"products.edit.feedSource": "Origen del feed",
2026-08-17 00:39:25 +02:00
"products.edit.updatedRelative": "· actualizado {when}",
"products.edit.viewAllFeedFields": "Ver all feed fields ({filled}/{total})",
"products.edit.productIdentity": "Producto identity",
"products.edit.aiProcessedName": "Nombre procesado con AI",
"products.edit.originalName": "Nombre original",
"products.edit.productIdSku": "Producto ID / SKU",
"products.edit.rowUpdated": "Fila del producto actualizada {when}",
"products.edit.noRawUpdateTime": "No raw producto update time",
2026-08-17 00:39:25 +02:00
"products.edit.feedSyncLabel": "· sincronización del feed {when}",
"products.edit.neverRecorded": "nunca registrado",
2026-08-17 00:39:25 +02:00
"products.edit.feedFilledCount": "{filled} rellenados · {total} campos",
"products.edit.noMappedFeedFields": "No mapped feed fields on this producto.",
"products.edit.fieldCol": "Campo",
"products.edit.valueFromFeed": "Valor from feed",
2026-08-17 00:39:25 +02:00
"products.edit.core": "Núcleo",
"products.edit.aiProcessedDescription": "AI-Processed Descripción",
"products.edit.originalDescription": "Descripción original",
"products.edit.noAttrsYet": "No atributo or specification data on this producto yet.",
"products.edit.fromFeed": "Del feed",
2026-08-17 00:39:25 +02:00
"products.edit.feedAttrsHelp": "Valores analizados del feed (especificaciones HTML, garantía, dimensiones, EPREL). Las claves se vinculan a attribute_key cuando es posible.",
"products.edit.fieldsCount": "{count} campos",
"products.edit.originalAttributes": "Atributos originales",
"products.edit.aiAttributes": "Atributos IA / enriquecidos",
"products.edit.editableAttributes": "Atributos editables",
"products.edit.editableAttributesHelp": "Los cambios se guardan en el mapa de atributos del producto. Las filas de feed e IA abajo siguen como referencia cuando difieren.",
2026-08-17 00:39:25 +02:00
"products.edit.addAttribute": "Añadir atributo",
"products.edit.attrKeyPlaceholder": "Clave",
"products.edit.attrValuePlaceholder": "Valor",
"products.edit.removeAttribute": "Eliminar {key}",
2026-08-17 00:39:25 +02:00
"products.edit.noEditableAttrs": "Aún no hay atributos editables. Añade un par clave/valor.",
"products.edit.reject": "Rechazar",
"products.edit.accept": "Aceptar",
"taskIndicator.title": "Tareas en segundo plano",
"taskIndicator.activeOne": "1 trabajo en curso",
"taskIndicator.activeMany": "{count} trabajos en curso",
"taskIndicator.view": "Ver progreso",
"taskIndicator.expand": "Expandir lista de tareas",
"taskIndicator.collapse": "Contraer lista de tareas",
"taskIndicator.progressAria": "Progreso del trabajo {pct} por ciento",
"taskIndicator.progressCounts": "{done} de {total} productos",
2026-08-17 00:39:25 +02:00
"attributes.assignBulk": "Asignar a categorías",
"products.filters.search": "Buscar",
"products.filters.sortAria": "Orden: {label}",
"products.filters.sortLabel": "Orden: {label}",
"products.table.colIdName": "ID/Nombre",
"products.table.colCoverage": "Cobertura",
2026-08-17 00:39:25 +02:00
"products.table.coverageTitle": "Cobertura: N=Nombre, D=Descripción, A=Atributos, C=Categoría. Gris=ausente, naranja=desde el feed, verde=procesado. EPREL muestra el id del registro de etiqueta energética.",
"products.table.colFeed": "Feed",
2026-08-17 00:39:25 +02:00
"products.table.colCategory": "Categoría",
"products.table.colStatus": "Estado",
2026-08-17 00:39:25 +02:00
"products.table.colUpdated": "Última actualización",
"products.table.colActions": "Acciones",
2026-08-17 00:39:25 +02:00
"products.table.loadingDots": "Cargando productos…",
"products.table.noneFound": "No se encontraron productos.",
"products.table.selectProduct": "Seleccionar producto {name}",
"products.table.rename": "Renombrar {name}",
"products.table.productNameAria": "Nombre del producto para {name}",
"products.table.selectPage": "Seleccionar {count} on this page",
2026-08-17 00:39:25 +02:00
"products.table.deselectPage": "Deseleccionar {count} en esta página",
"categories.assign": "Asignar",
2026-08-17 00:39:25 +02:00
"categories.titleFormulaSubtitle": "Configura cómo deben generarse los títulos de producto para {name}",
"categories.addText": "Añadir texto",
"categories.aboutTitleFormulas": "Acerca de las fórmulas de título",
"categories.aboutTitleFormulasHelp": "Los títulos se ensamblan de izquierda a derecha a partir de los elementos siguientes.",
"categories.variablesReplacedHelp": "Las variables se sustituyen por datos del producto cuando están disponibles. Los valores faltantes se omiten.",
"categories.variableTypeHelp": "Campo dinámico de los datos del producto (ejemplo: marca).",
"categories.textTypeHelp": "Texto estático que siempre aparece tal como se escribe.",
"categories.assignTitleCopyHelp": "Usa Asignar para copiar esta fórmula a otras categorías que deban compartir el mismo patrón de título.",
"categories.titleFormulaInvalid": "Esta página de fórmula de título necesita una categoría válida. Vuelve a categorías y abre de nuevo Editar fórmula de título.",
"categories.preview.title": "Vista previa del título",
"categories.preview.description": "Así se estructurarán los títulos de tus productos",
"categories.preview.exampleTab": "Vista previa de ejemplo",
2026-08-17 00:39:25 +02:00
"categories.preview.structureTab": "Estructura de la fórmula",
"categories.preview.noElements": "Aún no hay elementos",
"categories.brandTips.title": "Consejos según la marca",
"categories.brandTips.freePlan": "El kit de marca se puede editar en el plan Free; la aplicación con IA se desbloquea en planes de pago.",
"categories.brandTips.editBrandKit": "Editar kit de marca",
2026-08-17 00:39:25 +02:00
"categories.brandTips.emptyBefore": "Añade voz o términos preferidos en ",
"categories.brandTips.emptyAfter": " para ver consejos aquí.",
"categories.brandTips.brandKit": "Kit de marca",
2026-08-17 00:39:25 +02:00
"categories.brandTips.descGuidanceBefore": "Orientación de tu ",
"categories.brandTips.descGuidanceAfter": " para las secciones de descripción.",
"categories.formulaElementsTitle": "Elementos de la fórmula",
"categories.formulaElementsHelp": "Arrastra y suelta elementos para reordenarlos",
2026-08-17 00:39:25 +02:00
"categories.noElementsAdded": "No hay elementos añadidos",
"categories.addElementsHint": "Añade variables o texto desde el panel de la derecha",
"categories.editTextElementAria": "Editar elemento de texto {value}",
"categories.removeElementAria": "Eliminar elemento {type} {value}",
"categories.tab.single": "Individual",
"categories.tab.bulk": "Carga masiva",
2026-08-17 00:39:25 +02:00
"categories.uniqueIdLabel": "ID único",
"categories.parentLabel": "Padre",
2026-08-17 00:39:25 +02:00
"categories.noneRoot": "Ninguno (raíz)",
"categories.descriptionLabel": "Descripción",
"categories.csvUploadHelp": "Sube un CSV con las columnas name, unique_id, y opcionalmente parent_unique_id y description.",
"categories.downloadTemplate": "Descargar plantilla",
"categories.variableNameKey": "Nombre (clave)",
"categories.displayName": "Nombre visible",
"categories.exampleValue": "Valor de ejemplo",
"categories.variableExists": "Ya existe una variable con el nombre \"{name}\".",
2026-08-17 00:39:25 +02:00
"categories.addVariable": "Añadir variable",
"categories.updateVariable": "Actualizar variable",
"categories.col.displayName": "Nombre visible",
"categories.col.key": "Clave",
2026-08-17 00:39:25 +02:00
"categories.col.description": "Descripción",
"categories.col.example": "Ejemplo",
"categories.noVariablesFound": "No se encontraron variables",
"categories.availableVariables": "Variables disponibles",
"categories.manage": "Gestionar",
2026-08-17 00:39:25 +02:00
"categories.noVariablesMatch": "Ninguna variable coincide con “{query}”.",
"categories.noUnusedVariables": "No quedan variables sin usar. Añade una variable personalizada o elimina un elemento para liberar una.",
"categories.exampleColon": "Ejemplo: {value}",
"categories.editVariableAria": "Editar {label}",
"categories.deleteVariableAria": "Eliminar {label}",
2026-08-17 00:39:25 +02:00
"categories.addVariableAria": "Añadir {label}",
"categories.textLabel": "Texto",
2026-08-17 00:39:25 +02:00
"categories.textAppearsAsWritten": "Este texto aparecerá exactamente como se escribe en tus títulos",
"categories.addTextButton": "Añadir texto",
"categories.updateTextButton": "Actualizar texto",
"categories.structureDescriptionsFor": "Estructura las descripciones de producto para {name}",
2026-08-17 00:39:25 +02:00
"categories.metaInformation": "Información meta",
"categories.metaInformationHelp": "Instrucciones que usa la IA para las etiquetas de título SEO y meta descripción.",
"categories.metaTitleFormula": "Fórmula de meta título",
"categories.metaTitleHint": "Se muestra en resultados de búsqueda y pestañas del navegador (unos 50–60 caracteres).",
"categories.metaDescriptionFormula": "Fórmula de meta descripción",
"categories.metaDescriptionHint": "Se muestra bajo el título en los resultados de búsqueda (unos 120–155 caracteres).",
"categories.resetToDefault": "Restablecer predeterminado",
2026-08-17 00:39:25 +02:00
"categories.descriptionSections": "Secciones de descripción",
"categories.descriptionSectionsHelp": "Arrastra las secciones para definir el orden de la descripción generada.",
"categories.noSectionsYet": "Aún no hay secciones",
"categories.addSectionsHint": "Añade un encabezado, párrafo o lista para empezar.",
"categories.aiInstructions": "Instrucciones de IA",
2026-08-17 00:39:25 +02:00
"categories.exportIdOptional": "ID de exportación (opcional)",
"categories.exportIdUnique": "El ID de exportación debe ser único",
"categories.addSection": "Añadir sección",
"categories.aboutDescriptionFormulas": "Acerca de las fórmulas de descripción",
"categories.aboutDescriptionFormulasHelp": "Estas instrucciones indican a la IA cómo escribir descripciones para productos de esta categoría.",
"categories.sectionTypesHeading": "Tipos de sección",
"categories.sectionTypeHeadings": "Encabezados (H1–H4):",
"categories.sectionTypeHeadingsHelp": "Títulos y subtítulos",
"categories.sectionTypeParagraphs": "Párrafos:",
"categories.sectionTypeParagraphsHelp": "Bloques de contenido principal",
2026-08-17 00:39:25 +02:00
"categories.sectionTypeLists": "Listas con viñetas:",
"categories.sectionTypeListsHelp": "Características y especificaciones",
"categories.aiInstructionsHeading": "Instrucciones de IA",
2026-08-17 00:39:25 +02:00
"categories.aiInstructionsBody": "Escribe un objetivo claro por sección (qué cubrir, tono, longitud). Las consignas vagas producen textos vagos.",
"categories.exportIdsHeading": "IDs de exportación",
"categories.exportIdsBody": "Los IDs opcionales asignan una sección a feeds de exportación (por ejemplo short_description).",
"categories.assignDescCopyHelp": "Usa Asignar para copiar esta plantilla a otras categorías que deban compartir la misma estructura.",
"categories.descriptionFormulaInvalid": "Esta página de fórmula de descripción necesita una categoría válida. Vuelve a categorías y abre de nuevo Editar fórmula de descripción.",
"categories.sectionType.h1": "Encabezado 1",
"categories.sectionType.h2": "Encabezado 2",
"categories.sectionType.h3": "Encabezado 3",
"categories.sectionType.h4": "Encabezado 4",
2026-08-17 00:39:25 +02:00
"categories.sectionType.p": "Párrafo",
"categories.sectionType.ul": "Lista con viñetas",
"categories.aiGenerationPrompt": "Prompt de generación con IA",
"categories.aiPromptOverrides": "Sustituye el prompt de usuario de mejora de producto de la empresa para {name}",
"categories.promptTemplate": "Plantilla de prompt",
2026-08-17 00:39:25 +02:00
"categories.promptTemplateHelp": "Usa marcadores como {{name}} y {{description}}. Déjalo vacío para usar el valor predeterminado de la empresa en Integraciones → IA.",
"categories.clear": "Limpiar",
"categories.promptLabel": "Prompt",
"categories.charactersCount": "{count} caracteres",
2026-08-17 00:39:25 +02:00
"categories.activeOverride": "· anulación activa para esta categoría",
"categories.usingCompanyDefault": "· usando el valor predeterminado de la empresa / integrado",
"categories.usingCompanyDefaultForLang": "· vacío para este idioma — se aplica el predeterminado de la empresa / integrado",
"categories.aiPromptSavedLang": "Prompt IA guardado para {lang}.",
2026-08-17 00:39:25 +02:00
"categories.aiPromptClearedLang": "Prompt IA borrado para {lang} (se aplicará el predeterminado de la empresa).",
"contentLang.switcherLabel": "Idioma de contenido",
"contentLang.primary": "principal",
"contentLang.hasOverride": "personalizado",
2026-08-17 00:39:25 +02:00
"contentLang.addLanguage": "Añadir idioma…",
"contentLang.add": "Añadir",
"contentLang.removeLanguage": "Quitar {lang}",
2026-08-17 00:39:25 +02:00
"contentLang.resultsHint": "Cambia de idioma para revisar títulos y descripciones de IA de cada idioma de contenido.",
"contentLang.settingsTitle": "Idiomas de contenido",
2026-08-17 00:39:25 +02:00
"contentLang.settingsHelp": "El idioma principal se usa por defecto. Los idiomas adicionales tienen sus propios prompts y resultados de IA (cada pasada consume créditos).",
"ai.prompts.languageHelp": "Edita los prompts de la empresa por idioma de contenido. Un idioma vacío usa el valor predeterminado integrado para ese idioma.",
"header.accountSettingsAria": "Configuración de la cuenta de {email}",
"switcher.switchUserAria": "Cambiar de usuario: {label}",
2026-08-17 00:39:25 +02:00
"switcher.unavailable": "El cambio de usuario no está disponible en este entorno.",
"switcher.loadFailed": "No se pudieron cargar los usuarios.",
"support.notifications.aria": "Notificaciones de soporte",
"support.notifications.ariaUnread": "Notificaciones de soporte, {count} sin leer",
"time.never": "Nunca",
2026-08-17 00:39:25 +02:00
"time.invalid": "Fecha no válida",
"time.unknown": "Fecha desconocida",
"time.justNow": "ahora mismo",
"time.neverUsed": "Nunca usado",
"billing.plan.enterprise": "Empresarial",
"news.heading": "Actualizaciones de la plataforma",
2026-08-17 00:39:25 +02:00
"news.subtitle": "Últimas funciones y mejoras",
"news.keyFeatures": "Funciones clave:",
"news.badge.new": "Nuevo",
2026-08-17 00:39:25 +02:00
"news.footer": "Eso es todo por ahora — vuelve tras la próxima versión.",
"news.category.enhancement": "Mejora",
2026-08-17 00:39:25 +02:00
"news.category.feature": "Función",
"news.category.integration": "Integración",
"news.category.newFeature": "Nueva función",
"news.category.billing": "Facturación",
"news.uxImprovements.description": "Usabilidad mejorada con controles del tour, mejoras de API y mejor navegación.",
"news.uxImprovements.f1": "Omitir/ocultar el tour guiado",
"news.uxImprovements.f2": "Mejoras de fiabilidad de la API",
2026-08-17 00:39:25 +02:00
"news.uxImprovements.f3": "Navegación de interfaz mejorada",
"news.uxImprovements.f4": "Mayor eficiencia del flujo de trabajo",
2026-08-17 00:39:25 +02:00
"news.multiselect.title": "Soporte de atributos multiselección",
"news.multiselect.description": "Los productos pueden tener varios valores en atributos de tipo lista.",
2026-08-17 00:39:25 +02:00
"news.multiselect.f1": "Tipo de atributo multiselección",
"news.multiselect.f2": "Selección múltiple al editar productos",
"news.multiselect.f3": "Varios valores en un solo atributo",
2026-08-17 00:39:25 +02:00
"news.multiselect.f4": "Extracción mejorada para campos multiselección",
"news.multiselect.f5": "Mejor compatibilidad con feeds de exportación",
"news.csvEan.title": "Carga CSV de EAN",
2026-08-17 00:39:25 +02:00
"news.csvEan.description": "Sube CSV con códigos EAN para procesar cientos de productos a la vez.",
"news.csvEan.f1": "Carga CSV con arrastrar y soltar",
2026-08-17 00:39:25 +02:00
"news.csvEan.f2": "Validación de formato EAN (EAN-8, EAN-13, UPC-12, GTIN-14)",
"news.csvEan.f3": "Detección automática de duplicados",
"news.csvEan.f4": "Procesamiento masivo de productos",
2026-08-17 00:39:25 +02:00
"news.csvEan.f5": "Estadísticas detalladas de procesamiento",
"news.brick.title": "Soporte de atributos con código BRICK",
"news.brick.description": "Sistema de atributos con códigos BRICK para clasificación y exportación estandarizadas.",
"news.brick.f1": "Gestión de atributos con código BRICK",
"news.brick.f2": "Formato automático de códigos en exportaciones",
"news.brick.f3": "Integración de códigos BRICK en feeds XML",
"news.brick.f4": "Mejoras de compatibilidad de feeds de exportación",
"news.apiV1.title": "Lanzamiento de API v1",
2026-08-17 00:39:25 +02:00
"news.apiV1.description": "Nuevos endpoints API v1 para categorías, atributos, feeds, productos y exportaciones.",
"news.apiV1.f1": "Endpoints RESTful de la API v1",
2026-08-17 00:39:25 +02:00
"news.apiV1.f2": "Gestión de categorías y atributos",
"news.apiV1.f3": "Creación y gestión de feeds",
"news.apiV1.f4": "Procesamiento de productos vía API",
"news.apiV1.f5": "Acceso programático a feeds de exportación",
"news.apiV1.f6": "Autenticación y autorización",
"news.feedFiltering.title": "Filtrado de feeds en productos",
2026-08-17 00:39:25 +02:00
"news.feedFiltering.description": "Página de productos con filtrado de feeds optimizado, estados de carga y mejor rendimiento.",
"news.feedFiltering.f1": "Filtrado de feeds mejorado",
"news.feedFiltering.f2": "Estados de carga mejorados",
"news.feedFiltering.f3": "Rendimiento de consultas optimizado",
2026-08-17 00:39:25 +02:00
"news.feedFiltering.f4": "Mejor manejo de la paginación",
"news.feedFiltering.f5": "Mejoras de la funcionalidad de exportación",
"news.exportFeeds.title": "Sistema de feeds de exportación",
"news.exportFeeds.description": "Sistema completo de feeds de exportación XML/CSV con configuraciones personalizadas.",
"news.exportFeeds.f1": "Formatos de exportación XML y CSV",
"news.exportFeeds.f2": "Mapeo personalizado de campos",
2026-08-17 00:39:25 +02:00
"news.exportFeeds.f3": "Vista previa de exportación",
"news.exportFeeds.f4": "Exportación de productos basada en trabajos",
"news.exportFeeds.f5": "Integración de datos EPREL",
"news.exportFeeds.f6": "URL públicas de feeds de exportación",
"news.woocommerce.title": "Integración WooCommerce",
"news.woocommerce.description": "Sincroniza productos, categorías y atributos con tiendas WooCommerce.",
"news.woocommerce.f1": "Configuración de credenciales de tienda",
"news.woocommerce.f2": "Mapeo de categorías y atributos",
"news.woocommerce.f3": "Sincronización bidireccional de productos",
"news.woocommerce.f4": "Opciones de estrategia de coincidencia",
2026-08-17 00:39:25 +02:00
"news.eprel.title": "Integración de etiquetas energéticas EPREL",
"news.eprel.description": "Integración con el registro europeo de etiquetado energético para obtener datos de eficiencia.",
"news.eprel.f1": "Procesamiento automático de ID EPREL",
"news.eprel.f2": "Recuperación de imágenes de etiqueta energética",
"news.eprel.f3": "Descargas de fichas energéticas del producto",
"news.eprel.f4": "Extracción de clase energética",
"news.eprel.f5": "Soporte multilingüe",
"news.aiCategorization.title": "Categorización de productos mejorada",
"news.aiCategorization.description": "Sistema de categorización IA con mejor precisión y soporte jerárquico.",
"news.aiCategorization.f1": "Navegación jerárquica de categorías",
"news.aiCategorization.f2": "Puntuación de confianza",
"news.aiCategorization.f3": "Soporte multilingüe",
"news.aiCategorization.f4": "Gestión automática de alternativas",
"news.standardFields.title": "Gestión de campos estándar",
"news.standardFields.description": "Gestiona campos de producto estándar con grupos, validación y valores por defecto.",
"news.standardFields.f1": "Organización por grupos de campos",
"news.standardFields.f2": "Campos de sistema y personalizados",
2026-08-17 00:39:25 +02:00
"news.standardFields.f3": "Reglas de validación de campos",
"news.standardFields.f4": "Soporte de valores por defecto",
2026-08-17 00:39:25 +02:00
"news.standardFields.f5": "Configuración automática de campos",
"news.billingSystem.title": "Facturación basada en créditos",
"news.billingSystem.description": "Nuevo sistema de facturación por créditos con seguimiento de uso y opciones de pago flexibles.",
"news.billingSystem.f1": "Procesamiento basado en créditos",
"news.billingSystem.f2": "Analítica de uso",
"news.billingSystem.f3": "Ciclos de facturación flexibles",
"news.billingSystem.f4": "Gestión de métodos de pago",
"news.billingSystem.f5": "Generación de facturas",
"products.pageTitle": "Gestión de productos",
"products.pageDescriptionStoresBefore": "Gestiona, procesa y optimiza tu catálogo. Conecta una tienda o importa CSV vía",
"products.pageDescriptionBasic": "Gestiona, procesa y optimiza tu catálogo. Importa vía Feeds o sube un CSV.",
"products.keyboard.esc": "— cierra el panel de edición o los diálogos",
"products.keyboard.toggle": "— mostrar/ocultar este consejo",
"products.keyboard.reviewPrefix": "En el panel Needs Review:",
"products.keyboard.acceptAll": "aceptar todo",
"products.keyboard.rejectShort": "rechazar",
2026-08-17 00:39:25 +02:00
"products.keyboard.acceptFields": "aceptar nombre / descripción",
"products.connectStore": "Conectar tienda",
2026-08-17 00:39:25 +02:00
"products.updating": "Actualizando…",
"products.needLinkedRaw": "Los productos seleccionados necesitan un producto en bruto vinculado para procesar.",
"products.selectToProcess": "Selecciona al menos un producto para procesar.",
"products.undoResetHint": "Deshacer devuelve el producto a sin procesar mediante restablecimiento.",
"products.field.accepted": "{label} aceptado en el producto.",
"products.field.acceptFailed": "No se pudo aceptar {field}",
"products.field.discarded": "Enriquecimiento de {label} descartado.",
"products.field.discardFailed": "No se pudo descartar {field}",
"products.upgradeRequired": "Se requiere mejorar el plan",
2026-08-17 00:39:25 +02:00
"products.upgradeBody": "Esta función necesita un plan de pago o créditos de IA.",
"products.enrichment.rejectTitle": "¿Rechazar enriquecimiento?",
"products.enrichment.rejectSelectedTitle": "¿Rechazar productos seleccionados?",
"products.enrichment.resetTitle": "¿Restablecer a sin procesar?",
"products.selectedOnPage": "{count} seleccionados en esta página",
"products.selectionPageOnly": "Mostrando {shown} de {total} — la selección es solo esta página",
"products.edit.coverageHint": "Cuántos de Nombre, Descripción, Atributos y Categoría están presentes (feed o procesados).",
"products.edit.noEprelShort": "Sin EPREL",
"products.edit.specs": "Especs",
2026-08-17 00:39:25 +02:00
"products.edit.reviewBannerBody": "Usa la pestaña Revisar para comparar originales vs IA. Atajos: A aceptar · R rechazar · Alt+1/2 campo · ⌘/Ctrl+Enter aceptar todo.",
"products.edit.whatsFilled": "Qué está completado",
"products.edit.legend": "Gris = ausente · Naranja = desde el feed · Verde = procesado",
"products.edit.updatedAgo": "· actualizado {relative}",
"products.edit.status": "Estado",
"products.edit.noRawUpdate": "No raw producto update time",
2026-08-17 00:39:25 +02:00
"products.edit.feedSyncPart": "· sync de feed",
"products.edit.filledFields": "{filled} rellenados · {total} campos",
"products.edit.noMappedFields": "No mapped feed fields on this producto.",
2026-08-17 00:39:25 +02:00
"products.edit.emptyBadge": "Vacío",
"products.edit.coreBadge": "Núcleo",
"products.edit.feedAttrsHint": "Valores analizados del feed (especificaciones HTML, garantía, dimensiones, EPREL). Las claves se vinculan a attribute_key cuando es posible.",
"products.edit.originalAttrs": "Atributos originales",
"products.edit.aiAttrs": "Atributos IA / enriquecidos",
"mapping.confidence.exact": "Exacto",
"mapping.confidence.alias": "Alias",
"mapping.confidence.fuzzy": "Aproximado",
2026-08-17 00:39:25 +02:00
"field.group.basic": "Información básica",
"field.group.pricing": "Precios",
"field.group.media": "Medios",
2026-08-17 00:39:25 +02:00
"field.group.taxonomy": "Taxonomía",
"field.group.inventory": "Inventario",
"field.group.attributes": "Atributos",
2026-08-17 00:39:25 +02:00
"field.group.shipping": "Envío",
"field.group.compliance": "Cumplimiento",
"field.group.other": "Otro",
2026-08-17 00:39:25 +02:00
"common.yes": "Sí",
"common.no": "No",
2026-08-17 00:39:25 +02:00
"status.running": "En ejecución",
"flash.admin.analyticsLoadFailed": "No se pudieron cargar las analíticas",
"flash.admin.diagnosticsLoadFailed": "No se pudieron cargar los diagnósticos",
"flash.admin.diagnosticsUnavailable": "Los diagnósticos no están disponibles en este despliegue. Contacta al administrador de la plataforma.",
"flash.admin.diagnosticsUnreachable": "No se pudo alcanzar la API de diagnósticos. Comprueba que la API esté en marcha y que PUBLIC_API_URL / el proxy de Vite apunten a ella.",
"admin.charts.statusEmpty": "Aún no hay filas en este desglose.",
"admin.charts.seriesEmpty": "Aún no hay datos en este periodo.",
"admin.charts.primaryDefault": "Principal",
2026-08-17 00:39:25 +02:00
"admin.charts.statusAria": "Distribución por estado",
"admin.charts.seriesAria": "Gráfico de {label}",
"admin.analytics.lastNDaysAria": "Últimos {days} días",
"admin.analytics.overview": "Resumen",
2026-08-17 00:39:25 +02:00
"admin.analytics.overviewHint": "Totales de la plataforma con contexto del periodo de los últimos {days} días.",
"admin.analytics.tokensInPeriod": "{tokens} en el periodo · de productos procesados",
"admin.analytics.creditsRemainingOf": "{remaining} restantes de {allocated} asignados",
2026-08-17 00:39:25 +02:00
"admin.analytics.noJobsYet": "Aún no hay trabajos",
"admin.analytics.feedsVolume": "{input} de entrada · {export} feeds de exportación",
"admin.analytics.usersCompaniesRaw": "{users} usuarios · {companies} empresas · {raw} en bruto",
"admin.analytics.operations": "Operaciones",
2026-08-17 00:39:25 +02:00
"admin.analytics.operationsHint": "Señales de fiabilidad, claves y crecimiento del periodo seleccionado.",
"admin.analytics.failedCompleted": "{failed} fallidos · {completed} completados",
"admin.analytics.runningOver2h": "En ejecución > 2 h ·",
"admin.analytics.apiKeysTotal": "{total} en total (incluidas las revocadas)",
2026-08-17 00:39:25 +02:00
"admin.analytics.signupsDetail": "usuarios · {companies} empresas · {tickets} tickets abiertos/pendientes",
"admin.analytics.providerMix": "Mix de proveedores",
2026-08-17 00:39:25 +02:00
"admin.analytics.providerMixHint": "Gasto de tokens según cómo se configuran las credenciales de IA.",
"admin.analytics.productsJobs": "{products} productos · {jobs} trabajos",
"admin.analytics.trends": "Tendencias",
"admin.analytics.trendsHint": "Series diarias de tokens, proveedores, trabajos y registros.",
2026-08-17 00:39:25 +02:00
"admin.analytics.tokensByDayHint": "Tokens del procesamiento de productos completado (secundaria = productos ese día)",
"admin.analytics.seriesTokens": "Fichas",
"admin.analytics.seriesProducts": "Productos",
"admin.analytics.emptyTokens": "No hay productos procesados con tokens en este periodo.",
2026-08-17 00:39:25 +02:00
"admin.analytics.tokensByProviderHint": "División diaria: interno / popular / personalizado (por tipo de proveedor)",
"admin.analytics.emptyProviderTokens": "Aún no hay tokens etiquetados por proveedor en este periodo.",
"admin.analytics.providerDayTip": "{date}: Interno {internal} · Popular {popular} · Personalizado {custom}",
"admin.analytics.seriesCreated": "Creado",
"admin.analytics.seriesFailed": "Fallido",
"admin.analytics.emptyJobsSeries": "No se crearon trabajos de procesamiento en este periodo.",
"admin.analytics.seriesUsers": "Usuarios",
"admin.analytics.seriesCompanies": "Empresas",
"admin.analytics.emptySignups": "No hay registros de usuarios ni empresas en este periodo.",
"admin.analytics.statusMix": "Mezcla de estados",
2026-08-17 00:39:25 +02:00
"admin.analytics.statusMixHint": "Colas históricas de trabajos, sincronización de feeds y soporte.",
"admin.analytics.jobStatus": "Estado de trabajos",
"admin.analytics.feedSyncQueue": "Cola de sync de feeds",
"admin.analytics.supportTickets": "Tickets de soporte",
2026-08-17 00:39:25 +02:00
"admin.analytics.emptyJobStatus": "Aún no hay trabajos de procesamiento.",
"admin.analytics.emptyFeedSync": "Aún no hay trabajos de sync de feeds.",
"admin.analytics.emptyTickets": "Aún no hay tickets de soporte.",
"admin.analytics.usageDetail": "Detalle de uso",
2026-08-17 00:39:25 +02:00
"admin.analytics.usageDetailHint": "Modos de proveedor, principales empresas y resúmenes de ciclo de facturación.",
"admin.analytics.companyUsage": "Uso por empresa",
"admin.analytics.jobsCol": "Trabajos",
2026-08-17 00:39:25 +02:00
"admin.analytics.billingCycles": "Facturación cycles",
"admin.analytics.billingCyclesHint": "Resúmenes históricos de ciclos de facturación pasados (pueden retrasarse respecto a la suscripción activa)",
"admin.analytics.periodCol": "Período",
"admin.analytics.creditsCol": "Créditos",
"admin.analytics.dataNotes": "Notas de datos",
"admin.diagnostics.endpointNotMounted": "Endpoint no montado",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.noPayload": "Sin datos de diagnóstico",
"admin.diagnostics.unavailableShort": "Los diagnósticos no están disponibles en este despliegue.",
"admin.diagnostics.fixThenRefresh": "Corrige el error de arriba y luego actualiza.",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.refreshOrConfirm": "Actualiza o confirma que la API está en buen estado.",
"admin.diagnostics.systemStatus": "Estado del sistema",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.snapshot": "Instantánea {when}",
"admin.diagnostics.queueTotal": "{total} en total",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.queueStuck": "processing_jobs · atascados en ejecución (>2 h):",
"admin.diagnostics.driver": "Controlador: {driver}",
"admin.diagnostics.openStuck": "Abrir productos atascados",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.configPresence": "Presencia de configuración",
"admin.diagnostics.configHint": "Solo booleanos · env {env} · RPM {rpm} · lote {batch} · reintentos {retries}",
"admin.diagnostics.cutoverTitle": "Preparación de cutover",
"admin.diagnostics.cutoverHint": "Solo banderas de presencia — pistas de versión goose, antigüedad del worker, planes faltantes. Sin Stripe/SMTP en vivo.",
"admin.diagnostics.cutoverGoose": "Goose",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.cutoverGooseVersion": "version_max {max} · esperado ≥ {min}",
"admin.diagnostics.cutoverGooseRequired": "Migraciones requeridas",
"admin.diagnostics.cutoverWorker": "Worker",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.cutoverWorkerAge": "visto hace {age}s · obsoleto tras {stale}s",
"admin.diagnostics.cutoverWorkerAgeUnknown": "antigüedad no disponible · obsoleto tras {stale}s",
"admin.diagnostics.cutoverPlansMissing": "Empresas sin plan",
"admin.diagnostics.cutoverPlansUnavailable": "Conteo de planes no disponible",
"admin.diagnostics.cutoverApiKeysMissing": "Companies without API keys",
"admin.diagnostics.cutoverApiKeysUnavailable": "API key inventory unavailable",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.cutoverApiKeysHint": "Legacy keys were not migrated — tenants must create a new dk_ key (no fake import).",
"admin.diagnostics.cutoverApiKeysLink": "List companies needing reissue",
"admin.diagnostics.cutoverApplied": "aplicada",
"admin.diagnostics.cutoverPending": "pendiente",
"admin.diagnostics.etlInventoryTitle": "ETL gap inventory",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.etlInventoryHint": "Read-only COUNTs — no fake import. Blob bytes and default job history stay unmigrated unless ops ran optional domain jobs.",
"admin.diagnostics.etlInventoryFiles": "Files metadata-only",
"admin.diagnostics.etlInventoryFilesDetail": "metadata-only / total file rows",
"admin.diagnostics.etlInventoryJobs": "Jobs migrated tag",
"admin.diagnostics.etlInventoryJobsDefault": "jobs domain not run (empty history expected)",
"admin.diagnostics.etlInventoryJobsRan": "optional jobs domain backfill detected",
"admin.diagnostics.etlInventoryTasks": "Tasks rows",
"admin.diagnostics.etlInventoryTasksDetail": "legacy task history present in Postgres",
"admin.diagnostics.recentJobs": "Trabajos recientes",
"admin.diagnostics.recentAiFailures": "Fallos recientes de IA de soporte",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.aiFailuresHint": "support_ticket_activity · kind=ai_failed",
"admin.diagnostics.relatedTools": "Herramientas ops relacionadas",
"admin.diagnostics.toolStuckTitle": "Productos atascados",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.toolStuckDesc": "Limpiar trabajos en ejecución más de 2 horas.",
"admin.diagnostics.toolOrphanTitle": "Orphan processed",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.toolOrphanDesc": "Cutover ops #7 — dry-run report, then confirm delete.",
"admin.diagnostics.toolAnalyticsTitle": "Analíticas",
"admin.diagnostics.toolAnalyticsDesc": "Tendencias y gráficos de uso de la plataforma.",
"admin.diagnostics.toolBootstrapTitle": "Bootstrap",
"admin.diagnostics.toolBootstrapDesc": "Confirmar acceso de administrador de plataforma para esta cuenta.",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.toolSettingsTitle": "Configuración",
"admin.diagnostics.toolSettingsDesc": "Correo, IA y modo del sistema de la plataforma.",
"admin.diagnostics.config.maintenance_mode": "Modo mantenimiento",
"admin.diagnostics.config.read_only_mode": "Modo solo lectura",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.config.session_secure": "Cookie de sesión segura",
"admin.diagnostics.config.smtp_enabled": "SMTP activado",
"admin.diagnostics.config.email_dry_run": "Email dry-run",
"admin.diagnostics.config.smtp_host_set": "Host SMTP configurado",
"admin.diagnostics.config.stripe_mock": "Stripe mock",
"admin.diagnostics.config.eprel_enabled": "EPREL activado",
"admin.diagnostics.config.upload_dir_configured": "Directorio de subida configurado",
"admin.diagnostics.config.trusted_proxies_configured": "Proxies de confianza definidos",
"admin.diagnostics.config.web_origin_set": "Origen web definido",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.config.public_api_url_set": "URL pública de API definida",
"admin.diagnostics.config.token_signing_secret_set": "Secreto de firma de tokens definido",
"admin.diagnostics.config.openai_key_set": "Clave OpenAI definida",
"admin.diagnostics.config.pinecone_key_set": "Clave Pinecone definida",
"admin.diagnostics.config.stripe_secret_set": "Secreto Stripe definido",
"admin.diagnostics.config.stripe_webhook_secret_set": "Secreto de webhook Stripe definido",
2026-08-17 00:39:25 +02:00
"admin.diagnostics.config.stripe_mock_rejected_in_prod": "Mock de Stripe rechazado en producción",
"admin.diagnostics.config.credentials_encryption_key_set": "Clave de cifrado de credenciales definida",
"categories.selectAll": "Seleccionar todo",
"categories.selectedCount": "{count} seleccionados",
2026-08-17 00:39:25 +02:00
"categories.noMatchingCategories": "No hay categorías coincidentes",
"categories.assigningProgress": "Asignando… {progress}%",
"categories.assignToCount": "Asignar a {count}",
2026-08-17 00:39:25 +02:00
"categories.aiPromptSavedForCategory": "Hay un prompt de generación con IA guardado para esta categoría.",
"categories.titleAndDescriptionFormulasSaved": "Las fórmulas de título y descripción están guardadas para esta categoría.",
"categories.titleFormulaSavedForCategory": "Hay una fórmula de título guardada para esta categoría.",
"categories.descriptionFormulaSavedForCategory": "Hay una fórmula de descripción guardada para esta categoría.",
"site.account": "Cuenta",
"site.goToApp": "Ir a la app",
2026-08-17 00:39:25 +02:00
"site.logIn": "Iniciar sesión",
"site.getStarted": "Empezar",
"site.nav.primary": "Principal",
2026-08-17 00:39:25 +02:00
"site.nav.mobile": "Móvil",
"site.nav.home": "Inicio",
"site.nav.pricing": "Precios",
"site.nav.apiDocs": "Docs de la API",
2026-08-17 00:39:25 +02:00
"seo.home.title": "Descrybe — Convierte feeds de proveedores en fichas de producto listas",
"seo.home.description": "Conecta feeds CSV o XML de proveedores, asígnalos a tus categorías y atributos, genera títulos y descripciones según tus reglas y exporta o sincroniza con WooCommerce.",
"seo.pricing.title": "Precios — Free, Starter, Growth, Business | Descrybe",
"seo.pricing.description": "Empieza gratis con 100 productos y mapeo de feeds. Los planes de pago añaden títulos y descripciones con IA, más SKU, feeds de exportación y sync WooCommerce — desde 49 $/mes. Enterprise para catálogos ilimitados.",
"seo.privacy.title": "Política de privacidad | Descrybe",
"seo.privacy.description": "Cómo Descrybe recopila, usa y protege los datos de cuenta, catálogos de productos y feeds de proveedores cuando utilizas nuestra plataforma de datos de producto.",
"seo.terms.title": "Términos del servicio | Descrybe",
"seo.terms.description": "Términos de uso de Descrybe: importación de feeds, enriquecimiento de catálogo, contenido asistido por IA, exportaciones y sincronización con WooCommerce para tu negocio.",
"seo.features.title": "Funciones — Feeds, enriquecimiento y exportación | Descrybe",
"seo.features.description": "Descubre cómo Descrybe importa feeds de proveedores, mapea campos a tu taxonomía, enriquece datos de producto y envía catálogos mediante feeds de exportación, WooCommerce o API.",
"pricing.page.eyebrow": "Precios",
2026-08-17 00:39:25 +02:00
"pricing.page.title": "Planes sencillos para catálogos en crecimiento",
"pricing.page.lead": "Empieza gratis con mapeo de feeds y limpieza básica. Mejora cuando necesites títulos y descripciones con IA, más productos, feeds de exportación o sincronización con WooCommerce — de Starter a Enterprise.",
"pricing.page.subscribedBefore": "¿Ya estás suscrito? Gestiona el uso en",
"pricing.page.subscribedMid": "o compara planes en",
"pricing.page.plansLink": "Planes",
"pricing.page.subscribedAfter": ".",
2026-08-17 00:39:25 +02:00
"legal.lastUpdated": "Última actualización: {date}",
"legal.backHome": "← Volver al inicio",
"legal.emailLabel": "Correo electrónico:",
"legal.postalLabel": "Dirección postal:",
"legal.privacy.title": "Política de privacidad",
"legal.privacy.intro.h": "Introducción",
"legal.privacy.intro.p1": "En Descrybe (\"nosotros\", \"nuestro\" o \"nos\"), respetamos su privacidad y nos comprometemos a proteger su información personal. Esta Política de privacidad explica cómo recopilamos, usamos, divulgamos y protegemos su información cuando utiliza la plataforma de datos de producto de Descrybe y los servicios relacionados (en conjunto, los \"Servicios\").",
"legal.privacy.intro.p2": "Al acceder o utilizar nuestros Servicios, usted acepta las prácticas descritas en esta Política de privacidad. Si no está de acuerdo con las políticas y prácticas aquí descritas, no utilice nuestros Servicios.",
"legal.privacy.collect.h": "Información que recopilamos",
"legal.privacy.collect.lead": "Recopilamos varios tipos de información de y sobre los usuarios de nuestros Servicios, entre ellos:",
"legal.privacy.collect.personal.h": "Información personal",
"legal.privacy.collect.personal.p": "Cuando se registra para obtener una cuenta, recopilamos información que podría usarse para identificarle, como su nombre, dirección de correo electrónico, número de teléfono, nombre de la empresa e información de facturación. Recopilamos esta información directamente de usted cuando nos la facilita.",
"legal.privacy.collect.userData.h": "Datos de usuario",
2026-08-17 00:39:25 +02:00
"legal.privacy.collect.userData.p": "Para prestar nuestros Servicios, recopilamos y tratamos datos de producto, feeds de proveedores, descripciones de producto y otro contenido que usted carga, introduce o envía de otro modo a nuestra plataforma. Esto puede incluir atributos de producto, estructuras de taxonomía, plantillas y otros datos necesarios para el funcionamiento de nuestros Servicios.",
"legal.privacy.collect.usage.h": "Información de uso",
"legal.privacy.collect.usage.p": "Recopilamos automáticamente cierta información sobre su dispositivo y cómo interactúa con nuestros Servicios, incluida la dirección IP, el tipo de dispositivo, el tipo de navegador, el sistema operativo, las horas de acceso, las páginas vistas, las funciones utilizadas y otra actividad del sistema. Usamos esta información para mejorar nuestros Servicios y la experiencia de usuario.",
"legal.privacy.collect.cookies.h": "Cookies y tecnologías de seguimiento",
"legal.privacy.collect.cookies.p": "Utilizamos cookies, balizas web y tecnologías de seguimiento similares para recopilar información sobre sus actividades de navegación en nuestro sitio web. Puede controlar las cookies mediante la configuración de su navegador y otras herramientas. No obstante, si bloquea determinadas cookies, es posible que no pueda utilizar todas las funciones de nuestros Servicios.",
"legal.privacy.use.h": "Cómo usamos su información",
"legal.privacy.use.lead": "Usamos la información que recopilamos para diversos fines, entre ellos:",
"legal.privacy.use.li1": "Prestar, mantener y mejorar nuestros Servicios",
2026-08-17 00:39:25 +02:00
"legal.privacy.use.li2": "Procesar transacciones y enviar información relacionada, incluidas confirmaciones, facturas y notificaciones del servicio",
"legal.privacy.use.li3": "Desarrollar nuevos productos, servicios, funciones y funcionalidades",
"legal.privacy.use.li4": "Personalizar su experiencia y ofrecer contenido y funciones relevantes para sus intereses",
"legal.privacy.use.li5": "Responder a sus solicitudes, comentarios y preguntas",
2026-08-17 00:39:25 +02:00
"legal.privacy.use.li6": "Enviarle avisos técnicos, actualizaciones, alertas de seguridad y mensajes de soporte y administración",
"legal.privacy.use.li7": "Supervisar y analizar tendencias, uso y actividades en relación con nuestros Servicios",
"legal.privacy.use.li8": "Detectar, investigar y prevenir transacciones fraudulentas y otras actividades ilegales",
2026-08-17 00:39:25 +02:00
"legal.privacy.use.li9": "Proteger nuestros derechos, propiedad y seguridad, así como los derechos, la propiedad y la seguridad de nuestros usuarios u otras personas",
"legal.privacy.use.li10": "Cumplir obligaciones legales y hacer cumplir nuestros términos del servicio",
"legal.privacy.ai.h": "IA y aprendizaje automático",
"legal.privacy.ai.p1": "Nuestros Servicios utilizan tecnologías de inteligencia artificial y aprendizaje automático para procesar datos de producto, generar contenido y ofrecer otras funciones automatizadas. Los datos que usted proporciona a nuestros Servicios pueden usarse para entrenar y mejorar nuestros modelos de IA. No obstante, aplicamos salvaguardas adecuadas para proteger sus datos y mantener su confidencialidad.",
"legal.privacy.ai.p2": "No usamos información de identificación personal para entrenar nuestros modelos generales de IA sin su consentimiento explícito. Los datos de producto usados para el entrenamiento de IA se anonimizan y agregan siempre que sea posible.",
"legal.privacy.share.h": "Cómo compartimos su información",
"legal.privacy.share.lead": "Podemos compartir su información en las siguientes circunstancias:",
"legal.privacy.share.providers.h": "Proveedores de servicios",
2026-08-17 00:39:25 +02:00
"legal.privacy.share.providers.p": "Podemos compartir su información con proveedores externos, prestadores de servicios, contratistas o agentes que realizan servicios en nuestro nombre, como el procesamiento de pagos, el análisis de datos, el envío de correo electrónico, el alojamiento, la atención al cliente y la asistencia de marketing.",
"legal.privacy.share.transfers.h": "Transferencias empresariales",
2026-08-17 00:39:25 +02:00
"legal.privacy.share.transfers.p": "Si participamos en una fusión, adquisición, financiación, reorganización, quiebra o venta de activos de la empresa, su información puede transferirse como parte de esa operación. Le informaremos de cualquier cambio de este tipo en la titularidad o el control de su información personal.",
"legal.privacy.share.legal.h": "Requisitos legales",
2026-08-17 00:39:25 +02:00
"legal.privacy.share.legal.p": "Podemos divulgar su información si la ley lo exige o en respuesta a solicitudes válidas de autoridades públicas (p. ej., un tribunal o un organismo gubernamental). También podemos divulgar su información para hacer cumplir nuestros términos del servicio, proteger nuestros derechos, privacidad, seguridad o propiedad, y/o los de nuestras filiales, usuarios u otras personas.",
"legal.privacy.share.consent.h": "Con su consentimiento",
2026-08-17 00:39:25 +02:00
"legal.privacy.share.consent.p": "Podemos compartir su información con terceros cuando usted nos haya dado su consentimiento para ello.",
"legal.privacy.security.h": "Seguridad de los datos",
2026-08-17 00:39:25 +02:00
"legal.privacy.security.p1": "Hemos implementado medidas técnicas y organizativas adecuadas diseñadas para proteger su información personal frente a la pérdida accidental y frente al acceso, uso, alteración y divulgación no autorizados. Toda la información que nos facilita se almacena en servidores seguros detrás de cortafuegos.",
"legal.privacy.security.p2": "La seguridad de su información también depende de usted. Cuando le hayamos facilitado (o usted haya elegido) una contraseña para acceder a determinadas partes de nuestros Servicios, usted es responsable de mantener esa contraseña en confidencialidad. Le pedimos que no comparta su contraseña con nadie.",
"legal.privacy.security.p3": "Lamentablemente, la transmisión de información a través de Internet no es completamente segura. Aunque hacemos todo lo posible por proteger su información personal, no podemos garantizar la seguridad de la información personal transmitida a nuestros Servicios. Cualquier transmisión de información personal se realiza bajo su propio riesgo.",
"legal.privacy.rights.h": "Sus derechos y opciones",
2026-08-17 00:39:25 +02:00
"legal.privacy.rights.lead": "Nos esforzamos por ofrecerle opciones respecto a la información personal que nos facilita. Según su ubicación, puede tener determinados derechos sobre su información personal, entre ellos:",
"legal.privacy.rights.li1": "Acceder y actualizar su información personal",
"legal.privacy.rights.li2": "Solicitar la eliminación de su información personal",
"legal.privacy.rights.li3": "Oponerse o restringir el tratamiento de su información personal",
"legal.privacy.rights.li4": "Portabilidad de los datos",
"legal.privacy.rights.li5": "Retirar el consentimiento (cuando proceda)",
2026-08-17 00:39:25 +02:00
"legal.privacy.rights.footer": "Para ejercer sus derechos, póngase en contacto con nosotros usando la información de contacto que figura al final de esta Política de privacidad. Tenga en cuenta que algunos de estos derechos pueden estar limitados o no ser aplicables según su ubicación y las circunstancias concretas.",
"legal.privacy.retention.h": "Conservación de datos",
"legal.privacy.retention.p1": "Conservaremos su información personal durante el tiempo necesario para cumplir los fines descritos en esta Política de privacidad, salvo que la ley exija o permita un plazo de conservación más largo. Al determinar cuánto tiempo conservar su información, consideramos la cantidad, la naturaleza y la sensibilidad de la información, el riesgo potencial de daño por uso o divulgación no autorizados, los fines del tratamiento y los requisitos legales aplicables.",
"legal.privacy.retention.p2": "Podemos conservar cierta información después de que cierre su cuenta, entre otros fines para cumplir nuestras obligaciones legales, resolver disputas y hacer cumplir nuestros acuerdos.",
"legal.privacy.intl.h": "Transferencias internacionales de datos",
2026-08-17 00:39:25 +02:00
"legal.privacy.intl.p1": "Su información personal puede transferirse y tratarse en países distintos del país en el que usted reside. Dichos países pueden tener leyes de protección de datos diferentes de las de su país.",
"legal.privacy.intl.p2": "Si transferimos su información personal a países fuera del Espacio Económico Europeo u otras regiones con leyes integrales de protección de datos, nos aseguraremos de que existan salvaguardas adecuadas para proteger su información personal y de que la transferencia cumpla la normativa aplicable en materia de protección de datos.",
"legal.privacy.children.h": "Privacidad de los menores",
2026-08-17 00:39:25 +02:00
"legal.privacy.children.p": "Nuestros Servicios no están destinados a menores de 16 años, y no recopilamos a sabiendas información personal de menores de 16 años. Si descubrimos que hemos recopilado o recibido información personal de un menor de 16 años sin verificación del consentimiento parental, eliminaremos esa información. Si cree que podríamos tener información de o sobre un menor de 16 años, póngase en contacto con nosotros.",
"legal.privacy.changes.h": "Cambios en nuestra Política de privacidad",
"legal.privacy.changes.p1": "Podemos actualizar nuestra Política de privacidad de vez en cuando. Si realizamos cambios sustanciales en el modo en que tratamos la información personal de los usuarios, se lo notificaremos por correo electrónico a la dirección indicada en su cuenta y/o mediante un aviso en nuestro sitio web.",
"legal.privacy.changes.p2": "La fecha de la última revisión de la Política de privacidad se indica en la parte superior de la página. Usted es responsable de asegurarse de que disponemos de una dirección de correo electrónico actualizada, activa y susceptible de entrega, y de visitar periódicamente nuestro sitio web y esta Política de privacidad para comprobar si hay cambios.",
"legal.privacy.contact.h": "Contacto",
2026-08-17 00:39:25 +02:00
"legal.privacy.contact.lead": "Si tiene preguntas o inquietudes sobre nuestra Política de privacidad o nuestras prácticas de datos, póngase en contacto con nosotros en:",
"legal.terms.title": "Términos del servicio",
"legal.terms.s1.h": "1. Aceptación de los términos",
"legal.terms.s1.p": "Al acceder o utilizar la plataforma de datos de producto de Descrybe y los servicios relacionados (en conjunto, los \"Servicios\"), usted acepta quedar vinculado por estos Términos del servicio y por todas las leyes y normativas aplicables. Si no está de acuerdo con alguno de estos términos, tiene prohibido usar o acceder a los Servicios.",
"legal.terms.s2.h": "2. Licencia de uso",
2026-08-17 00:39:25 +02:00
"legal.terms.s2.p1": "Sujeto al cumplimiento de estos Términos del servicio, Descrybe le otorga una licencia limitada, no exclusiva, intransferible y revocable para acceder y usar los Servicios con fines empresariales.",
"legal.terms.s2.lead": "Esta licencia no incluye:",
2026-08-17 00:39:25 +02:00
"legal.terms.s2.li1": "Modificar o copiar los Servicios ni ningún contenido de los mismos",
"legal.terms.s2.li2": "Usar los Servicios con cualquier fin comercial distinto del uso empresarial autorizado",
2026-08-17 00:39:25 +02:00
"legal.terms.s2.li3": "Intentar descompilar o realizar ingeniería inversa de cualquier software contenido en los Servicios",
"legal.terms.s2.li4": "Eliminar cualquier aviso de derechos de autor o de propiedad de los materiales",
"legal.terms.s2.li5": "Transferir los materiales a otra persona o \"reflejar\" los materiales en cualquier otro servidor",
2026-08-17 00:39:25 +02:00
"legal.terms.s2.p2": "Esta licencia se extinguirá automáticamente si usted incumple cualquiera de estas restricciones y podrá ser terminada por Descrybe en cualquier momento.",
"legal.terms.s3.h": "3. Suscripción y pago",
"legal.terms.s3.p1": "El acceso a los Servicios puede requerir una suscripción de pago. Los términos de pago se especificarán durante el proceso de suscripción. Todos los pagos son no reembolsables salvo que Descrybe lo especifique por escrito.",
"legal.terms.s3.p2": "Descrybe se reserva el derecho a modificar las tarifas de suscripción con un preaviso razonable. El uso continuado de los Servicios tras un cambio de tarifa constituye la aceptación de las nuevas tarifas.",
"legal.terms.s4.h": "4. Contenido del usuario",
2026-08-17 00:39:25 +02:00
"legal.terms.s4.p1": "Usted conserva todos los derechos sobre cualquier contenido que envíe, publique o muestre en o a través de los Servicios (\"Contenido del usuario\"). Al proporcionar Contenido del usuario a Descrybe, usted otorga a Descrybe una licencia mundial, no exclusiva y libre de regalías para usar, reproducir, modificar, adaptar, publicar, traducir y distribuir dicho contenido en relación con la prestación de los Servicios.",
"legal.terms.s4.lead": "Usted declara y garantiza que:",
"legal.terms.s4.li1": "Posee o controla todos los derechos sobre el Contenido del usuario que proporciona",
2026-08-17 00:39:25 +02:00
"legal.terms.s4.li2": "El Contenido del usuario no vulnera estos Términos del servicio",
"legal.terms.s4.li3": "El Contenido del usuario no causará daño a ninguna persona o entidad",
"legal.terms.s5.h": "5. Inteligencia artificial",
2026-08-17 00:39:25 +02:00
"legal.terms.s5.p1": "Los Servicios utilizan tecnologías de inteligencia artificial y aprendizaje automático. Usted reconoce que el contenido generado por IA puede no ser perfecto y acepta revisar todo el contenido generado por IA antes de usarlo en sus operaciones empresariales.",
"legal.terms.s5.p2": "Descrybe puede usar Contenido del usuario anonimizado y agregado para entrenar y mejorar nuestros modelos de IA, con sujeción a nuestra Política de privacidad. Puede optar por no permitir que sus datos se usen para el entrenamiento de IA contactándonos.",
"legal.terms.s6.h": "6. Propiedad intelectual",
2026-08-17 00:39:25 +02:00
"legal.terms.s6.p": "Los Servicios y su contenido, funciones y funcionalidad originales son propiedad de Descrybe y están protegidos por las leyes internacionales de derechos de autor, marcas, patentes, secretos comerciales y otros derechos de propiedad intelectual o de propiedad.",
"legal.terms.s7.h": "7. Exención de garantías",
"legal.terms.s7.p1": "Los Servicios se proporcionan \"tal cual\" y \"según disponibilidad\". Descrybe no formula garantías, expresas o implícitas, y por la presente renuncia a todas las garantías, incluidas, sin limitación, las garantías implícitas de comerciabilidad, idoneidad para un fin determinado, no infracción o curso de ejecución.",
"legal.terms.s7.p2": "Descrybe no garantiza que los Servicios funcionen de forma ininterrumpida, segura o disponible en un momento o lugar concretos, ni que se corrijan errores o defectos.",
2026-08-17 00:39:25 +02:00
"legal.terms.s8.h": "8. Limitación de responsabilidad",
"legal.terms.s8.lead": "En ningún caso Descrybe será responsable de daños indirectos, incidentales, especiales, consecuentes o punitivos, incluidos, sin limitación, la pérdida de beneficios, datos, uso, fondo de comercio u otras pérdidas intangibles, derivados de:",
"legal.terms.s8.li1": "Su acceso o uso, o la imposibilidad de acceder o usar, los Servicios",
"legal.terms.s8.li2": "Cualquier conducta o contenido de terceros en los Servicios",
"legal.terms.s8.li3": "Cualquier contenido obtenido de los Servicios",
2026-08-17 00:39:25 +02:00
"legal.terms.s8.li4": "El acceso, uso o alteración no autorizados de sus transmisiones o contenido",
"legal.terms.s9.h": "9. Terminación",
"legal.terms.s9.p1": "Descrybe puede terminar o suspender su acceso a los Servicios de inmediato, sin previo aviso ni responsabilidad, por cualquier motivo, incluido, sin limitación, si usted incumple estos Términos del servicio.",
"legal.terms.s9.p2": "Tras la terminación, su derecho a usar los Servicios cesará de inmediato. Si desea terminar su cuenta, puede simplemente dejar de usar los Servicios o contactarnos para solicitar la eliminación de la cuenta.",
"legal.terms.s10.h": "10. Ley aplicable",
2026-08-17 00:39:25 +02:00
"legal.terms.s10.p": "Estos Términos se regirán e interpretarán de conformidad con las leyes de Eslovenia, sin tener en cuenta sus principios sobre conflicto de leyes.",
"legal.terms.s11.h": "11. Cambios en los términos",
"legal.terms.s11.p": "Descrybe se reserva el derecho a modificar o sustituir estos Términos del servicio en cualquier momento. Es su responsabilidad revisar periódicamente estos Términos por si hubiera cambios. El uso continuado de los Servicios tras la publicación de cualquier cambio constituye la aceptación de dichos cambios.",
"legal.terms.s12.h": "12. Contacto",
2026-08-17 00:39:25 +02:00
"legal.terms.s12.lead": "Si tiene preguntas sobre estos Términos del servicio, póngase en contacto con nosotros en:",
"plans.loadFailed": "No se pudieron cargar los planes",
2026-08-17 00:39:25 +02:00
"plans.loading": "Cargando planes…",
"plans.apiUnavailable": "La API de planes aún no está disponible en este backend. Mostrando la comparación pública de precios.",
"plans.title": "Elige tu plan",
2026-08-17 00:39:25 +02:00
"plans.sub.onPrefix": "Estás en",
"plans.sub.enterpriseSuffix": "— productos e IA ilimitados. No hace falta un upgrade de autoservicio.",
"plans.sub.paygSuffix": "— pago por uso. Compara los planes públicos abajo o habla con ventas para Enterprise.",
"plans.sub.creditsMid": "con {remaining} créditos de IA restantes.",
"plans.sub.creditsSuffix": "Mejora Starter → Growth → Business con Checkout, o habla con ventas para Enterprise.",
"plans.sub.none": "Aún no hay un plan asignado (por ejemplo tras una migración omitida). Elige un plan abajo — la capacidad no es Ilimitada hasta que Checkout o un administrador asigne uno.",
"plans.stripeHint": "Los upgrades de autoservicio usan Stripe Checkout.",
2026-08-16 11:37:42 +02:00
"plans.checkoutUnavailable": "El checkout de autoservicio no esta disponible hasta que Stripe este configurado. Contacta con ventas para un plan.",
"plans.fallbackName": "Plan tarifario",
2026-08-17 00:39:25 +02:00
"plans.fallbackDescription": "Capacidad para tu catálogo",
"plans.badge.current": "Actual",
2026-08-17 00:39:25 +02:00
"plans.badge.popular": "Más popular",
"plans.price.custom": "Personalizado",
"plans.price.forever": "para siempre",
"plans.price.perMonth": "/mes",
"plans.price.seePricing": "Ver precios",
"plans.capacity.unlimitedSkus": "SKU ilimitados",
2026-08-17 00:39:25 +02:00
"plans.capacity.unlimitedAi": "Créditos de IA ilimitados",
"plans.capacity.upToProducts": "Hasta {count} productos",
2026-08-17 00:39:25 +02:00
"plans.capacity.creditsPerMonth": "{count} créditos de IA / mes",
"plans.cta.requestUpgrade": "Solicitar mejora",
"plans.cta.current": "Plan actual",
"plans.cta.contactSales": "Contactar ventas",
2026-08-17 00:39:25 +02:00
"plans.cta.switchInBilling": "Cambiar en facturación",
"plans.cta.upgradeTo": "Mejorar a {name}",
2026-08-17 00:39:25 +02:00
"plans.cta.startingCheckout": "Iniciando checkout…",
"plans.planApplied": "Plan {plan} aplicado. Tus créditos están listos.",
"plans.faq.title": "Preguntas frecuentes",
2026-08-17 00:39:25 +02:00
"plans.faq.limit.q": "¿Qué ocurre si alcanzo un límite?",
"plans.faq.limit.a": "Primero verás avisos suaves. Cuando te quedes sin créditos de IA o alcances el tope de SKU, los trabajos que necesiten esa capacidad se bloquean hasta que liberes espacio, esperes al siguiente ciclo o mejores el plan.",
"plans.faq.selfServe.q": "¿Puedo mejorar el plan yo mismo?",
"plans.faq.selfServe.a": "Los administradores de la empresa pueden contratar Starter, Growth y Business por autoservicio mediante Checkout en la tarjeta del plan. Los miembros deben pedir a un administrador — Checkout requiere el rol de administrador. Enterprise siempre va por ventas. Los administradores de plataforma aún pueden asignar planes en Billing Admin.",
"plans.faq.enterprise.q": "Enterprise y millones de SKU",
2026-08-17 00:39:25 +02:00
"plans.faq.enterprise.a": "La capacidad personalizada, la clave de IA propia (BYOK), el SLA y la gestión de cuenta van por ventas. Reserva tiempo en Calendly — Enterprise no es autoservicio a escala de millones de SKU. La app muestra Ilimitado para capacidad de SKU e IA.",
"plans.faq.pricing.q": "¿Dónde está el precio público?",
"plans.faq.pricing.aBefore": "Consulta la comparación de marketing en la",
"plans.faq.pricing.pricingPage": "página de Precios",
"plans.faq.pricing.aMid": "— los CTA son Empezar (registro) o Contactar ventas. Gestiona el uso en cualquier momento en",
"plans.faq.pricing.aAfter": ".",
2026-08-17 00:39:25 +02:00
"plans.custom.title": "¿Necesitas un plan personalizado?",
"plans.custom.body": "La capacidad Enterprise, la clave de IA propia y los SLA se gestionan con nuestro equipo.",
2026-08-17 00:39:25 +02:00
"plans.custom.looking": "¿Buscas detalles de los planes públicos?",
"ai.title": "Integraciones de IA",
2026-08-17 00:39:25 +02:00
"ai.description": "Elige créditos de la plataforma o tu propia clave y personaliza los prompts con variables.",
"ai.crumb": "Integraciones de IA",
2026-08-17 00:39:25 +02:00
"ai.adminOnly": "Solo los administradores de la empresa pueden cambiar la configuración de IA. Puedes ver la configuración actual.",
"ai.badge.ownKey": "Tu propia clave",
2026-08-17 00:39:25 +02:00
"ai.badge.platform": "Créditos / clave de la plataforma",
"ai.badge.active": "Activo: {label}",
"ai.badge.platformKeyAvailable": "Clave de plataforma disponible",
2026-08-17 00:39:25 +02:00
"ai.badge.lastTest": "Última prueba: {status}",
"ai.providerMode.title": "Modo del proveedor",
2026-08-17 00:39:25 +02:00
"ai.providerMode.desc": "La plataforma usa créditos de Descrybe y nuestra clave. Popular o Personalizado usa tu clave compatible con OpenAI (la llamada al proveedor no consume créditos de la plataforma; las reglas de créditos de las funciones sí se aplican).",
"ai.whoPays": "¿Quién paga el modelo?",
"ai.mode.internal": "Plataforma (créditos / clave de Descrybe)",
"ai.mode.popular": "Tu clave — proveedor popular",
"ai.mode.custom": "Tu clave — endpoint personalizado",
"ai.useCompanyKey": "Usar esta clave de empresa para procesamiento, SEO con IA y campañas con IA",
"ai.popular.title": "Proveedor popular",
2026-08-17 00:39:25 +02:00
"ai.popular.desc": "Endpoints compatibles con OpenAI. Anthropic a través de OpenRouter.",
"ai.field.provider": "Proveedor",
"ai.field.model": "Modelo",
"ai.placeholder.modelId": "id del modelo",
"ai.baseUrlLabel": "URL base: {url}",
"ai.custom.title": "Endpoint personalizado",
"ai.custom.desc": "Introduce la URL base HTTPS de tu proveedor de IA.",
"ai.field.baseUrl": "URL base",
"ai.apiKey.title": "Clave API",
2026-08-17 00:39:25 +02:00
"ai.apiKey.desc": "Déjalo en blanco para conservar la clave existente. Los secretos en bruto nunca se devuelven: solo un last4 enmascarado.",
"ai.storedKey": "Clave guardada: {masked}",
"ai.field.apiKey": "Clave API",
2026-08-17 00:39:25 +02:00
"ai.placeholder.keepKey": "•••• déjalo en blanco para conservar",
"ai.clearStoredKey": "Borrar clave API guardada",
"ai.saveProvider": "Guardar proveedor",
2026-08-17 00:39:25 +02:00
"ai.testConnection": "Probar conexión",
"ai.prompts.title": "Plantillas de prompt",
2026-08-17 00:39:25 +02:00
"ai.prompts.descBefore": "Personaliza los prompts de sistema y de usuario para textos de producto, meta SEO y correos de campaña. Inserta variables como",
"ai.prompts.descMid": ": se rellenan en tiempo de ejecución. La voz del kit de marca está disponible como",
"ai.prompts.descAfter": ".",
2026-08-17 00:39:25 +02:00
"ai.field.feature": "Función",
"ai.badge.custom": "Personalizado",
"ai.badge.builtin": "Valor predeterminado integrado",
2026-08-17 00:39:25 +02:00
"ai.badge.disabledDefault": "Desactivado → se usa el predeterminado",
"ai.useCustomPrompt": "Usar este prompt personalizado (desactivado = predeterminado integrado)",
"ai.insertVariableInto": "Insertar variable en",
"ai.insert.system": "Sistema",
"ai.insert.user": "Usuario",
"ai.field.systemPrompt": "Prompt del sistema",
"ai.field.userPrompt": "Prompt del usuario",
"ai.savePrompts": "Guardar prompts",
"ai.resetDefault": "Restablecer predeterminado",
"ai.editBrandVoice": "Editar voz de marca",
2026-08-17 00:39:25 +02:00
"ai.flash.loadFailed": "No se pudo cargar la configuración de IA",
"ai.flash.usingPlatform": "Usando la IA de la plataforma (créditos / clave de Descrybe cuando estén configurados).",
"ai.flash.providerSaved": "Proveedor de IA guardado. Las claves se cifran y no se muestran de nuevo.",
"ai.flash.saveFailed": "No se pudo guardar",
"ai.flash.savePromptsFailed": "No se pudieron guardar los prompts",
"ai.flash.resetFailed": "No se pudo restablecer el prompt",
2026-08-17 00:39:25 +02:00
"ai.flash.connectionFailed": "Falló la conexión",
"ai.flash.testFailed": "Falló la prueba",
"ai.action.changeSettings": "cambiar la configuración del proveedor de IA",
"ai.action.changePrompts": "cambiar los prompts de IA",
"ai.action.testProvider": "probar el proveedor de IA",
2026-08-17 00:39:25 +02:00
"email.title": "Envío de correo",
"email.description": "Resend o SMTP para campañas de marketing. Secretos cifrados en reposo.",
"email.adminOnly": "Solo los administradores de la empresa pueden cambiar la configuración del proveedor de correo. Puedes ver la configuración actual.",
"email.crumb": "Integración de correo",
"email.dryRunForced": "El modo de prueba está forzado ({reason}). Los planes Free y EMAIL_DRY_RUN nunca envían envíos masivos reales.",
"email.dryRunPolicy": "política",
"email.badge.verified": "Verificado",
"email.badge.notVerified": "No verificado",
"email.badge.canSendReal": "Puede enviar real",
2026-08-17 00:39:25 +02:00
"email.badge.realBlocked": "Envío real bloqueado",
"email.badge.lastTest": "Última prueba: {status}",
"email.provider.title": "Proveedor",
2026-08-17 00:39:25 +02:00
"email.provider.desc": "Configuración por empresa. El SMTP/Resend del entorno de la plataforma solo se usa como reserva si faltan secretos.",
"email.field.provider": "Proveedor",
"email.provider.resend": "Resend",
"email.provider.smtp": "SMTP",
"email.field.fromEmail": "Correo del remitente",
"email.field.domain": "Dominio",
"email.field.from": "De",
"email.field.fromName": "Nombre del remitente",
"email.field.replyTo": "Reply-To",
2026-08-17 00:39:25 +02:00
"email.resendKeySaved": "Clave API de Resend (guardada — déjala en blanco para conservar)",
"email.resendKey": "Clave API de Resend",
"email.field.smtpHost": "Host SMTP",
"email.field.port": "Puerto",
"email.field.username": "Usuario",
2026-08-17 00:39:25 +02:00
"email.field.passwordSaved": "Contraseña (guardada)",
"email.field.password": "Contraseña",
"email.verifyDomain": "Verificar dominio",
2026-08-17 00:39:25 +02:00
"email.testGate.title": "Prueba y control de envíos",
"email.testGate.desc": "Los envíos de prueba verifican la dirección del remitente. Los envíos masivos reales exigen escribir “I understand”.",
"email.field.recipient": "Destinatario",
"email.sendTest": "Enviar prueba",
2026-08-17 00:39:25 +02:00
"email.confirmBlast": "Confirmar envío masivo…",
"email.flash.loadFailed": "No se pudo cargar la configuración de correo",
"email.flash.saveFailed": "No se pudo guardar",
2026-08-17 00:39:25 +02:00
"email.flash.verifyUpdated": "Verificación actualizada.",
"email.flash.verifyFailed": "Falló la verificación",
"email.flash.testFailed": "Falló el envío de prueba",
"email.flash.blastDryRun": "Comprobación de entrega registrada en modo de prueba: no se envió ningún correo.",
"email.flash.blastDone": "Comprobación de entrega finalizada: {sent} enviados, {failed} fallidos.",
"email.flash.blastFailed": "Falló el envío masivo",
"email.blast.subject": "Comprobación de entrega de correo de Descrybe",
"email.blast.body": "Esta es una comprobación de entrega a una sola dirección desde Descrybe para confirmar que tu integración de correo puede enviar. Destinatario: {recipient}",
"email.action.changeSettings": "cambiar la configuración del proveedor de correo",
"email.action.verifyDomain": "verificar el dominio de correo",
"email.action.sendTest": "enviar correo de prueba",
2026-08-17 00:39:25 +02:00
"email.action.sendBlasts": "enviar envíos masivos de correo",
"seo.title": "Recomendaciones SEO",
2026-08-17 00:39:25 +02:00
"seo.description": "Puntuaciones de checklist para meta del catálogo, títulos, imágenes y palabras clave. El relleno por plantilla es gratis; la reescritura con IA es de pago.",
"seo.upgradeTitle": "La reescritura con IA es una función de pago",
"seo.upgradeMessage": "Los planes Free aún pueden corregir meta faltante con plantillas basadas en reglas. Mejora el plan o añade créditos para usar reescrituras con IA.",
"seo.comparePlans": "Comparar planes",
"seo.openProducts": "Abrir productos",
2026-08-17 00:39:25 +02:00
"seo.overallScore": "Puntuación SEO global",
"seo.overallScoreHint": "Media de los elementos del checklist",
"seo.productsScanned": "Productos analizados",
"seo.productsScannedHint": "Productos procesados en la empresa",
2026-08-17 00:39:25 +02:00
"seo.categoriesScanned": "Categorías analizadas",
"seo.categoriesScannedHint": "Incluye comprobaciones de fórmulas meta",
"seo.aiRewrite": "Reescritura con IA",
"seo.available": "Disponible",
"seo.gated": "Restringido",
"seo.templateFree": "El relleno por plantilla sigue siendo gratis en todos los planes",
"seo.checklist": "Checklist",
2026-08-17 00:39:25 +02:00
"seo.affectedFindings": "{affected} afectados · {count} hallazgos",
"seo.fixable": "Corregible",
"seo.clearFilter": "Quitar filtro",
"seo.findings": "Hallazgos",
"seo.noFindings": "No hay hallazgos para este filtro: buen trabajo.",
"seo.col.issue": "Problema",
"seo.col.entity": "Entidad",
"seo.col.severity": "Gravedad",
"seo.col.actions": "Acciones",
2026-08-17 00:39:25 +02:00
"seo.filling": "Rellenando…",
"seo.templateFill": "Relleno por plantilla",
2026-08-17 00:39:25 +02:00
"seo.aiTitleAllowed": "Reescribir con IA (usa créditos)",
"seo.aiTitleGated": "Requiere plan de pago o créditos",
"seo.rewriting": "Reescribiendo…",
"seo.aiRewriteBtn": "Reescritura con IA",
"seo.viewProduct": "Ver producto",
"seo.flash.loadFailed": "No se pudieron cargar las recomendaciones SEO",
2026-08-17 00:39:25 +02:00
"seo.flash.aiPaid": "La reescritura con IA requiere un plan de pago o créditos.",
"seo.flash.applyFailed": "No se pudo aplicar la corrección",
"brand.title": "Kit de marca",
2026-08-17 00:39:25 +02:00
"brand.description": "Define la voz, las directrices y los colores para que los títulos y las descripciones de producto se mantengan fieles a la marca.",
"brand.loading": "Cargando kit de marca…",
"brand.adminOnly": "Solo los administradores de la empresa pueden editar el kit de marca. Puedes ver la voz, los colores y el logo actuales.",
2026-08-17 00:39:25 +02:00
"brand.aiApplyFreeAdmin": "Puedes editar tu kit de marca en Free. La aplicación con IA (inyectar la voz de marca en los prompts de mejora) se desbloquea a partir de Starter.",
"brand.aiApplyGated": "La aplicación con IA (inyectar la voz de marca en los prompts de mejora) se desbloquea a partir de Starter.",
"brand.aiEnhanceUses": "La mejora con IA usará esta voz de marca al procesar productos.",
"brand.comparePlans": "Comparar planes",
"brand.voice.title": "Voz y directrices",
2026-08-17 00:39:25 +02:00
"brand.voice.desc": "Tono, reglas de sí/no y redacción preferida",
"brand.field.voiceTone": "Voz / tono",
2026-08-17 00:39:25 +02:00
"brand.placeholder.voiceTone": "p. ej. Segura, concisa, técnica pero cercana",
"brand.field.dos": "Hacer (uno por línea)",
"brand.placeholder.dos": "Empieza por el beneficio principal\nMantén los títulos por debajo de 80 caracteres",
"brand.field.donts": "No hacer (uno por línea)",
"brand.placeholder.donts": "Sin MAYÚSCULAS\nEvita superlativos sin pruebas",
"brand.field.preferredTerms": "Términos preferidos (uno por línea o separados por comas)",
"brand.placeholder.preferredTerms": "inalámbrico, premium, clase energética",
"brand.visual.title": "Identidad visual",
2026-08-17 00:39:25 +02:00
"brand.visual.desc": "Colores y logo usados en consejos y campañas conscientes de la marca",
"brand.field.primaryColor": "Color primario",
"brand.field.secondaryColor": "Color secundario",
"brand.field.logoImage": "Imagen del logo",
"brand.logoHint": "PNG, JPEG o WebP de hasta 2 MiB. Se guarda en las cargas de tu empresa.",
2026-08-17 00:39:25 +02:00
"brand.uploading": "Subiendo…",
"brand.uploadLogo": "Subir logo",
"brand.clear": "Borrar",
"brand.field.logoUrl": "URL del logo",
2026-08-17 00:39:25 +02:00
"brand.placeholder.logoUrl": "https://… o subido /api/brand/logo/files/…",
"brand.logoAlt": "Vista previa del logo de marca",
2026-08-17 00:39:25 +02:00
"brand.tipsTitle": "Consejos de fórmula / vista previa",
"brand.saving": "Guardando…",
"brand.save": "Guardar kit de marca",
"brand.flash.loadFailed": "No se pudo cargar el kit de marca",
2026-08-17 00:39:25 +02:00
"structured.title": "Campos de descripción estructurada",
"structured.loading": "Cargando campos de descripción estructurada…",
"structured.backDashboard": "Volver al panel",
2026-08-17 00:39:25 +02:00
"structured.categoryFormulas": "Fórmulas de categoría",
"structured.exportFeeds": "Feeds de exportación",
"structured.intro": "Estos campos se crean automáticamente cuando añades Export IDs a las secciones de la fórmula de descripción. Puedes usarlos en tus feeds de exportación para incluir partes concretas de las descripciones de producto.",
"structured.addField": "Añadir campo",
"structured.openCategories": "Abrir categorías",
"structured.tableCaption": "Estos campos se usan para estructurar partes de las descripciones de producto para la exportación.",
"structured.col.fieldKey": "Clave del campo",
"structured.col.type": "Tipo",
"structured.col.created": "Creado",
"structured.col.actions": "Acciones",
2026-08-17 00:39:25 +02:00
"structured.dialogTitle": "Añadir campo de descripción estructurada",
"structured.fieldKeyLabel": "Clave del campo (obligatoria)",
"structured.fieldKeyPlaceholder": "p. ej., features, specifications",
"structured.fieldTypeLabel": "Tipo de campo",
"structured.type.text": "Texto",
2026-08-17 00:39:25 +02:00
"structured.type.number": "Número",
"structured.type.boolean": "Booleano",
"structured.type.list": "Lista",
2026-08-17 00:39:25 +02:00
"structured.adding": "Añadiendo...",
"structured.flash.loadFailed": "No se pudieron cargar los campos de descripción estructurada",
"assistant.ariaLabel": "Asistente del sistema",
"assistant.title": "Asistente del sistema",
2026-08-17 00:39:25 +02:00
"assistant.subtitle": "Navega, guía y ejecuta acciones compatibles",
"assistant.resetAria": "Reiniciar conversación",
"assistant.resetTitle": "Reiniciar",
"assistant.closeAria": "Cerrar asistente",
"assistant.messageLabel": "Mensaje",
2026-08-17 00:39:25 +02:00
"assistant.placeholder": "p. ej. añadir una URL de feed, claves API, atributos, procesamiento…",
"assistant.sendAria": "Enviar",
"site.bookDemo": "Reservar una demo",
"site.demoShort": "Demo",
"site.allRightsReserved": "Todos los derechos reservados.",
2026-08-17 00:39:25 +02:00
"site.cookiePolicy": "Política de cookies",
"site.cookieSettings": "Ajustes de cookies",
2026-08-17 00:39:25 +02:00
"consent.title": "Cookies y analítica",
"consent.description": "Usamos cookies necesarias para que Descrybe funcione. Las cookies opcionales de analítica y marketing nos ayudan a entender el uso y medir campañas. Puede cambiar su elección en cualquier momento.",
"consent.acceptAll": "Aceptar todo",
"consent.rejectNonEssential": "Rechazar no esenciales",
"consent.customize": "Personalizar",
"consent.save": "Guardar preferencias",
"consent.necessary": "Necesarias",
2026-08-17 00:39:25 +02:00
"consent.necessaryDesc": "Requeridas para inicio de sesión, seguridad (CSRF), tema, idioma y recordar esta elección.",
"consent.alwaysOn": "Siempre activas",
2026-08-17 00:39:25 +02:00
"consent.analytics": "Analítica",
"consent.analyticsDesc": "Nos ayuda a entender cómo se usa el producto (Google Analytics vía GTM).",
"consent.marketing": "Marketing",
2026-08-17 00:39:25 +02:00
"consent.marketingDesc": "Para medición publicitaria y personalización cuando hay etiquetas de anuncios en GTM.",
"consent.policyLink": "Leer la Política de cookies",
"seo.cookies.title": "Política de cookies | Descrybe",
"seo.cookies.description": "Cómo Descrybe usa cookies necesarias, de analítica y marketing, incluido GTM y GA4, y cómo cambiar el consentimiento.",
"legal.cookies.title": "Política de cookies",
"legal.cookies.intro.h": "Resumen",
2026-08-17 00:39:25 +02:00
"legal.cookies.intro.p1": "Esta Política de cookies explica cómo Descrybe usa cookies y tecnologías similares en el sitio y la aplicación. Léala junto con nuestra Política de privacidad.",
"legal.cookies.intro.p2": "Cuando sea obligatorio, pedimos consentimiento antes de activar cookies de analítica o marketing. Las cookies necesarias permiten prestar el servicio de forma segura y no requieren consentimiento.",
"legal.cookies.types.h": "Categorías de cookies",
"legal.cookies.necessary.h": "Necesarias",
2026-08-17 00:39:25 +02:00
"legal.cookies.necessary.p": "Mantienen la sesión, protegen formularios con CSRF, guardan tema e idioma y recuerdan su elección de cookies. Sin ellas el producto no funciona correctamente.",
"legal.cookies.analytics.h": "Analítica",
"legal.cookies.analytics.p": "Si permite analítica, cargamos etiquetas de Google Tag Manager que pueden establecer cookies de Google Analytics 4 para medir páginas y eventos. Los eventos se bloquean hasta conceder analytics_storage.",
"legal.cookies.marketing.h": "Marketing",
2026-08-17 00:39:25 +02:00
"legal.cookies.marketing.p": "Si permite marketing, las etiquetas publicitarias en GTM pueden usar almacenamiento de anuncios y señales relacionadas para medición y personalización.",
"legal.cookies.gtm.h": "Google Tag Manager y GA4",
2026-08-17 00:39:25 +02:00
"legal.cookies.gtm.p": "Cuando está configurado, Descrybe carga un contenedor de Google Tag Manager. GA4 se configura dentro de ese contenedor. Consent Mode v2 deniega por defecto el almacenamiento de analítica y anuncios hasta que acepte las categorías.",
"legal.cookies.third.h": "Terceros",
2026-08-17 00:39:25 +02:00
"legal.cookies.third.p": "Google (Tag Manager / Analytics) puede procesar datos técnicos como URL, dispositivo/navegador y nombres de eventos cuando hay consentimiento. No enviamos intencionadamente contraseñas, claves API ni datos de contacto en eventos de analítica.",
"legal.cookies.manage.h": "Cómo cambiar el consentimiento",
"legal.cookies.manage.p": "Use Ajustes de cookies en el pie (o el botón de abajo) para reabrir el banner. También puede borrar los datos del sitio en el navegador.",
"site.privacyPolicy": "Política de privacidad",
"site.termsOfService": "Términos del servicio",
"site.legalNav": "Legal",
"site.footer.aria": "Sitio",
2026-08-17 00:39:25 +02:00
"site.footer.description": "Descrybe convierte feeds de proveedores en catálogos de producto limpios y listos para canales: mapea campos, enriquece atributos y textos, luego exporta o sincroniza con WooCommerce.",
"site.footer.rightsLine": "© {year} {name}. Todos los derechos reservados.",
"site.footer.navTitle": "Navegación",
"site.footer.platform": "Plataforma",
"site.footer.solutions": "Soluciones",
"site.footer.contact": "Contacto",
"home.hero.tagline": "Datos de producto para equipos de ecommerce",
"home.hero.title": "De feeds de proveedores a fichas de producto",
2026-08-17 00:39:25 +02:00
"home.hero.lead": "Conecta feeds de proveedores, asígnalos a tus categorías, completa atributos obligatorios y escribe títulos y descripciones según tus reglas — luego exporta o sincroniza con tu tienda.",
"home.hero.learnMore": "Saber más",
"home.hero.apply": "Solicitar acceso",
"home.hero.supportedBy": "Con el apoyo de",
"home.hero.msAlt": "Microsoft for Startups",
"home.image.previewAlt": "Vista previa de la plataforma Descrybe: de feed a ficha de producto",
2026-08-17 00:39:25 +02:00
"home.how.title": "Así Descrybe te ahorra tiempo para llevar productos al mercado",
"home.how.lead": "Importa datos desordenados de proveedores una sola vez. Descrybe te ayuda a categorizarlos, completar atributos, redactar fichas y enviar productos listos a tus canales.",
"home.how.apply": "Solicitar acceso",
2026-08-17 00:39:25 +02:00
"home.how.step1.title": "Importa tu taxonomía",
"home.how.step1.desc": "Configura las categorías y atributos que tu tienda ya usa",
"home.how.step1.f1": "Define atributos obligatorios por categoría",
"home.how.step1.f2": "Configura fórmulas de título por categoría",
"home.how.step1.f3": "Define plantillas de descripción y snippet de búsqueda",
"home.how.step2.title": "Importa datos de proveedores",
"home.how.step2.desc": "Conecta una URL de feed o sube un archivo de productos",
"home.how.step2.f1": "Importa desde CSV, XML o API",
2026-08-17 00:39:25 +02:00
"home.how.step2.f2": "Programa importaciones automáticas de tus proveedores",
"home.how.step2.f3": "Mapea campos con una interfaz sencilla de arrastrar y soltar",
"home.how.step3.title": "Transforma y enriquece",
"home.how.step3.desc": "Elige los productos a procesar y deja que Descrybe:",
2026-08-17 00:39:25 +02:00
"home.how.step3.f1": "Asigne las categorías correctas",
"home.how.step3.f2": "Complete los atributos de producto obligatorios",
2026-08-17 00:39:25 +02:00
"home.how.step3.f3": "Cree títulos y descripciones claros y fáciles de buscar",
"home.how.step4.title": "Exporta a canales",
2026-08-17 00:39:25 +02:00
"home.how.step4.desc": "Envía datos de producto listos a donde vendes",
"home.how.step4.f1": "Genera feeds de producto específicos por canal",
"home.how.step4.f2": "Mantén el control total de los campos que exportas",
"home.how.step4.f3": "Mantente al día cuando cambien los datos del proveedor",
"home.benefits.title": "Todo lo que necesitas para datos de producto más limpios",
"home.benefits.lead": "Desde la importación del feed hasta fichas listas para el canal — sin reconstruir cada archivo a mano.",
"home.benefits.shield.title": "Detecta fichas incompletas a tiempo",
2026-08-17 00:39:25 +02:00
"home.benefits.shield.desc": "Comprueba los datos frente a las reglas de categoría para corregir atributos faltantes y textos pobres antes de publicarlos.",
"home.benefits.chart.title": "Fichas más claras, mejor conversión",
"home.benefits.chart.desc": "Títulos y descripciones que destacan lo que importa al comprador: beneficios, especificaciones y términos de búsqueda de tu catálogo.",
"home.benefits.database.title": "Una estructura de producto coherente",
2026-08-17 00:39:25 +02:00
"home.benefits.database.desc": "Mantén el mismo árbol de categorías y forma de atributos en exportaciones y canales para que los clientes encuentren productos igual en todas partes.",
"home.benefits.search.title": "Contenido de producto pensado para la búsqueda",
"home.benefits.search.desc": "Escribe títulos, descripciones y meta snippets más fáciles de entender para compradores y buscadores.",
"home.benefits.cost.title": "Menos entrada manual de datos",
2026-08-17 00:39:25 +02:00
"home.benefits.cost.desc": "Automatiza el mapeo, el relleno de atributos y los textos para que tu equipo se centre en el merchandising — no en limpiar hojas de cálculo.",
"home.benefits.scale.title": "Listo para cada canal de venta",
2026-08-17 00:39:25 +02:00
"home.benefits.scale.desc": "Adapta feeds de exportación y la sync de WooCommerce a los formatos que espera cada canal, sin reconstruir el catálogo a mano.",
"home.cta.titleLead": "Lleva productos al mercado ",
2026-08-17 00:39:25 +02:00
"home.cta.titleHighlight": "más rápido",
"home.cta.description": "Deja de reconstruir datos de producto en cada archivo de proveedor. Mapea una vez, enriquece con tus reglas y publica fichas listas para vender.",
"home.cta.f1": "Demo personalizada",
"home.cta.f2": "Consulta con expertos",
2026-08-17 00:39:25 +02:00
"home.cta.f3": "Próximos pasos claros",
"home.cta.apply": "Solicitar acceso",
2026-08-17 00:39:25 +02:00
"home.cta.imageAlt": "Páginas de producto de Descrybe",
"home.product.eyebrow": "Qué hace Descrybe",
"home.product.title": "Feeds de proveedor dentro. Fichas listas fuera — export, WooCommerce o API.",
"home.product.description": "Descrybe ayuda a equipos de ecommerce a convertir feeds CSV y XML de proveedores en catálogos limpios. Mapea campos a tus categorías, enriquece atributos y textos, y envía datos por feeds de exportación, sync de WooCommerce o la API pública.",
"home.product.pipelineAria": "Pipeline de producto",
"home.product.p1.label": "Feeds de entrada",
"home.product.p1.detail": "CSV / XML desde URLs de proveedor",
"home.product.p2.label": "Mapear",
"home.product.p2.detail": "Asocia columnas a tus campos",
"home.product.p3.label": "Enriquecer",
2026-08-17 00:39:25 +02:00
"home.product.p3.detail": "Categorías, atributos, títulos",
"home.product.p4.label": "Publicar",
2026-08-17 00:39:25 +02:00
"home.product.p4.detail": "Export · Woo · API",
"pricing.section.badge": "Capacidad de SKU + créditos de IA",
"pricing.section.title": "Empieza gratis. Escala cuando crezca tu catálogo.",
"pricing.section.lead": "Free incluye mapeo de feeds, limpieza básica de producto y etiquetas energéticas UE (EPREL) para hasta 100 SKU (sin créditos de IA). Los planes de pago añaden títulos y descripciones con IA, más capacidad y opciones de exportación — Starter, Growth, Business, o habla con ventas para Enterprise.",
"pricing.section.billingPeriod": "Periodo de facturación",
"pricing.section.monthly": "Mensual",
"pricing.section.yearly": "Anual",
"pricing.section.savePercent": "Ahorra 20%",
2026-08-17 00:39:25 +02:00
"pricing.section.publicBefore": "Planes públicos: Free, Starter, Growth, Business y Enterprise. Crea una cuenta Free y luego mejora en",
"pricing.section.publicOr": "o",
"pricing.section.publicAfter": "mediante Stripe Checkout. Enterprise sigue siendo con ventas.",
"pricing.section.plansLink": "Planes",
2026-08-17 00:39:25 +02:00
"pricing.section.billingLink": "Facturación",
"pricing.section.capabilitiesTitle": "Para qué está pensado cada plan",
"pricing.section.capabilitiesLead": "Importa feeds, enriquece tu catálogo y luego exporta o sincroniza con WooCommerce",
"pricing.section.faqTitle": "Preguntas frecuentes",
2026-08-17 00:39:25 +02:00
"pricing.section.readyTitle": "¿Listo para mapear tu primer feed?",
"pricing.section.readyLead": "Crea una cuenta Free — sin tarjeta. ¿Ya tienes una? Abre la app o compara planes.",
"pricing.section.contactSales": "Contactar ventas",
2026-08-17 00:39:25 +02:00
"pricing.cap.feeds": "De feeds a catálogo",
"pricing.cap.feeds.f1": "Feeds de proveedor CSV / XML / URL",
2026-08-17 00:39:25 +02:00
"pricing.cap.feeds.f2": "Mapeo y validación de campos",
"pricing.cap.feeds.f3": "Fusión multi-proveedor",
"pricing.cap.feeds.f4": "Sincronización programada",
"pricing.cap.feeds.f5": "Transformaciones según categoría",
"pricing.cap.processing": "Procesamiento e IA",
"pricing.cap.processing.f1": "Limpieza de datos y relleno de atributos (todos los planes)",
2026-08-17 00:39:25 +02:00
"pricing.cap.processing.f2": "Títulos y descripciones con IA (de pago)",
"pricing.cap.processing.f3": "Etiquetas energéticas UE / EPREL (todos los planes)",
"pricing.cap.processing.f4": "Fórmulas, voz de marca, variables",
"pricing.cap.processing.f5": "Créditos gestionados o tu propia clave de IA",
"pricing.cap.export": "Exportación y canales",
"pricing.cap.export.f1": "Feeds de exportación XML / CSV",
"pricing.cap.export.f2": "Sync WooCommerce / Shopify",
"pricing.cap.export.f3": "API completa",
2026-08-17 00:39:25 +02:00
"pricing.cap.export.f4": "Formatos específicos por canal",
"pricing.cap.export.f5": "Actualizaciones masivas",
2026-08-17 00:39:25 +02:00
"pricing.cap.limits": "Límites y control",
"pricing.cap.limits.f1": "Límites de SKU (productos)",
"pricing.cap.limits.f2": "Paquetes mensuales de créditos de IA",
"pricing.cap.limits.f3": "Roles e invitaciones de equipo",
"pricing.cap.limits.f4": "Opciones de SLA Enterprise",
2026-08-17 00:39:25 +02:00
"pricing.faq.credits.q": "¿Qué son los créditos de IA?",
"pricing.faq.credits.a": "Los créditos de IA pagan pasos como generar títulos y descripciones. Free incluye 0 créditos de IA — aún puedes mapear feeds y limpiar datos. Paquetes mensuales de pago: Starter 150, Plus 500, Growth 1.200, Business 4.000, Scale 8.000. Enterprise incluye un paquete gestionado grande (y tu propia clave). Desde Growth puedes usar opcionalmente tu propia clave en lugar de créditos gestionados.",
"pricing.faq.packs.q": "Can I buy extra AI credits?",
"pricing.faq.packs.a": "Yes. One-time packs: Starter $19 / 500 credits, Growth $59 / 2,000, Catalog $199 / 10,000, Scale $599 / 40,000. Buy from Billing after you have a paid plan (or Free with leftover trial credits). Packs do not change your SKU or feed limits.",
2026-08-17 00:39:25 +02:00
"pricing.faq.limits.q": "¿Qué pasa si alcanzo el límite de productos o créditos?",
"pricing.faq.limits.a": "Te avisamos al acercarte. Cuando llegues al tope de productos o te quedes sin créditos de IA, los trabajos que necesiten esa capacidad se pausan hasta liberar espacio, esperar el siguiente ciclo o mejorar de plan.",
"pricing.faq.change.q": "¿Puedo subir o bajar de plan?",
"pricing.faq.change.a": "Sí. Empieza en Free y luego pasa a Starter, Plus, Growth, Business o Scale desde Planes o Facturación (Stripe Checkout). Enterprise siempre es con ventas.",
"pricing.faq.free.q": "¿Qué incluye Free?",
"pricing.faq.free.a": "Free para siempre: 50 productos, un feed, limpieza de datos y relleno de atributos, etiquetas energéticas UE (EPREL — datos públicos, sin créditos) y una exportación manual — con 0 créditos de IA. Sin tarjeta. Mejora cuando necesites títulos y descripciones con IA o más capacidad.",
"pricing.faq.why.q": "¿Por qué no pagar por producto como las herramientas solo de contenido?",
"pricing.faq.why.a": "Descrybe cubre el camino completo de feed de proveedor a catálogo a WooCommerce o exportación — no solo copy con IA. Pagas por capacidad de plataforma (productos y feeds); la IA es una capa de uso encima.",
"pricing.faq.annual.q": "¿Cómo funciona la facturación anual?",
"pricing.faq.annual.a": "La facturación anual es unos 20% menos que el precio mensual. Empieza gratis y elige anual en Checkout al mejorar (o contacta ventas).",
"pricing.calc.badge": "Plan calculator",
"pricing.calc.title": "Find the right plan",
"pricing.calc.lead": "Enter feeds, catalog size, and how many products you want to enhance with AI (count each language pass).",
"pricing.calc.feeds": "Feed sources",
"pricing.calc.feedsHint": "Supplier / import feeds you need to connect",
"pricing.calc.skus": "Catalog products (SKUs)",
"pricing.calc.skusHint": "Total products you will store and process",
"pricing.calc.aiVolume": "AI process volume",
2026-08-17 00:39:25 +02:00
"pricing.calc.aiHint": "Roughly products × languages you want to enhance per month",
"pricing.calc.recommendedLabel": "Recommended",
"pricing.calc.budgetLabel": "Budget option",
"pricing.calc.coversCredits": "Needs about {count} AI credits / month",
"pricing.calc.aiIncluded": "Included monthly credits cover this AI volume",
2026-08-17 00:39:25 +02:00
"pricing.calc.aiNeedsPacks": "Add {count}× {pack} (~{usd}) for the AI shortfall",
"pricing.calc.orYearly": "or ~{amount}/mo yearly",
"pricing.calc.budgetNote": "Lower list price with yearly discount and/or credit packs when that still fits.",
"pricing.calc.noBudget": "The recommended plan is already the leanest fit for these inputs.",
"pricing.calc.enterpriseTitle": "Sounds like Enterprise",
"pricing.calc.enterpriseBody": "Your feeds or catalog size exceed self-serve caps. Talk to sales for unlimited capacity and a managed AI grant or BYOK.",
"pricing.calc.ctaPlan": "Choose {name}",
"pricing.calc.disclaimer": "Estimates use list prices and ~2 credits per AI product enhance. Checkout prices come from Stripe. A1 and other client deals stay admin-only.",
2026-08-17 00:39:25 +02:00
"pricing.card.mostPopular": "Más popular",
"pricing.card.custom": "Personalizado",
"pricing.card.forever": "para siempre",
"pricing.card.perMonth": "mes",
2026-08-17 00:39:25 +02:00
"pricing.card.perYear": "año",
"pricing.card.savePerMonth": "Ahorra ${amount}/mes",
"pricing.card.discountBadge": "-20%",
"pricing.card.unlimitedSkus": "SKU ilimitados",
2026-08-17 00:39:25 +02:00
"pricing.card.oneMSkus": "Más de 1M de SKU",
"pricing.card.upToSkus": "Hasta {count} SKU",
2026-08-17 00:39:25 +02:00
"pricing.card.unlimitedAi": "Créditos de IA ilimitados",
"pricing.card.zeroCredits": "0 créditos de IA / mes",
"pricing.card.creditsPerMonth": "{count} créditos de IA / mes",
"pricing.card.showLess": "Mostrar menos",
2026-08-17 00:39:25 +02:00
"pricing.card.showMoreFeature": "Mostrar {count} función más",
"pricing.card.showMoreFeatures": "Mostrar {count} funciones más",
"pricing.card.upgradeTo": "Mejorar a {name}",
2026-08-17 00:39:25 +02:00
"pricing.plan.free.description": "Mapea un feed de muestra y limpia datos de producto — sin tarjeta",
"pricing.plan.starter.description": "Catálogos pequeños que necesitan títulos y descripciones con IA",
"pricing.plan.plus.description": "Más productos, feeds e IA para catálogos en crecimiento",
"pricing.plan.growth.description": "Feeds multi-proveedor hacia tiendas y exportaciones shopping",
2026-08-17 00:39:25 +02:00
"pricing.plan.business.description": "Catálogos mid-market con BYOK",
"pricing.plan.scale.description": "Catálogos a escala de distribuidor con soporte prioritario",
"pricing.plan.enterprise.description": "Capacidad ilimitada, SLA y un equipo de cuenta dedicado",
"pricing.feature.credits100": "100 AI credits / month (~50% catalog cover)",
"pricing.feature.credits100starter": "100 AI credits / month (~50% catalog cover)",
"pricing.feature.credits400": "400 AI credits / month (~50% catalog cover)",
"pricing.feature.credits600": "600 AI credits / month (~10% credit base)",
"pricing.feature.credits1800": "1,800 AI credits / month (~6% credit base)",
"pricing.feature.credits2700": "2,700 AI credits / month (~15% credit base)",
"pricing.feature.credits5000base": "5,000 AI credits / month (~10% credit base)",
"pricing.feature.credits7000": "7,000 AI credits / month (~20% credit base)",
"pricing.feature.credits12000": "12,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits16000": "16,000 AI credits / month (~16% credit base)",
"pricing.feature.upTo1mSkus": "Up to 1,000,000 SKUs",
"pricing.feature.upTo15kSkus": "Up to 15,000 SKUs",
"pricing.feature.credits15000": "15,000 AI credits / month (~75% catalog cover)",
"pricing.feature.credits60000": "60,000 AI credits / month (~75% catalog cover)",
"pricing.feature.upTo50Skus": "Hasta 50 SKU",
"pricing.feature.upTo100Skus": "Up to 100 SKUs",
"pricing.feature.upTo400Skus": "Up to 400 SKUs",
"pricing.feature.upTo1200Skus": "Up to 1,200 SKUs",
"pricing.feature.upTo4kSkus": "Up to 4,000 SKUs",
"pricing.feature.upTo12kSkus": "Up to 12,000 SKUs",
"pricing.feature.oneFeedSource": "1 fuente de feed",
"pricing.feature.twoFeedSources": "2 feed sources",
"pricing.feature.threeFeedSources": "3 fuentes de feed",
"pricing.feature.fourFeedSources": "4 feed sources",
"pricing.feature.sixFeedSources": "6 feed sources",
"pricing.feature.twelveFeedSources": "12 feed sources",
"pricing.feature.twentyFiveFeedSources": "25 feed sources",
"pricing.feature.cleanData": "Limpia datos, analiza specs y rellena campos",
2026-08-17 00:39:25 +02:00
"pricing.feature.eprel": "Etiquetas energéticas UE (EPREL)",
"pricing.feature.zeroCredits": "0 créditos de IA / mes",
"pricing.feature.oneManualExport": "1 feed de exportación manual",
"pricing.feature.twoExports": "2 export feeds",
"pricing.feature.fourExports": "4 export feeds",
2026-08-17 00:39:25 +02:00
"pricing.feature.wooTestOnly": "Solo prueba de conexión WooCommerce",
"pricing.feature.upTo2Seats": "Hasta 2 asientos",
2026-08-17 00:39:25 +02:00
"pricing.feature.aiTitles": "Títulos y descripciones con IA",
"pricing.feature.liveStoreSync": "Sync en vivo con la tienda",
"pricing.feature.apiAccess": "Acceso a la API",
"pricing.feature.byok": "Trae tu propia clave de IA",
"pricing.feature.upTo500Skus": "Hasta 500 SKU",
"pricing.feature.upTo1000Skus": "Up to 1,000 SKUs",
"pricing.feature.fiveFeedSources": "5 feed sources",
"pricing.feature.fiveExports": "5 export feeds",
"pricing.feature.credits250": "250 AI credits / month (~25% catalog cover)",
"pricing.feature.credits1000": "1,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits1000full": "1,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits10000full": "10,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits50000full": "50,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits100000": "100,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits225000": "225,000 AI credits / month (~75% catalog cover)",
"pricing.feature.credits12500": "12,500 AI credits / month (~25% catalog cover)",
"pricing.feature.credits30000": "30,000 AI credits / month (~20% catalog cover)",
"pricing.feature.upTo75kSkus": "Up to 75,000 SKUs",
2026-08-17 00:39:25 +02:00
"pricing.feature.threeExports": "3 feeds de exportación",
"pricing.feature.sixExports": "6 export feeds",
"pricing.feature.tenExports": "10 export feeds",
"pricing.feature.fullWooSync": "Sync completa de WooCommerce",
"pricing.feature.readApi": "Acceso de lectura a la API",
"pricing.feature.emailSupport": "Soporte por email",
"pricing.feature.creditPacks": "Buy extra AI credit packs",
"pricing.feature.upTo2500Skus": "Hasta 2.500 SKU",
"pricing.feature.upTo1500Skus": "Up to 1,500 SKUs",
"pricing.feature.upTo3500Skus": "Up to 3,500 SKUs",
"pricing.feature.upTo9500Skus": "Up to 9,500 SKUs",
"pricing.feature.upTo18kSkus": "Up to 18,000 SKUs",
"pricing.feature.upTo55kSkus": "Up to 55,000 SKUs",
"pricing.feature.upTo5000Skus": "Up to 5,000 SKUs",
"pricing.feature.eightFeedSources": "8 fuentes de feed",
2026-08-17 00:39:25 +02:00
"pricing.feature.credits500": "500 créditos de IA / mes",
"pricing.feature.credits1250": "1,250 AI credits / month (~25% catalog cover)",
"pricing.feature.credits5000": "5,000 AI credits / month (~25% catalog cover)",
2026-08-17 00:39:25 +02:00
"pricing.feature.eightExports": "8 feeds de exportación",
"pricing.feature.fifteenExports": "15 export feeds",
"pricing.feature.wooShopifySync": "Sync completa WooCommerce + Shopify",
"pricing.feature.upTo10kSkus": "Hasta 10.000 SKU",
"pricing.feature.upTo25kSkus": "Up to 25,000 SKUs",
"pricing.feature.fifteenFeedSources": "15 fuentes de feed",
"pricing.feature.tenFeedSources": "10 feed sources",
"pricing.feature.twentyFeedSources": "20 feed sources",
"pricing.feature.thirtyFeedSources": "30 feed sources",
2026-08-17 00:39:25 +02:00
"pricing.feature.credits1200": "1.200 créditos de IA / mes",
"pricing.feature.credits10000": "10,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits25000": "25,000 AI credits / month (~50% catalog cover)",
2026-08-17 00:39:25 +02:00
"pricing.feature.twentyExports": "20 feeds de exportación",
"pricing.feature.fortyExports": "40 export feeds",
2026-08-17 00:39:25 +02:00
"pricing.feature.fullFormulas": "Fórmulas y variables completas",
"pricing.feature.fullApi": "Acceso completo a la API",
"pricing.feature.byokAddon": "Complemento bring-your-own-key",
"pricing.feature.emailSupport24h": "Soporte por email (24 h)",
"pricing.feature.upTo40kSkus": "Hasta 40.000 SKU",
"pricing.feature.upTo50kSkus": "Up to 50,000 SKUs",
"pricing.feature.fortyFeedSources": "40 fuentes de feed",
"pricing.feature.fiftyFeedSources": "50 feed sources",
2026-08-17 00:39:25 +02:00
"pricing.feature.credits4000": "4.000 créditos de IA / mes",
"pricing.feature.credits40000": "40,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits50000half": "50,000 AI credits / month (~50% catalog cover)",
2026-08-17 00:39:25 +02:00
"pricing.feature.unlimitedExports": "Feeds de exportación ilimitados",
"pricing.feature.fullApiWebhooks": "API completa",
"pricing.feature.byokIncluded": "Tu propia clave de IA incluida",
"pricing.feature.priorityEmail": "Soporte prioritario por email",
"pricing.feature.upTo100kSkus": "Hasta 100.000 SKU",
"pricing.feature.upTo150kSkus": "Up to 150,000 SKUs",
"pricing.feature.hundredFeedSources": "100 fuentes de feed",
"pricing.feature.hundredFiftyFeedSources": "150 feed sources",
2026-08-17 00:39:25 +02:00
"pricing.feature.credits8000": "8.000 créditos de IA / mes",
"pricing.feature.credits50000": "50,000 AI credits / month (~25% catalog cover)",
"pricing.feature.credits120000": "120,000 AI credits / month (~40% catalog cover)",
"pricing.feature.prioritySlack": "Soporte prioritario + Slack",
"pricing.feature.unlimitedSkus": "SKU ilimitados",
"pricing.feature.unlimitedFeeds": "Fuentes de feed ilimitadas",
2026-08-17 00:39:25 +02:00
"pricing.feature.unlimitedAiOwnKey": "Créditos de IA ilimitados / clave propia",
"pricing.feature.ssoWebhooksAm": "SSO, gestor de cuenta dedicado",
"pricing.feature.customIntegrations": "Integraciones a medida",
"pricing.feature.slaPriority": "SLA y soporte prioritario",
"pricing.pack.tiny.name": "Nano pack",
2026-08-17 00:39:25 +02:00
"pricing.pack.tiny.desc": "Smoke tests / tiny fixes (25 credits ≈ 12 AI products)",
"pricing.pack.small.name": "Starter pack",
"pricing.pack.small.desc": "Extra AI for fixes and tests (~250 products)",
"pricing.pack.medium.name": "Growth pack",
"pricing.pack.medium.desc": "Keep enhancing after the monthly plan allowance (~1,000 products)",
"pricing.pack.large.name": "Catalog pack",
"pricing.pack.large.desc": "Big top-up for large catalogs and re-runs (~5,000 products)",
"pricing.pack.xl.name": "Scale pack",
"pricing.pack.xl.desc": "Heavy usage / agency bursts (~20,000 products)",
"pricing.pack.xxl.name": "Business pack",
2026-08-17 00:39:25 +02:00
"pricing.pack.xxl.desc": "Large multi-language buffer (3,000 credits ≈ 1,500 AI products)",
"pricing.pack.mega.name": "Scale pack",
2026-08-17 00:39:25 +02:00
"pricing.pack.mega.desc": "Distributor / agency burst (8,000 credits ≈ 4,000 AI products)",
"pricing.section.faqDescription": "Respuestas claras sobre planes, créditos y lo que incluye Free.",
"billing.buyCreditPacks": "Buy AI credit packs",
2026-08-17 00:39:25 +02:00
"billing.buyCreditPacksHint": "Plans cover ~75% of your SKU cap with AI. Top up anytime for the rest, fixes, and tests — without changing your plan.",
"billing.packCredits": "{credits} créditos",
"billing.packApproxProducts": "~{count} AI products",
"billing.buyPack": "Buy",
2026-08-17 00:39:25 +02:00
"billing.checkoutCompletePack": "Credit pack purchased — {credits} AI credits added.",
"billing.packCheckoutFailed": "Could not start credit pack checkout.",
"empty.default.noItems": "No se encontraron elementos.",
"settings.tabLockedHint": "Not on your plan",
"stores.connectorLocked": "Not on your plan",
"stores.connectorUpgrade": "Upgrade to unlock",
2026-08-17 00:39:25 +02:00
"plan.upgrade.title": "Esta función no está en tu plan",
"plan.upgrade.message": "Mejora tu plan para desbloquear esta parte de Descrybe.",
2026-08-17 00:39:25 +02:00
"plan.upgrade.defaultMessage": "Tu plan actual no incluye esta parte de Descrybe. Mejora el plan para desbloquearla, o pide a un administrador de la empresa si no puedes cambiar la facturación.",
"plan.upgrade.sectionOff.title": "Esta función no está disponible temporalmente",
"plan.upgrade.sectionOff.message": "Esta parte de Descrybe está desactivada en la plataforma ahora mismo. No es un problema de upgrade: inténtalo más tarde o contacta con soporte.",
"plan.upgrade.sectionOff.cta": "Volver al panel",
"plan.upgrade.stores.message": "Los conectores de WooCommerce y Shopify requieren un plan que incluya Tiendas. Mejora el plan para conectar esas tiendas, o sigue con feeds y la API en tu plan actual.",
"plan.upgrade.stillWorks.title": "Lo que sigue funcionando en tu plan",
"plan.upgrade.stillWorks.feeds.label": "Feeds de entrada",
2026-08-17 00:39:25 +02:00
"plan.upgrade.stillWorks.feeds.description": "Añade URLs CSV o XML y cargas de archivos para sincronizar catálogos sin conectores de tienda.",
"plan.upgrade.stillWorks.export.label": "Feeds de exportación",
"plan.upgrade.stillWorks.export.description": "Genera feeds salientes para canales de compra y partners.",
"plan.upgrade.stillWorks.processing.label": "Tareas en segundo plano",
2026-08-17 00:39:25 +02:00
"plan.upgrade.stillWorks.processing.description": "Supervisa trabajos de IA y catálogo en Procesamiento: disponible en tu plan aunque no tengas conectores de tienda.",
"plan.upgrade.stillWorks.api.label": "Claves API",
2026-08-17 00:39:25 +02:00
"plan.upgrade.stillWorks.api.description": "Crea una clave en Ajustes para usar /api/v1 — el secreto solo se muestra una vez.",
"plan.upgrade.stillWorks.docs.label": "Docs de la API",
2026-08-17 00:39:25 +02:00
"plan.upgrade.stillWorks.docs.description": "Lee la visión general de la API e intégrala sin WooCommerce ni Shopify.",
"plan.upgrade.feature.settings.api_keys": "Las claves API requieren un plan de pago",
2026-08-17 00:39:25 +02:00
"plan.upgrade.feature.catalog.products.process_ai_titles": "Los títulos con IA son una función de pago",
"plan.upgrade.feature.catalog.products.process_ai_descriptions": "Las descripciones con IA son una función de pago",
"plan.upgrade.feature.marketing.campaigns.generate_ai": "La IA de campañas requiere un plan de pago",
"plan.upgrade.feature.marketing.campaigns.send": "El envío real de campañas requiere un plan de pago",
"plan.upgrade.feature.marketing.brand_ai_apply": "La voz de marca en la IA requiere un plan de pago",
"plan.upgrade.feature.marketing.seo.ai_rewrite": "La reescritura SEO con IA requiere un plan de pago",
"plan.upgrade.feature.integrations.ai.byok": "Traer tu propia clave de IA empieza en Growth",
"plan.upgrade.feature.capability.byok": "Traer tu propia clave de IA empieza en Growth",
2026-08-17 00:39:25 +02:00
"plan.upgrade.feature.marketing.campaigns": "Las campañas no están en tu plan",
"plan.upgrade.feature.marketing.content_calendar": "El calendario de contenido no está en tu plan",
"plan.upgrade.feature.marketing.seo": "Las herramientas SEO no están en tu plan",
"plan.upgrade.feature.marketing.brand_kit": "El kit de marca no está en tu plan",
"plan.upgrade.feature.marketing.reviews": "Las reseñas no están en tu plan",
"plan.upgrade.feature.integrations.ai": "Las integraciones de IA no están en tu plan",
"plan.upgrade.feature.integrations.email": "El envío de email no está en tu plan",
"plan.upgrade.feature.processing.monitor": "Procesamiento no está en tu plan",
"plan.upgrade.feature.stores.hub": "Los conectores de tienda no están en tu plan",
"plan.upgrade.feature.stores.woocommerce": "WooCommerce no está en tu plan",
"plan.upgrade.feature.stores.shopify": "Shopify no está en tu plan",
"plan.upgrade.feature.support.center": "El Centro de soporte no está en tu plan",
"plan.upgrade.feature.support.ticket_create": "Crear tickets de soporte no está en tu plan",
"plan.upgrade.feature.support.ticket_thread": "Los hilos de tickets de soporte no están en tu plan",
"plan.upgrade.feature.catalog.structured_descriptions": "Las descripciones estructuradas no están en tu plan",
"plan.upgrade.feature.catalog.vector_categories": "Las categorías vectoriales no están en tu plan",
"plan.checkingAccess": "Comprobando acceso al plan…",
"upgradeBanner.comparePlans": "Comparar planes",
"upgradeBanner.talkToSales": "Hablar con ventas",
2026-08-17 00:39:25 +02:00
"commandPalette.closeAria": "Cerrar búsqueda",
"commandPalette.ariaLabel": "Buscar páginas",
"commandPalette.placeholder": "Buscar páginas…",
"commandPalette.searchAria": "Buscar páginas",
"commandPalette.destinationsAria": "Páginas",
"commandPalette.noMatches": "No hay páginas coincidentes",
"commandPalette.announceIdleOne": "Búsqueda. {count} página.",
"commandPalette.announceIdleMany": "Búsqueda. {count} páginas.",
"commandPalette.announceNone": "No hay páginas coincidentes.",
"commandPalette.announceMatchOne": "{count} página coincidente.",
"commandPalette.announceMatchMany": "{count} páginas coincidentes.",
"vector.title": "Prueba de categorías vectoriales",
"vector.description": "Busca en el índice de categorías vectoriales cuando Pinecone esté configurado. Crear índice e inicializar aún no están disponibles en v2.",
"vector.probing": "Comprobando la API de categorías vectoriales…",
"vector.unavailable": "Las categorías vectoriales aún no están en este backend. No hay nada que ejecutar aquí hasta que /api/vector-categories/* esté conectado.",
"vector.browseCategories": "Explorar categorías",
"vector.initHeading": "Inicializar base de datos vectorial",
2026-08-17 00:39:25 +02:00
"vector.initComingSoon": "Crear índice e Inicializar BD vectorial aún no están disponibles en v2 (próximamente). La búsqueda sigue funcionando cuando Pinecone está configurado.",
"vector.createIndex": "Crear índice",
"vector.initDb": "Inicializar BD vectorial",
2026-08-17 00:39:25 +02:00
"vector.searchHeading": "Buscar categorías",
"vector.searchPlaceholder": "Introduce la descripción del producto…",
"vector.results": "Resultados:",
2026-08-17 00:39:25 +02:00
"vector.categoryLabel": "Categoría:",
"vector.idLabel": "ID:",
2026-08-17 00:39:25 +02:00
"vector.scoreLabel": "Puntuación:",
"switcher.switching": "Cambiando…",
"switcher.returnTo": "Volver a {email}",
"switcher.switchUser": "Cambiar de usuario",
2026-08-17 00:39:25 +02:00
"switcher.loadingUsers": "Cargando usuarios…",
"switcher.empty": "No se encontraron usuarios intercambiables.",
"switcher.noCompany": "Sin empresa",
"switcher.unknownCompany": "Empresa desconocida",
"companySwitcher.select": "Seleccionar empresa",
"companySwitcher.switchAria": "Cambiar de empresa: {label}",
"companySwitcher.companies": "Empresas",
2026-08-14 00:06:43 +02:00
"companySwitcher.returnTo": "Volver a {name}",
"companySwitcher.returnHome": "Volver a la empresa de origen",
"storeReconnect.primaryLabel": "Reconectar tienda",
2026-08-17 00:39:25 +02:00
"storeReconnect.titlePlural": "Reconectar tiendas tras la migración",
"storeReconnect.titleChannel": "Reconectar {channel} tras la migración",
"storeReconnect.titleSingular": "Reconectar tienda tras la migración",
"storeReconnect.messageWithItems": "Las credenciales de la API de la tienda no se transfirieron (o no se pueden usar) tras la migración de la plataforma. Esto no es una sincronización rota: reconecta cada tienda y luego prueba la conexión antes de encolar una sincronización.",
"storeReconnect.messageSingle": "Las credenciales de la API de {channel} no se transfirieron (o no se pueden usar) tras la migración de la plataforma. Esto no es una sincronización rota: pega credenciales nuevas, guarda y prueba la conexión antes de encolar una sincronización.",
"storeReconnect.channelFallback": "Tienda",
"storeReconnect.askAdmin": "Pide a un administrador de la empresa que reconecte: solo los administradores pueden guardar credenciales de tienda.",
"storeReconnect.reconnectItem": "Reconectar {label}",
"admin.storeReconnect.channel.other": "Other",
"admin.storeReconnect.channel.woocommerce": "WooCommerce",
"admin.storeReconnect.channel.shopify": "Shopify",
"admin.storeReconnect.reason.other": "Other",
"admin.storeReconnect.reason.missingCredentials": "Missing credentials",
"admin.storeReconnect.enabledNo": "No",
"admin.storeReconnect.enabledYes": "Yes",
"admin.storeReconnect.colLastTest": "Last test",
"admin.storeReconnect.colEnabled": "Enabled",
"admin.storeReconnect.colReason": "Reason",
"admin.storeReconnect.colIdentity": "Identity",
"admin.storeReconnect.colChannel": "Channel",
"admin.storeReconnect.colCompany": "Company",
"admin.storeReconnect.noRows": "No rows in this page.",
"admin.storeReconnect.noneFound": "No stores need reconnect right now.",
"admin.storeReconnect.needsBadge": "Needs reconnect",
"admin.storeReconnect.cleanBadge": "No gaps",
"admin.storeReconnect.listDesc": "Store URL / shop domain present without usable secrets (matches merchant reconnect banner).",
"admin.storeReconnect.listTitle": "Connected but invalid",
"admin.storeReconnect.metric.showing": "Rows shown",
"admin.storeReconnect.metric.total": "Gaps total",
2026-08-17 00:39:25 +02:00
"admin.storeReconnect.cutoverHint": "Read-only inventory. Merchants reconnect via /stores/wizard or the channel Connection tab — this page does not mutate credentials.",
"admin.storeReconnect.loadFailed": "Could not load store reconnect inventory.",
"admin.storeReconnect.refresh": "Refresh",
"admin.storeReconnect.description": "Companies with a connected store identity but missing or unusable API credentials (cutover credential gaps).",
"admin.storeReconnect.title": "Store reconnect inventory",
"admin.nav.storeReconnect": "Store reconnect",
"storeReconnect.wizardHint": "Prefer a step-by-step flow? Open Guided setup (/stores/wizard), or reconnect the channel below and Test Connection before syncing.",
"storeReconnect.wizardLabel": "Guided setup",
2026-08-17 00:39:25 +02:00
"storeReconnect.reviewsHint": "La importación de reseñas no puede ejecutarse hasta reconectar las credenciales tras la migración. En la pestaña Conexión: Guardar, luego Probar la conexión.",
"storeReconnect.ordersHint": "La importación de pedidos no puede ejecutarse hasta reconectar las credenciales tras la migración. En la pestaña Conexión: Guardar, luego Probar la conexión.",
"productSync.directionTitle": "Productos: Descrybe → tienda",
"productSync.outbound": "Descrybe → {channel}",
"productSync.outboundBody": "— envía productos Descrybe procesados a la tienda (crea o actualiza productos remotos coincidentes). No importa el catálogo de la tienda a Descrybe.",
"productSync.firstSync": "Primera sincronización",
"productSync.firstSyncBody": "— los productos sin coincidencia se crean en {channel}. Las sincronizaciones posteriores actualizan productos ya vinculados por id o estrategia de coincidencia.",
"productSync.reSync": "Re-sincronizar",
2026-08-17 00:39:25 +02:00
"productSync.reSyncBody": "— los productos remotos coincidentes pueden sobrescribirse con contenido de Descrybe ({count} vinculados hasta ahora).",
"productSync.queued": "Sincronización de productos en cola",
"productSync.live.queued": "En cola — esperando al worker",
"productSync.live.running": "Sincronización en curso",
"productSync.live.watching": "Observando el estado… los recuentos aparecen al terminar.",
"productSync.live.success": "Sincronización terminada: {total} total · {created} creados · {updated} actualizados · {failed} fallidos · {skipped} omitidos",
"productSync.live.partial": "Sincronización con fallos: {total} total · {created} creados · {updated} actualizados · {failed} fallidos · {skipped} omitidos",
"productSync.live.failed": "Sincronización fallida{detail}.",
"productSync.live.timedOut": "Aún en curso — actualiza más tarde para el estado y los recuentos finales.",
"productSync.live.ordersSuccess": "Sincronización de pedidos terminada ({status}).",
"productSync.live.reviewsSuccess": "Sincronización de reseñas terminada ({status}).",
"productSync.retry": "Reintentar sincronización",
"productSync.lastStatus": "Última: {status}",
"productSync.dryRun": "Simulación",
"productSync.lastSyncAt": "Última sincronización de productos: {date}",
"productSync.noneYet": "Aún no se ha completado ninguna sincronización de productos.",
"productSync.lastRun": "Última ejecución: {total} total · {created} creados · {updated} actualizados · {failed} fallidos · {skipped} omitidos",
"productSync.needsReconnect": "La sincronización de productos no puede ejecutarse hasta reconectar las credenciales tras la migración. En la pestaña Conexión: Guardar, luego Probar la conexión.",
"productSync.scheduleTitle": "Programación de sync automática de productos",
"productSync.scheduleHelp": "Como los intervalos de feeds: define cada cuánto se envían productos a la tienda, o pausa la programación. La cola manual sigue disponible. No se usan webhooks de tienda: solo sondeo/cola.",
"productSync.scheduleInterval": "Intervalo de sync (horas)",
2026-08-17 00:39:25 +02:00
"productSync.scheduleIntervalHint": "1–168 horas. Por defecto 6 horas si no está definido en el servidor.",
"productSync.schedulePause": "Pausar sync automática",
"productSync.schedulePauseHint": "Detiene solo los envíos programados. Aún puedes encolar un sync manual.",
"productSync.scheduleSave": "Guardar programación",
"productSync.scheduleSaved": "Programación de sync de productos guardada.",
"productSync.schedulePausedSaved": "Sync automática de productos en pausa.",
"productSync.scheduleSaveFailed": "No se pudo guardar la programación de sync",
"productSync.schedulePausedBadge": "Programación en pausa",
"productSync.scheduleActiveBadge": "Programación activa",
"productSync.scheduleNeedsConfig": "Guarda primero la conexión de la tienda",
"productSync.scheduleAdminOnly": "Se requiere admin de la empresa",
"productSync.delivery.title": "Las actualizaciones usan sondeo, no webhooks de la tienda",
2026-08-17 00:39:25 +02:00
"productSync.delivery.body": "Descrybe no recibe webhooks de Shopify ni WooCommerce. Los envíos de productos se ejecutan al encolarlos o según el horario automático. Esta página sigue el progreso consultando el estado de la conexión — no con eventos push en vivo de la tienda.",
"productSync.delivery.inboundNote": "Pedidos y reseñas también usan descargas en cola (programadas o manuales), no webhooks en vivo.",
"productSync.delivery.hubNote": "Los conectores de tienda sincronizan según horario o al encolar un trabajo — no vía webhooks en vivo.",
"productSync.delivery.badge.manual": "Cola manual",
"productSync.delivery.badge.scheduled": "Programado cada {hours} h",
"productSync.delivery.badge.scheduledDefault": "Programado (predeterminado del servidor)",
"productSync.delivery.badge.paused": "Horario en pausa",
"productSync.delivery.badge.webhooksOff": "Webhooks de tienda: no disponibles",
"productSync.scope.title": "What to sync",
"productSync.scope.hint": "Optional filters for this push only. Leave blank to sync the latest processed products up to the limit.",
"productSync.scope.status": "Status",
"productSync.scope.statusAll": "All statuses",
"productSync.scope.statusCompleted": "Completed",
"productSync.scope.statusNeedsReview": "Needs review",
"productSync.scope.statusProcessing": "Processing",
"productSync.scope.statusError": "Error",
"productSync.scope.category": "Category",
"productSync.scope.categoryPlaceholder": "Exact category name (optional)",
"productSync.scope.limit": "Max products",
"productSync.scope.products": "Specific products",
"productSync.scope.productsHint": "Optional. Search and select processed products to push only those.",
"productSync.scope.productsOverrideHint": "Selected products override status, category, and max-products filters for this sync.",
2026-08-17 00:39:25 +02:00
"productSync.scope.productsSearch": "Search products…",
"productSync.scope.productsLoading": "Loading products…",
"productSync.scope.productsEmpty": "No processed products found.",
"productSync.scope.productsSelected": "{count} selected",
"productSync.scope.productsSelectedList": "Selected products",
"productSync.scope.productsClear": "Clear selection",
"productSync.scope.productsMax": "Maximum {max} products",
2026-08-17 00:39:25 +02:00
"store.syncingLive": "Sincronizando…",
"files.recentUploads": "Cargas recientes",
"files.colFileName": "Nombre del archivo",
"files.colKind": "Tipo",
"files.colUploaded": "Subido",
"files.colRows": "Filas",
2026-08-17 00:39:25 +02:00
"files.loading": "Cargando archivos…",
"files.empty": "Aún no hay cargas.",
"products.filters.sortProducts": "Ordenar productos",
"products.table.options": "Opciones",
};