{
"cli.bundle.add.adding": "Agregando pack al bundle...",
"cli.bundle.add.bundle": " Bundle: {}",
"cli.bundle.add.created_structure": "Estructura del bundle creada en {}",
"cli.bundle.add.dry_run": "[simulación] Se agregaría el pack al bundle",
"cli.bundle.add.env": " Entorno: {}",
"cli.bundle.add.pack_ref": " Referencia del pack: {}",
"cli.bundle.add.resolved": " Packs resueltos: {}",
"cli.bundle.add.success": "Pack agregado al bundle exitosamente.",
"cli.bundle.add.team": " Equipo: {}",
"cli.bundle.add.tenant": " Tenant: {}",
"cli.bundle.add.version_warning": "Advertencia: La validación de la versión {} falló: {}",
"cli.bundle.build.building": "Construyendo bundle portable...",
"cli.bundle.build.output": " Salida: {}",
"cli.bundle.build.running_doctor": "Ejecutando validación doctor...",
"cli.bundle.build.success": "Bundle construido exitosamente en {}",
"cli.bundle.init.created": "Bundle creado en {}",
"cli.bundle.init.creating": "Creando bundle en {}...",
"cli.bundle.init.exists": "El bundle ya existe en {}",
"cli.bundle.init.next_steps": "Siguientes pasos:",
"cli.bundle.init.step_add": " 1. greentic-setup bundle add <pack.gtpack> --bundle {}",
"cli.bundle.init.step_setup": " 2. greentic-setup bundle setup --bundle {} --answers answers.yaml",
"cli.bundle.list.bundle": "Bundle: {}",
"cli.bundle.list.domain": "Dominio: {}",
"cli.bundle.list.packs_found": "Packs encontrados: {}",
"cli.bundle.remove.cancelled": "eliminación cancelada - use --force para confirmar",
"cli.bundle.remove.complete": "Provider eliminado: {}",
"cli.bundle.remove.confirm": "Esto eliminará la configuración del provider.",
"cli.bundle.remove.removing": "Eliminando provider...",
"cli.bundle.remove.use_force": "Use --force para confirmar.",
"cli.bundle.setup.complete": "Configuración del provider completada: {}",
"cli.bundle.setup.domain": " Dominio: {}",
"cli.bundle.setup.dry_run": "[simulación] Se configuraría el provider: {}",
"cli.bundle.setup.emit_usage": "Edite y use con: greentic-setup bundle setup --answers {}",
"cli.bundle.setup.emit_written": "Plantilla de respuestas escrita en: {}",
"cli.bundle.setup.env_bootstrap_created": "Se inicializó el entorno `local` con vinculaciones de capacidades predeterminadas en {}.",
"cli.bundle.setup.interactive_not_impl": "La configuración interactiva aún no está implementada.",
"cli.bundle.setup.provider": " Provider: {}",
"cli.bundle.setup.setting_up": "Configurando provider...",
"cli.bundle.setup.use_answers": "Use --answers <archivo> para proporcionar las respuestas de configuración.",
"cli.bundle.setup.use_emit_answers": "O use --emit-answers <archivo> para generar una plantilla de respuestas.",
"cli.bundle.status.bundle_label": "Bundle: {}",
"cli.bundle.status.not_found": "Bundle no encontrado: {}",
"cli.bundle.status.packs": "Packs: {} instalados",
"cli.bundle.status.tenants": "Tenants: {}",
"cli.bundle.status.valid_no": "no (falta greentic.demo.yaml)",
"cli.bundle.status.valid_yes": "sí",
"cli.bundle.update.complete": "Actualización del provider completada: {}",
"cli.bundle.update.dry_run": "[simulación] Se actualizaría el provider: {}",
"cli.bundle.update.emit_usage": "Edite y use con: greentic-setup bundle update --answers {}",
"cli.bundle.update.updating": "Actualizando configuración del provider...",
"cli.error.answers_required": "--answers requerido en modo no interactivo",
"cli.error.failed_build_plan": "error al construir plan",
"cli.error.failed_create_bundle": "error al crear estructura del bundle",
"cli.error.failed_emit_answers": "error al emitir plantilla de respuestas",
"cli.error.failed_execute_plan": "error al ejecutar plan",
"cli.error.failed_read_answers": "error al leer archivo de respuestas",
"cli.error.interactive_required": "la configuración interactiva requiere archivo --answers",
"cli.error.invalid_bundle": "directorio de bundle inválido",
"cli.help.for_help": "Para ayuda: greentic-setup --help",
"cli.simple.bundle_required": "Se requiere ruta del bundle. Uso: greentic-setup [OPCIONES] <BUNDLE>",
"cli.simple.dry_run": "[simulación] Se configuraría el bundle: {}",
"cli.simple.emit_usage": "Edite y use con: greentic-setup --answers {} {}",
"cli.simple.expected_bundle_format": "se esperaba directorio o archivo .gtbundle: {}",
"cli.simple.extracted_to": " Extraído en: {}",
"cli.simple.extracting": "Extrayendo archivo .gtbundle...",
"cli.simple.header": "Greentic Setup",
"cli.simple.interactive_mode": "Modo asistente interactivo",
"cli.simple.wizard_not_impl": "asistente interactivo aún no implementado - use --answers <archivo>",
"env_wizard.basic_mode": "Modo básico — pasa --advanced para establecer también el id de cliente, anulaciones de configuración, hosts de ruta, flujo de bienvenida y referencias secretas del endpoint.",
"env_wizard.dry_run_secrets_note": "Nota: --dry-run solo muestra una vista previa — los {} valor(es) secretos pegados que ingresaste NO se escriben en el almacén. Vuelve a ejecutar sin --dry-run y confirma el plan para conservarlos.",
"env_wizard.form.desc": "Crea un manifiesto `greentic.env-manifest.v1` — el documento duradero y reaplicable de estado deseado para un entorno.",
"env_wizard.form.title": "Configuración del entorno",
"env_wizard.list.bundles.item_label": "bundle",
"env_wizard.list.messaging_endpoints.item_label": "Endpoint de mensajería",
"env_wizard.list.secrets.item_label": "secreto",
"env_wizard.manifest_prompt": "Archivo de manifiesto [{}]: ",
"env_wizard.q.bundle_id.desc": "Clave natural — única dentro del manifiesto.",
"env_wizard.q.bundle_id.title": "Id del bundle",
"env_wizard.q.bundle_path.desc": "`.gtbundle` local. Las rutas relativas se resuelven contra el directorio del archivo de manifiesto.",
"env_wizard.q.bundle_path.title": "Ruta del bundle",
"env_wizard.q.bundles.desc": "Despliegues de bundles para este entorno.",
"env_wizard.q.bundles.title": "Bundles",
"env_wizard.q.config_overrides.desc": "Objeto JSON `{\"<pack_id>\": {\"<key>\": <value>}}`. Vacío = dejar intacto; `{}` = borrado explícito.",
"env_wizard.q.config_overrides.title": "Anulaciones de configuración (JSON)",
"env_wizard.q.customer_id.desc": "Principal de facturación — requerido por apply para entornos que no sean `local`.",
"env_wizard.q.customer_id.title": "Id de cliente",
"env_wizard.q.environment_id.desc": "Entorno al que aplicar. `local` se inicializa con vinculaciones env-pack predeterminadas; cualquier otro id ya debe existir (apply lo reconcilia; la creación de entornos no locales está reservada para el almacén del operador).",
"env_wizard.q.environment_id.title": "Id del entorno",
"env_wizard.q.from_env.desc": "Nombre de la variable que contiene el valor secreto (p. ej. TELEGRAM_BOT_TOKEN) — el nombre, nunca el valor. Requerido cuando el origen es `env`.",
"env_wizard.q.from_env.title": "Nombre de variable de entorno",
"env_wizard.q.links.desc": "`bundle_id`s separados por comas que este endpoint admite.",
"env_wizard.q.links.title": "Ids de bundles vinculados",
"env_wizard.q.messaging_endpoints.desc": "Endpoints de mensajería y sus vínculos de bundles.",
"env_wizard.q.messaging_endpoints.title": "Endpoints de mensajería",
"env_wizard.q.name.desc": "Identificador local del manifiesto y nombre para mostrar. Clave de upsert junto con el tipo de proveedor.",
"env_wizard.q.name.title": "Nombre del endpoint",
"env_wizard.q.path.desc": "`<tenant>/<team>/<pack>/<name>`, p. ej. default/_/messaging-telegram/telegram_bot_token",
"env_wizard.q.path.title": "Ruta del secreto",
"env_wizard.q.provider_type.desc": "Clase de proveedor, p. ej. messaging.telegram.bot.",
"env_wizard.q.provider_type.title": "Tipo de proveedor",
"env_wizard.q.public_base_url.desc": "URL solo de origen persistida en el entorno (p. ej. https://bots.example.com). Déjalo vacío para conservar el valor actual.",
"env_wizard.q.public_base_url.title": "URL base pública",
"env_wizard.q.route_hosts.desc": "Nombres de host separados por comas para la vinculación de ruta.",
"env_wizard.q.route_hosts.title": "Hosts de ruta",
"env_wizard.q.route_path_prefixes.desc": "Prefijos de ruta HTTP separados por comas, cada uno empezando con `/` (p. ej. /legal).",
"env_wizard.q.route_path_prefixes.title": "Prefijos de ruta",
"env_wizard.q.route_team.desc": "Equipo para el selector de tenant de la vinculación de ruta — establecer junto con `route_tenant`.",
"env_wizard.q.route_team.title": "Equipo de ruta",
"env_wizard.q.route_tenant.desc": "Tenant para el selector de tenant de la vinculación de ruta — establecer junto con `route_team`.",
"env_wizard.q.route_tenant.title": "Tenant de ruta",
"env_wizard.q.secret_refs.desc": "Referencias secretas separadas por comas reenviadas al crear el endpoint.",
"env_wizard.q.secret_refs.title": "Referencias secretas",
"env_wizard.q.secrets.desc": "Entradas secretas del almacén de desarrollo. El valor de cada secreto proviene de una variable de entorno con nombre o de un valor que pegas — los valores nunca se incluyen en un manifiesto.",
"env_wizard.q.secrets.title": "Secretos",
"env_wizard.q.source.desc": "`env` lee el valor desde una variable de entorno con nombre en el momento de aplicar; `paste` te permite introducir el valor interactivamente — se almacena en el almacén de secretos del entorno, nunca en el manifiesto.",
"env_wizard.q.source.title": "Origen del secreto",
"env_wizard.q.trust_root_bootstrap.desc": "Inicializa la raíz de confianza del entorno con la clave local del operador (idempotente; requerido una vez antes de que los bundles puedan prepararse).",
"env_wizard.q.trust_root_bootstrap.title": "¿Inicializar la raíz de confianza?",
"env_wizard.q.webchat_gui.desc": "Sirve la consola de webchat integrada para que puedas chatear con este entorno abriendo su URL en un navegador. Activada de forma predeterminada para `local`; la ruta del chat es solo de loopback y no autenticada, así que mantenla desactivada en entornos expuestos en una URL pública a menos que sea tu intención.",
"env_wizard.q.webchat_gui.title": "¿Añadir una GUI de webchat?",
"env_wizard.q.welcome_bundle_id.desc": "Configura juntos los tres campos welcome_* (o ninguno).",
"env_wizard.q.welcome_bundle_id.title": "Flujo de bienvenida: id del bundle",
"env_wizard.q.welcome_flow_id.desc": "Configura juntos los tres campos welcome_* (o ninguno).",
"env_wizard.q.welcome_flow_id.title": "Flujo de bienvenida: id del flujo",
"env_wizard.q.welcome_pack_id.desc": "Configura juntos los tres campos welcome_* (o ninguno).",
"env_wizard.q.welcome_pack_id.title": "Flujo de bienvenida: id del paquete",
"env_wizard.secrets.choose": "Para cada uno, elige de dónde proviene el valor: una variable de entorno\ncon nombre, o pégalo ahora. Los valores pegados se almacenan en el almacén de secretos\ndel entorno; nunca se escriben en el manifiesto.",
"env_wizard.secrets.entry": "{} — {} (bundle: {}){}",
"env_wizard.secrets.envvar_prompt": "nombre de variable de entorno [{}]: ",
"env_wizard.secrets.envvar_required": "Se requiere un nombre de variable de entorno.",
"env_wizard.secrets.keep_env_note": "nota: se conserva el secreto existente `{}` (bundle no reconstruido)",
"env_wizard.secrets.keep_paste_note": "nota: se conserva el secreto pegado existente `{}` (bundle no reconstruido)",
"env_wizard.secrets.need": "Secretos — los bundles configurados necesitan {} secreto(s).",
"env_wizard.secrets.none": "Secretos — los bundles configurados no declaran secretos; no hay nada que introducir.",
"env_wizard.secrets.optional_suffix": " [opcional]",
"env_wizard.secrets.paste_prompt": "pega el valor (oculto, una sola línea): ",
"env_wizard.secrets.paste_prompt_keep": "pega el valor (oculto, una sola línea; vacío conserva el valor almacenado): ",
"env_wizard.secrets.paste_required": "Se requiere un valor.",
"env_wizard.secrets.path": "ruta del secreto: {}",
"env_wizard.secrets.source_invalid": "Introduce 1 (variable de entorno) o 2 (pegar).",
"env_wizard.secrets.source_prompt": "¿valor de [1] variable de entorno o [2] pegarlo ahora? [{}]: ",
"env_wizard.wrote_manifest": "Se escribió `{}` — el manifiesto es el artefacto duradero; mantenlo en el control de versiones.",
"setup.answers.emitted": "Plantilla de respuestas escrita en {}",
"setup.answers.loaded": "Respuestas cargadas desde {}",
"setup.capability.not_found": "No se encontró la capacidad '{}'",
"setup.capability.resolved": "Capacidad resuelta: pack_id={} stable_id={}",
"setup.discovering_packs": "Descubriendo packs en el bundle...",
"setup.dry_run.header": "Plan de configuración (simulación):",
"setup.error.bundle_not_found": "Bundle no encontrado: {}",
"setup.error.protocol_not_supported": "Protocolo aún no soportado: {}",
"setup.error.version_mismatch": "La versión del tag ({}) no coincide con la versión del crate ({})",
"setup.execute.failed": "Configuración fallida: {}",
"setup.execute.success": "Configuración completada: {}",
"setup.found_packs": "Se encontraron {} pack(s): {}",
"setup.plan.header": "Plan de configuración:",
"setup.plan.step.collect_answers": "Recopilar respuestas para {}",
"setup.plan.step.discover": "Descubrir packs",
"setup.plan.step.resolve": "Generar manifiesto resuelto",
"setup.plan.step.run_setup": "Ejecutar flujo de configuración para {}",
"setup.plan.step.seed_secrets": "Sembrar secretos para {}",
"setup.plan.step.validate": "Validar bundle",
"setup.plan.step.webhooks": "Registrar webhooks para {}",
"setup.plan.step.write_config": "Escribir configuración para {}",
"setup.qa.invalid_choice": "Opción inválida. Opciones: {}",
"setup.qa.list.add_first": "¿Añadir {}? [y/N] ",
"setup.qa.list.add_more": "¿Añadir otro {}? [y/N] ",
"setup.qa.list.field_required_row": "Este campo es obligatorio — se necesita al menos una fila.",
"setup.qa.list.max_reached": "(máximo de {} filas alcanzado)",
"setup.qa.list.min_required": "Se requiere(n) al menos {} fila(s) — se obtuvo {}. Escribe 'y' para añadir otra.",
"setup.qa.list.row_dropped": "(fila descartada — las columnas obligatorias estaban vacías)",
"setup.qa.list.row_header": "Fila #{}:",
"setup.qa.prompt.configuring": "Configurando {}: {}",
"setup.qa.prompt.default": "(predeterminado: {}) ",
"setup.qa.prompt.field_required": "Este campo es obligatorio.",
"setup.qa.prompt.invalid_choice": "Opción no válida. Opciones: {}",
"setup.qa.prompt.invalid_format": "Formato no válido. Patrón esperado: {}",
"setup.qa.prompt.mode_advanced": " (avanzado)",
"setup.qa.prompt.optional_marker": " (opcional)",
"setup.qa.prompt.required_marker": " (obligatorio)",
"setup.qa.question_prompt": "{}",
"setup.qa.required_field": "Este campo es obligatorio",
"setup.qa.secret_input": "Ingrese el valor secreto (oculto):",
"setup.secrets.failed": "Error al sembrar secretos para provider={} tenant={}: {}",
"setup.secrets.seeded": "Se sembraron {} secreto(s) para provider={} tenant={}",
"setup.state_store.fallback": "Usando almacén de estado en memoria (no hay URL de Redis disponible)",
"setup.state_store.upgraded": "Almacén de estado actualizado a Redis: {}",
"ui.back": "Atrás",
"ui.close": "Cerrar",
"ui.configure": "Configurar {}",
"ui.continue": "Continuar",
"ui.dashboard.add_scope": "Agregar ámbito",
"ui.dashboard.back": "Volver al panel",
"ui.dashboard.configured": "configurado",
"ui.dashboard.delete": "Eliminar",
"ui.dashboard.description": "Configura {} proveedor(es) en {}. Crea múltiples ámbitos para diferentes inquilinos/entornos.",
"ui.dashboard.executed": "Ejecutado",
"ui.dashboard.export": "Exportar respuestas",
"ui.description": "Configura {} proveedor(es) en {}",
"ui.discovering": "Descubriendo proveedores...",
"ui.discovering_sub": "Leyendo la configuración del bundle",
"ui.done": "Hecho",
"ui.execute_setup": "Ejecutar configuración",
"ui.executing.sub": "Aplicando la configuración al bundle",
"ui.executing.title": "Ejecutando configuración...",
"ui.export.description": "Descarga la configuración como un archivo JSON de respuestas compatible con el modo --answers.",
"ui.export.download": "Descargar answers.json",
"ui.export.password": "Contraseña de cifrado",
"ui.export.password_help": "Si se establece, los valores secretos se cifrarán con AES-256-GCM. Necesitarás esta contraseña al usar --answers --key.",
"ui.export.password_hint": "Dejar vacío para no cifrar",
"ui.export.title": "Exportar respuestas",
"ui.field.required": "{} es obligatorio.",
"ui.import.decrypt_failed": "Error de descifrado",
"ui.import.dropzone": "Suelta answers.json aquí o haz clic para importar",
"ui.import.no_scopes": "No se encontraron ámbitos válidos en el archivo.",
"ui.import.parse_error": "Error al analizar el archivo",
"ui.import.password_prompt": "Este archivo contiene secretos cifrados. Introduce la contraseña de descifrado:",
"ui.new_setup": "Nueva configuración",
"ui.no_providers": "No se encontraron proveedores en el bundle.",
"ui.nothing_to_configure": "No hay nada que configurar.",
"ui.pending": "Pendiente",
"ui.provider.configure": "Configurar {}",
"ui.q.api_base_url": "URL base de la API",
"ui.q.base_url": "URL base",
"ui.q.channel_id": "ID del canal",
"ui.q.default_channel": "Canal predeterminado",
"ui.q.default_room_id": "ID de sala predeterminado",
"ui.q.default_to_person_email": "Correo electrónico predeterminado de la persona",
"ui.q.enabled": "Habilitar proveedor",
"ui.q.jwt_signing_key": "Clave de firma JWT",
"ui.q.jwt_signing_key.help": "Clave secreta usada para firmar los tokens de Direct Line. Use cualquier cadena aleatoria (p. ej. openssl rand -hex 32).",
"ui.q.mode": "Modo",
"ui.q.ms_bot_app_id": "ID de la aplicación del bot",
"ui.q.ms_bot_app_id.help": "ID de la aplicación de bot de Microsoft del registro de Azure Bot Service",
"ui.q.ms_bot_app_password": "Contraseña de la aplicación del bot",
"ui.q.oauth_custom_auth_url": "URL de autorización",
"ui.q.oauth_custom_client_id": "ID del cliente",
"ui.q.oauth_custom_label": "Nombre para mostrar del proveedor",
"ui.q.oauth_custom_scopes": "Alcances",
"ui.q.oauth_custom_token_url": "URL del token",
"ui.q.oauth_enable_custom": "Habilitar proveedor OIDC personalizado",
"ui.q.oauth_enable_github": "Habilitar inicio de sesión con GitHub",
"ui.q.oauth_enable_google": "Habilitar inicio de sesión con Google",
"ui.q.oauth_enable_microsoft": "Habilitar inicio de sesión con Microsoft",
"ui.q.oauth_enabled": "Habilitar inicio de sesión con OAuth",
"ui.q.oauth_enabled.help": "Requerir que los usuarios inicien sesión antes de acceder al chat",
"ui.q.oauth_github_client_id": "ID de cliente de GitHub",
"ui.q.oauth_github_client_secret": "Secreto de cliente de GitHub",
"ui.q.oauth_google_client_id": "ID de cliente de Google",
"ui.q.oauth_google_client_secret": "Secreto de cliente de Google",
"ui.q.oauth_microsoft_client_id": "ID de cliente de Microsoft",
"ui.q.oauth_microsoft_client_secret": "Secreto de cliente de Microsoft",
"ui.q.public_base_url": "URL base pública",
"ui.q.public_base_url.help": "URL pública para devoluciones de llamada de webhook (p. ej. https://xxxx.trycloudflare.com)",
"ui.q.route": "Ruta",
"ui.q.slack_app_id": "ID de la aplicación de Slack",
"ui.q.slack_bot_token": "Token del bot de Slack",
"ui.q.slack_configuration_token": "Token de configuración de Slack",
"ui.q.team_id": "ID del equipo",
"ui.q.tenant_channel_id": "ID del canal del tenant",
"ui.q.webex_bot_token": "Token del bot de Webex",
"ui.questions": "preguntas",
"ui.result.closed": "La configuración se cerró.",
"ui.result.closed_sub": "Puedes cerrar esta pestaña.",
"ui.result.fail.description": "Algo salió mal durante la configuración.",
"ui.result.fail.title": "La configuración falló",
"ui.result.log": "Registro",
"ui.result.manual_steps": "Se requieren pasos manuales",
"ui.result.output": "Salida",
"ui.result.success.description": "Bundle configurado correctamente.",
"ui.result.success.title": "Configuración completa",
"ui.review.description": "Revisa la configuración antes de aplicarla al bundle.",
"ui.review.no": "No",
"ui.review.secret_mask": "********",
"ui.review.title": "Revisar y ejecutar",
"ui.review.yes": "Sí",
"ui.review_execute": "Revisar y ejecutar",
"ui.scope.description": "Configura el inquilino, entorno y equipo de destino para esta instalación.",
"ui.scope.detected_tenant": "Detectado desde el paquete: {}",
"ui.scope.env": "Entorno",
"ui.scope.env_help": "Debe coincidir con GREENTIC_ENV usado por el runtime (dev, local, test).",
"ui.scope.hint": "Estos valores determinan dónde se almacenan los secretos y la configuración. Asegúrate de que coincidan con tus ajustes de runtime.",
"ui.scope.team": "Equipo",
"ui.scope.team_help": "Dejar vacío para el valor predeterminado. Se usa para delimitar secretos por equipo.",
"ui.scope.tenant": "Inquilino",
"ui.scope.title": "Ámbito de configuración",
"ui.select_action": "Selecciona una acción para comenzar.",
"ui.shared.description": "Estas preguntas se aplican a todos los proveedores.",
"ui.shared.title": "Configuración compartida",
"ui.start_config": "Iniciar configuración",
"ui.title": "Configuración de Greentic"
}