/** Spanish (es) UI pack — keys must stay in sync with en.ts. */
exportconstes: 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",
"common.you":"Tú",
"common.active":"Activo",
"common.pending":"Pendiente",
"common.email":"Correo electrónico",
"common.password":"Contraseña",
"common.name":"Tu nombre",
"common.viewPricing":"Ver precios",
"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",
"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",
"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",
"nav.categories":"Categorías",
"nav.attributes":"Atributos",
"nav.fields":"Campos",
"nav.feeds":"Feeds",
"nav.exports":"Exportaciones",
"nav.stores":"Tiendas",
"nav.jobs":"Trabajos",
"nav.campaigns":"Campañas",
"nav.calendar":"Calendario",
"nav.seo":"SEO",
"nav.brand":"Marca",
"nav.reviews":"Reseñas",
"nav.ai":"IA",
"nav.email":"Correo electrónico",
"nav.billing":"Facturación",
"nav.settings":"Configuración",
"nav.support":"Soporte",
"nav.admin":"Admin",
"nav.main":"Navegación principal",
"nav.sidebar":"Barra lateral de la app",
"nav.close":"Cerrar navegación",
"nav.closeMenu":"Cerrar menú",
"nav.open":"Abrir navegación",
"nav.commandPalette":"Buscar páginas",
"nav.commandPaletteLabel":"Buscar",
"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",
"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",
"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",
"auth.forgot.submitting":"Enviando…",
"auth.forgot.failed":"No se pudo solicitar el restablecimiento",
"auth.forgot.sentTitle":"Revisa tu correo",
"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.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",
"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.",
"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",
"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",
"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:",
"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",
"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",
"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",
"settings.title":"Configuración",
"settings.description":"Cuenta, empresa, claves API y equipo.",
"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",
"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",
"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",
"settings.teamHeading":"Miembros del equipo",
"settings.inviteUser":"Invitar usuario",
"settings.teamAdminOnly":"Solo los administradores de la empresa pueden invitar, ascender, degradar o eliminar compañeros.",
"settings.shareAcceptLink":"Compartir enlace de aceptación",
"settings.shareAcceptLinkHelp":"El correo saliente no está configurado. Copia este enlace de un solo uso y envíaselo al invitado. Establecerá una contraseña (al menos 8 caracteres) y se unirá con el rol que elegiste.",
"settings.acceptLinkLabel":"Enlace de aceptación de invitación de un solo uso",
"settings.copyLink":"Copiar enlace",
"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.",
"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",
"settings.revokeInvite":"Revocar invitación",
"settings.needOneAdmin":"Las empresas necesitan al menos un administrador",
"settings.expires":"Caduca el {date}",
"settings.invalidEmail":"Introduce una dirección de correo válida.",
"settings.inviteCreatedNoMail":"Invitación creada para {email} como {role}. Copia el enlace de aceptación abajo y compártelo — el correo saliente no está configurado.",
"settings.inviteSent":"Invitación enviada a {email} como {role}. Debe abrir el correo y aceptar antes de que caduque.",
"settings.inviteFailed":"No se pudo enviar la invitación",
"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",
"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",
"settings.inviteTitle":"Invitar compañero",
"settings.inviteDescription":"Recibirá un enlace para establecer una contraseña (al menos 8 caracteres) y unirse a esta empresa.",
"settings.inviteRoleHint":"Los miembros gestionan productos y feeds. Los administradores también pueden invitar compañeros y cambiar la configuración de la empresa.",
"settings.sendInvite":"Enviar invitación",
"settings.companyHeading":"Configuración de la empresa",
"settings.activeCompany":"Empresa activa",
"settings.creditsOverview":"Resumen de créditos",
"settings.plan":"Plan tarifario",
"settings.used":"Usados",
"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",
"settings.contentSettings":"Configuración de contenido",
"settings.mergeProducts":"Fusionar productos con el mismo GTIN",
"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",
"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",
"settings.table.lastUsed":"Último uso",
"dashboard.demoSandbox":"Zona de pruebas demo",
"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",
"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",
"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.processRun":"Ejecutar trabajos de IA",
"dashboard.workflow.export":"Exportar",
"dashboard.workflow.exportReady":"Plantillas y descarga",
"dashboard.workflow.exportMap":"Mapear y exportar",
"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}",
"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",
"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",
"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",
"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",
"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",
"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",
"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.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",
"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",
"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",
"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)",
"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.",
"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",
"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",
"activation.stepsLabel":"Pasos de activación",
"activation.pausedTitle":"Primeros pasos en pausa",
"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",
"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",
"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.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.",
"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",
"stats.categories":"Categorías",
"stats.attributes":"Atributos",
"stats.feeds":"Feeds",
"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",
"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",
"toast.support.replyBody":"El equipo respondió a tu ticket de soporte.",
"toast.support.replyRe":"Re: {subject}",
"toast.support.statusTitle":"Estado del ticket actualizado",
"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.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",
"tutorial.resumeLastStep":"Reanudar último paso",
"tutorial.startFromBeginning":"Empezar desde el principio",
"tutorial.stepOf":"Paso {current} de {total}",
"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",
"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",
"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",
"tutorial.step.welcome.missingHint":"You’re on the dashboard — continue when ready.",
"tutorial.step.dashboard-overview.title":"Tu centro de mando",
"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.",
"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.",
"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.",
"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.",
"tutorial.step.connect-source.missingHint":"Open Feeds from the sidebar if this screen hasn’t loaded.",
"tutorial.step.map.title":"Mapear campos de origen",
"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.",
"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.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",
"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",
"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.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.",
"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.",
"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",
"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.",
"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.cloneCatalogAria":"Copiar el catálogo de {name} a tu empresa sandbox",
"admin.users.cloneCatalogTitle":"Copiar catálogo de empresa",
"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}",
"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.",
"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",
"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",
"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",
"admin.settings.mailCardDesc":"Invitaciones para establecer contraseña y correo saliente de la plataforma",
"admin.settings.creditPackPricesHint":"Create one-time Prices in Stripe (mode=payment products). Paste Price IDs here — same sync path as plan subscriptions.",
"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.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.",
"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",
"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",
"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.creditsDesc":"Acreditar o debitar el saldo de una empresa.",
"admin.billing.searchCompany":"Buscar empresa…",
"admin.knowledge.draft":"Borrador",
"admin.knowledge.badge.draft":"Borrador",
"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.settings.enablePlatformSmtp":"Activar SMTP de plataforma",
"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",
"admin.permissions.noteStrong":"Solo derechos del plan.",
"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.profilesHint":"One-click matrices for public ladder packages and migrated legacy navigation. Guardars overrides for the seleccionado package only.",
"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",
"admin.profile.free.description":"Público Free ladder — AI, clave APIs, live email, and own-key AI desactivado.",
"admin.profile.starter.label":"Starter",
"admin.profile.starter.description":"Público Starter — AI on; own-key AI desactivado.",
"admin.profile.growth.label":"Growth",
"admin.profile.growth.description":"Todas las funciones del catálogo activadas.",
"admin.profile.business.label":"Business",
"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.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.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.",
"admin.gates.section":"Sección",
"admin.gates.allSections":"Todas las secciones",
"admin.gates.search":"Buscar",
"admin.gates.searchPlaceholder":"Filtrar por clave o etiqueta",
"admin.gates.sectionOff":"Sección desactivado",
"admin.gates.noMatch":"Ninguna función coincide con los filtros actuales.",
"admin.gates.featureAria":"{label} global",
"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.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",
"admin.settings.card.aiRolesDesc":"Procesamiento, vectorization, docs/API, and soporte — separate keys/models",
"admin.settings.roleOff":" (desactivado)",
"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.support.disableAuto":"Desactivar auto para este ticket",
"admin.support.aiDraftTitle":"Borrador IA (aprobar o editar)",
"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}",
"admin.support.statusAfterSend":"Estado tras el envío",
"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",
"admin.support.closedBanner":"Este ticket está cerrado. Reábralo para continuar la conversación.",
"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.clearApiKey":"Borrar clave API guardada",
"admin.settings.apiKeyKeepPlaceholder":"•••• déjela en blanco para conservar",
"admin.settings.apiKeyNewPlaceholder":"sk-… o local",
"admin.settings.smtpCardTitle":"Plataforma SMTP",
"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",
"admin.settings.clearClientSecret":"Borrar secreto de cliente guardado",
"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",
"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",
"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",
"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",
"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.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",
"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.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.",
"admin.support.notAvailable":"El soporte no está disponible en este despliegue.",
"admin.support.loadFailed":"No se pudo cargar este ticket.",
"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",
"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",
"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",
"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.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",
"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",
"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",
"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",
"admin.knowledge.loadArticleFailed":"No se pudo cargar el artículo",
"admin.knowledge.loadTemplateFailed":"No se pudo cargar la plantilla",
"admin.knowledge.saveArticleFailed":"No se pudo guardar el artículo",
"admin.knowledge.saveTemplateFailed":"No se pudo guardar la plantilla",
"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.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.",
"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",
"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",
"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",
"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",
"admin.redirect.diagnostics":"Redirigiendo a Diagnósticos…",
"admin.redirect.stuck":"Redirigiendo a Productos atascados…",
"common.refresh":"Actualizar",
"common.delete":"Eliminar",
"common.clearSearch":"Borrar búsqueda",
"common.loading":"Cargando…",
"common.never":"Nunca",
"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",
"common.more":"+{count} más",
"feeds.title":"Tus feeds",
"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",
"feeds.addFeed":"Añadir Feed",
"feeds.searchPlaceholder":"Buscar feeds...",
"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",
"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",
"feeds.col.lastData":"Última sync",
"feeds.copyUrl":"Copiar URL",
"feeds.fieldsMapped":"{count} campos",
"feeds.fieldsMappedTitle":"{count} campo mapeado",
"feeds.mappingsSaved":"Mapeos de campos guardados",
"feeds.mapped":"Mapeado",
"feeds.notMapped":"Sin mapear",
"feeds.notMappedTitle":"Aún no hay mapeos de campos — abre Mapear para configurar",
"feeds.productsFromFeed":"{count} productos de este feed",
"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",
"feeds.productData":"Datos del catálogo",
"feeds.mapFields":"Mapear campos",
"feeds.map":"Mapear",
"feeds.sync":"Sincronizar",
"feeds.syncNow":"Sincronizar ahora",
"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",
"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",
"feeds.field.urlPlaceholder":"https://…",
"feeds.field.type":"Tipo",
"feeds.field.file":"Archivo CSV",
"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",
"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",
"feeds.historyDesc":"Trabajos de sync recientes de “{name}”.",
"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.",
"feeds.syncFinished":"Sincronización finalizada",
"feeds.viewProducts":"Ver productos",
"feeds.processing":"Procesamiento",
"feeds.syncFailed":"Error de sincronización",
"feeds.statusUpdateFailed":"No se pudo actualizar el estado",
"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",
"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",
"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.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",
"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",
"feeds.preview.loading":"Cargando vista previa…",
"feeds.preview.empty":"Extrae el esquema para previsualizar el origen del feed.",
"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}.",
"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}",
"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",
"mapping.ftpStillEdit":"{message} Aún puedes editar los mapeos. Para actualizar productos, pasa a HTTPS o sube un archivo.",
"mapping.ftpUploadCta":"Ir a Uploads",
"mapping.ftpHttpsCta":"Añadir feed HTTPS",
"mapping.ftpCsvCta":"Subir feed CSV",
"mapping.loading":"Cargando detalles del feed…",
"mapping.step1":"Seleccionar elemento de producto",
"mapping.step2":"Mapear campos",
"mapping.step1Heading":"Paso 1: Seleccionar elemento de producto",
"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",
"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",
"mapping.continue":"Continuar →",
"mapping.continueFields":"Continuar al mapeo de campos →",
"mapping.discovered":"Se descubrieron {fields} campos de origen en {rows} fila(s) de muestra.",
"mapping.suggestionsCount":"· {count} sugerencia(s) de auto-mapeo",
"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.appliedNew":"Se aplicaron {count} mapeo(s) {kind} nuevos ({total} en total).",
"mapping.kindHighConfidence":"de alta confianza",
"mapping.kindFuzzy":"aproximado(s)",
"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}",
"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}",
"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.sourcePreview.title":"Vista previa del origen del feed",
"mapping.sourcePreview.truncated":"Truncado",
"mapping.sourcePreview.refresh":"Actualizar vista previa",
"mapping.sourcePreview.copy":"Copiar vista previa",
"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",
"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.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",
"imports.description":"Importaciones CSV guardadas en este espacio de trabajo: productos, categorías y atributos.",
"imports.importProducts":"Importar productos",
"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",
"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",
"imports.col.size":"Tamaño",
"imports.actions":"Acciones de subida",
"imports.loadFailed":"Error al cargar las subidas",
"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)",
"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",
"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",
"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...",
"reviews.saveTestFirst":"Guarda las credenciales y prueba la conexión antes de sincronizar",
"reviews.refreshList":"Actualizar lista",
"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",
"reviews.col.reviewer":"Reseñador",
"reviews.col.rating":"Valoración",
"reviews.col.review":"Revisar",
"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",
"campaigns.emptyTitle":"Aún no hay campañas",
"campaigns.noMatches":"Sin coincidencias",
"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.",
"campaigns.create":"Crear campaña",
"campaigns.col.season":"Temporada",
"campaigns.col.updated":"Actualizado",
"campaigns.scheduled":"Programado {date}",
"campaigns.newTitle":"Nueva campaña",
"campaigns.newDesc":"Elige una temporada, selecciona productos y audiencia, escribe el prompt, luego genera, prueba y programa.",
"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",
"campaignWizard.pickSeasonHelp":"Empieza desde una plantilla — puedes editarlo todo después.",
"campaignWizard.useDefaultPrompt":"Usar prompt estacional por defecto",
"campaignWizard.promptLabel":"Prompt",
"campaignWizard.advanced":"Opciones avanzadas",
"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:",
"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.",
"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",
"campaignWizard.testSend":"Envío de prueba",
"campaignWizard.testSendHelp":"Envíate una copia antes de programar.",
"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.",
"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",
"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",
"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",
"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",
"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",
"settings.mergeOn":"Los productos con el mismo GTIN se fusionarán entre feeds.",
"settings.mergeOff":"Los productos con el mismo GTIN se mantienen separados.",
"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.",
"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.",
"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.",
"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.",
"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",
"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.",
"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.alert.ai_done.description":"Cuando un trabajo en segundo plano termina correctamente. Los toasts de inicio permanecen siempre activos para que Deshacer siga disponible.",
"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.",
"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}.",
"flash.admin.overridesCleared":"Anulaciones borradas — se usan los valores predeterminados del plan.",
"empty.plans.none":"No se encontraron planes.",
"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",
"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",
"empty.products.errorMessage":"Cuando un trabajo falla para un producto, aparecerá aquí para que puedas reintentar.",
"empty.products.filterTitleUnprocessed":"Sin coincidencias sin procesar",
"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",
"empty.products.retryCatalog":"Reintentar desde el catálogo",
"empty.products.connectFeed":"Conectar feed",
"empty.products.addProduct":"Añadir producto",
"empty.products.uploadCsv":"Subir CSV",
"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",
"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",
"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",
"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.",
"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",
"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",
"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",
"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",
"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",
"empty.admin.noProviderMessage":"Los tokens aparecen aquí cuando los productos registran un tipo de proveedor.",
"empty.admin.noCompaniesTitle":"Sin empresas",
"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",
"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.",
"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",
"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",
"empty.admin.noTemplatesMessage":"Las plantillas se emparejan como artículos y se publican como respuestas automáticas etiquetadas.",
"empty.admin.ticketNotFound":"Ticket no encontrado.",
"empty.admin.supportUnavailable":"El soporte no está disponible en este despliegue.",
"empty.admin.ticketLoadFailed":"No se pudo cargar este ticket.",
"empty.admin.noMessages":"Aún no hay mensajes.",
"empty.admin.translationsUnavailableTitle":"Traducciones no disponibles",
"empty.admin.translationsUnavailableMessage":"El endpoint del catálogo de traducciones no está disponible en esta build.",
"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.",
"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}",
"blast.typePhrase":"Escribe “I understand”",
"blast.placeholder":"I understand",
"blast.runDryRun":"Ejecutar prueba",
"blast.send":"Enviar blast",
"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",
"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",
"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",
"support.statusFilterSuffix":"· estado {status}",
"support.filterByStatus":"Filtrar by status",
"support.unavailableTitle":"Soporte no disponible",
"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.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",
"support.new.category":"Categoría",
"support.new.priority":"Prioridad",
"support.new.optional":"Opcional details",
"support.new.optionalHint":"(SKU, etiquetas — ayuda al enrutado)",
"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",
"products.empty.error.message":"Cuando un trabajo falla para un producto, aparecerá aquí para que puedas reintentar.",
"products.empty.noUnprocessedMatches":"Sin coincidencias sin procesar",
"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",
"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.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.resetConfirm":"Confirmar restablecer a sin procesar",
"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",
"attributes.type.multiselectHint":"Elige una o más opciones de una lista",
"attributes.color":"Color",
"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.",
"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",
"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'",
"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",
"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",
"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.group.nameHint":"Nombre para mostrar de este grupo",
"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",
"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.",
"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",
"billing.loadFailed":"No se pudo cargar la facturación",
"billing.usageLoadFailed":"No se pudo cargar el uso",
"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",
"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.",
"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",
"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.",
"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",
"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",
"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",
"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",
"billing.periodEnds":"El periodo de facturación termina el {date}",
"billing.managePlanOnPlans":"Gestionar plan en Planes",
"billing.recovery.pastDueTitle":"Pago atrasado",
"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.contactAdmin":"Contactar a un administrador",
"billing.recovery.goToBilling":"Ir a Facturación",
"billing.recovery.missingPlanTitle":"Sin plan asignado",
"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.",
"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",
"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",
"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",
"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",
"exports.howTo.customBody":"— cualquier partner; la misma URL pública sirve para cron / pollers tipo webhook.",
"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",
"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",
"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",
"exports.col.lastGenerated":"Última generación",
"exports.col.status":"Estado",
"exports.col.actions":"Acciones",
"exports.working":"Trabajando…",
"exports.generatingShort":"Generando…",
"exports.copyUrl":"Copiar URL",
"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",
"exports.deleting":"Eliminando…",
"exports.channelPreset":"Preset de canal",
"exports.name":"Nombre",
"exports.format":"Formato",
"exports.sourceFeed":"Feed de origen (opcional)",
"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",
"exports.rootElement":"Elemento raíz",
"exports.itemElement":"Elemento de ítem",
"exports.productStatuses":"Estados de producto (separados por comas)",
"exports.productStatusesHelp":"Incluya solo productos con estos estados (p. ej. active). Déjelo vacío para todos los estados.",
"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",
"exports.updated":"Feed de exportación actualizado.",
"exports.created":"Feed de exportación creado.",
"exports.saveFailed":"Error al guardar",
"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.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_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.meta_csv.label":"Catálogo Meta (CSV)",
"exports.preset.meta_csv.shortLabel":"Meta CSV",
"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_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.",
"exports.preset.custom_xml.defaultName":"Exportación XML personalizada",
"processing.title":"Procesamiento",
"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",
"processing.tooManyRequests":"Demasiadas solicitudes — espera un momento e inténtalo de nuevo.",
"processing.serverError":"{fallback} (error del servidor {status}). Inténtalo en breve.",
"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.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.receipt.cancelledMany":"Trabajos de procesamiento cancelados",
"processing.receipt.cancelledDesc":"El trabajo recién iniciado se canceló.",
"processing.receipt.cancelFailed":"No se pudo cancelar el trabajo de procesamiento",
"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",
"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",
"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",
"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}",
"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.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",
"stores.wizard.pickChannelBody":"Elige WooCommerce o Shopify. Completa conectar → probar → primera sync en la página del conector y vuelve aquí.",
"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.feedUrl.description":"Pull any supplier or tienda catalog from a public CSV or XML URL on a schedule. Map fields, then sync.",
"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",
"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",
"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.",
"store.connectionTestFailed":"Prueba de conexión fallida",
"store.testFailed":"Prueba fallida",
"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",
"store.loadingOrders":"Cargando pedidos…",
"store.loadingOrdersDot":"Cargando pedidos.",
"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}.",
"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",
"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",
"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",
"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.openDevelopAppsNeedDomain":"Enter your shop domain below to unlock a direct Admin link for this store.",
"shopify.setup.openDevelopAppsHint":"Opens Shopify Admin → Develop apps for this shop (legacy apps / install approvals). New apps start in the Dev Dashboard.",
"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",
"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",
"shopify.placeholder.clientIdKeep":"Client ID on file — enter a new one to replace",
"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)",
"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",
"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).",
"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",
"shopify.field.apiVersion":"Versión de API",
"shopify.placeholder.tokenKeep":"******** (dejar en blanco para conservar)",
"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",
"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.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",
"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",
"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",
"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.",
"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.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.",
"woo.enableSync":"Activar envío de productos (Descrybe → WooCommerce)",
"woo.field.storeUrl":"URL de la tienda",
"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",
"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.",
"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.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",
"woo.syncSettingsDesc":"Configura cómo se envían los productos Descrybe → WooCommerce",
"woo.matchStrategy":"Producto Matching Strategy",
"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).",
"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",
"products.edit.feedNamed":"Feed · {name}",
"products.edit.noAiDescription":"Sin descripción de IA",
"products.edit.sourceLabel":"Etiqueta de origen",
"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",
"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",
"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.noAttrsYet":"No atributo or specification data on this producto yet.",
"products.edit.fromFeed":"Del feed",
"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.editableAttributesHelp":"Los cambios se guardan en el mapa de atributos del producto. Las filas de feed e IA abajo siguen como referencia cuando difieren.",
"products.edit.addAttribute":"Añadir atributo",
"products.edit.attrKeyPlaceholder":"Clave",
"products.edit.attrValuePlaceholder":"Valor",
"products.edit.removeAttribute":"Eliminar {key}",
"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",
"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",
"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.productNameAria":"Nombre del producto para {name}",
"products.table.selectPage":"Seleccionar {count} on this page",
"products.table.deselectPage":"Deseleccionar {count} en esta página",
"categories.assign":"Asignar",
"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",
"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",
"categories.brandTips.emptyBefore":"Añade voz o términos preferidos en ",
"categories.brandTips.emptyAfter":" para ver consejos aquí.",
"categories.brandTips.brandKit":"Kit de marca",
"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",
"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.sectionTypeHeadingsHelp":"Títulos y subtítulos",
"categories.sectionTypeParagraphs":"Párrafos:",
"categories.sectionTypeParagraphsHelp":"Bloques de contenido principal",
"categories.sectionTypeLists":"Listas con viñetas:",
"categories.sectionTypeListsHelp":"Características y especificaciones",
"categories.aiInstructionsHeading":"Instrucciones de IA",
"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",
"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",
"categories.promptTemplateHelp":"Usa marcadores como {{name}} y {{description}}. Déjalo vacío para usar el valor predeterminado de la empresa en Integraciones → IA.",
"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}.",
"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",
"contentLang.addLanguage":"Añadir idioma…",
"contentLang.add":"Añadir",
"contentLang.removeLanguage":"Quitar {lang}",
"contentLang.resultsHint":"Cambia de idioma para revisar títulos y descripciones de IA de cada idioma de contenido.",
"contentLang.settingsTitle":"Idiomas de contenido",
"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}",
"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",
"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",
"news.subtitle":"Últimas funciones y mejoras",
"news.keyFeatures":"Funciones clave:",
"news.badge.new":"Nuevo",
"news.footer":"Eso es todo por ahora — vuelve tras la próxima versión.",
"news.category.enhancement":"Mejora",
"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",
"news.uxImprovements.f3":"Navegación de interfaz mejorada",
"news.uxImprovements.f4":"Mayor eficiencia del flujo de trabajo",
"news.multiselect.title":"Soporte de atributos multiselección",
"news.multiselect.description":"Los productos pueden tener varios valores en atributos de tipo lista.",
"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",
"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",
"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",
"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",
"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",
"news.apiV1.description":"Nuevos endpoints API v1 para categorías, atributos, feeds, productos y exportaciones.",
"news.apiV1.f1":"Endpoints RESTful de la API v1",
"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",
"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",
"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",
"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",
"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",
"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.noMappedFields":"No mapped feed fields on this producto.",
"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.aiAttrs":"Atributos IA / enriquecidos",
"mapping.confidence.exact":"Exacto",
"mapping.confidence.alias":"Alias",
"mapping.confidence.fuzzy":"Aproximado",
"field.group.basic":"Información básica",
"field.group.pricing":"Precios",
"field.group.media":"Medios",
"field.group.taxonomy":"Taxonomía",
"field.group.inventory":"Inventario",
"field.group.attributes":"Atributos",
"field.group.shipping":"Envío",
"field.group.compliance":"Cumplimiento",
"field.group.other":"Otro",
"common.yes":"Sí",
"common.no":"No",
"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",
"admin.charts.statusAria":"Distribución por estado",
"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.etlInventoryTitle":"ETL gap inventory",
"admin.diagnostics.etlInventoryHint":"Read-only COUNTs — no fake import. Blob bytes and default job history stay unmigrated unless ops ran optional domain jobs.",
"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",
"site.logIn":"Iniciar sesión",
"site.getStarted":"Empezar",
"site.nav.primary":"Principal",
"site.nav.mobile":"Móvil",
"site.nav.home":"Inicio",
"site.nav.pricing":"Precios",
"site.nav.apiDocs":"Docs de la API",
"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",
"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",
"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.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",
"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",
"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",
"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",
"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",
"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.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.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",
"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",
"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",
"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)",
"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",
"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",
"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",
"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",
"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:",
"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",
"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",
"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",
"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",
"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",
"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",
"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.",
"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",
"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",
"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",
"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",
"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",
"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.",
"plans.planApplied":"Plan {plan} aplicado. Tus créditos están listos.",
"plans.faq.title":"Preguntas frecuentes",
"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",
"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":".",
"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.",
"plans.custom.looking":"¿Buscas detalles de los planes públicos?",
"ai.title":"Integraciones de IA",
"ai.description":"Elige créditos de la plataforma o tu propia clave y personaliza los prompts con variables.",
"ai.crumb":"Integraciones de IA",
"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",
"ai.badge.platform":"Créditos / clave de la plataforma",
"ai.badge.active":"Activo: {label}",
"ai.badge.platformKeyAvailable":"Clave de plataforma disponible",
"ai.badge.lastTest":"Última prueba: {status}",
"ai.providerMode.title":"Modo del proveedor",
"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.useCompanyKey":"Usar esta clave de empresa para procesamiento, SEO con IA y campañas con IA",
"ai.popular.title":"Proveedor popular",
"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",
"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",
"ai.placeholder.keepKey":"•••• déjalo en blanco para conservar",
"ai.clearStoredKey":"Borrar clave API guardada",
"ai.saveProvider":"Guardar proveedor",
"ai.testConnection":"Probar conexión",
"ai.prompts.title":"Plantillas de prompt",
"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.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",
"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",
"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",
"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",
"email.badge.realBlocked":"Envío real bloqueado",
"email.badge.lastTest":"Última prueba: {status}",
"email.provider.title":"Proveedor",
"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",
"email.resendKeySaved":"Clave API de Resend (guardada — déjala en blanco para conservar)",
"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",
"email.action.sendBlasts":"enviar envíos masivos de correo",
"seo.title":"Recomendaciones SEO",
"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",
"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",
"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.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",
"seo.filling":"Rellenando…",
"seo.templateFill":"Relleno por plantilla",
"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",
"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",
"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.",
"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",
"brand.voice.desc":"Tono, reglas de sí/no y redacción preferida",
"brand.field.voiceTone":"Voz / tono",
"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.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.",
"brand.uploading":"Subiendo…",
"brand.uploadLogo":"Subir logo",
"brand.clear":"Borrar",
"brand.field.logoUrl":"URL del logo",
"brand.placeholder.logoUrl":"https://… o subido /api/brand/logo/files/…",
"brand.logoAlt":"Vista previa del logo de marca",
"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",
"structured.title":"Campos de descripción estructurada",
"structured.loading":"Cargando campos de descripción estructurada…",
"structured.backDashboard":"Volver al panel",
"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",
"structured.dialogTitle":"Añadir campo de descripción estructurada",
"structured.fieldKeyLabel":"Clave del campo (obligatoria)",
"structured.flash.loadFailed":"No se pudieron cargar los campos de descripción estructurada",
"assistant.ariaLabel":"Asistente del sistema",
"assistant.title":"Asistente del sistema",
"assistant.subtitle":"Navega, guía y ejecuta acciones compatibles",
"assistant.resetAria":"Reiniciar conversación",
"assistant.resetTitle":"Reiniciar",
"assistant.closeAria":"Cerrar asistente",
"assistant.messageLabel":"Mensaje",
"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.",
"site.cookiePolicy":"Política de cookies",
"site.cookieSettings":"Ajustes de cookies",
"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",
"consent.necessaryDesc":"Requeridas para inicio de sesión, seguridad (CSRF), tema, idioma y recordar esta elección.",
"consent.alwaysOn":"Siempre activas",
"consent.analytics":"Analítica",
"consent.analyticsDesc":"Nos ayuda a entender cómo se usa el producto (Google Analytics vía GTM).",
"consent.marketing":"Marketing",
"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",
"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",
"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",
"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",
"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",
"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",
"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.",
"home.hero.tagline":"Datos de producto para equipos de ecommerce",
"home.hero.title":"De feeds de proveedores a fichas de producto",
"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",
"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",
"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",
"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:",
"home.how.step3.f1":"Asigne las categorías correctas",
"home.how.step3.f2":"Complete los atributos de producto obligatorios",
"home.how.step3.f3":"Cree títulos y descripciones claros y fáciles de buscar",
"home.how.step4.title":"Exporta a canales",
"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",
"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",
"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",
"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",
"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 ",
"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",
"home.cta.f3":"Próximos pasos claros",
"home.cta.apply":"Solicitar acceso",
"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",
"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%",
"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",
"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.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",
"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.",
"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",
"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",
"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.",
"pricing.pack.xxl.desc":"Large multi-language buffer (3,000 credits ≈ 1,500 AI products)",
"pricing.pack.mega.name":"Scale pack",
"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",
"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",
"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",
"plan.upgrade.title":"Esta función no está en tu plan",
"plan.upgrade.message":"Mejora tu plan para desbloquear esta parte de Descrybe.",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"vector.searchHeading":"Buscar categorías",
"vector.searchPlaceholder":"Introduce la descripción del producto…",
"vector.results":"Resultados:",
"vector.categoryLabel":"Categoría:",
"vector.idLabel":"ID:",
"vector.scoreLabel":"Puntuación:",
"switcher.switching":"Cambiando…",
"switcher.returnTo":"Volver a {email}",
"switcher.switchUser":"Cambiar de usuario",
"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}",
"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.",
"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).",
"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",
"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.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",
"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.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)",
"productSync.scheduleIntervalHint":"1–168 horas. Por defecto 6 horas si no está definido en el servidor.",
"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",
"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.",