diff --git a/apps/sdp-web/messages/es.json b/apps/sdp-web/messages/es.json new file mode 100644 index 000000000..d7ea0e316 --- /dev/null +++ b/apps/sdp-web/messages/es.json @@ -0,0 +1,33 @@ +{ + "Metadata": { + "title": "Solana Developer Platform", + "description": "Panel SDP" + }, + "Home": { + "solanaLogo": "Solana", + "docs": "Docs", + "dashboard": "Dashboard", + "title": "Cree cualquier producto financiero, sin preocuparse por la infraestructura", + "description": "Ya sea que emita un stablecoin, orqueste pagos transfronterizos o tokenice activos reales, SDP ofrece las APIs y la infraestructura más confiables para lograrlo.", + "trySdp": "Probar SDP", + "contactUs": "Contáctenos", + "joinWaitlist": "Unirse a la lista de espera" + }, + "NotFound": { + "solanaLogo": "Solana", + "title": "Página no encontrada", + "description": "La página que busca no existe o fue movida.", + "backToDashboard": "Volver al dashboard", + "goHome": "Ir al inicio" + }, + "Feedback": { + "label": "Feedback" + }, + "Error": { + "tryAgain": "Reintentar", + "reportIssue": "Reportar el problema", + "viewTitle": "Esta vista no se pudo cargar", + "viewDescription": "Ocurrió un error al cargar esta página. El resto del dashboard sigue funcionando: puede reintentar o continuar.", + "reference": "Referencia {digest}" + } +} diff --git a/apps/sdp-web/messages/es/dashboard-approvals.json b/apps/sdp-web/messages/es/dashboard-approvals.json new file mode 100644 index 000000000..4bb9b6c44 --- /dev/null +++ b/apps/sdp-web/messages/es/dashboard-approvals.json @@ -0,0 +1,113 @@ +{ + "DashboardApprovals": { + "pendingCount": "{count} pendientes", + "pendingTab": "Pendientes", + "historyTab": "Historial", + "walletFilter": "Wallet", + "allWallets": "Todos los Wallets", + "statusFilter": "Estado", + "allStatuses": "Todos los estados", + "operationFilter": "Operación", + "allOperations": "Todas las operaciones", + "apiKeyFilter": "Clave API", + "allApiKeys": "Todas las claves API", + "fromFilter": "Desde", + "toFilter": "Hasta", + "dateRangeLabel": "Fecha", + "dateAllTime": "Todo el período", + "dateLast7": "7 días", + "dateLast30": "30 días", + "dateLast90": "90 días", + "dateCustom": "Personalizado", + "statusColumn": "Estado", + "walletColumn": "Wallet", + "operationColumn": "Operación", + "amountAssetColumn": "Monto / Asset", + "destinationColumn": "Destino", + "requestedByColumn": "Solicitado por", + "policyReasonColumn": "Motivo de la política", + "submittedColumn": "Enviada", + "openRequest": "Abrir solicitud de aprobación", + "emptyPending": "No hay solicitudes en espera de aprobación", + "emptyPendingDescription": "Las nuevas operaciones sujetas a políticas aparecerán aquí en cuanto se envíen.", + "emptyHistory": "Aún no hay historial de aprobaciones", + "emptyHistoryDescription": "Las solicitudes aprobadas, rechazadas, canceladas, expiradas y fallidas aparecerán aquí.", + "emptyFiltered": "Ninguna solicitud coincide con estos filtros", + "emptyFilteredDescription": "Borre uno o más filtros para ver más solicitudes de aprobación.", + "range": "{from}-{to} de {total} solicitudes", + "unableToLoad": "No se pudieron cargar las solicitudes de aprobación", + "unableToLoadDescription": "No se pudo recuperar la lista de solicitudes. Intente cargarla de nuevo.", + "reload": "Recargar", + "autoRefresh": "Actualizando cada 5 segundos", + "refreshFailed": "No se pudieron actualizar las solicitudes de aprobación. Se muestran los últimos resultados cargados.", + "viewOnly": "Puede revisar las solicitudes de aprobación, pero su rol no puede decidirlas.", + "noAccess": "Las solicitudes de aprobación no están disponibles para su rol.", + "noAccessDescription": "Pida a un administrador de la organización acceso de lectura a Wallets.", + "backToApprovals": "Volver a aprobaciones", + "reviewTitle": "Revisar {operation}", + "reviewDescription": "Confirme el contexto de la política y los detalles de la operación antes de tomar una decisión.", + "approve": "Aprobar", + "reject": "Rechazar", + "cancel": "Cancelar", + "approveTitle": "¿Aprobar esta solicitud?", + "approveDescription": "La operación se liberará para su ejecución. Esta decisión es irreversible.", + "approveConfirm": "Aprobar solicitud", + "rejectTitle": "¿Rechazar esta solicitud?", + "rejectDescription": "La operación se cancelará y no podrá reanudarse desde esta solicitud.", + "rejectConfirm": "Rechazar solicitud", + "cancelTitle": "¿Cancelar esta solicitud?", + "cancelDescription": "La operación pendiente se cancelará sin una decisión de aprobación.", + "cancelConfirm": "Cancelar solicitud", + "notNow": "Ahora no", + "decisionInProgress": "Actualizando la solicitud...", + "approvedToast": "Solicitud aprobada", + "rejectedToast": "Solicitud rechazada", + "canceledToast": "Solicitud cancelada", + "alreadyDecided": "Esta solicitud ya fue decidida. Se muestra el estado más reciente.", + "forbiddenDecision": "Su rol no tiene permiso para decidir solicitudes de aprobación.", + "decisionFailed": "No se pudo actualizar la solicitud. Intente de nuevo.", + "requestSection": "Solicitud", + "policyDecisionSection": "Decisión de política", + "operationDetailsSection": "Detalles de la operación", + "matchedControlsSection": "Controles coincidentes", + "timelineSection": "Cronología", + "submittedBy": "Enviada por", + "submittedAt": "Enviada el", + "expiresAt": "Expira el", + "policyDecision": "Decisión", + "policyReason": "Motivo", + "reasonCode": "Código de motivo", + "operationFamily": "Familia de operaciones", + "operationType": "Tipo de operación", + "amount": "Monto", + "asset": "Asset", + "destination": "Destino", + "source": "Origen", + "noMatchedControls": "No se reportaron controles coincidentes para esta evaluación.", + "matchedControl": "Control coincidente {number}", + "submittedEvent": "Solicitud enviada", + "submittedEventDescription": "La operación se pausó para su aprobación.", + "resolvedEvent": "Solicitud {status}", + "resolvedEventDescription": "Decisión registrada por {actor}.", + "metadata": "Contexto de la solicitud", + "wallet": "Wallet", + "walletAddress": "Dirección del Wallet", + "requester": "Solicitante", + "apiKey": "Clave API", + "walletRevision": "Revisión del Wallet", + "apiKeyRevision": "Revisión de la clave API", + "provider": "Proveedor", + "providerStatus": "Estado del proveedor", + "requestId": "ID de solicitud", + "submitted": "Enviada", + "currentStatus": "Estado actual", + "resolvedBy": "Resuelta por", + "resolvedAt": "Resuelta el", + "notReported": "No reportado", + "directRequest": "Solicitud directa", + "approvalRequiredByPolicy": "Aprobación requerida por la política", + "copyRequestId": "Copiar ID de solicitud", + "requestIdCopied": "ID de solicitud copiado", + "loading": "Cargando aprobaciones..." + } +} diff --git a/apps/sdp-web/messages/es/dashboard-custody.json b/apps/sdp-web/messages/es/dashboard-custody.json new file mode 100644 index 000000000..2a67134da --- /dev/null +++ b/apps/sdp-web/messages/es/dashboard-custody.json @@ -0,0 +1,795 @@ +{ + "DashboardCustody": { + "actions": "Acciones", + "rotateKey": "Rotar clave ({hours}h de gracia)", + "deleteKey": "Eliminar clave", + "editApiKey": "Editar clave API", + "actionFailed": "Error en la acción", + "notice": "Aviso", + "existingApiKeys": "Claves API existentes", + "apiKeysDescription": "Claves activas e históricas de este espacio de trabajo.", + "newApiKey": "Nueva clave API", + "noApiKeysFound": "No se encontraron claves API.", + "name": "Nombre", + "prefix": "Prefijo", + "access": "Acceso", + "status": "Estado", + "lastUsed": "Último uso", + "expires": "Expira", + "created": "Creada", + "never": "Nunca", + "admin": "Admin", + "developer": "Developer", + "readOnly": "Solo lectura", + "allWallets": "Todos los Wallets", + "selectedWallets": "Wallets seleccionados", + "selected": "{count} seleccionados", + "selectedWallet": "Wallet seleccionado", + "selectedLabel": "Seleccionado", + "noApiKeyPolicy": "Sin política de clave API", + "noAdditionalApiKeyPolicy": "No hay ninguna política de clave API adicional asociada.", + "policyBinding": "Vinculación de política", + "policyBindingCount": "{count} vinculación de política", + "policyBindingsCount": "{count} vinculaciones de política", + "apiProfile": "Perfil API {id}{revision}", + "walletProfile": "Perfil de Wallet {id}{revision}", + "revision": " rev {id}", + "roleAccess": "Acceso {role}", + "createApiKey": "Crear clave API", + "reviewApiKey": "Revisar clave API", + "walletAccess": "Acceso a Wallets", + "walletAccessDescription": "Elija si esta clave puede usar todos los Wallets del alcance o solo los seleccionados.", + "allWalletsDescription": "Esta clave puede usar todos los Wallets disponibles en su organización o proyecto.", + "selectedWalletsDescription": "Restrinja esta clave a un conjunto de Wallets y elija su Wallet de firma predeterminado.", + "operationPolicy": "Política de operaciones", + "noActiveWallets": "Aún no hay Wallets activos disponibles para vincular.", + "defaultSigningWallet": "Wallet de firma predeterminado", + "nameLabel": "Nombre", + "namePlaceholder": "Clave de Deploy de CI", + "role": "Rol", + "environment": "Entorno", + "expirationOptional": "Expiración (opcional)", + "production": "Producción", + "sandbox": "Sandbox", + "none": "Ninguno", + "invalidDate": "Fecha no válida", + "endpointPermissions": "Permisos de endpoints", + "policy": "Política", + "securityNote": "Nota de seguridad", + "creating": "Creando...", + "createKey": "Crear clave", + "createApiKeyDescription": "Defina los detalles de la clave y el acceso a Wallets, luego confirme.", + "reviewApiKeyDescription": "Revise la solicitud antes de crear la clave.", + "deleteApiKey": "Eliminar clave API", + "deleteApiKeyPlaceholder": "Pegue el nombre exacto de la clave", + "deleting": "Eliminando...", + "deleteKeyConfirm": "Eliminar clave", + "apiKeyGenerated": "Clave API generada", + "keyPrefix": "Prefijo de la clave", + "fullKeyShownOnce": "Su clave completa (se muestra una sola vez)", + "apiKeyPlaygroundSession": "Esta sesión del navegador ya puede usar esta clave en el API Playground sin volver a pegarla.", + "dismiss": "Descartar", + "copyValue": "Copiar", + "copied": "Copiado", + "closeGeneratedKeyModal": "Cerrar el modal de clave generada", + "closeConfirmationModal": "Cerrar el modal de confirmación", + "delete": "Eliminar", + "deleteApiKeyDescription": "Esto elimina la clave sin borrar la fila.", + "typeKeyNameToConfirm": "Escriba {name} para confirmar.", + "confirmKeyName": "Confirmar el nombre de la clave", + "cancel": "Cancelar", + "organizationName": "Nombre de la organización", + "organizationSlug": "Slug de la organización", + "clerkOrganizationId": "ID de organización de Clerk", + "unavailable": "No disponible", + "unableToLoadWalletProviders": "No se pudieron cargar los proveedores de Wallet", + "unableToLoadWallets": "No se pudieron cargar los Wallets", + "trackedBalancesUnavailable": "Los saldos monitoreados no están disponibles por ahora. Se muestra el saldo informado por el Wallet.", + "walletControlsUnavailable": "Los controles del Wallet no están disponibles por ahora.", + "createWallet": "Crear Wallet", + "walletSearchPlaceholder": "Buscar por nombre, ID de Wallet, dirección, proveedor o propósito", + "clearWalletSearch": "Borrar búsqueda de Wallets", + "clearWalletSearchAction": "Borrar búsqueda", + "walletSearchResults": "Mostrando {count} de {total} Wallets", + "noWalletSearchResults": "Ningún Wallet coincide con esta búsqueda", + "noWalletSearchResultsDescription": "Pruebe otro nombre, ID de Wallet, dirección, proveedor o propósito.", + "wallet": "Wallet", + "balance": "Saldo", + "purpose": "Propósito", + "issuance": "Emisión", + "compliance": "Cumplimiento", + "mintAuthority": "Autoridad de Mint", + "freezeAuthority": "Autoridad de Freeze", + "feePayer": "Fee payer", + "transfers": "Transferencias", + "address": "Dirección", + "walletId": "ID del Wallet", + "manage": "Gestionar", + "createFirstWallet": "Cree su primer Wallet", + "noWalletsAvailable": "No hay Wallets disponibles", + "createWalletDescription": "Elija el proveedor que creará y firmará por el Wallet.", + "walletCreationLimited": "La creación de Wallets está limitada a los Admins. Una vez creado, podrá seguir usando el Wallet en todo el panel.", + "noWalletProvidersEnabled": "No hay proveedores de Wallet habilitados", + "noWalletProvidersEnabledDescription": "Habilite un proveedor para esta organización antes de crear un Wallet.", + "backToWallets": "Volver a Wallets", + "chooseProvider": "Elegir proveedor", + "walletDetails": "Detalles del Wallet", + "walletLabel": "Etiqueta del Wallet", + "walletLabelPlaceholder": "Tesorería", + "project": "Proyecto", + "projectValue": "Proyecto actual", + "environmentValue": "Entorno actual", + "connectedProviderDescription": "{provider} usa su Wallet ya configurado en este flujo.", + "chooseEnabledProvider": "Elija un proveedor habilitado para continuar.", + "back": "Atrás", + "next": "Siguiente", + "continue": "Continuar", + "createWalletPending": "Creando...", + "saveWalletLabel": "Guardar etiqueta del Wallet", + "cancelWalletLabelEdit": "Cancelar edición de etiqueta del Wallet", + "editWalletLabel": "Editar etiqueta del Wallet", + "untitled": "Sin título", + "updatingWalletLabel": "Actualizando la etiqueta del Wallet.", + "walletLabelUpdated": "Etiqueta del Wallet actualizada.", + "unableToUpdateWalletLabel": "No se pudo actualizar la etiqueta del Wallet.", + "unknownError": "Error desconocido", + "requestFailed": "Error en la solicitud", + "httpRequestFailed": "{error} (HTTP {status})", + "walletIdRequired": "El ID del Wallet es obligatorio.", + "validWalletAddressRequired": "Se requiere una dirección de Wallet válida.", + "signInToRequestDevnetSol": "Inicie sesión para solicitar SOL de Devnet.", + "devnetFaucetHttpError": "El proveedor RPC del faucet de Devnet {provider} devolvió HTTP {status}.", + "devnetFaucetEmptyResponse": "El faucet de Devnet devolvió una respuesta RPC vacía.", + "devnetFaucetProviderError": "El proveedor RPC del faucet de Devnet {provider} devolvió: {error}", + "devnetFaucetProviderGenericError": "El proveedor RPC del faucet de Devnet {provider} devolvió un error.", + "devnetFaucetNoSignature": "El faucet de Devnet no devolvió ninguna firma de transacción.", + "walletAddress": "Dirección del Wallet", + "walletMetadataCopied": "{label} copiado.", + "unableToCopy": "No se pudo copiar {label}.", + "copy": "Copiar {label}", + "recentActivity": "Actividad reciente", + "recentActivityDescription": "Actividad de transferencias y operaciones de Token de este Wallet.", + "refreshing": "Actualizando...", + "refresh": "Actualizar", + "noWalletActivity": "Aún no se encontró actividad del Wallet.", + "activity": "Actividad", + "asset": "Asset", + "direction": "Sentido", + "counterparty": "Counterparty", + "signature": "Firma", + "unknownAsset": "Asset desconocido", + "unknown": "Desconocido", + "pending": "Pendiente", + "incoming": "Entrante", + "outgoing": "Saliente", + "transfer": "Transferencia", + "unableToLoadIssuanceActivity": "No se pudo cargar la actividad de emisión", + "paymentsActivityUnavailable": "La actividad de pagos no está disponible por ahora.", + "issuanceActivityUnavailable": "La actividad de emisión no está disponible por ahora.", + "noActivitySources": "No hay fuentes de actividad disponibles para este Wallet.", + "walletActivityUnavailable": "La actividad del Wallet no está disponible por ahora.", + "unableToVerifyWalletVisibility": "No se pudo verificar la visibilidad del Wallet.", + "invalidWalletId": "ID de Wallet no válido.", + "walletActivityRequestFailed": "Error en la solicitud de actividad del Wallet.", + "previous": "Anterior", + "active": "Activo", + "noWalletProvidersTier": "No hay proveedores de Wallet habilitados para este nivel de organización por ahora.", + "newWallet": "Nuevo Wallet", + "providerAdditionalWalletUnavailable": "{provider} ya está conectado, pero los Wallets adicionales aún no están disponibles.", + "walletCreationAvailable": "La creación de Wallets está disponible tras habilitar un proveedor de custodia para esta organización.", + "stale": "(desactualizado)", + "organizationSettings": "Configuración de la organización", + "organizationSettingsDescription": "Configure el proveedor RPC usado en esta organización.", + "appearance": "Apariencia", + "appearanceDescription": "Elija la apariencia del panel. Esta preferencia se guarda solo en este dispositivo.", + "themeSystem": "Sistema", + "themeLight": "Claro", + "themeDark": "Oscuro", + "themeSystemHint": "El panel sigue la configuración de apariencia de su dispositivo.", + "themeLightHint": "El panel siempre usa el tema claro en este dispositivo.", + "themeDarkHint": "El panel siempre usa el tema oscuro en este dispositivo.", + "failedToLoadOrganizationSettings": "No se pudo cargar la configuración de la organización.", + "organizationNotFound": "Organización no encontrada.", + "organizationNotLinked": "Esta organización de Clerk aún no está vinculada a una organización de SDP.", + "editingOrganization": "Editando organización: {name}", + "viewOnlyRpcSettings": "Puede ver la configuración RPC de la organización, pero solo los Admins pueden modificarla.", + "noRpcProviders": "No hay proveedores RPC habilitados para esta organización en el entorno actual.", + "rpcFallback": "El proveedor RPC guardado para esta organización ya no está disponible en el nivel actual. El formulario usará {provider} hasta que guarde un proveedor habilitado.", + "saving": "Guardando...", + "saveFallback": "Guardar alternativa", + "rpcProvider": "Proveedor RPC", + "testing": "Probando...", + "testRpc": "Probar RPC", + "rpcDetailTitle": "Última prueba", + "rpcDetailReachable": "Accesible", + "rpcDetailUnreachable": "Inaccesible", + "rpcDetailResolvedProvider": "Proveedor resuelto", + "rpcDetailSelectionMode": "Modo de selección", + "rpcDetailEndpoint": "Endpoint", + "rpcDetailUpstream": "Estado del upstream", + "rpcDetailLatency": "Latencia", + "rpcDetailLatencyValue": "{ms} ms", + "saveInProgress": "Guardado en curso.", + "tryAgainSoon": "Inténtelo de nuevo en un momento.", + "checkingRpcProvider": "Comprobando el proveedor RPC.", + "rpcCheckPassed": "Comprobación RPC superada.", + "providerMismatch": "El proveedor no coincide.", + "rpcCheckFailed": "Error en la comprobación RPC.", + "anotherProvider": "otro proveedor", + "failedToSaveRpcSettings": "No se pudo guardar la configuración RPC.", + "missingOrganizationId": "Falta el ID de la organización.", + "rpcProviderSaveMismatch": "Incoherencia al guardar el proveedor RPC (solicitado {requested}, persistido {persisted}).", + "rpcSettingsSaved": "Configuración RPC guardada.", + "failedToTestRpcProvider": "No se pudo probar el proveedor RPC.", + "rpcTestFailed": "Error en la prueba RPC.", + "rpcTestFailedStatus": "Error en la prueba RPC ({status}).", + "rpcTestMismatch": "Incoherencia en la prueba RPC (solicitado {requested}, resuelto {resolved}).", + "rpcUpstreamReturned": "El upstream RPC devolvió {status} {statusText}.", + "rpcTestPassed": "Prueba RPC superada ({status} {statusText}) en {latency} ms.", + "missingApiKeyIdForDeletion": "Falta el ID de la clave API para eliminarla.", + "missingApiKeyNameForDeletion": "Falta el nombre de la clave API para confirmar la eliminación.", + "confirmApiKeyDeletion": "Escriba el nombre de la clave para confirmar la eliminación de la clave API.", + "apiKeyConfirmationMismatch": "La confirmación no coincide con el nombre de la clave.", + "apiKeyDeactivated": "La clave API \"{name}\" ha sido desactivada.", + "apiKeyDeleteFailed": "Error al eliminar: {error}", + "apiKeyNameRequired": "El nombre de la clave API es obligatorio.", + "apiKeyWalletScopeRequired": "Elija si esta clave puede acceder a todos los Wallets o solo a los seleccionados.", + "apiKeyWalletRequired": "Seleccione al menos un Wallet para una clave API con alcance de Wallet.", + "invalidExpirationDate": "Fecha de expiración no válida.", + "apiKeyCreated": "Clave API \"{name}\" creada. Guárdela ahora; no se mostrará de nuevo.", + "apiKeyCreateFailed": "Error al crear: {error}", + "missingApiKeyIdForRotation": "Falta el ID de la clave API para la rotación.", + "apiKeyRotated": "Clave API rotada. La clave anterior sigue siendo válida hasta {deadline}.", + "apiKeyRotateFailed": "Error al rotar: {error}", + "providerLocalDescription": "Signer de par de claves Ed25519 autoalojado desde CUSTODY_PRIVATE_KEY.", + "providerPrivyDescription": "Infraestructura de Wallets alojada para firma vía API.", + "providerFireblocksDescription": "Custodia MPC con controles de Wallet basados en vaults.", + "providerCoinbaseCdpDescription": "Aprovisionamiento programático de Wallets mediante Coinbase CDP.", + "providerParaDescription": "Custodia de Wallets integrada para operaciones a nivel de organización.", + "providerTurnkeyDescription": "Custodia de claves basada en políticas para cargas de firma en producción.", + "providerDfnsDescription": "Orquestación de Wallets MPC con firma segura impulsada por API.", + "providerIbmHavenDescription": "Custodia institucional en IBM Digital Asset Haven.", + "providerAnchorageDescription": "Custodia institucional con gestión del ciclo de vida de Wallets.", + "providerUtilaDescription": "Firma de Wallets de Solana respaldada por vaults mediante cuentas de servicio de Utila.", + "providerCredentialLabel": "Etiqueta de la credencial", + "providerCredentialLabelDescription": "Elija un nombre editable para esta credencial de proveedor.", + "providerCredentialScope": "Alcance de la credencial", + "providerCredentialScopeDescription": "Las credenciales de organización pueden compartirse por referencia; las de proyecto quedan aisladas al proyecto seleccionado.", + "providerCredentialScopeOrganization": "Organización", + "providerCredentialScopeProject": "Proyecto", + "providerPrivyAppId": "ID de app de Privy", + "providerPrivyAppIdDescription": "Ingrese el ID de app de su panel de Privy. SDP solo muestra metadatos enmascarados tras el envío.", + "providerPrivyAppSecret": "Secreto de app de Privy", + "providerPrivyAppSecretDescription": "Ingrese el secreto de app de su panel de Privy. Este valor es de solo escritura y no se vuelve a mostrar.", + "providerInitialWalletLabel": "Etiqueta del Wallet inicial", + "providerInitialWalletLabelDescription": "Opcionalmente, asigne un nombre al Wallet predeterminado creado cuando la verificación de conexión sea exitosa.", + "apiKeyAdminDescription": "Admin incluye privilegios de custodia y de plataforma. Developer excluye las acciones de custodia.", + "apiKeyEnvironmentDescription": "Cambie el entorno del espacio de trabajo en la barra lateral para crear una clave en el otro entorno.", + "expiresOn": "Expira el {date}", + "default": "Predeterminado:", + "fullKeyOnlyShownOnce": "La clave completa solo se mostrará una vez tras su creación.", + "closeApiKeyCreationModal": "Cerrar el modal de creación de clave API", + "policyDraftSaveFailed": "No se pudo guardar el Draft.", + "policyDraftSaveFailedDescription": "Puede seguir configurando, pero los cambios pueden perderse si sale.", + "policyDraftSaved": "Draft guardado.", + "policyDraftSavedDescription": "El perfil aún no está activo.", + "policyChooseRestriction": "Elija al menos una categoría de restricción.", + "policyCheckDestinations": "Verifique las direcciones de destino.", + "policyCheckDestinationsDescription": "Use direcciones de Solana válidas antes de la revisión.", + "policyChooseOperations": "Elija los controles de acceso a operaciones.", + "policyChooseOperationsDescription": "Seleccione al menos una familia de operaciones para bloquear.", + "policyCheckLimits": "Verifique los límites de transferencia.", + "policyCheckLimitsDescription": "Ingrese un número positivo para cada límite configurado.", + "policyChooseApprovals": "Elija los controles de aprobación.", + "policyChooseApprovalsDescription": "Seleccione al menos una familia de operaciones que deba requerir aprobación.", + "policyChooseAdvanced": "Elija los controles de firma avanzados.", + "policyChooseAdvancedDescription": "Seleccione firma en bruto, interacciones de programa, o ambas.", + "policyActivating": "Activando los controles del Wallet.", + "policyActive": "Controles del Wallet activos.", + "policyActiveDescription": "Las restricciones seleccionadas ya están activas.", + "policyActivationFailed": "Error en la activación.", + "policySaveFailed": "No se pudieron guardar los controles del Wallet.", + "policyDisabling": "Desactivando los controles del Wallet.", + "policyDisabled": "Controles del Wallet desactivados.", + "policyDisabledDescription": "El Wallet vuelve a permitir por defecto.", + "policyDisableFailed": "Error al desactivar.", + "policyAuthoringIntentTitle": "¿Qué debe controlar este Wallet?", + "policyAuthoringIntentDescription": "Defina la decisión predeterminada y elija las áreas que necesitan controles explícitos.", + "policyAuthoringLimitsTitle": "Límites y Assets", + "policyAuthoringLimitsDescription": "Defina límites de transferencia genéricos y elija los Assets cubiertos por este perfil.", + "policyAuthoringDestinationsTitle": "Destinos y operaciones", + "policyAuthoringDestinationsDescription": "Controle dónde puede actuar este Wallet y qué operaciones necesitan una decisión específica.", + "policyAuthoringReviewTitle": "Revisar y activar", + "policyAuthoringReviewDescription": "Confirme el perfil completo antes de que modifique la aplicación activa.", + "policyDefaultAction": "Decisión predeterminada", + "policyDefaultActionDescription": "Se aplica solo cuando ninguna regla coincide.", + "policyDefaultAllow": "Permitir por defecto", + "policyDefaultApproval": "Requerir aprobación por defecto", + "policyDefaultDeny": "Denegar por defecto", + "policyRestrictionCategories": "Categorías de restricción", + "policyRestrictionCategoriesDescription": "Elija las áreas de control a configurar en este perfil.", + "policyRestrictionRequired": "Con Permitir por defecto, la política no cambia nada hasta que agregue una restricción.", + "policyCategoryLimitsDescription": "Defina un máximo por transacción o por día.", + "policyAllowedAssets": "Assets permitidos", + "policyAllowedAssetsDescription": "Limite este perfil a Assets del Wallet seleccionados o a cualquier dirección de Mint de Solana.", + "policyDestinationControls": "Controles de destino", + "policyDestinationControlsDescription": "Mantenga una Allowlist o Denylist ordenada de direcciones de Solana.", + "policyOperationControls": "Controles de operaciones", + "policyOperationControlsDescription": "Elija una decisión para las familias de operaciones del Wallet y tipos de operación exactos.", + "policyPerTransaction": "Por transacción", + "policyAssetBadgeIssued": "Emitido", + "policyAssetBadgeCustom": "Personalizado", + "policySummarySelectedCount": "{count} seleccionados", + "policyDailyTotal": "Total diario", + "policyTransferLimitsHint": "Limite el monto por transacción o por día. Los límites se aplican al monto enviado, sea cual sea el Asset usado.", + "policyInvalidDecimal": "Ingrese un valor decimal positivo.", + "policyDailyBelowTransaction": "El total diario no puede ser inferior al monto por transacción.", + "policySearchAssets": "Buscar Assets del Wallet o ingresar una dirección de Mint", + "policyWalletAssets": "Assets del Wallet", + "policySelectedAssets": "Assets seleccionados", + "policyCustomMint": "Mint personalizado", + "policyNoMatchingAssets": "No hay Assets coincidentes.", + "policyAddCustomMint": "Agregar Mint personalizado", + "policyInvalidMint": "Ingrese una dirección de Mint de Solana válida.", + "policyDuplicateAsset": "Este Asset ya está seleccionado.", + "policyRemoveAsset": "Quitar {asset}", + "policyNoStepControls": "No se seleccionó ningún control de este paso. Puede continuar o volver a Intención para agregarlos.", + "policyAllowList": "Allowlist", + "policyBlockList": "Denylist", + "policyWalletAddresses": "Direcciones de Wallet", + "policyDuplicateDestination": "Esta dirección ya está en la lista.", + "policyDestinationInvalid": "Ingrese una dirección de Solana válida.", + "policyDestinationSearchPlaceholder": "Buscar Counterparties o pegar direcciones separadas por comas", + "policyDestinationCounterparties": "Counterparties", + "policyDestinationExternal": "Dirección externa", + "policyDestinationAddExternal": "Agregar dirección", + "policyNoMatchingDestinations": "No hay Counterparties coincidentes.", + "policyDestinationAllowlistDescription": "Solo las direcciones siguientes pueden recibir desde este Wallet.", + "policyDestinationBlocklistDescription": "Las direcciones siguientes nunca pueden recibir desde este Wallet.", + "policyBulkAddSummary": "{added} agregadas · {flagged} marcadas para revisión", + "policyBulkNothingToAdd": "No se encontraron nuevas direcciones válidas en el texto pegado.", + "policyRemoveDestination": "Quitar {address}", + "policyTransfers": "Transferencias", + "policyProgramOperations": "Operaciones de programa", + "policyProviderAdministration": "Administración del proveedor", + "policyTransfersDescription": "Transferencias de Wallet a Wallet firmadas directamente por este Wallet.", + "policyPaymentsDescription": "Envíos de pagos individuales, por lote y recurrentes.", + "policyRampsDescription": "Operaciones de on-ramp y off-ramp, incluidas las cotizaciones de proveedores.", + "policyIssuanceDescription": "Acciones de emisión de Tokens como Mint y actualizaciones de autoridad.", + "policyRawSigningDescription": "Solicitudes de firma de bajo nivel, incluidas las verificaciones del Signer de custodia.", + "policyProgramOperationsDescription": "Interacciones directas con programas de Solana fuera de los flujos gestionados.", + "policyProviderAdministrationDescription": "Cambios administrativos del proveedor de custodia de este Wallet.", + "policyActionAllow": "Permitir", + "policyActionDeny": "Denegar", + "policyActionApproval": "Requerir aprobación", + "policyAdvancedOperationTypes": "Tipos de operación avanzados", + "policyAdvancedOperationDescription": "Agregue cadenas exactas de tipo de operación cuando una decisión a nivel de familia no sea suficientemente específica.", + "policyViewOperationPermissions": "Ver todos los permisos de operación admitidos", + "policyOperationTypePlaceholder": "p. ej., payment_transfer_execute", + "policyOperationTypeTooLong": "Los tipos de operación deben tener 120 caracteres o menos.", + "policySummary": "Resumen de la política", + "policySummaryWallet": "Wallet", + "policySummaryAddress": "Dirección", + "policySummaryStatus": "Estado", + "policySummaryDefaultAction": "Decisión predeterminada", + "policySummaryControlAreas": "Áreas de control", + "policySummaryAllowedAssets": "Assets permitidos", + "policySummaryDestinations": "Entradas de destino", + "policySummaryApprovals": "Controles de aprobación", + "policySummaryProvider": "Mapeo del proveedor", + "policyCopyAddress": "Copiar dirección del Wallet", + "policyAddressCopied": "Dirección del Wallet copiada.", + "policyStatusDefaultAllow": "Permitir por defecto", + "policyStatusNotActivated": "No activado", + "policyStatusActive": "Activo", + "policyStatusDraft": "Draft", + "policyStatusDisabled": "Desactivado", + "policyStatusArchived": "Archivado", + "policyNotConfigured": "No configurado", + "policyEdit": "Editar", + "policyReviewTransferLimits": "Límites de transferencia", + "policyReviewAllowedAssets": "Assets permitidos", + "policyReviewDestinationControls": "Controles de destino", + "policyReviewOperationControls": "Controles de operación", + "policyReviewPerTransaction": "Por transacción {amount}", + "policyReviewDailyTotal": "Total diario {amount}", + "policyReviewPreservedRules": "Incluye {count} reglas avanzadas existentes.", + "policyReviewNoRestrictions": "Aún no hay restricciones — activar no cambiaría nada.", + "policySaveDraft": "Guardar Draft", + "policyActivateControls": "Activar controles", + "policyControlsActive": "Controles activos", + "policyMoreActions": "Más acciones de política", + "policyDisableControls": "Desactivar controles", + "policyDisableTitle": "¿Desactivar los controles del Wallet?", + "policyDisableConfirmation": "¿Desactivar los controles de {wallet}? Esto devuelve el Wallet a permitir por defecto.", + "policyCancel": "Cancelar", + "policyConfirmDisable": "Desactivar controles", + "policyDraftStoredLocally": "Guardado en este dispositivo {date}", + "policyActivationValidation": "Revise los campos de política resaltados antes de activar.", + "policyProviderWarning": "Algunos controles no están totalmente mapeados al proveedor de custodia y siguen aplicados por SDP.", + "wallets": "Wallets", + "playgroundListWallets": "Listar Wallets", + "playgroundListWalletConfigs": "Listar configuraciones de Wallet", + "playgroundGetWallet": "Obtener Wallet", + "playgroundGetWalletPublicKey": "Obtener clave pública del Wallet", + "playgroundAggregateBalances": "Agregar saldos de Wallets", + "playgroundCreateWallet": "Crear Wallet", + "playgroundSignerCheck": "Verificación del Signer", + "rootWallet": "Wallet raíz", + "mainWallet": "Wallet principal", + "mainSettlementWallet": "Wallet principal de liquidación", + "selectWalletPurpose": "Seleccionar el propósito del Wallet", + "ownershipProof": "Prueba de propiedad desde el playground de Wallets", + "untitledWallet": "Wallet sin título", + "publicKey": "Clave pública", + "provider": "Proveedor", + "totalBalance": "Saldo total", + "balances": "Saldos", + "noTrackedBalances": "Aún no se encontraron saldos monitoreados para este Wallet.", + "walletControls": "Controles del Wallet", + "walletRestrictionsActive": "Este Wallet tiene restricciones activas de pagos salientes.", + "walletDefaultAllow": "Este Wallet parte de permitir por defecto. Agregue restricciones solo donde se necesite control.", + "destinations": "Destinos", + "open": "Abrir", + "perTransfer": "Por transferencia", + "daily": "Diario", + "noCap": "Sin tope", + "reviewControls": "Revisar controles", + "startProfile": "Iniciar perfil", + "policyIntent": "Intención", + "policySetWalletPolicies": "Definir políticas de Wallet", + "policyIntentDescription": "Elija adónde pueden ir los fondos y cuánto puede transferir este Wallet.", + "policyRules": "Reglas", + "policyStartingRules": "Reglas iniciales", + "policyRulesDescription": "Configure las áreas de reglas seleccionadas antes de la revisión.", + "policyReview": "Revisión", + "policyFinalReview": "Revisión final", + "policyReviewDescription": "Revise los cambios antes de aplicar los controles del Wallet.", + "policyOperationAccess": "Acceso a operaciones", + "policyOperationAccessDescription": "Bloquee las familias de operaciones de alto riesgo manteniendo el uso normal.", + "policyAllowedDestinations": "Destinos permitidos", + "policyAllowedDestinationsDescription": "Úselo cuando este Wallet solo deba pagar a direcciones conocidas.", + "policyTransferLimits": "Límites de transferencia", + "policyAdvancedSigning": "Firma avanzada", + "policyAdvancedSigningDescription": "Restrinja la firma en bruto y las interacciones directas con programas.", + "policyPayments": "Pagos", + "policyRamps": "Ramps", + "policyIssuance": "Emisión", + "policyProviderAdmin": "Admin del proveedor", + "policyRawSigning": "Firma en bruto", + "policyProgramInteractions": "Interacciones de programa", + "policyAllowed": "Permitido", + "policyDenied": "Denegado", + "policyApprovalRequired": "Aprobación requerida", + "policyProviderApprovalRequired": "Aprobación del proveedor requerida", + "policyNotEvaluated": "No evaluado", + "policyFailed": "Fallido", + "recentPolicyDecisions": "Decisiones de política recientes", + "policyEvaluationsShown": "{count} evaluaciones mostradas para este Wallet", + "needsApproval": "Necesita aprobación", + "stepOf": "Paso {current} de {total}", + "onboardingEyebrow": "Configuración de la organización", + "onboardingTitle": "Configure su espacio de trabajo", + "onboardingDescription": "Elija la infraestructura que usará su organización.", + "onboardingChooseRpc": "Elija su proveedor RPC", + "onboardingChooseCustody": "Elija su proveedor de custodia", + "onboardingProvidersChangeLater": "Puede cambiar los proveedores en cualquier momento en Configuración.", + "onboardingNoRpcProviders": "No hay proveedores RPC disponibles para esta organización en el entorno actual. Contacte a su administrador de SDP antes de continuar.", + "onboardingNoCustodyProviders": "No hay proveedores de custodia disponibles para esta organización en el entorno actual. Contacte a su administrador de SDP antes de continuar.", + "onboardingFinish": "Finalizar configuración", + "onboardingDefaultWalletLabel": "Wallet predeterminado", + "onboardingFinishError": "No se pudo finalizar la configuración de la organización.", + "onboardingSaving": "Guardando...", + "onboardingPreparingTitle": "Su espacio de trabajo se está atando los cordones", + "onboardingPreparingDescription": "Un momento mientras el logo de Solana estira las piernas. Le llevaremos automáticamente cuando su espacio de trabajo esté listo.", + "onboardingAdminTitle": "Un administrador está configurando este espacio de trabajo", + "onboardingAdminDescription": "Podrá usar el panel cuando un administrador de la organización elija los proveedores RPC y de custodia.", + "onboardingRpcDefaultDescription": "Use la infraestructura RPC gestionada por SDP, sin credenciales que configurar.", + "onboardingRpcAlchemyDescription": "Enrute las solicitudes de Solana a través de su conexión de Alchemy configurada.", + "onboardingRpcHeliusDescription": "Use la infraestructura de Helius para las solicitudes RPC de Solana.", + "onboardingRpcNoditDescription": "Use Nodit para su tráfico RPC de Solana.", + "onboardingRpcQuickNodeDescription": "Use su endpoint de QuickNode configurado para el RPC de Solana.", + "onboardingRpcTritonDescription": "Enrute las solicitudes de Solana a través de la infraestructura de Triton.", + "onboardingRpcValidationCloudDescription": "Use Validation Cloud para su tráfico RPC de Solana.", + "collapse": "Contraer", + "expand": "Expandir", + "policyActivationOutcome": "Resultado de la activación", + "policyDefault": "Predeterminado", + "policyAllowUnmatched": "Permitir operaciones sin coincidencia", + "policyRevision": "Revisión", + "policyProviderMapping": "Mapeo del proveedor", + "policySdpEnforced": "Aplicado por SDP", + "policyNoRestrictionCategory": "Ninguna categoría de restricción seleccionada.", + "policyNoOperationsBlocked": "Ninguna familia de operaciones bloqueada", + "policyNoAddresses": "Sin direcciones", + "policyNoApprovalChecks": "Sin controles de aprobación", + "policyNoAdvancedControls": "Sin controles de firma avanzados", + "savedDraft": "Draft guardado", + "policyApplyControls": "Aplicar controles", + "policyChooseOperationFamilies": "Elija las familias de operaciones a bloquear.", + "policyPasteAddresses": "Pegue direcciones de Solana aprobadas o una columna de direcciones CSV.", + "policySetCaps": "Defina un tope por transferencia, un tope diario, o ambos.", + "policyChooseApprovalFamilies": "Elija las familias de operaciones que deben pausarse para aprobación.", + "policyBlockAdvanced": "Bloquee la firma en bruto, las interacciones de programa, o ambas.", + "new": "Nuevo", + "policyProviderMappingPending": "Mapeo del proveedor pendiente", + "policyProviderMapped": "Proveedor mapeado", + "policyProviderPartiallyMapped": "Proveedor parcialmente mapeado", + "policyProviderMappingFailed": "Error en el mapeo del proveedor", + "policyBlockFamilies": "Bloquear {families}", + "policyDenyFamilies": "Denegar {families}", + "policyDestinationCount": "{count} direcciones", + "policyInvalidCount": "{count} no válidas", + "policyAllowedCount": "{count} permitidas", + "policyPerTransferValue": "Por transferencia {value}", + "policyDailyValue": "Diario {value}", + "policyAuditTitle": "Auditoría de políticas", + "policyAuditBreadcrumb": "Navegación de auditoría de políticas", + "policyAuditEvaluation": "Evaluación", + "policyAuditBackToWalletControls": "Volver a los controles del Wallet", + "policyAuditBackToAudit": "Volver a la auditoría", + "policyAuditRevisionHistory": "Historial de revisiones", + "policyAuditWalletHistory": "Historial de políticas de {wallet}", + "policyAuditWalletHistoryDescription": "Revise las decisiones de política usando la revisión aplicada cuando se evaluó cada operación.", + "policyAuditDecision": "Decisión", + "policyAuditAllowed": "Permitido", + "policyAuditBlocked": "Bloqueado", + "policyAuditApprovalRequired": "Aprobación requerida", + "policyAuditReview": "Revisión", + "policyAuditNotEvaluated": "No evaluado", + "policyAuditAllDecisions": "Todas las decisiones", + "policyAuditOperationStatus": "Estado de la operación", + "policyAuditAllStatuses": "Todos los estados", + "policyAuditOperationFamily": "Familia de operaciones", + "policyAuditAllFamilies": "Todas las familias", + "policyAuditReasonCode": "Código de motivo", + "policyAuditAllReasons": "Todos los motivos", + "policyAuditFromDate": "Desde", + "policyAuditToDate": "Hasta", + "policyAuditApplyFilters": "Aplicar filtros", + "policyAuditClearFilters": "Borrar filtros", + "policyAuditMoreFilters": "Más filtros", + "policyAuditOperation": "Operación", + "policyAuditAssetAmount": "Asset / monto", + "policyAuditDestination": "Destino", + "policyAuditApiKeyActor": "Clave API / actor", + "policyAuditAppliedRevision": "Revisión aplicada", + "policyAuditActiveRevision": "Revisión activa", + "policyAuditEvaluated": "Evaluado", + "policyAuditOpenEvaluation": "Abrir evaluación", + "policyAuditEmpty": "Aún no hay evaluaciones de política", + "policyAuditEmptyDescription": "Las decisiones de política aparecerán aquí tras evaluar las operaciones del Wallet.", + "policyAuditEmptyFiltered": "Ninguna evaluación coincide con los filtros activos.", + "policyAuditDefaultAllow": "Permitir por defecto", + "policyAuditNoActiveRevision": "Sin revisión activa", + "policyAuditUnavailable": "No disponible", + "policyAuditUnavailableApiKey": "Clave API no disponible", + "policyAuditRange": "{from}-{to} de {total}", + "policyAuditPreviousPage": "Página anterior", + "policyAuditNextPage": "Página siguiente", + "policyAuditPageOf": "Página {page} de {pageCount}", + "policyAuditTransferAllowed": "Transferencia permitida", + "policyAuditTransferBlocked": "Transferencia bloqueada", + "policyAuditSentToReview": "Enviado a revisión", + "policyAuditPrevious": "Anterior", + "policyAuditNext": "Siguiente", + "policyAuditRequest": "Solicitud", + "policyAuditRevisions": "Revisiones", + "policyAuditDetailTabs": "Detalle de la auditoría de políticas", + "policyAuditEvaluationSequence": "Secuencia de evaluación", + "policyAuditWalletPolicyEvaluation": "Evaluación de la política del Wallet", + "policyAuditApiKeyPolicyEvaluation": "Evaluación de la política de la clave API", + "policyAuditMatchedRule": "Regla coincidente", + "policyAuditObservedValueContext": "Valor observado / contexto", + "policyAuditEffectiveLimitExpectation": "Límite efectivo / expectativa", + "policyAuditFinalDecision": "Decisión final", + "policyAuditRecorded": "Registrado", + "policyAuditApplied": "Aplicado", + "policyAuditRawDetails": "Ver detalles sin procesar", + "policyAuditNoRecordedValues": "No se registraron valores.", + "policyAuditYes": "Sí", + "policyAuditNo": "No", + "policyAuditNone": "Ninguno", + "policyAuditAppliedRevisionAtEvaluation": "Revisión aplicada en la evaluación", + "policyAuditCurrentlyActiveRevision": "Revisión activa actualmente", + "policyAuditHistoricalRevisionNotice": "Esta decisión histórica usó una revisión distinta de la que está activa ahora.", + "policyAuditApiKeyAppliedRevision": "Revisión de la clave API en la evaluación", + "policyAuditApiKeyActiveRevision": "Revisión de la clave API activa actualmente", + "policyAuditNoAdditionalRestriction": "Sin restricción adicional", + "policyAuditEvaluatedAt": "Evaluado el {date}", + "policyAuditRevisionId": "ID de revisión", + "policyAuditEvaluationId": "ID de evaluación", + "policyAuditOperationId": "ID de operación", + "policyAuditRequestId": "ID de solicitud", + "policyAuditApiKeyId": "ID de clave API", + "policyAuditRequestContext": "Contexto de la solicitud", + "policyAuditRedactedContext": "Contexto enmascarado registrado con esta evaluación.", + "policyAuditLegacyContextEmpty": "No se registró contexto estructurado de la solicitud para esta evaluación.", + "policyAuditEvaluationContext": "Contexto de evaluación", + "policyAuditApiKey": "Clave API", + "policyAuditActor": "Actor", + "policyAuditProviderMapping": "Mapeo del proveedor", + "policyAuditApprovalRequest": "Solicitud de aprobación", + "policyAuditProviderPending": "Mapeo del proveedor pendiente", + "policyAuditProviderPartial": "Parcialmente mapeado", + "policyAuditProviderFailed": "Error en el mapeo del proveedor", + "policyAuditProviderApproval": "Aprobación del proveedor requerida", + "policyAuditSdpEnforced": "Aplicado por SDP", + "policyAuditViewWalletControls": "Ver controles del Wallet", + "policyAuditViewApiKey": "Ver clave API", + "policyAuditViewApprovalRequest": "Ver solicitud de aprobación", + "policyAuditUnavailableTitle": "Historial de políticas no disponible", + "policyAuditUnavailableDescription": "El historial de políticas del Wallet no se pudo cargar por ahora.", + "policyRevisionsTitle": "Revisiones de política", + "policyRevisionsWalletHistory": "Historial de revisiones de {wallet}", + "policyRevisionsDescription": "Inspeccione instantáneas de reglas inmutables sin cambiar los controles activos del Wallet.", + "policyRevisionsEmpty": "Aún no hay revisiones de política", + "policyRevisionsEmptyDescription": "Aparecerá una revisión después de guardar los controles del Wallet.", + "policyRevisionsNewestFirst": "Revisión más reciente primero", + "policyRevisionNumber": "Revisión v{number}", + "policyRevisionsCreated": "Creada", + "policyRevisionsActivated": "Activada", + "policyRevisionsRules": "Reglas", + "policyRevisionsCreator": "Creador", + "policyRevisionsSystem": "Sistema", + "policyRevisionsActive": "Activa", + "policyRevisionsHistorical": "Histórica", + "policyRevisionsDraft": "Draft", + "policyRevisionsRuleSnapshot": "Instantánea de reglas de solo lectura", + "policyRevisionsSnapshotDescription": "Esta instantánea inmutable se muestra exactamente como se almacenó para esta revisión.", + "policyRevisionsDefaultAction": "Acción predeterminada", + "policyRevisionsNoRules": "No se almacenaron reglas explícitas en esta revisión.", + "policyRevisionsRuleNumber": "Regla {number}", + "policyRevisionsRawRule": "Ver datos sin procesar de la regla", + "sandboxProjectUnavailable": "Proyecto de Sandbox no disponible. Recargue el panel e inténtelo de nuevo.", + "sendingSignerCheck": "Enviando la verificación del Signer.", + "signerCheckFailed": "Error en la verificación del Signer.", + "signerCheckSent": "Verificación del Signer enviada.", + "memoTransactionSubmitted": "Transacción de Memo enviada.", + "viewOnSolanaExplorer": "Ver en Solana Explorer", + "requestingDevnetSol": "Solicitando SOL de Devnet.", + "devnetFaucetFailed": "Error en el faucet de Devnet.", + "devnetSolRequested": "{amount} SOL de Devnet solicitados.", + "faucetTransactionSubmitted": "Transacción del faucet enviada.", + "walletActionsFor": "Acciones de Wallet para {wallet}", + "proving": "Demostrando...", + "proveOwnershipUnsupported": "Demostrar propiedad (no compatible)", + "proveOwnership": "Demostrar propiedad", + "proveOwnershipAdminOnly": "Demostrar propiedad (solo Admin)", + "requesting": "Solicitando...", + "requestDevnetSol": "Solicitar SOL de Devnet", + "policyRuleAllowedDestinations": "Destinos permitidos", + "policyRulePerTransferLimit": "Límite por transferencia", + "policyRuleApprovalChecks": "Controles de aprobación", + "policyRevisionNew": "Nueva", + "policyPerTransferCap": "Tope por transferencia", + "policyDailyCap": "Tope diario", + "policyPositiveNumber": "Ingrese un número positivo.", + "policyAddressPlaceholder": "dirección 9xQeWvG816bUx9EPfuxEzHh9VY5k...", + "policyDisable": "Desactivar", + "policyApprovalRequest": " / Aprobación {id}", + "playgroundProviderField": "Proveedor", + "playgroundLabelField": "Etiqueta", + "playgroundPurposeField": "Propósito", + "playgroundMemoField": "Memo", + "policyOperationEditorDescription": "Las familias seleccionadas se deniegan antes de la firma o la ejecución. Las no seleccionadas siguen en permitir por defecto salvo que aplique otra regla.", + "policyDestinationEditorDescription": "Pegue direcciones de Solana separadas por saltos de línea, comas, punto y coma, tabulaciones o una columna CSV.", + "policyInvalidAddress": "Dirección no válida: {addresses}", + "policyInvalidAddresses": "Direcciones no válidas: {addresses}", + "policyApprovalEditorDescription": "Las familias seleccionadas se pausan con una decisión de aprobación requerida. El enrutamiento a la bandeja de aprobaciones lo gestiona el flujo de aprobación posterior.", + "policyAdvancedEditorDescription": "Estos controles son intencionalmente estrictos porque pueden eludir la intención de pago de alto nivel.", + "providerCategoryApi": "API", + "providerCategoryApiDescription": "Infraestructura de Wallets para producto, operaciones y flujos automatizados vía API.", + "providerCategoryInstitutional": "Institucional", + "providerCategoryInstitutionalDescription": "Custodia basada en políticas para tesorería, liquidación y aprobaciones multiparte.", + "existingApiKeysDescription": "Claves activas e históricas de este espacio de trabajo.", + "apiKeysViewOnly": "Puede ver las claves API, pero solo los Admins pueden crearlas, rotarlas o eliminarlas.", + "apiKeyRotationHint": "Consejo de rotación: rote solo claves activas. El panel usa un periodo de gracia de 24 horas; use la API para valores personalizados (0-168 h). Los nuevos secretos se muestran una vez.", + "apiKeyStepDetails": "Detalles", + "apiKeyStepPermissions": "Permisos", + "apiKeyStepWalletAccess": "Acceso a Wallets", + "apiKeyStepReview": "Revisión", + "apiKeyAuthoringProgress": "Progreso de creación de la clave API", + "apiKeyDetailsTitle": "Detalles de la clave", + "apiKeyDetailsDescription": "Asigne un nombre a la clave y elija cuándo debe expirar.", + "apiKeyIdentity": "Identidad de la clave", + "apiKeyPermissionsTitle": "Permisos de endpoints", + "apiKeyPermissionsDescription": "Elija a qué endpoints de SDP puede acceder esta clave.", + "apiKeyRoleFixedOnEdit": "El rol queda fijo tras la creación. El alcance de Wallets y políticas aún puede actualizarse.", + "apiKeyRoleDescription": { + "api_admin": "Acceso completo a los endpoints, incluidas las operaciones administrativas.", + "api_developer": "Acceso estándar a Tokens, pagos, Counterparties, Wallets, cumplimiento y webhooks.", + "api_readonly": "Acceso de solo lectura a recursos operativos y datos de auditoría." + }, + "apiKeyFullEndpointAccess": "Acceso completo a endpoints", + "apiKeyPermissionCount": "{count} permisos de endpoint", + "apiKeyPermissionsSeparateFromPolicy": "Los permisos de endpoint determinan el alcance. Los controles del Wallet y las restricciones de clave API se evalúan por separado en cada operación.", + "apiKeyWalletPolicyTitle": "Acceso a Wallets y políticas", + "apiKeyWalletPolicyDescription": "Elija dónde puede firmar esta clave y qué controles adicionales se aplican.", + "apiKeyAllWalletsHelper": "Esta clave puede acceder a los Wallets permitidos por sus permisos de endpoint.", + "apiKeySelectedWalletCount": "Wallets seleccionados ({count})", + "apiKeySearchWallets": "Buscar Wallets", + "apiKeyNoWalletSearchResults": "Ningún Wallet coincide con esta búsqueda.", + "apiKeySelectWallet": "Seleccionar {wallet}", + "apiKeyMakeDefaultWallet": "Hacer de {wallet} el Wallet de firma predeterminado", + "apiKeyMakeDefaultSigningWallet": "Definir como Wallet de firma predeterminado", + "apiKeyWalletControlsEnforced": "Los controles del Wallet siempre se aplican.", + "apiKeyWalletControlsDescription": "Las restricciones de clave API pueden acotar estos controles, pero no pueden eludirlos ni reemplazarlos.", + "apiKeyNoWalletBaseline": "No hay línea base de controles del Wallet hasta que se seleccione un Wallet.", + "apiKeyPolicyStatusDefaultAllow": "Permitir por defecto", + "apiKeyPolicyStatusDraft": "Draft", + "apiKeyPolicyStatusDisabled": "Desactivado", + "apiKeyActiveRevision": "Revisión {revision}", + "apiKeyRestrictionsTitle": "Restricciones de clave API", + "apiKeyAddRestrictions": "Agregar restricciones de clave API", + "apiKeyNoAdditionalRestrictions": "Sin restricciones de clave API adicionales", + "apiKeyRestrictionsNarrowCopy": "Estas restricciones acotan el acceso además de los controles del Wallet.", + "apiKeyExistingRestrictionsActive": "Restricciones de clave API activas", + "apiKeyExistingRestrictionsPreserved": "El perfil activo permanece sin cambios hasta que reemplace explícitamente sus detalles de restricción.", + "apiKeyExistingRestrictionsPreservedShort": "Restricciones existentes conservadas", + "apiKeyReplaceRestrictionDetails": "Reemplazar detalles de restricción", + "apiKeyAdditionalDefaultAction": "Restricción adicional: acción predeterminada", + "apiKeyAdditionalOperationFamilies": "Restricción adicional: familias de operaciones", + "apiKeyAdditionalOperationTypes": "Restricción adicional: tipos de operación", + "apiKeyAdditionalAssets": "Restricción adicional: Assets", + "apiKeyAdditionalAmounts": "Restricción adicional: restricciones de monto", + "apiKeyAdditionalDestinations": "Restricción adicional: destinos", + "apiKeyAdditionalApprovals": "Restricción adicional: requisitos de aprobación", + "apiKeyFamilyTransfer": "Transferencias", + "apiKeyFamilyPayment": "Pagos", + "apiKeyFamilyRamp": "Ramps", + "apiKeyFamilyIssuance": "Emisión", + "apiKeyFamilyRawSign": "Firma en bruto", + "apiKeyFamilyProgram": "Interacciones de programa", + "apiKeyFamilyProviderAdmin": "Administración del proveedor", + "apiKeyOperationTypesPlaceholder": "payment_transfer_execute, token_mint", + "apiKeyAssetsPlaceholder": "USDC, SOL", + "apiKeyMaximumAmount": "Monto máximo de operación", + "apiKeyMaximumAmountPlaceholder": "2500", + "apiKeyDestinationsPlaceholder": "Pegue direcciones de Solana permitidas", + "apiKeyRequireApproval": "Requerir aprobación para operaciones alcanzables", + "apiKeyRequireApprovalDescription": "Las operaciones coincidentes se pausan hasta que se registre una decisión de aprobación.", + "apiKeyRestrictionAmountInvalid": "Ingrese un monto decimal positivo.", + "apiKeyReviewTitle": "Revisar clave API", + "apiKeyReviewDescription": "Confirme la identidad, el alcance de endpoints, los controles de Wallet y las restricciones adicionales.", + "apiKeyReviewIdentity": "Identidad de la clave", + "apiKeyReviewPermissions": "Permisos de endpoints", + "apiKeyReviewWalletAccess": "Acceso a Wallets", + "apiKeyReviewWalletBaseline": "Línea base de controles del Wallet", + "apiKeyReviewRestrictions": "Restricciones adicionales de clave API", + "apiKeyReviewBindingChanges": "Cambios de vinculación", + "apiKeyRestrictionRuleCount": "{count} reglas de restricción adicionales", + "apiKeyDefaultAllowWarning": "Los controles de Wallet usan Permitir por defecto para: {wallets}.", + "apiKeyRestrictionNoReachableWalletWarning": "Hay restricciones de clave API configuradas, pero ningún Wallet seleccionado es alcanzable.", + "apiKeySummaryTitle": "Resumen de la clave", + "apiKeySummaryPermissions": "Permisos", + "apiKeySummarySelectedWallets": "Wallets seleccionados", + "apiKeySummaryWalletBaseline": "Línea base de controles del Wallet", + "apiKeySummaryRestrictions": "Restricciones de clave API", + "apiKeySummaryBindingScope": "Alcance de la vinculación", + "apiKeyAllReachableWallets": "Todos los Wallets alcanzables", + "apiKeyWalletControlsAlwaysApply": "Los controles del Wallet siempre se aplican. Las restricciones de clave API solo acotan el acceso resultante.", + "apiKeyNoPolicyBindings": "No se crearán vinculaciones de política", + "apiKeyBindingsUnchanged": "Las vinculaciones existentes permanecen sin cambios", + "apiKeyBindingsWillClear": "Las vinculaciones existentes se eliminarán tras la confirmación", + "apiKeyBindingsWillCreate": "Las restricciones se vincularán a este alcance de Wallets", + "apiKeyBindingsWillReplace": "Las vinculaciones existentes se reemplazarán tras la confirmación", + "apiKeyRestrictionReplacementRequired": "Reemplace los detalles de restricción existentes antes de cambiar el alcance de Wallets de esta clave.", + "apiKeyAffectedWallets": "Wallets afectados", + "apiKeyReplaceBindings": "Reemplazar vinculaciones", + "apiKeyClearBindings": "Eliminar vinculaciones", + "apiKeyReplaceBindingsTitle": "¿Reemplazar las vinculaciones de política?", + "apiKeyClearBindingsTitle": "¿Eliminar las vinculaciones de política?", + "apiKeyReplaceBindingsDescription": "Las vinculaciones actuales de estos Wallets se eliminarán y se reemplazarán por el alcance propuesto.", + "apiKeyClearBindingsDescription": "Las vinculaciones actuales de estos Wallets se eliminarán. Los controles del Wallet seguirán aplicándose.", + "apiKeySaveChanges": "Guardar cambios", + "apiKeyUpdated": "Clave API \"{name}\" actualizada.", + "apiKeySaveFailed": "No se pudo guardar la clave API: {error}", + "apiKeyEditMissingId": "Se requiere el ID de la clave API para guardar los cambios.", + "apiKeyReplaceBindingsConfirmationRequired": "Confirme Reemplazar vinculaciones antes de guardar este cambio de vinculación.", + "apiKeyClearBindingsConfirmationRequired": "Confirme Eliminar vinculaciones antes de guardar este cambio de vinculación.", + "policyAssetsInWallet": "En este Wallet", + "policyAssetsCommon": "Tokens comunes", + "policyAssetsIssued": "Sus Tokens" + } +} diff --git a/apps/sdp-web/messages/es/dashboard-issuance.json b/apps/sdp-web/messages/es/dashboard-issuance.json new file mode 100644 index 000000000..2a146af5b --- /dev/null +++ b/apps/sdp-web/messages/es/dashboard-issuance.json @@ -0,0 +1,1276 @@ +{ + "DashboardIssuance": { + "transactions": { + "title": "Transacciones", + "description": "Operaciones de Token recientes", + "loading": "Cargando historial de operaciones…", + "empty": "Aún no hay transacciones.", + "type": "Tipo", + "status": "Estado", + "signature": "Firma", + "created": "Creado", + "showing": "Mostrando las primeras {count} transacciones{total}. Use la paginación para ver registros anteriores.", + "loadError": "No se pudieron cargar las transacciones.", + "noMatches": "Ninguna transacción coincide con estos filtros.", + "filterByType": "Filtrar por tipo", + "filterAllTypes": "Todos los tipos", + "filterByStatus": "Filtrar por estado", + "filterAllStatuses": "Todos los estados" + }, + "pagination": { + "range": "{start}–{end} de {total}", + "rangeAssets": "Assets · {start}–{end} de {total}" + }, + "errors": { + "unknown": "Error desconocido", + "requestFailed": "Error en la solicitud", + "unavailable": "no disponible", + "apiRequestFailed": "{resource} API {status}: {error}", + "tokenResource": "Token", + "templateResource": "Template", + "walletResource": "Wallet", + "tokenListRetry": "No se pudo cargar la lista de Tokens. Actualice la página para reintentar.", + "tokenListCreateOrRetry": "No se pudo cargar la lista de Tokens. Puede crear un Token o reintentar en breve.", + "unableToLoadTemplates": "No se pudieron cargar los Templates", + "unableToLoadTokens": "No se pudieron cargar los Tokens", + "unableToLoadSignerWallets": "No se pudieron cargar los Wallets Signer.", + "mintUnavailable": "Mint no disponible — {reason}", + "burnUnavailable": "Burn no disponible — {reason}", + "assetProfileNotFound": "Perfil de Asset no encontrado.", + "assetProfileLoadFailed": "No se pudo cargar el perfil de Asset ({status}): {error}", + "tokenDetailsSaveFailed": "No se pudieron guardar los detalles del Token ({status}): {error}", + "assetProfileUpdateFailed": "Los detalles del Token se guardaron, pero la actualización del perfil de Asset falló ({status}): {error}. Reintente.", + "changesSaved": "Cambios guardados.", + "unableToSaveChanges": "No se pudieron guardar los cambios.", + "assetProfilesDisabled": "Los perfiles de Asset no están habilitados en este entorno.", + "assetDraftCreateFailed": "No se pudo crear el Draft de Asset ({status}): {error}", + "assetDraftCreated": "Draft de Asset creado.", + "unableToCreateAssetDraft": "No se pudo crear el Draft de Asset.", + "metadataUriHttp": "El URI de metadatos debe usar http o https.", + "metadataUriValid": "El URI de metadatos debe ser una URL válida.", + "tokenNameRequired": "El nombre del Token es obligatorio.", + "symbolFormat": "El símbolo debe tener de 1 a 10 caracteres: letras, números o puntos.", + "invalidTemplate": "Selección de Template no válida.", + "decimalsRange": "Decimals debe estar entre 0 y 18.", + "createFailed": "Error al crear ({status}): {error}", + "draftCreated": "Draft {name} creado. Haga Deploy Onchain desde la página del Token.", + "unexpected": "Error inesperado", + "symbolRequired": "El símbolo es obligatorio.", + "symbolCharacters": "Use de 1 a 10 letras, números o puntos.", + "decimalsWholeNumber": "Ingrese un número entero entre 0 y 18.", + "maxSupplyPositive": "Ingrese un monto mayor que cero, o deje vacío para ilimitada.", + "maxSupplyPrecision": "Use como máximo {decimals} decimal(es), acorde con los Decimals de este Token.", + "descriptionRequired": "La descripción es obligatoria.", + "descriptionTooLong": "La descripción no debe superar {max} caracteres.", + "validUrl": "Ingrese una URL válida (https://…).", + "fieldRequired": "{field} es obligatorio.", + "field": "Campo", + "classificationRequired": "Elija una clasificación y un subtipo de Asset.", + "assetNameRequired": "El nombre del Asset es obligatorio.", + "settingValuesRequired": "Ingrese los valores requeridos para los ajustes seleccionados.", + "settingValueRequired": "Obligatorio", + "settingConflict": "Algunos ajustes seleccionados no se pueden combinar. Quite uno para continuar.", + "signerRequiredForSettings": "Seleccione un Wallet de firma: es necesario para los ajustes avanzados elegidos." + }, + "controlLists": { + "title": "Listas de control", + "controlList": "Lista de control", + "entriesTitle": "Entradas de {label}", + "descriptionWithList": "Entradas de {label} y estado de cuentas Freeze", + "descriptionWithoutList": "Estado de cuentas Freeze", + "entriesCount": "{count} entradas", + "showingEntries": "Mostrando las primeras {count} entradas.", + "frozenAccounts": "Cuentas Freeze", + "accountsCount": "{count} cuentas", + "showingAccounts": "Mostrando las primeras {count} cuentas.", + "searchPlaceholder": "Buscar en {label}…", + "allLabels": "Todas las etiquetas", + "noMatches": "Ninguna entrada coincide con su búsqueda.", + "filterByLabel": "Filtrar por etiqueta", + "loading": "Cargando entradas…", + "loadError": "No se pudieron cargar las entradas." + }, + "wallet": { + "none": "Ninguno", + "unlabeled": "Wallet sin etiqueta", + "walletId": "ID de Wallet", + "publicKey": "Clave pública", + "copy": "Copiar {label}", + "copied": "{label} copiado", + "unableToCopy": "No se pudo copiar {label}", + "customAddress": "Dirección personalizada", + "chooseOrPaste": "Elija un Wallet o pegue una dirección de Solana", + "clear": "Borrar {label}", + "selectExisting": "Seleccionar un Wallet existente", + "filterHint": "Escriba para filtrar los Wallets, use la lista o pegue cualquier dirección de Solana." + }, + "saveBar": { + "unsaved": "Tiene cambios sin guardar", + "unsavedWithErrors": "Cambios sin guardar — {count} campo{suffix} por revisar", + "discard": "Descartar", + "save": "Guardar cambios", + "saving": "Guardando…" + }, + "confirmation": { + "notNow": "Ahora no" + }, + "modal": { + "close": "Cerrar ventana", + "closeConfirmation": "Cerrar confirmación", + "tokenManagementAction": "Acción de gestión del Token" + }, + "signer": { + "label": "Signer", + "select": "Seleccionar un Wallet Signer", + "requiredAuthorityHint": "SDP firmará esta acción con el Wallet de la autoridad requerida.", + "selectedWalletHint": "SDP firmará esta transacción con el Wallet seleccionado.", + "defaultSignerHint": "No hay Wallets Signer disponibles — SDP usará el Signer predeterminado del proyecto.", + "noneAvailable": "No hay Wallets Signer disponibles." + }, + "header": { + "tokenLogo": "Logo del Token {name}", + "notDeployed": "Sin Deploy", + "copyTokenAddress": "Copiar dirección del Token", + "tokenId": "ID de Token", + "copyTokenId": "Copiar ID de Token", + "explorer": "Explorer", + "deploy": "Deploy", + "unpause": "Unpause" + }, + "create": { + "title": "Crear nuevo Draft de Token", + "closeModal": "Cerrar la creación de Token", + "createDraft": "Crear Draft", + "requiredFields": "Los campos marcados con * son obligatorios.", + "required": "(obligatorio)", + "tokenName": "Nombre del Token", + "tokenNamePlaceholder": "ej. USD Coin", + "symbol": "Símbolo", + "symbolPlaceholder": "ej. USDC", + "decimals": "Decimals", + "decimalsPlaceholder": "ej. 6", + "decimalsError": "Ingrese un número entero entre 0 y 18.", + "stablecoinDecimalsHelper": "Stablecoin usa 6 Decimals por defecto, pero puede elegir de 0 a 18.", + "customDecimalsHelper": "Los Tokens personalizados usan 9 Decimals por defecto. Elija de 0 a 18.", + "tokenizedSecurityDecimalsHelper": "Tokenized Security usa 8 Decimals por defecto, pero puede elegir de 0 a 18.", + "decimalsHelper": "Elija un valor de 0 a 18.", + "back": "Atrás", + "continue": "Continuar", + "mainSigner": "Signer principal", + "selectSignerWallet": "Seleccionar Wallet Signer", + "mainSignerHint": "Este Wallet será el Signer principal del Token para el Deploy y acciones posteriores.", + "loadingSignerWallets": "Cargando Wallets Signer…", + "noControlledWallets": "No hay Wallets controlados disponibles. El Token usará el Signer predeterminado actual.", + "transferControls": "Controles de transferencia", + "transferControlsHint": "Elija cómo tratará este Token las direcciones de destino aprobadas o bloqueadas.", + "creating": "Creando...", + "creatingDraft": "Creando el Draft de Token.", + "unableToLoadSignerWallets": "No se pudieron cargar los Wallets Signer.", + "unableToCreateDraft": "No se pudo crear el Draft de Token.", + "draftCreated": "Draft creado. Haga Deploy Onchain desde la página del Token.", + "configureDraft": "Configure el Draft y luego haga Deploy Onchain desde la página del Token.", + "chooseTemplate": "Elija un Template para crear un Draft y luego haga Deploy Onchain.", + "stablecoinTemplateName": "Stablecoin", + "tokenizedSecurityTemplateName": "Tokenized Security", + "customTemplateName": "Token personalizado", + "stablecoinTemplateDescription": "Cree un Stablecoin conforme con restricciones de transferencia.", + "tokenizedSecurityTemplateDescription": "Cree un Tokenized Security conforme con Scaled UI Amount y controles esenciales.", + "customTemplateDescription": "Cree su propio Token con control total de extensiones y parámetros.", + "createStablecoinDraft": "Crear Draft de Stablecoin", + "createTokenizedSecurityDraft": "Crear Draft de Tokenized Security", + "createCustomTokenDraft": "Crear Draft de Token personalizado", + "createTokenDraft": "Crear Draft de Token", + "denylist": "Denylist", + "allowlist": "Allowlist", + "disabled": "Desactivado", + "denylistDescription": "Los destinos listados se bloquean antes de recibir acciones controladas.", + "allowlistDescription": "Solo los destinos aprobados pueden recibir acciones controladas de Token.", + "disabledDescription": "Este Token no usará una lista de control de transferencias.", + "stablecoinDenylistNote": "Valor predeterminado recomendado para Stablecoins.", + "stablecoinAllowlistNote": "Úselo cuando las transferencias deban permanecer entre Wallets conocidos.", + "securityAllowlistNote": "Predeterminado para Tokenized Securities.", + "securityDenylistNote": "Úselo cuando el Token deba permanecer abierto salvo para Wallets bloqueados.", + "customDisabledNote": "Ideal para Tokens personalizados sin restricciones.", + "customAllowlistNote": "Actívelo cuando el Token requiera acceso de transferencia restringido." + }, + "status": { + "draft": "Draft", + "active": "Activo", + "paused": "En pausa", + "revoked": "Revocado" + }, + "tabs": { + "overview": "Resumen", + "details": "Detalles", + "publicInformation": "Información pública", + "compliance": "Cumplimiento", + "operations": "Operaciones", + "permissions": "Permisos", + "activity": "Actividad" + }, + "activity": { + "title": "Historial de auditoría", + "description": "Cada acción de gestión registrada para este Asset.", + "filterLabel": "Acción", + "filterAll": "Todas las acciones", + "filterAllStatuses": "Todos los estados", + "filterAllTypes": "Todos los tipos", + "columnAction": "Acción", + "columnActor": "Autor", + "columnActorType": "Tipo", + "columnStatus": "Estado", + "columnTime": "Hora", + "actorWorkflow": "Workflow", + "actorApiKey": "Clave API", + "actorUser": "Miembro del equipo", + "statusSuccess": "Éxito", + "statusFailure": "Fallido", + "empty": "Aún no hay actividad registrada.", + "loading": "Cargando actividad…", + "error": "No se pudo cargar la actividad.", + "recentTitle": "Actividad reciente", + "viewAll": "Ver todo" + }, + "permissions": { + "managedBadge": "Gestionado por SDP", + "externalBadge": "Externa", + "externalWarningTitle": "Autoridades externas detectadas para", + "externalWarningBody": "SDP no puede firmar por autoridades fuera de custodia; las acciones relacionadas no estarán disponibles hasta transferirlas a un Wallet de custodia de SDP.", + "externalRemediationTarget": "Transfiera estas autoridades a su Wallet de custodia de SDP:", + "externalRemediationNoWallet": "Cree un Wallet de custodia de SDP y luego transfiera estas autoridades a él.", + "externalRemediationNote": "El titular actual de la autoridad debe firmar la transferencia desde su propio Wallet — SDP no puede hacerlo.", + "createWallet": "Crear Wallet de custodia" + }, + "workspace": { + "tokenLoadWarning": "Advertencia de carga del Token", + "tokenPaused": "El Token está en pausa", + "pausedHint": "Las acciones de Mint, Burn y transferencia administrativa están desactivadas hasta hacer Unpause del Token.", + "unpauseToken": "Unpause Token", + "deployToken": "Deploy Token", + "deployHint": "Esto hará Deploy del Token Onchain para habilitar las operaciones.", + "cancel": "Cancelar", + "deployNow": "Deploy ahora", + "runningAction": "Ejecutando acción...", + "tokenListUnavailable": "Lista de Tokens no disponible", + "search": "Buscar", + "createDraft": "Crear Draft", + "addNewToken": "Agregar nuevo Token", + "noTokensMatch": "Ningún Token coincide con su búsqueda.", + "tokenLogo": "Logo de {name}", + "type": "Tipo", + "supply": "Supply", + "created": "Creado", + "manage": "Gestionar", + "viewSwitchToList": "Cambiar a vista de lista", + "viewSwitchToGrid": "Cambiar a vista de cuadrícula", + "collapseAll": "Contraer todo", + "expandAll": "Expandir todo", + "manageAsset": "Gestionar {name}", + "active": "Activo", + "draft": "Draft", + "filters": "Filtros", + "filtersTitle": "Filtrar y ordenar", + "filterStatus": "Estado", + "filterTemplate": "Template", + "filterDate": "Creado", + "filterSort": "Ordenar por", + "statusAll": "Todos los estados", + "templateAll": "Todos los Templates", + "dateAll": "Cualquier fecha", + "date7d": "Últimos 7 días", + "date30d": "Últimos 30 días", + "date12m": "Últimos 12 meses", + "sortNewest": "Más recientes primero", + "sortOldest": "Más antiguos primero", + "sortNameAsc": "Nombre A–Z", + "sortNameDesc": "Nombre Z–A", + "clearFilters": "Borrar todo", + "noTokensOnPage": "No hay Assets en esta página.", + "loadingAssets": "Cargando Assets…" + }, + "list": { + "toggleDetails": "Mostrar u ocultar detalles de {name}", + "closeDetails": "Cerrar detalles de {name}", + "close": "Cerrar", + "assetsCount": "Assets · {count}", + "manageThisAsset": "Gestionar este Asset", + "viewOnExplorer": "Ver en Explorer", + "copyMintAddress": "Copiar dirección de Mint", + "copied": "Copiado", + "unableToCopy": "No se pudo copiar la dirección", + "type": "Tipo", + "decimals": "Decimals", + "supply": "Supply", + "maxSupply": "Supply máxima", + "unlimited": "Ilimitada", + "transfers": "Transferencias", + "restricted": "Restringido", + "unrestricted": "Sin restricciones", + "website": "Sitio web", + "mintAddress": "Dirección de Mint", + "created": "Creado", + "yes": "Sí", + "no": "No" + }, + "management": { + "tokenAmountDescription": "Unidades de Token (ej. 1 o 1,5). Se convertirán a unidades brutas según los Decimals del Token.", + "untitledToken": "Token sin título", + "allowlist": "Allowlist", + "denylist": "Denylist", + "allowlistDescription": "Gestione las direcciones de destino aprobadas para este Token.", + "denylistDescription": "Gestione las direcciones de destino bloqueadas para este Token.", + "allowlistSummaryDescription": "Entradas de Allowlist y estado de cuentas Freeze", + "denylistSummaryDescription": "Entradas de Denylist y estado de cuentas Freeze", + "allowlistEntries": "Entradas de Allowlist", + "denylistEntries": "Entradas de Denylist", + "addAllowlistEntry": "Agregar entrada de Allowlist", + "addDenylistEntry": "Agregar entrada de Denylist", + "removeEntry": "Eliminar entrada", + "noAllowlistEntries": "Aún no hay entradas de Allowlist.", + "noDenylistEntries": "Aún no hay entradas de Denylist.", + "allowlistAddressRequired": "La dirección de Allowlist es obligatoria.", + "denylistAddressRequired": "La dirección de Denylist es obligatoria.", + "allowlistExtensionHelper": "Los destinos de Mint y transferencias controladas deben estar en la Allowlist del Token.", + "denylistExtensionHelper": "Los destinos listados quedan bloqueados para operaciones de Mint y transferencias controladas.", + "denylistFreezeHint": "¿Necesita restringir un Wallet antes de que tenga cuenta de Token? Agréguelo primero a la Denylist.", + "defaultAccountState": "Estado de cuenta predeterminado", + "defaultAccountStateHelper": "Estado predeterminado de las nuevas cuentas de Token.", + "transferFee": "Comisión de transferencia", + "transferFeeHelper": "Configuración de comisiones para transferencias de Token.", + "scaledUiAmount": "Scaled UI Amount", + "scaledUiAmountHelper": "Controles del multiplicador de Supply en la interfaz.", + "transferHook": "Transfer Hook", + "transferHookHelper": "Hook de programa con lógica de transferencia personalizada.", + "interestBearing": "Interest Bearing", + "interestBearingHelper": "Actualizaciones de saldo según tasa de interés.", + "nonTransferable": "No transferible", + "nonTransferableHelper": "Desactiva las transferencias estándar entre cuentas.", + "template": "Template", + "templateHelper": "Template base aplicado a este Token.", + "mintable": "Admite Mint", + "mintableHelper": "Permite operaciones de Mint tras el Deploy.", + "freezable": "Admite Freeze", + "freezableHelper": "Permite controles de Freeze/Unfreeze de cuentas.", + "configured": "Configurado", + "enabled": "Activado", + "disabled": "Desactivado", + "overview": "Resumen", + "permissions": "Permisos", + "permissionsDescription": "Claves Onchain que controlan Mint, Freeze y metadatos de este Token.", + "extensions": "Extensiones", + "extensionsDescription": "Se configuran al crear y son de solo lectura tras el Deploy.", + "edit": "Editar", + "compliance": "Cumplimiento", + "metadata": "Metadatos", + "operations": "Operaciones", + "mintTokens": "Mint Tokens", + "mintHelper": "Cree nueva Supply en un Wallet o cuenta de Token de destino.", + "mint": "Mint", + "burnTokens": "Burn Tokens", + "burnHelper": "Retire Supply de un Wallet o cuenta de Token de origen.", + "burn": "Burn", + "lockSupplyTitle": "Bloquear Supply Onchain", + "lockSupplyHelper": "Haga Mint del resto hasta su Supply máxima y luego revoque definitivamente la autoridad de Mint.", + "lockSupplyAction": "Bloquear", + "lockSupplyDescription": "Esto hace Mint de la Supply restante y luego revoca la autoridad de Mint, convirtiendo su Supply máxima en un límite real Onchain en lugar de un límite de política SDP.", + "lockSupplyDescriptionRevokeOnly": "La Supply ya alcanzó su máximo. Esto revoca la autoridad de Mint, haciendo permanente el total actual Onchain.", + "lockSupplyCurrentSupply": "Supply actual", + "lockSupplyMaxSupply": "Supply máxima", + "lockSupplyWillMint": "Se minteará ahora", + "lockSupplyDestination": "Destino", + "lockSupplyDestinationHint": "Wallet o cuenta de Token que recibe la Supply recién minteada.", + "lockSupplyImpact": "Ya no podrá crearse más {symbol}, ni siquiera por SDP. Esto no se puede deshacer.", + "lockSupplyConfirm": "Bloquear Supply", + "lockSupplyRetryRevoke": "Reintentar revocación", + "lockSupplyPartialTitle": "Completado parcialmente", + "lockSupplyPartialBody": "Se hizo Mint de la Supply pero la autoridad de Mint no fue revocada, así que sigue activa. Reintente para terminar — el resto no se minteará de nuevo.", + "lockSupplyMintLabel": "Mint de la Supply restante", + "lockSupplyRevokeLabel": "Revocar autoridad de Mint", + "lockSupplyMinting": "Haciendo Mint de {amount}…", + "lockSupplyMinted": "Mint de {amount} realizado. Revocando la autoridad de Mint…", + "lockSupplyRevoking": "Revocando la autoridad de Mint…", + "lockSupplyLocked": "La Supply ahora está bloqueada Onchain.", + "lockSupplyNoMaxSupply": "Defina una Supply máxima antes de bloquear la Supply Onchain.", + "lockSupplyAlreadyLocked": "La Supply ya está bloqueada — la autoridad de Mint fue revocada.", + "lockSupplyAmountUnavailable": "No se pudo calcular la Supply restante de este Token.", + "lockSupplyDestinationRequired": "Ingrese un destino para la Supply recién minteada.", + "unableToLoadData": "No se pudieron cargar los datos de gestión del Token.", + "supportingDataRequestFailed": "Error en la solicitud de datos del Token ({status}).", + "supportingDataEmpty": "La respuesta de datos del Token estaba vacía.", + "authorityWalletRequestFailed": "Error en la solicitud del Wallet de autoridad ({status}).", + "unableToLoadSignerWallets": "No se pudieron cargar los Wallets Signer.", + "loadingSignerWallets": "Cargando Wallets Signer…", + "onlyAdminsCanEditAuthorities": "Solo los administradores pueden editar las autoridades del Token.", + "deployToken": "Deploy Token", + "deployHelper": "Haga Deploy de este Token Onchain antes de ejecutar otras operaciones del fondo.", + "deployConfirmationTitle": "¿Deploy Token?", + "deployConfirmationDescription": "Esto enviará la transacción de Deploy Onchain.", + "deployNow": "Deploy ahora", + "copied": "Copiado", + "unableToCopy": "No se pudo copiar", + "tokenNameRequired": "El nombre del Token es obligatorio.", + "updateToken": "Actualizar Token", + "submittingDeploy": "Enviando transacción de Deploy...", + "deployFinalized": "Transacción de Deploy finalizada.", + "refreshSupply": "Actualizar Supply", + "mintDetailsRequired": "El destino de Mint y el importe son obligatorios.", + "amountPositive": "El importe debe ser un número positivo.", + "mintConfirmationTitle": "¿Mint Tokens?", + "mintConfirmationDescription": "Esto enviará una transacción de Mint Onchain.", + "mintNow": "Mint ahora", + "submittingMint": "Enviando transacción de Mint...", + "mintFinalized": "Transacción de Mint finalizada.", + "burnDetailsRequired": "El origen de Burn y el importe son obligatorios.", + "burnConfirmationTitle": "¿Burn Tokens?", + "burnConfirmationDescription": "Esto enviará una transacción de Burn Onchain.", + "burnNow": "Burn ahora", + "submittingBurn": "Enviando transacción de Burn...", + "burnFinalized": "Transacción de Burn finalizada.", + "seizeDetailsRequired": "El origen, el destino y el importe de Seize son obligatorios.", + "seizeConfirmationTitle": "¿Force transfer?", + "seizeConfirmationDescription": "Esto enviará una transacción de Seize (Force transfer) Onchain.", + "transferNow": "Transferir ahora", + "submittingForceTransfer": "Enviando transacción de Force transfer...", + "forceTransferFinalized": "Transacción de Force transfer finalizada.", + "forceBurnDetailsRequired": "El origen de Force burn y el importe son obligatorios.", + "forceBurnConfirmationTitle": "¿Force burn Tokens?", + "forceBurnConfirmationDescription": "Esto enviará una transacción de Force burn Onchain.", + "forceBurnNow": "Force burn ahora", + "submittingForceBurn": "Enviando transacción de Force burn...", + "forceBurnFinalized": "Transacción de Force burn finalizada.", + "updateAuthority": "Actualizar autoridad", + "updateAuthorityLabel": "Actualizar {authority}", + "updatingAuthority": "Actualizando {authority}...", + "authorityUpdated": "{authority} actualizada.", + "authorityConfirmationTitle": "¿Actualizar autoridad?", + "authorityConfirmationDescription": "Esto enviará una transacción de actualización de autoridad Onchain.", + "updateNow": "Actualizar ahora", + "submittingAuthority": "Enviando actualización de autoridad...", + "authorityFinalized": "Actualización de autoridad finalizada.", + "pauseToken": "Pausar Token", + "unpauseToken": "Unpause Token", + "pauseConfirmationTitle": "¿Pausar Token?", + "unpauseConfirmationTitle": "¿Unpause Token?", + "pauseConfirmationDescription": "Esto enviará una transacción de pausa Onchain.", + "unpauseConfirmationDescription": "Esto enviará una transacción de Unpause Onchain.", + "pauseNow": "Pausar ahora", + "unpauseNow": "Unpause ahora", + "submittingPause": "Enviando transacción de pausa...", + "submittingUnpause": "Enviando transacción de Unpause...", + "pauseFinalized": "Transacción de pausa finalizada.", + "unpauseFinalized": "Transacción de Unpause finalizada.", + "accountAddressRequired": "La dirección de la cuenta es obligatoria.", + "unfreezeAccount": "Unfreeze cuenta", + "unfreezeConfirmationTitle": "¿Unfreeze cuenta?", + "unfreezeConfirmationDescription": "Esto enviará una transacción de Unfreeze Onchain.", + "unfreezeNow": "Unfreeze ahora", + "submittingUnfreeze": "Enviando transacción de Unfreeze...", + "unfreezeFinalized": "Transacción de Unfreeze finalizada.", + "freezeAccount": "Freeze cuenta", + "freezeConfirmationTitle": "¿Freeze cuenta?", + "freezeConfirmationDescription": "Esto enviará una transacción de Freeze Onchain.", + "freezeNow": "Freeze ahora", + "submittingFreeze": "Enviando transacción de Freeze...", + "freezeFinalized": "Transacción de Freeze finalizada.", + "removeAllowlistEntry": "Eliminar entrada de Allowlist", + "tokenIdCopied": "ID de Token copiado", + "loadingAuthorityWalletAccess": "Cargando acceso al Wallet de autoridad…", + "loadingComplianceControls": "Cargando controles de cumplimiento…", + "deploySignerHint": "Pague las comisiones de transacción y cuenta desde el Wallet Signer o con el patrocinio de Kora.", + "deployWithWallet": "Deploy con Wallet", + "koraUnavailable": "El patrocinio de Kora no está disponible en este momento.", + "deployWithKora": "Deploy con Kora", + "tokenizationEngineTitle": "Motor de tokenización", + "tokenizationEngineHint": "Elija qué motor despliega y gestiona este Token Onchain.", + "engineVulcanForgeName": "Vulcan Forge", + "engineVulcanForgeDescription": "Despliegue Onchain y tokenice en Vulcan Forge con registro e indexación integrados.", + "engineMosaicName": "SDP with Mosaic", + "engineMosaicDescription": "Despliegue con el motor Mosaic integrado de SDP en Token-2022.", + "comingSoon": "Próximamente", + "stepProgress": "Paso {current} de {total}", + "vulcanForgeOnboardTitle": "Incorporar Token a Vulcan Forge", + "vulcanForgeOnboardDescription": "AlphaLedger mantiene un gemelo Offline registrado para indexación e informes.", + "engineStepLabel": "Engine", + "deployStepLabel": "Deploy", + "destinationNotAllowlisted": "El destino no está en la Allowlist de este Token.", + "destinationDenylisted": "El destino está en la Denylist de este Token.", + "actionPaused": "El Token está en pausa. Haga Unpause para {action}.", + "actionRequiresActive": "El Token debe estar activo para {action}.", + "actionRevoked": "El Token está revocado y ya no puede {action}.", + "forceTransfer": "Force transfer", + "forceBurn": "Force burn", + "mintingDisabled": "Mint está desactivado para este Token.", + "noMintAuthorityConfigured": "No hay autoridad de Mint configurada.", + "maximumSupplyReached": "Ya se alcanzó la Supply máxima.", + "supplyZero": "La Supply es cero.", + "noPermanentDelegateAuthority": "La autoridad Permanent Delegate no está configurada.", + "noSupplyHeld": "No hay Supply en tenencia actualmente.", + "revokedTokensCannotPause": "Los Tokens revocados no se pueden pausar ni Unpause.", + "pauseRequiresActiveToken": "El Token debe tener Deploy y estar activo antes de disponer de los controles de pausa.", + "noPauseAuthorityConfigured": "No hay autoridad de pausa configurada. Defina primero una autoridad pausable o de Mint.", + "freezingDisabled": "Freeze está desactivado para este Token.", + "noFreezeAuthorityConfigured": "No hay autoridad de Freeze configurada.", + "unknownError": "Error desconocido", + "unknown": "desconocido", + "ok": "ok", + "executionRouteFailed": "Error en la ruta de ejecución ({status})", + "actionFailed": "{action} falló ({status}): {error}", + "actionSucceeded": "{action} completado ({status})", + "requestFailed": "Error en la solicitud", + "mintAuthorityHelper": "Puede hacer Mint de nuevos Tokens.", + "freezeAuthorityHelper": "Puede hacer Freeze y Unfreeze de cuentas de Token.", + "metadataAuthorityHelper": "Puede actualizar los metadatos del Token.", + "permanentDelegateHelper": "Puede realizar operaciones delegadas de transferencia/Burn.", + "noControlledWalletsAvailable": "No hay Wallets controlados disponibles para firmar esta acción.", + "noSignerConfigured": "No hay Signer configurado para esta acción.", + "requiredSignerNotControlled": "El Signer requerido no es uno de sus Wallets controlados.", + "mintAuthorityNotControlled": "La autoridad de Mint no es uno de sus Wallets controlados.", + "permanentDelegateNotControlled": "La autoridad Permanent Delegate no es uno de sus Wallets controlados.", + "authority": "autoridad", + "noAuthorityConfigured": "No hay {authority} configurada.", + "authorityNotControlled": "{authority} no es uno de sus Wallets controlados.", + "freezeAuthorityNotControlled": "La autoridad de Freeze no es uno de sus Wallets controlados.", + "pauseAuthorityNotControlled": "La autoridad de pausa no es uno de sus Wallets controlados.", + "validMintAmount": "Ingrese un importe de Mint válido para este Token.", + "mintAmountPositive": "El importe de Mint debe ser mayor que cero.", + "mintAmountExceedsSupplyCap": "El importe de Mint supera el límite de Supply restante de {amount} {symbol}.", + "validBurnAmount": "Ingrese un importe de Burn válido para este Token.", + "burnAmountPositive": "El importe de Burn debe ser mayor que cero.", + "burnAmountExceedsSupply": "El importe de Burn supera la Supply actual de {amount} {symbol}.", + "standardBurnSignerOnly": "El Burn estándar solo funciona desde el Wallet Signer seleccionado. Use Force burn para otro Wallet.", + "selectedSignerDoesNotHoldToken": "El Wallet Signer seleccionado no posee este Token actualmente.", + "selectedWalletOnlyShows": "El Wallet seleccionado solo muestra {amount} {symbol}.", + "destinationMustDiffer": "El destino debe ser distinto del origen.", + "validTransferAmount": "Ingrese un importe de transferencia válido para este Token.", + "transferAmountPositive": "El importe de la transferencia debe ser mayor que cero.", + "selectedSourceDoesNotHoldToken": "El Wallet de origen seleccionado no posee este Token actualmente.", + "forceBurnAmountPositive": "El importe de Force burn debe ser mayor que cero.", + "forceBurnAmountExceedsSupply": "El importe de Force burn supera la Supply actual de {amount} {symbol}.", + "submittingAction": "Enviando {action}...", + "transactionFinalized": "Transacción finalizada correctamente.", + "transactionFailed": "La transacción falló.", + "sendTransaction": "¿Enviar transacción?", + "sendTransactionDescription": "Esto enviará una transacción Onchain. ¿Desea continuar?", + "goAhead": "Continuar", + "token": "Token" + }, + "forms": { + "saveMetadata": "Guardar metadatos", + "updateMetadata": "Actualizar metadatos", + "updateMetadataDescription": "Edite los metadatos del Token.", + "name": "Nombre", + "enterTokenName": "Ingrese un nombre de Token.", + "description": "Descripción", + "uri": "URI", + "imageUrl": "URL de la imagen", + "mintDescription": "Mint hacia el Wallet o cuenta de Token de destino.", + "destination": "Destino", + "enterSolanaAddress": "Ingrese una dirección de Solana válida.", + "destinationPlaceholder": "Wallet o cuenta de Token de destino", + "amount": "Importe", + "memo": "Memo", + "burnDescription": "Burn desde el Wallet o cuenta de Token de origen.", + "source": "Origen", + "sourcePlaceholder": "Wallet Signer o su cuenta de Token", + "sourceWalletPlaceholder": "Wallet o cuenta de Token de origen", + "forceTransferDescription": "Transferencia administrativa de Seize entre cuentas.", + "forceBurnDescription": "Force burn administrativo desde la cuenta de origen.", + "mintAuthority": "Autoridad de Mint", + "freezeAuthority": "Autoridad de Freeze", + "permanentDelegate": "Permanent Delegate", + "metadataAuthority": "Autoridad de metadatos", + "updateAuthority": "Actualizar autoridad", + "updateAuthorityDescription": "Rote o elimine las autoridades del Token.", + "role": "Rol", + "currentAuthorityOptional": "Autoridad actual (opcional)", + "newAuthorityEmptyToRemove": "Nueva autoridad (vacío para eliminar)", + "pauseControls": "Controles de pausa", + "pauseControlsDescription": "Pause o reanude las transferencias de todo el Token.", + "alreadyPaused": "El Token ya está en pausa.", + "notPaused": "El Token no está en pausa.", + "freezeControls": "Controles de Freeze", + "freezeControlsDescription": "Haga Freeze o libere las tenencias de Token de un Wallet para este Mint.", + "walletAddress": "Dirección de Wallet", + "enterWalletAddress": "Ingrese la dirección del Wallet. SDP derivará automáticamente la cuenta de Token asociada para este Mint.", + "walletAddressPlaceholder": "Dirección del Wallet que posee este Token", + "walletAddressInstruction": "Ingrese la dirección del Wallet que posee este Token. SDP deriva automáticamente la cuenta de Token asociada para este Mint.", + "freezeReason": "Motivo (solo Freeze)", + "controlListDescription": "Gestione las direcciones de destino aprobadas para este Token.", + "address": "Dirección", + "label": "Etiqueta", + "enterLabel": "Ingrese una etiqueta o déjelo en blanco.", + "noLabel": "Sin etiqueta", + "removeEntry": "Eliminar entrada" + }, + "authority": { + "resolvedAutomatically": "Resuelto automáticamente a partir del estado del Token", + "closeModal": "Cerrar ventana de autoridad", + "save": "Guardar autoridad", + "current": "Autoridad actual", + "whatThisMeans": "Qué significa esto", + "confirmNone": "Sí, establecer en Ninguna", + "new": "Nueva autoridad", + "selectWallet": "Seleccionar un Wallet controlado", + "custom": "Autoridad personalizada", + "solanaAddress": "Dirección de Solana", + "noneWalletWarning": "Elegir Ninguna borrará esta autoridad. Deberá confirmar el cambio antes de enviarlo.", + "noneDescription": "Esta autoridad se borrará si guarda este cambio.", + "controlledWalletHint": "Los Wallets controlados son los destinos de autoridad recomendados.", + "useCustom": "Usar dirección personalizada", + "chooseWallet": "Elegir Wallet controlado", + "solanaAddressOrNone": "Dirección de Solana o deje vacío para establecer en Ninguna", + "enterAddressOrNone": "Ingrese una dirección de Solana válida o deje en blanco para establecer la autoridad en Ninguna.", + "noWalletsHint": "Aún no hay Wallets controlados disponibles. Ingrese una dirección manualmente o deje en blanco para establecer la autoridad en Ninguna.", + "noneFieldWarning": "Establecer este campo en Ninguna borrará la autoridad. Deberá confirmar el cambio antes de enviarlo.", + "mintNoneTitle": "¿Establecer la autoridad de Mint en Ninguna?", + "mintNoneDescription": "Esto borrará la autoridad de Mint del Token.", + "mintNoneImpact": "Ningún Wallet podrá hacer Mint de Supply adicional tras este cambio.", + "freezeNoneTitle": "¿Establecer la autoridad de Freeze en Ninguna?", + "freezeNoneDescription": "Esto borrará la autoridad de Freeze del Token.", + "freezeNoneImpact": "Las cuentas de Token ya no podrán recibir Freeze ni Unfreeze tras este cambio.", + "delegateNoneTitle": "¿Establecer la autoridad Permanent Delegate en Ninguna?", + "delegateNoneDescription": "Esto borrará la autoridad Permanent Delegate del Token.", + "delegateNoneImpact": "Las acciones administrativas de transferencia delegada y Burn ya no estarán disponibles tras este cambio.", + "metadataNoneTitle": "¿Establecer la autoridad de metadatos en Ninguna?", + "metadataNoneDescription": "Esto borrará la autoridad de metadatos del Token.", + "metadataNoneImpact": "Las actualizaciones de metadatos ya no estarán disponibles mediante esta autoridad tras este cambio." + }, + "wizard": { + "stepOf": "Paso {current} de {total}", + "creatingDraft": "Creando Draft de Asset…", + "draftCreated": "Draft de Asset creado.", + "failedToCreate": "Error al crear el Draft.", + "creating": "Creando…", + "reviewAndFinish": "Revisar y finalizar", + "reviewDescription": "Revise todos los detalles a continuación. Puede editar cualquier sección antes de crear su Draft." + }, + "confirmDraft": { + "ariaLabel": "Crear Draft de Asset", + "title": "¿Crear este Draft de Asset?", + "descriptionStart": "Esto crea un Draft", + "of": "de", + "descriptionEnd": ". Puede seguir editándolo y publicarlo cuando esté listo." + }, + "summary": { + "title": "Resumen", + "assetCategory": "Categoría de Asset", + "assetType": "Tipo de Asset", + "peggedTo": "Vinculado a", + "accessControl": "Control de acceso", + "transferRestrictions": "Restricciones de transferencia", + "investorReporting": "Informes para inversores", + "enabled": "Activado", + "lastUpdated": "Última actualización", + "resolveBeforeCreating": "Por resolver antes de crear", + "readyToCreate": "Puede crear un Draft", + "readyDescription": "Puede revisar, editar y publicar cuando esté listo.", + "privateByDefault": "Privado por defecto", + "privateDescription": "Los detalles que proporcione son privados y solo se usan para configurar su Asset." + }, + "classificationRail": { + "title": "Cómo funciona", + "assetProfile": "Perfil de Asset", + "assetProfileDescription": "Usted selecciona la categoría y el tipo. SDP almacena sus metadatos de emisión canónicos.", + "issuanceMetadata": "Metadatos de emisión", + "issuanceMetadataDescription": "Incluye campos de Asset, cumplimiento, cadena y personalizados (cliente/integración).", + "publicProjection": "Proyección pública", + "publicProjectionDescription": "SDP proyecta un subconjunto público seguro a los metadatos del Token.", + "tokenMetadataUri": "URI de metadatos del Token", + "tokenMetadataUriDescription": "SDP aloja el URI predeterminado que devuelve solo los metadatos públicos.", + "privateDescription": "Los metadatos de cumplimiento y personalizados permanecen privados salvo inclusión explícita en la proyección pública." + }, + "assetProfileForm": { + "fixHighlightedFields": "Corrija los campos resaltados antes de guardar." + }, + "templates": { + "stablecoinName": "Stablecoin", + "stablecoinDescription": "Stablecoins respaldados por USD con controles de cumplimiento.", + "stablecoinHelper": "Ideal para Assets vinculados a moneda fiat con controles de transferencia y Freeze administrativo.", + "tokenizedSecurityName": "Tokenized Security", + "tokenizedSecurityDescription": "Assets regulados con Allowlist por defecto.", + "tokenizedSecurityHelper": "Diseñado para instrumentos regulados donde los controles de participantes son obligatorios.", + "customName": "Personalizado", + "customDescription": "Configuración Token-2022 totalmente personalizable.", + "customHelper": "Comience desde un perfil en blanco y ajuste la configuración de emisión para requisitos avanzados." + }, + "overview": { + "title": "Resumen del Token", + "tokenAddress": "Dirección del Token", + "mintAuthority": "Autoridad de Mint", + "supply": "Supply", + "template": "Template", + "totalSupply": "Supply total", + "readyForDeploy": "Listo para Deploy", + "readyForDeployDescription": "Este Asset está listo para el Deploy — continúe en la pestaña Operaciones.", + "mintAddress": "Dirección de Mint", + "notDeployedYet": "Aún sin Deploy", + "noDescription": "Sin descripción aún — agregue una en la pestaña Detalles.", + "authoritiesControlled": "Autoridades gestionadas", + "authoritiesIncompleteTooltip": "No todas las autoridades están gestionadas por SDP, por lo que algunas acciones no se pueden firmar desde el panel.", + "authoritiesIncompleteLink": "Revisar en Permisos", + "authorities": "Autoridades", + "control": "Control", + "signerWallet": "Wallet Signer", + "signerDefault": "Predeterminado del proyecto", + "signerDefaultHint": "Se elige al momento de firmar", + "signerUnavailable": "Wallet no disponible", + "deployed": "Desplegado", + "draftCreated": "Borrador creado", + "createdTooltip": "Cuándo se creó el borrador", + "deployedTooltip": "Cuándo se desplegó el Token Onchain", + "sdpManaged": "Gestionado por SDP", + "accessAllowlist": "Allowlist", + "accessBlocklist": "Blocklist", + "authorityExternal": "En manos externas", + "authorityExternalHint": "SDP no puede firmar por ella, así que las acciones asociadas quedan no disponibles.", + "authorityNotSet": "Sin definir" + }, + "operations": { + "deployHelper": "Haga Deploy de este Token Onchain antes de ejecutar otras operaciones del fondo.", + "subtitle": "Realice cambios de Supply del Token y revise la actividad reciente." + }, + "taxonomy": { + "stablecoin": "Stablecoin", + "stablecoinDescription": "Assets diseñados para mantener un valor estable, normalmente respaldados por moneda fiat u otros Assets líquidos.", + "fiatBacked": "Respaldado por fiat", + "fiatBackedDescription": "Respaldado 1:1 por reservas de moneda fiat en instituciones financieras reguladas.", + "cryptoBacked": "Respaldado por cripto", + "cryptoBackedDescription": "Garantizado con criptoactivos en custodia para mantener la paridad.", + "tokenizedSecurity": "Tokenized Security", + "tokenizedSecurityDescription": "Instrumentos financieros regulados o representaciones digitales de valores.", + "equity": "Acciones", + "equityDescription": "Acciones tokenizadas o participaciones similares en una empresa.", + "debt": "Deuda / Bono", + "debtDescription": "Bonos, pagarés u otros instrumentos de deuda.", + "fund": "Fondo / ETF", + "fundDescription": "Participaciones de fondos o acciones de fondos cotizados.", + "generic": "Asset digital sin carácter de valor", + "genericDescription": "Otros Assets tokenizados que no encajan en las categorías anteriores.", + "commodities": "Materias primas", + "commoditiesDescription": "Derechos sobre materias primas físicas o recursos naturales.", + "realEstate": "Bienes raíces", + "realEstateDescription": "Participaciones inmobiliarias o propiedades tokenizadas.", + "collectibles": "Coleccionables", + "collectiblesDescription": "Assets de colección únicos o de edición limitada." + }, + "config": { + "advanced": "Avanzado", + "advancedCapacitiesDescription": "Las capacidades recomendadas vienen preseleccionadas según el perfil del Asset.", + "usd": "USD", + "eur": "EUR", + "gbp": "GBP", + "jpy": "JPY", + "sgd": "SGD", + "unitedStates": "Estados Unidos", + "europeanUnion": "Unión Europea", + "unitedKingdom": "Reino Unido", + "singapore": "Singapur", + "other": "Otro", + "regD": "Reg D", + "regS": "Reg S", + "regA": "Reg A+", + "publicOffering": "Oferta pública", + "commodityBacked": "Respaldado por materias primas", + "algorithmic": "Algorítmico", + "financialDetails": "Detalles financieros", + "financialDetailsDescription": "Atributos financieros clave del Asset.", + "collateralOracleDetails": "Colateral y oráculo", + "collateralOracleDetailsDescription": "Colateral Onchain que respalda este Token y el feed de precios usado para valorarlo.", + "issuerName": "Nombre del emisor", + "issuerNamePlaceholder": "ej. Acme Financial Inc.", + "backingType": "Tipo de respaldo", + "currency": "Moneda", + "selectField": "Seleccionar {field}", + "searchCurrencies": "Buscar monedas", + "pegTarget": "Paridad u objetivo", + "pegTargetPlaceholder": "1.00 USD", + "reserveAsset": "Asset de reserva", + "reserveAssetPlaceholder": "ej. efectivo y bonos del Tesoro de EE. UU.", + "reserveAssetPlaceholderCrypto": "ej. SOL, wBTC, ETH, SOL en staking", + "reserveCustodian": "Custodio de reservas", + "reserveCustodianPlaceholder": "ej. banco o custodio regulado", + "reserveCustodianPlaceholderCrypto": "ej. bóveda Onchain o dirección de programa", + "collateralizationRatio": "Ratio de colateralización", + "collateralizationRatioPlaceholder": "ej. 150", + "collateralizationRatioHelp": "Valor objetivo del colateral respecto a los Tokens emitidos, en porcentaje.", + "oracleProvider": "Oráculo de precios", + "oracleProviderPlaceholder": "ej. Pyth, Switchboard", + "minCollateralRatio": "Ratio de colateral mínimo", + "minCollateralRatioPlaceholder": "ej. 120", + "minCollateralRatioHelp": "Ratio de colateral más bajo que puede alcanzar una posición antes de liquidarse, en porcentaje.", + "redemption": "Reembolso", + "redemptionHelp": "Los titulares pueden canjear los Tokens por las reservas subyacentes.", + "securityDetails": "Detalles del valor", + "securityDetailsDescription": "Información del emisor y la oferta.", + "equityDetails": "Términos de las acciones", + "equityDetailsDescription": "Clase de acciones y derechos de los titulares.", + "debtDetails": "Términos de la deuda", + "debtDetailsDescription": "Términos del instrumento de deuda.", + "fundDetails": "Términos del fondo", + "fundDetailsDescription": "Estrategia y estructura de comisiones.", + "shareClass": "Clase de acciones", + "shareClassPlaceholder": "ej. Acciones ordinarias clase A", + "votingRights": "Derechos de voto", + "votingRightsHelp": "Los titulares de esta clase tienen derechos de voto.", + "couponRate": "Tasa de cupón", + "couponRatePlaceholder": "ej. 5,25 % anual", + "maturityDate": "Fecha de vencimiento", + "maturityDatePlaceholder": "AAAA-MM-DD", + "seniority": "Prelación", + "seniorSecured": "Sénior garantizada", + "seniorUnsecured": "Sénior no garantizada", + "subordinated": "Subordinada", + "mezzanine": "Mezzanine", + "unsecured": "No garantizada", + "fundStrategy": "Estrategia", + "strategyMoneyMarket": "Mercado monetario", + "strategyFixedIncome": "Renta fija", + "strategyEquity": "Renta variable", + "strategyMultiAsset": "Multiactivos", + "managementFee": "Comisión de gestión", + "managementFeePlaceholder": "ej. 0,75 % anual", + "netAssetValue": "Valor liquidativo (NAV)", + "netAssetValuePlaceholder": "ej. 100,00 USD por acción", + "jurisdiction": "Jurisdicción", + "offeringType": "Tipo de oferta", + "categoryAssetDetails": "Detalles del Asset", + "categoryAssetDetailsDescription": "Qué respalda o representa este Asset.", + "realEstateDetails": "Detalles de la propiedad", + "realEstateDetailsDescription": "Tipo de propiedad y ubicación.", + "propertyType": "Tipo de propiedad", + "propertyResidential": "Residencial", + "propertyCommercial": "Comercial", + "propertyIndustrial": "Industrial", + "propertyLand": "Terreno", + "propertyMixedUse": "Uso mixto", + "propertyLocation": "Ubicación", + "propertyLocationPlaceholder": "ej. Nueva York, NY, EE. UU.", + "underlyingAsset": "Asset subyacente", + "underlyingAssetPlaceholder": "ej. oro, plata, petróleo crudo", + "underlyingAssetPlaceholderCollectible": "ej. cartas coleccionables, obras de arte, relojes", + "custodian": "Custodio", + "custodianPlaceholder": "ej. Acme Custody", + "custodianPlaceholderCollectible": "ej. bóveda o socio de autenticación", + "custodianPlaceholderRealEstate": "ej. SPV o titular de la propiedad", + "allowList": "Lista de permitidos", + "blockList": "Lista de bloqueados", + "kyc": "Titulares verificados", + "kycExpert": "KYC", + "kycDescription": "Exija verificación de identidad antes de que un inversor pueda poseer o transferir este Asset.", + "kycDescriptionExpert": "Exija verificación de identidad antes de que un Wallet pueda poseer o transferir Tokens.", + "restrictTradingHours": "Restringir horario de negociación", + "restrictTradingHoursDescription": "Permita transferencias solo en días y horas definidos.", + "restrictTradingHoursDescriptionExpert": "Limite las transferencias de Tokens a días y franjas horarias específicos.", + "freezeTransfers": "Freeze de transferencias", + "freezeTransfersDescription": "Haga Freeze de Tokens en respuesta a eventos de cumplimiento o investigaciones.", + "pauseTransfers": "Pausar todas las transferencias", + "pauseTransfersDescription": "Detenga de una vez todas las transferencias de este Token y reanude después. Afecta a todos los titulares.", + "freezeAccounts": "Autoridad de Freeze", + "freezeAccountsDescription": "Haga Freeze y Unfreeze de la cuenta de Token de un titular a la vez.", + "issueRetireControls": "Controles de Supply", + "issueRetireControlsExpert": "Controles de Mint y Burn", + "issueRetireControlsDescription": "Controle quién puede emitir nuevas unidades o retirar las existentes.", + "issueRetireControlsDescriptionExpert": "Controle quién puede hacer Mint de nuevos Tokens o Burn de la Supply existente.", + "redemptionApprovals": "Aprobaciones de reembolso", + "redemptionApprovalsDescription": "Exija aprobación antes de que un inversor pueda reembolsar sus tenencias.", + "redemptionApprovalsDescriptionExpert": "Exija aprobación antes de canjear Tokens por reservas.", + "investorReporting": "Informes para inversores", + "investorReportingDescription": "Comparta informes periódicos de tenencias y actividad con los inversores.", + "transferApprovals": "Aprobaciones de transferencia", + "transferApprovalsDescription": "Exija aprobación antes de que una transferencia pueda realizarse.", + "capacityConfig": { + "configure": "Configurar", + "notConfigured": "Aún sin configurar", + "editTitle": "Configurar {policy}", + "cancel": "Cancelar", + "save": "Guardar", + "tradingHours": { + "scheduleLabel": "Horario de negociación", + "scheduleAlways": "24/7", + "scheduleMarket": "Horario de mercado", + "scheduleCustom": "Personalizado", + "daysLabel": "Días de apertura", + "opensLabel": "Abre", + "closesLabel": "Cierra", + "hoursColumnLabel": "Horas", + "minutesColumnLabel": "Minutos", + "timezoneLabel": "Zona horaria", + "summaryAlways": "Abierto 24/7", + "summaryMarket": "Horario de mercado", + "summaryCustom": "{days} · {open}–{close}", + "summaryCustomDaysOnly": "{days}", + "summaryUnset": "Horario sin definir" + }, + "transferApprovals": { + "ruleLabel": "Requerir aprobación para", + "ruleAll": "Todas", + "ruleAbove": "Por encima de un importe", + "ruleNewCounterparty": "A nuevas Counterparties", + "amountLabel": "Umbral", + "amountSuffix": "Tokens", + "amountPlaceholder": "ej. 10000", + "approversLabel": "Aprobadores", + "approversHint": "Direcciones de Wallet o nombres de rol. Se pueden agregar tras el lanzamiento.", + "addApprover": "Agregar aprobador", + "approverPlaceholder": "Dirección de Wallet o rol", + "removeApprover": "Eliminar aprobador", + "summaryAll": "Todas las transferencias", + "summaryAbove": "Por encima de {amount} Tokens", + "summaryAboveUnset": "Por encima de un umbral", + "summaryNewCounterparty": "Nuevas Counterparties" + }, + "redemptionApprovals": { + "ruleLabel": "Requerir aprobación para", + "ruleAll": "Todos los reembolsos", + "ruleAbove": "Reembolsos por encima de un importe", + "amountLabel": "Umbral", + "amountSuffix": "Tokens", + "amountPlaceholder": "ej. 10000", + "approversLabel": "Aprobadores", + "approversHint": "Direcciones de Wallet o nombres de rol. Se pueden agregar tras el lanzamiento.", + "addApprover": "Agregar aprobador", + "approverPlaceholder": "Dirección de Wallet o rol", + "removeApprover": "Eliminar aprobador", + "summaryAll": "Todos los reembolsos", + "summaryAbove": "Por encima de {amount} Tokens", + "summaryAboveUnset": "Por encima de un umbral" + }, + "investorReporting": { + "cadenceLabel": "Frecuencia de informes", + "cadenceMonthly": "Mensual", + "cadenceQuarterly": "Trimestral", + "cadenceAnnual": "Anual", + "formatLabel": "Formato del informe", + "formatPdf": "PDF", + "formatCsv": "CSV", + "formatXlsx": "Excel", + "recipientsLabel": "Destinatarios", + "recipientsHint": "Correos electrónicos o grupos de inversores. Se pueden agregar tras el lanzamiento.", + "addRecipient": "Agregar destinatario", + "recipientPlaceholder": "Correo o grupo de inversores", + "removeRecipient": "Eliminar destinatario", + "summaryWithFormat": "{cadence} · {format}" + }, + "weekdays": { + "mon": "lun", + "tue": "mar", + "wed": "mié", + "thu": "jue", + "fri": "vie", + "sat": "sáb", + "sun": "dom" + }, + "timezones": { + "utc": "UTC", + "newYork": "Nueva York (ET)", + "losAngeles": "Los Ángeles (PT)", + "london": "Londres (GMT/BST)", + "zurich": "Zúrich (CET)", + "singapore": "Singapur (SGT)", + "tokyo": "Tokio (JST)" + } + }, + "permanentDelegate": "Recuperar Tokens", + "permanentDelegateDescription": "Permita que una autoridad de control confisque o recupere Tokens en respuesta a eventos de cumplimiento.", + "transferFee": "Comisión de transferencia", + "transferFeeDescription": "Retenga una comisión porcentual en cada transferencia de Tokens.", + "transferFeeBasisPoints": "Comisión (puntos básicos)", + "transferFeeBasisPointsHint": "En puntos básicos: 100 pb = 1 % (ej. 50 = 0,5 %).", + "transferFeeMaxFee": "Comisión máxima", + "interestBearing": "Con intereses", + "interestBearingDescription": "Acumule intereses sobre los saldos de Tokens a una tasa fija.", + "interestBearingRate": "Tasa de interés", + "interestBearingRateHint": "Tasa anual en puntos básicos: 100 pb = 1 %.", + "scaledUiAmount": "Importe de visualización ajustado", + "scaledUiAmountDescription": "Ajuste los saldos mostrados con un factor definido, ej. para splits de acciones o cambios de clase.", + "scaledUiAmountMultiplier": "Multiplicador", + "nonTransferable": "No transferible", + "nonTransferableDescription": "Impida que los Tokens se transfieran una vez en tenencia.", + "transferHook": "Reglas de transferencia personalizadas", + "transferHookDescription": "Encamine las transferencias a través de un programa de reglas propio para verificaciones adicionales.", + "transferHookProgramId": "ID del programa", + "advancedSettingsTitle": "Configuración avanzada", + "showTechnicalDetail": "Ver", + "deployPreview": "Vista previa del Deploy", + "quickFillLabel": "Comenzar desde un escenario", + "quickFillHint": "Elija una configuración para prellenar los controles siguientes — ajuste lo que quiera después.", + "accessPolicyPrompt": "Elija quién puede poseer y transferir este Token.", + "accessPolicyAllowlistEffect": "Solo los Wallets aprobados pueden recibir o poseer este Token.", + "accessPolicyBlocklistEffect": "Cualquiera puede poseerlo excepto los Wallets que usted bloquee.", + "accessPolicyDisabledEffect": "Cualquiera puede poseer y transferir este Token libremente.", + "accessPolicyTechnical": "La Allowlist hace Freeze de las cuentas nuevas en el Deploy y es permanente tras el lanzamiento. El bloqueo y la desactivación son solo políticas de aplicación.", + "settingGroupEconomics": "Economía", + "settingGroupCompliance": "Cumplimiento", + "settingGroupControls": "Controles", + "settingLockedHint": "Bloqueado — este ajuste es fijo y no se puede cambiar", + "settingRecommended": "Recomendado", + "settingRequired": "Obligatorio", + "settingAdvancedOptions": "Opciones avanzadas", + "settingsModeBasic": "Básico", + "settingsModeDetailed": "Detallado", + "settingsModeExpert": "Experto", + "settingsModeAria": "Nivel de detalle de la configuración", + "settingsPermanentTitle": "Permanente", + "settingsPermanentSubtitle": "Se define al crear el Token — no puede cambiarse tras el lanzamiento.", + "settingsPermanentLockedSubtitle": "Permanente tras el Deploy — no se puede cambiar.", + "settingsOngoingTitle": "Continuo", + "settingsOngoingSubtitle": "Cada política puede ajustarse o configurarse en cualquier momento.", + "settingsOngoingSubtitleDraft": "Un conjunto inicial. Cada política se configura después en la pestaña de cumplimiento y puede cambiarse en cualquier momento.", + "settingsOnchainTitle": "Onchain", + "settingsOffchainTitle": "Offchain", + "settingConfigureInExpert": "Cambie a la vista Experto para configurar sus opciones.", + "settingExpertExtensionsLabel": "Extensiones", + "settingExpertActionsLabel": "Desbloquea", + "settingExpertActionsNone": "Ninguna (solo configuración)", + "settingExpertMechanismLabel": "Mecanismo", + "settingExpertUnlocks": "Desbloquea", + "settingConflictsWith": "Incompatible con", + "comboCustomSelection": "Ha personalizado los ajustes individuales — abra la vista Detallado para revisarlos. Ningún preajuste coincide con esta combinación exacta.", + "comboConflictReasonBalanceDisplay": "un Token solo puede aplicar una regla de visualización de saldo.", + "comboConflictReasonNonTransferableFee": "un Token no transferible nunca se transfiere, por lo que una comisión de transferencia nunca se aplicaría.", + "comboConflictReasonNonTransferableHook": "un Token no transferible nunca se transfiere, por lo que las reglas de transferencia personalizadas nunca se ejecutarían.", + "comboRegulatedStablecoin": "Stablecoin regulado", + "comboRegulatedStablecoinDescription": "Una moneda pública respaldada por fiat, abierta a todos salvo Wallets sancionados: lista de bloqueo, KYC, Supply controlada, revisión de reembolsos e informes de reservas.", + "comboPermissionedStablecoin": "Stablecoin permisionado", + "comboPermissionedStablecoinDescription": "Una moneda de red cerrada solo para instituciones aprobadas: Allowlist Onchain, KYC, Supply controlada y revisión de transferencias.", + "comboRegulatedSecurity": "Valor regulado", + "comboRegulatedSecurityDescription": "La base de cumplimiento para acciones o bonos tokenizados: inversores verificados, transferencias revisadas, negociación en horario de mercado e informes continuos.", + "comboFundOperations": "Operaciones de fondo", + "comboFundOperationsDescription": "Agregue suscripciones y reembolsos con Supply gestionada por el emisor — combínelo con un valor regulado para operar un fondo.", + "comboVerifiedHolders": "Requerir titulares verificados", + "comboVerifiedHoldersDescription": "Solo los Wallets aprobados pueden poseer o transferir este Asset — titulares verificados (KYC) más una Allowlist Onchain.", + "comboControlledAsset": "Asset controlado", + "comboControlledAssetDescription": "El emisor mantiene el control de cumplimiento — Freeze de cuentas y recuperación de Tokens — limitado a titulares verificados.", + "comboLoyaltyRewards": "Fidelización y recompensas", + "comboLoyaltyRewardsDescription": "Puntos o recompensas no transferibles, con Mint controlado por el emisor.", + "comboYieldNote": "Nota con rendimiento", + "comboYieldNoteDescription": "Un instrumento que acumula intereses para titulares verificados, con Supply controlada.", + "comboRevenueShare": "Token de participación en ingresos", + "comboRevenueShareDescription": "Captura una pequeña comisión en cada transferencia, con Supply controlada.", + "comboGatedAccess": "Token de acceso restringido", + "comboGatedAccessDescription": "Token permisionado: las cuentas nuevas inician con Freeze hasta que usted las apruebe, limitado a titulares verificados y horario de negociación definido." + }, + "playground": { + "viewApiContext": "Playground de API", + "openInPlayground": "Abrir en el Playground de API", + "tokenNameExample": "Acme Dollar", + "tokenSymbolExample": "ACME", + "selectTemplate": "Seleccionar Template", + "settlementAssetExample": "Asset de liquidación respaldado por USD", + "metadataUriExample": "https://example.com/metadata/acme-usd.json", + "optionalHostedUri": "uri (opcional — SDP lo aloja si se omite)", + "updatedTokenName": "Nombre del Token actualizado", + "updatedTokenDescription": "Descripción del Token actualizada", + "updatedMetadataUri": "https://example.com/updated-metadata.json", + "tokenImageUrl": "https://example.com/token.png", + "selectStatus": "Seleccionar estado", + "active": "Activo", + "paused": "En pausa", + "productName": "Emisión", + "none": "Ninguno", + "low": "Baja", + "medium": "Media", + "high": "Alta", + "true": "Verdadero", + "false": "Falso", + "selectPriorityFee": "Seleccionar opciones priorityFee", + "selectSimulate": "Seleccionar opciones simulate", + "amountPlaceholder": "ej. 1000", + "listTemplates": "Listar Templates", + "getTemplate": "Obtener Template", + "createToken": "Crear Token", + "listTokens": "Listar Tokens", + "getToken": "Obtener Token", + "updateToken": "Actualizar Token", + "listTokenTransactions": "Listar transacciones del Token", + "refreshTotalSupply": "Actualizar Supply total", + "deployToken": "Deploy Token", + "mintTokens": "Mint Tokens", + "burnTokens": "Burn Tokens", + "seizeTokens": "Seize Tokens", + "forceBurn": "Force Burn", + "updateAuthority": "Actualizar autoridad", + "pauseToken": "Pausar Token", + "unpauseToken": "Unpause Token", + "freezeAccount": "Freeze cuenta", + "unfreezeAccount": "Unfreeze cuenta", + "listFrozenAccounts": "Listar cuentas Freeze", + "listAllowlist": "Listar Allowlist", + "listAllowlistLabels": "Listar etiquetas de la Allowlist", + "addAllowlistEntry": "Agregar entrada de Allowlist", + "removeAllowlistEntry": "Eliminar entrada de Allowlist", + "tokenIdPlaceholder": "ID de Token (ej. tok_abc123)", + "templateIdPlaceholder": "ID de Template (ej. stablecoin)", + "authorityRoleMint": "Mint", + "authorityRoleFreeze": "Freeze", + "authorityRolePermanentDelegate": "Permanent Delegate", + "authorityRoleMetadata": "Metadatos", + "solanaAddressPlaceholder": "Dirección de Solana (32-44 caracteres)", + "optionalMemo": "Memo opcional", + "tokenAccountAddressPlaceholder": "Dirección de cuenta de Token (32-44 caracteres)", + "sourceTokenAccountAddress": "Dirección de la cuenta de Token de origen", + "destinationTokenAccountAddress": "Dirección de la cuenta de Token de destino", + "delegateAuthorityAddress": "Dirección de la autoridad Delegate", + "tokenAccountAddress": "Dirección de cuenta de Token", + "selectAuthorityRole": "Seleccionar rol de autoridad", + "currentAuthorityAddress": "Dirección de la autoridad actual", + "newAuthorityAddress": "Dirección de la nueva autoridad", + "walletAddressToFreeze": "Dirección de Wallet para Freeze", + "optionalFreezeReason": "Motivo de Freeze opcional", + "walletAddressToUnfreeze": "Dirección de Wallet para Unfreeze", + "treasuryExample": "Tesorería", + "addressToAllowlist": "Dirección para agregar a la Allowlist", + "optionalLabel": "Etiqueta opcional", + "allowlistEntryIdPlaceholder": "ID de entrada de Allowlist (ej. allow_123)" + }, + "compliance": { + "forceTransfer": "Force transfer", + "forceBurn": "Force burn", + "freeze": "Freeze", + "pause": "Pausa", + "accessPolicy": "Política de acceso", + "accessPolicyDescription": "Documenta la política de acceso prevista para este Asset.", + "accessControl": "Control de acceso", + "notSet": "Sin definir", + "lockReason": "Bloqueado tras el Deploy — la aplicación Onchain no se puede cambiar.", + "selectAccessControl": "Seleccionar control de acceso", + "appliedOnDeploy": "Se aplica Onchain durante el Deploy del Token.", + "controls": "Controles", + "controlsDescription": "Acciones Onchain con efecto inmediato." + }, + "classification": { + "title": "¿Qué es este Asset?", + "description": "Comience por indicarnos qué representa este Asset y cómo debe clasificarse.", + "name": "Nombre", + "namePlaceholder": "ej. USD Workshop Money Market Fund", + "nameHint": "Un nombre claro para identificar este Asset.", + "chooseClassification": "Elegir una clasificación", + "notSure": "No sé qué elegir", + "chooseAssetType": "Elegir tipo de Asset" + }, + "review": { + "assetTitle": "Asset", + "assetDescription": "El Asset y cómo se representará.", + "assetCategory": "Categoría de Asset", + "assetType": "Tipo de Asset", + "name": "Nombre", + "symbol": "Símbolo", + "assetDetailsTitle": "Detalles del Asset", + "assetDetailsDescription": "Información clave sobre el Asset.", + "description": "Descripción", + "issuerName": "Nombre del emisor", + "decimals": "Decimals", + "website": "Sitio web", + "complianceAccessTitle": "Cumplimiento y acceso", + "complianceAccessDescription": "Cómo se controlará el Asset y quién puede interactuar con él.", + "accessControl": "Control de acceso", + "allowlist": "Lista de permitidos", + "blocklist": "Lista de bloqueados", + "none": "Ninguno", + "allowlistHint": "Solo las direcciones aprobadas pueden poseer o transferir.", + "blocklistHint": "Las direcciones bloqueadas no pueden poseer ni transferir.", + "transferRestrictions": "Restricciones de transferencia", + "enabled": "Activado", + "disabled": "Desactivado", + "transferRestrictionsHint": "Transferencias limitadas a participantes aprobados.", + "investorReporting": "Informes para inversores", + "investorReportingHint": "Informes de actividad disponibles para inversores y partes interesadas.", + "publicInformationTitle": "Información pública", + "publicInformationDescription": "La información segura que será visible para cualquiera.", + "publicName": "Nombre público", + "publicSymbol": "Símbolo público", + "logo": "Logo", + "publicDescription": "Descripción (pública)", + "edit": "Editar", + "notProvided": "—" + }, + "publicInfo": { + "name": "Nombre", + "symbol": "Símbolo", + "description": "Descripción", + "decimals": "Decimals", + "category": "Categoría", + "assetType": "Tipo de Asset", + "logo": "Logo", + "untitledAsset": "Asset sin título", + "notProvided": "—", + "publicTokenInformation": "Información pública del Token", + "publicTokenInfoHelp": "Así aparecerá su Asset ante Wallets, Explorers y el público.", + "includedInPublicView": "Incluido en la vista pública", + "publicCount": "{count} públicos", + "publicCoverage": "{publicCount} de {totalCount} campos públicos", + "notIncludedByDefault": "No incluido por defecto", + "notIncludedHelp": "Estos campos permanecen privados salvo que elija incluirlos.", + "preview": "Vista previa", + "token": "Token", + "explorer": "Explorer", + "wallet": "Wallet", + "assetLogo": "Logo de {name}", + "asset": "Asset", + "mintAddress": "Dirección de Mint", + "copyMintAddress": "Copiar dirección de Mint", + "viewOnExplorer": "Ver en Explorer", + "copied": "Copiado", + "noPublicDescription": "Sin descripción pública", + "decimalsValue": "{count} Decimals", + "alwaysPublic": "Siempre público — no se puede ocultar", + "hidePublicField": "Público — ocultar este campo", + "showPublicField": "Oculto — mostrar este campo públicamente" + }, + "assetDetails": { + "title": "Detalles del Asset", + "description": "Agregue la información clave de este Asset. Puede actualizar estos detalles en cualquier momento.", + "tabs": { + "overview": "Resumen", + "compliance": "Cumplimiento y acceso", + "operational": "Operativo", + "custom": "Campos personalizados" + }, + "about": "Acerca de este Asset", + "namePlaceholder": "ej. Verde Dollar", + "lockedAfterDeploy": "Bloqueado tras el Deploy", + "aboutDescription": "Información básica que describe qué es este Asset.", + "symbolPlaceholder": "ej. vUSD", + "descriptionLabel": "Descripción", + "descriptionPlaceholder": "Describa qué representa este Asset.", + "website": "Sitio web", + "websitePlaceholder": "https://…", + "logoImageUrl": "URL de la imagen del logo", + "logoPlaceholder": "https://…/logo.png", + "logoHint": "Se muestra junto a su Token en Wallets y Explorers.", + "supplyControls": "Supply", + "supplyControlsDescription": "Cuánto de este Asset puede existir como máximo.", + "maxSupply": "Supply máxima", + "maxSupplyPlaceholder": "Ilimitada", + "maxSupplyHint": "Vacío = ilimitada. Aplicada por SDP mientras tenga la autoridad de Mint, y puede bloquearse definitivamente Onchain.", + "documents": "Documentos y referencias", + "documentsDescription": "Documentos y referencias importantes relacionados con este Asset.", + "accessControlDescription": "Elija cómo trata este Token las direcciones de destino aprobadas o bloqueadas.", + "learnLists": "Conozca la diferencia entre listas de permitidos y bloqueados", + "operational": "Operativo", + "operationalDescription": "Ajustes operativos opcionales.", + "signingWallet": "Wallet de firma", + "optionalSignerHint": "Opcional — deje sin seleccionar para usar el Signer predeterminado del proyecto.", + "customFields": "Campos personalizados", + "customFieldsDescription": "Agregue sus propios campos privados, almacenados bajo custom.customer.", + "projectDefaultSigner": "Signer predeterminado del proyecto", + "signingWalletLockReason": "Se define al crear — cada operación puede usar un Signer distinto.", + "documentTypePlaceholder": "Tipo de documento", + "documentNamePlaceholder": "Nombre", + "removeDocument": "Eliminar documento", + "addDocument": "Agregar documento", + "hideJson": "Ocultar JSON", + "viewJson": "Ver JSON", + "copied": "¡Copiado!", + "customFieldKey": "Clave", + "customFieldValue": "Valor", + "removeCustomField": "Eliminar campo", + "addCustomField": "Agregar campo", + "copyJson": "Copiar JSON", + "deployConfigAuthorityNote": "Las autoridades (Mint, Freeze, Delegate) se asignan en el Deploy desde la custodia de su Wallet de firma." + }, + "assetProfileDetails": { + "privateByDefault": "Esta información es privada por defecto y no será visible al público salvo que elija incluirla." + } + } +} diff --git a/apps/sdp-web/messages/es/dashboard-payments.json b/apps/sdp-web/messages/es/dashboard-payments.json new file mode 100644 index 000000000..62fdf1833 --- /dev/null +++ b/apps/sdp-web/messages/es/dashboard-payments.json @@ -0,0 +1,1043 @@ +{ + "DashboardPayments": { + "page": { + "unavailableStatus": "no disponible", + "unknownError": "Error desconocido", + "walletApiError": "Wallet API {status}: {error}", + "walletAggregateApiError": "API de agregado de Wallet {status}: {error}", + "transferApiError": "API de Transferencia {status}: {error}" + }, + "workspace": { + "walletListRequestFailed": "Error en la solicitud de lista de Wallets ({status}).", + "walletAggregateRequestFailed": "Error en la solicitud de agregado de Wallets ({status}).", + "walletAggregateMissing": "La respuesta de agregado de Wallet no contiene detalles agregados.", + "walletPolicyRequestFailed": "Error en la solicitud de política de Wallet ({status}).", + "transferListRequestFailed": "Error en la solicitud de lista de transferencias ({status}).", + "transferListMissing": "La respuesta de lista de transferencias no contiene datos de transferencias.", + "transferLookupFailed": "Error al buscar la transferencia ({status}).", + "transferLookupMissing": "La respuesta de búsqueda no contiene datos de la transferencia.", + "transferLookupMultiple": "La búsqueda devolvió varias transferencias.", + "transferCancellationFailed": "Error al cancelar la transferencia ({status}).", + "rampEstimateRequestFailed": "Error en la solicitud de estimación de Ramp ({status}).", + "rampEstimateMissing": "La respuesta de estimación de Ramp no contiene estimaciones.", + "walletBalancesRequestFailed": "Error en la solicitud de saldos de Wallet ({status}).", + "walletBalancesMissing": "La respuesta de saldos de Wallet no contiene detalles de saldo.", + "walletPolicyUpdateFailed": "Error al actualizar la política de Wallet ({status}).", + "walletPolicyUpdateEmpty": "La actualización de la política de Wallet devolvió una respuesta vacía.", + "transferRequestFailed": "Error en la solicitud de transferencia ({status}).", + "transferMissing": "La respuesta no contiene detalles de la transferencia.", + "recipientListRequestFailed": "Error en la solicitud de lista de destinatarios ({status}).", + "recipientListMissing": "La respuesta de lista de destinatarios no contiene destinatarios.", + "batchEstimateRequestFailed": "Error en la solicitud de estimación del Batch ({status}).", + "batchEstimateMissing": "La respuesta de estimación del Batch no contiene detalles.", + "batchTransferRequestFailed": "Error en la solicitud de transferencia Batch ({status}).", + "batchTransferMissing": "La respuesta de transferencia Batch no contiene detalles del Batch.", + "rampEventRequestFailed": "Error en la solicitud de evento de {provider} ({status}).", + "rampEventMissing": "La respuesta del evento de {provider} no contiene detalles de la transferencia.", + "counterpartyAccountsRequestFailed": "Error al cargar las cuentas ({status}).", + "sandboxSimulationRequestFailed": "Error en la simulación de Sandbox ({status}).", + "requirementsRequestFailed": "Error en la solicitud de requisitos ({status}).", + "requirementsAdvanceFailed": "Error al avanzar los requisitos ({status}).", + "requirementsContextMissing": "No se pueden avanzar los requisitos sin un provider y un Counterparty.", + "complianceCheckFailed": "Error en la verificación de cumplimiento.", + "complianceNotEnabled": "El control de cumplimiento con Range, Elliptic, TRM y Chainalysis está disponible en el plan enterprise. Contáctenos para habilitarlo en su organización.", + "destinationRequired": "La dirección de destino es obligatoria.", + "transferBlocked": "Transferencia bloqueada.", + "transferBlockedDescription": "Ejecute la verificación de cumplimiento o use un destino ya incluido en la Allowlist del Wallet de origen.", + "transactionSent": "Transacción enviada.", + "viewOnSolanaExplorer": "Ver en Solana Explorer", + "walletsLoadFailed": "Error al cargar los Wallets.", + "walletPolicyLoadFailed": "Error al cargar la política del Wallet.", + "addressRequired": "La dirección es obligatoria.", + "complianceCheckRequired": "Ejecute la verificación de cumplimiento antes de agregar la dirección.", + "addressAlreadyAllowlisted": "La dirección ya está en la Allowlist de destinos.", + "addressAddedToAllowlist": "Dirección agregada a la Allowlist de destinos del Wallet.", + "destinationAddressAddFailed": "Error al agregar la dirección de destino.", + "sourceWalletRequired": "Seleccione primero un Wallet de origen.", + "destinationAllowlistLoadFailed": "Error al cargar la Allowlist de destinos." + }, + "paymentMethods": { + "onchainTransfer": "Transferencia Onchain", + "onchainTransferDescription": "Envíe cripto desde un Wallet de SDP a la dirección Solana de un Counterparty.", + "payWithFiat": "Pagar con fiat", + "payWithFiatDescription": "Convierta cripto a fiat y pague a través de un provider.", + "onchainDeposit": "Depósito Onchain", + "onchainDepositDescription": "Reciba cripto directamente en una dirección de Wallet de SDP.", + "depositWithFiat": "Depositar con fiat", + "depositWithFiatDescription": "Compre cripto con fiat a través de un provider y deposítela en un Wallet." + }, + "cancelTransaction": { + "ariaLabel": "Cancelar transacción", + "title": "¿Cancelar esta transacción?", + "description": "Esta transacción ya se inició. Si cancela ahora, saldrá del flujo.", + "keepGoing": "Continuar", + "cancel": "Cancelar transacción" + }, + "sendMode": { + "single": "Individual", + "batch": "Batch", + "onchain": "Onchain" + }, + "ramps": { + "max": "MAX", + "recentTransfersRequestFailed": "Error en la solicitud de transferencias recientes.", + "recentTransfers": "Transferencias recientes", + "noRecentTransactions": "No hay transacciones recientes.", + "chooseProvider": "Elegir un provider", + "unavailableCount": "{count} no disponible", + "noProvidersAvailable": "No hay providers disponibles para esta selección.", + "unavailableProviders": "Providers no disponibles", + "walletAddressQrCode": "Código QR de la dirección del Wallet", + "walletReceiveDescription": "Escanee este código QR o copie la dirección para recibir USDC o cualquier Token SPL en Solana en el Wallet seleccionado.", + "addressCopied": "Dirección copiada.", + "copyAddress": "Copiar dirección", + "convertTo": "Convertir a", + "currency": "Moneda", + "selectCurrency": "Seleccionar una moneda", + "searchCurrencies": "Buscar monedas", + "searchAssets": "Buscar Assets", + "balanceAvailable": "{amount} disponible", + "amount": "Monto", + "destinationWallet": "Wallet de destino", + "sourceWallet": "Wallet de origen", + "memoViewJson": "Ver JSON", + "memoJsonTitle": "JSON del Memo", + "memoJsonDescription": "Los campos del Memo tal como se incluirán en la solicitud.", + "memoDescription": "Agregue campos clave-valor para la conciliación offchain. Pegue filas separadas por tabulaciones o comas en cualquier lugar.", + "memoKey": "Clave", + "memoValue": "Valor", + "memoKeyPlaceholder": "factura", + "memoValuePlaceholder": "INV-123", + "removeMemoRow": "Eliminar fila de Memo {row}", + "addMemoRow": "Agregar fila", + "memoErrorKeyRequired": "La clave es obligatoria.", + "memoErrorKeyTooLong": "La clave debe tener {limit} caracteres o menos.", + "memoErrorKeyDuplicate": "Las claves deben ser únicas.", + "memoErrorValueRequired": "El valor es obligatorio.", + "memoErrorValueTooLong": "El valor debe tener {limit} caracteres o menos.", + "memoErrorTooManyFields": "El Memo puede contener como máximo {limit} campos.", + "rampMemoStep": "Memo", + "rampMemoStepTitle": "Agregar un Memo (opcional)", + "detailsStep": "Detalles", + "onrampDepositStep": "Depósito", + "onrampDepositTitle": "¿Cuánto desea depositar?", + "onrampProviderTitle": "Complete su depósito", + "onrampRequirementsTitle": "Algunos detalles para continuar", + "offrampWalletStep": "Wallet", + "offrampWalletTitle": "¿De qué Wallet está retirando?", + "offrampWithdrawStep": "Retirar", + "offrampWithdrawTitle": "¿Cuánto desea retirar?", + "offrampCompleteStep": "Completar", + "offrampCompleteTitle": "Complete su pago", + "payoutDetailsStep": "Detalles del pago", + "payoutDetailsTitle": "¿A dónde debemos enviar el pago?", + "selectDestinationWallet": "Seleccionar un Wallet de destino", + "selectSourceWallet": "Seleccionar un Wallet de origen", + "searchWallets": "Buscar Wallets", + "fees": "Comisiones {providerFee} {providerCurrency} + {networkFee} {networkCurrency}", + "noFees": "Sin comisiones", + "fee": "Comisión {amount} {currency}", + "estimatedReceived": "Recibido est.", + "rateKnownAtQuote": "Tasa conocida al crear el Quote", + "unavailable": "No disponible", + "acceptTerms": "Aceptar términos", + "completeVerification": "Completar verificación", + "tryAgain": "Reintentar", + "quoteMissingInstructions": "El Quote de Ramp no contiene instrucciones de pago.", + "sendCrypto": "Enviar {amount} {token}", + "quoteExpired": "Quote expirado", + "sending": "Enviando...", + "transferSubmitted": "Transferencia enviada", + "transferFailed": "La transferencia falló.", + "transactionSentSuccessfully": "Transacción enviada correctamente.", + "transferStatus": "Estado: {status}", + "submittingOnchainTransfer": "Enviando transferencia onchain.", + "simulatingQuoteFunding": "Simulando el fondeo del Quote.", + "quoteFundingSimulated": "Fondeo del Quote simulado.", + "quoteSimulationFailed": "La simulación del Quote falló.", + "sandboxSimulationFailed": "La simulación de Sandbox falló.", + "muralSandboxCurrencyUnsupported": "El payin de Mural Sandbox no admite {currency}.", + "transferSignatureMissing": "La transferencia no devolvió una firma (estado: {status}).", + "offrampManualDescription": "Envíe {amount} {token} a la dirección de depósito de abajo antes de que expire el Quote. El provider lo convierte a la tasa fijada y paga automáticamente a la cuenta bancaria guardada.", + "noPayoutProviders": "No hay providers de pago habilitados para esta organización.", + "providerPayout": "Pago de {provider}", + "noDepositProviders": "No hay providers de depósito habilitados para esta organización.", + "providerDeposit": "Depósito de {provider}", + "quoteRequestFailedStatus": "Error en la solicitud de Quote de Ramp ({status}).", + "quoteResponseMissingDetails": "La respuesta del Quote de Ramp no contiene detalles del Quote.", + "creatingQuote": "Creando Quote.", + "widgetReady": "Widget listo.", + "quoteReady": "Quote listo.", + "unableToCreateQuote": "No se pudo crear el Quote.", + "quoteRequestFailed": "Error en la solicitud de Quote de Ramp.", + "settingUpAccount": "Configurando su cuenta.", + "moreDetailsNeeded": "Necesitamos algunos detalles más antes de continuar.", + "unableToStartOnboarding": "No se pudo iniciar el onboarding.", + "requirementsRequestFailed": "Error en la solicitud de requisitos.", + "nextStepSoon": "Próximo paso en breve.", + "cannotCancelWithoutQuote": "No se puede cancelar sin un Quote activo.", + "cancelingTransaction": "Cancelando la transacción.", + "transactionCanceled": "Transacción cancelada.", + "unableToCancelTransaction": "No se pudo cancelar la transacción.", + "cancellationFailed": "La cancelación falló.", + "funded": "Fondeado", + "sent": "Enviado", + "provider": "Provider", + "finalFundedAmount": "Monto final fondeado", + "finalSentAmount": "Monto final enviado", + "finalReceivedAmount": "Monto final recibido", + "finalPayoutAmount": "Monto final del pago", + "completed": "Completado", + "transferId": "ID de transferencia", + "quoteId": "ID de Quote", + "depositComplete": "Depósito completado", + "payoutComplete": "Pago completado", + "depositCompleteDescription": "Los fondos se liquidaron en el Wallet de destino.", + "payoutCompleteDescription": "El pago se liquidó en la cuenta bancaria del destinatario.", + "fundedWith": "fondeado con", + "from": "desde", + "newPayeeHint": "Cree un nuevo beneficiario si aún no está en la lista.", + "newBuyerHint": "Cree un nuevo comprador si aún no está en la lista.", + "destinationAccount": "Cuenta de destino", + "selectCounterpartyFirst": "Seleccione primero un Counterparty", + "noSolanaAccounts": "No hay cuentas Solana registradas", + "selectDestinationAccount": "Seleccionar una cuenta de destino", + "searchAccounts": "Buscar cuentas", + "assetBreakdown": "Desglose de Assets", + "total": "{amount} en total", + "selectCounterparty": "Seleccionar un Counterparty", + "searchCounterparties": "Buscar Counterparties", + "counterpartiesLoadFailed": "Error al cargar los Counterparties.", + "openFullScreen": "Abrir en pantalla completa", + "selectField": "Seleccionar {field}", + "search": "Buscar…", + "stripeLoadError": "No se pudo cargar el checkout de Stripe", + "stripeLoadHelp": "El checkout de Stripe no se pudo cargar. Verifique su conexión y reintente.", + "moneygramEventFailed": "Error al registrar el evento de MoneyGram.", + "eventRequestFailed": "Error en la solicitud del evento.", + "moneygramCompletionBeforeTransfer": "MoneyGram reportó la finalización antes de registrarse la transferencia cripto.", + "moneygramWidgetLoadFailed": "Error al cargar el widget de MoneyGram.", + "unsupportedMoneygramTransaction": "Transacción no admitida: {asset} en {chain}.", + "sourceWalletNoUsdc": "El Wallet de origen no tiene saldo de USDC para enviar.", + "coinbaseEventFailed": "Error al registrar el evento de Coinbase.", + "coinbaseOnramp": "Coinbase Onramp", + "status": { + "waitingForFunding": "Esperando el fondeo", + "waitingToSend": "Esperando el envío", + "waitingForFundingDescription": "Envíe los fondos siguiendo las instrucciones de arriba. Actualizaremos este depósito automáticamente cuando el provider reciba el pago.", + "waitingToSendDescription": "Complete el pago siguiendo las instrucciones de arriba. Actualizaremos esta transferencia saliente automáticamente cuando el provider reciba su cripto.", + "depositReceived": "Depósito recibido", + "sendingPayout": "Enviando el pago", + "depositReceivedDescription": "El provider recibió los fondos y está liquidando el depósito en el Wallet de destino.", + "sendingPayoutDescription": "El provider recibió su cripto y está liquidando el pago saliente al destinatario.", + "transferComplete": "Transferencia completada", + "payoutSent": "Pago enviado", + "transferCompleteDescription": "El depósito está completo. Puede revisar la transferencia desde el registro del Counterparty.", + "payoutSentDescription": "El pago saliente se liquidó. Puede revisar esta transferencia desde el registro del Counterparty.", + "transferFailed": "Transferencia fallida", + "payoutFailed": "Pago fallido", + "transferFailedDescription": "El provider reportó que este depósito falló. Revise el registro del Counterparty para ver el estado más reciente de la transferencia.", + "payoutFailedDescription": "El provider reportó que este pago saliente falló. Revise el registro del Counterparty para ver el estado más reciente de la transferencia.", + "quoteExpired": "Quote expirado", + "quoteExpiredFundingDescription": "Este Quote expiró antes de completarse la transferencia. Cree un nuevo Quote para continuar con el fondeo.", + "quoteExpiredPayoutDescription": "Este Quote expiró antes de completarse el pago. Cree un nuevo Quote para continuar con el retiro.", + "updated": "Estado de la transferencia actualizado", + "currentProviderStatus": "Estado actual del provider: {status}.", + "preparing": "Preparando el estado de la transferencia", + "preparingDescription": "Estamos esperando el registro de la transferencia vinculada a este Quote." + } + }, + "onchainSend": { + "noAssets": "Este Wallet no tiene Assets disponibles para enviar.", + "addSolanaAddress": "Agregar dirección Solana", + "counterpartyNoAddress": "{counterparty} aún no tiene una dirección Solana registrada.", + "thisCounterparty": "Este Counterparty", + "attachDestination": "Adjunte otra dirección de destino para este Counterparty.", + "sourceWallet": "Wallet de origen", + "selectSourceWallet": "Seleccionar un Wallet de origen", + "searchWallets": "Buscar Wallets", + "amount": "Monto", + "asset": "Asset", + "selectAsset": "Seleccionar", + "memoOptional": "Memo (opcional)", + "memoPlaceholder": "Agregar una nota para esta transferencia", + "to": "Para", + "destination": "Destino", + "destinationTitle": "¿A dónde deben ir los fondos?", + "details": "Detalles", + "detailsTitle": "¿Qué desea enviar?", + "review": "Revisión", + "reviewTitle": "Revisar transferencia", + "submittingTransfer": "Enviando la transferencia.", + "memo": "Memo", + "counterparty": "Counterparty", + "toCounterparty": "a {counterparty}", + "transferSubmitted": "Transferencia enviada", + "transactionSent": "Transacción enviada correctamente.", + "transferFailed": "La transferencia falló.", + "transferSuccess": "Su transferencia se envió correctamente.", + "transferStatus": "Estado: {status}", + "viewOnExplorer": "Ver en el explorador" + }, + "onchainReceive": { + "wallet": "Wallet", + "walletTitle": "¿Qué Wallet debe recibir los fondos?", + "receive": "Recibir", + "receiveTitle": "Recibir fondos Onchain" + }, + "bvnk": { + "verificationRequiredTitle": "Verifique su identidad", + "verificationRequiredDescription": "BVNK se asocia con Sumsub para confirmar su identidad antes de activar su cuenta de fondeo. Haga clic en «Completar verificación» para comenzar; esta página se actualiza automáticamente cuando sea aprobado y sus instrucciones aparecerán aquí.", + "verificationInReviewTitle": "Verificación en revisión", + "verificationInReviewDescription": "Sumsub está revisando sus datos; esto suele tardar solo unos minutos. Puede volver más tarde; sus instrucciones aparecerán aquí en cuanto sea aprobado.", + "verificationFailedTitle": "La verificación de identidad no fue aprobada", + "verificationFailedDescription": "BVNK no pudo verificar su identidad, por lo que esta cuenta de fondeo no puede activarse. Contacte a soporte si cree que es un error.", + "fundingAccountProvisioningTitle": "Configurando su cuenta de fondeo", + "fundingAccountProvisioningDescription": "Casi listo: estamos aprovisionando su cuenta virtual. Sus instrucciones aparecerán aquí en un momento.", + "provisioningFailedTitle": "No pudimos terminar de configurar su cuenta", + "provisioningFailedDescription": "Algo salió mal al aprovisionar su cuenta de fondeo. Inténtelo de nuevo.", + "readyTitle": "Preparando sus instrucciones", + "readyDescription": "Su cuenta de fondeo está lista; obteniendo sus datos ahora.", + "onrampProvisioningDetail": "Aprovisionando un Wallet de BVNK y una regla de pago fiat→cripto para este Quote.", + "offrampProvisioningDetail": "Aprovisionando un Wallet de pago dedicado de BVNK para esta moneda.", + "simulateDeposit": "Simular depósito", + "simulating": "Simulando...", + "depositSimulated": "Depósito simulado" + }, + "lightspark": { + "verificationRequiredTitle": "Verifique su identidad", + "verificationRequiredDescription": "Necesitamos confirmar su identidad antes de activar su cuenta de fondeo. Esta página se actualiza automáticamente cuando sea aprobado.", + "verificationInReviewTitle": "Verificación en revisión", + "verificationInReviewDescription": "Sus datos están en revisión; esto suele tardar solo unos minutos. Sus instrucciones aparecerán aquí en cuanto sea aprobado.", + "verificationFailedTitle": "La verificación de identidad no fue aprobada", + "verificationFailedDescription": "No pudimos verificar su identidad, por lo que esta cuenta de fondeo no puede activarse. Contacte a soporte si cree que es un error.", + "fundingAccountProvisioningTitle": "Configurando su cuenta", + "fundingAccountProvisioningDescription": "Casi listo: estamos preparando su cuenta de fondeo. Sus instrucciones aparecerán aquí en un momento.", + "provisioningFailedTitle": "No pudimos terminar de configurar su cuenta", + "provisioningFailedDescription": "Algo salió mal al preparar su cuenta de fondeo. Inténtelo de nuevo.", + "readyTitle": "Preparando sus instrucciones", + "readyDescription": "Su cuenta está lista; obteniendo sus datos ahora.", + "onrampProvisioningDetail": "Aprovisionando su cliente de Lightspark y los detalles de depósito para este Quote.", + "offrampProvisioningDetail": "Aprovisionando una cuenta de pago de Lightspark justo a tiempo para este retiro.", + "simulateQuote": "Simular Quote", + "simulating": "Simulando...", + "quoteSimulated": "Quote simulado" + }, + "mural": { + "termsTitle": "Aceptar los términos de Mural Pay", + "termsDescription": "Mural Pay requiere que el Counterparty acepte los términos alojados antes de iniciar la verificación de identidad.", + "verificationRequiredTitle": "Verifique su identidad", + "verificationRequiredDescription": "Mural Pay necesita que el Counterparty complete la verificación alojada antes de activar una cuenta de fondeo.", + "verificationInReviewTitle": "Verificación en revisión", + "verificationInReviewDescription": "Mural Pay está revisando el Counterparty. Las instrucciones de fondeo aparecerán cuando se apruebe la verificación.", + "verificationFailedTitle": "La verificación de identidad no fue aprobada", + "verificationFailedDescription": "Mural Pay no pudo aprobar este Counterparty, por lo que no se puede activar una cuenta de fondeo.", + "fundingAccountProvisioningTitle": "Configurando su cuenta de fondeo", + "fundingAccountProvisioningDescription": "Mural Pay está activando una cuenta de fondeo. Los datos bancarios aparecerán aquí cuando esté lista.", + "readyTitle": "Preparando sus instrucciones", + "readyDescription": "Su cuenta de fondeo de Mural Pay está lista. Obteniendo los últimos datos ahora.", + "onrampProvisioningDetail": "Aprovisionando una cuenta de fondeo de Mural Pay para este Counterparty.", + "offrampProvisioningDetail": "Verificando la aprobación de la organización en Mural Pay antes del retiro.", + "simulateDeposit": "Simular depósito", + "simulating": "Simulando...", + "depositSimulated": "Depósito simulado" + }, + "batchSend": { + "recipientStatusPending": "Pendiente", + "recipientStatusProcessing": "Procesando", + "recipientStatusConfirmed": "Completado", + "recipientStatusFailed": "Fallido", + "recipientStatusArchived": "Archivado", + "resultConfirmed": "Batch enviado", + "resultPartiallyFailed": "Batch parcialmente fallido", + "resultFailed": "Batch fallido", + "resultSubmitted": "Batch enviado para procesar", + "recipientsStep": "Destinatarios", + "recipientsTitle": "Pagar a varios destinatarios", + "reviewStep": "Revisión", + "reviewTitle": "Revisar Batch", + "customToken": "Token personalizado", + "tokenUnavailableOnNetwork": "{currency} no está disponible en esta red.", + "importExceedsMaximumRecipients": "Un Batch puede tener como máximo {max} destinatarios. Esta importación llevaría el total a {total}.", + "submitting": "Enviando el Batch.", + "someRecipientsDidNotReceiveFunds": "Algunos destinatarios no recibieron fondos.", + "status": "Estado: {status}", + "estimateFailed": "La estimación falló.", + "recipientSingular": "{count} destinatario", + "recipientPlural": "{count} destinatarios", + "yourWallet": "su Wallet", + "maximumRecipients": "Un Batch puede tener como máximo {count} destinatarios.", + "insufficientBalance": "Saldo insuficiente", + "walletsSelectedSingular": "{count} Wallet seleccionado", + "walletsSelectedPlural": "{count} Wallets seleccionados", + "from": "Desde", + "reference": "Referencia", + "referenceOptional": "Opcional", + "selectSourceWallet": "Seleccionar un Wallet de origen", + "searchWallets": "Buscar Wallets", + "asset": "Asset", + "selectAsset": "Seleccionar un Asset", + "noAssets": "Este Wallet no tiene Assets disponibles para enviar.", + "selectRecipientWallets": "Seleccionar Wallets destinatarios", + "bulkImport": "O importar en bloque", + "searchCounterparty": "Buscar Counterparty", + "paginationSummary": "{page} / {pageCount}", + "noCounterpartiesWithSolanaAddress": "No hay Counterparties con dirección Solana.", + "noMatches": "Sin coincidencias.", + "addRecipient": "Agregar {name}", + "totalAmount": "Total {total} {asset}", + "totalOfAmount": " de {available} {asset}", + "reviewSummary": "{total} {asset} → {recipients}", + "transactionCountSingular": "{count} transacción", + "transactionCountPlural": "{count} transacciones", + "source": "Origen", + "transactionFees": "Comisiones de transacción", + "rentFees": "Comisiones de rent", + "total": "Total", + "sponsoredFee": "0 SOL", + "sponsoredBy": "Patrocinado por SDP vía Kora", + "estimating": "Estimando…", + "resultSummary": "{recipients} destinatarios · {transactions} transacciones", + "viewOnExplorer": "Ver en el explorador", + "bulkImportAriaLabel": "Importar destinatarios en bloque", + "bulkImportTitle": "Importar destinatarios en bloque", + "bulkImportDescriptionBefore": "Pegue filas de ", + "bulkImportFields": "counterparty_wallet_id, moneda conocida o dirección de Mint, monto", + "bulkImportDescriptionAfter": " en cualquier campo, o agréguelas una por una.", + "counterpartyWalletIdPlaceholder": "counterparty_wallet_id", + "currencyOrMintPlaceholder": "moneda o Mint", + "amountPlaceholder": "monto", + "removeRow": "Eliminar fila {row}", + "addRecipientRow": "Agregar destinatario", + "rowError": "Fila {row}: {message}", + "addAtLeastOneRecipient": "Agregue al menos un destinatario.", + "oneCurrencyRequired": "Todas las filas deben usar una sola moneda o dirección de Mint (se encontraron {currencies}).", + "walletNotFound": "Wallet no encontrado: {id}", + "importFailed": "La importación falló.", + "cancel": "Cancelar", + "importing": "Importando…", + "import": "Importar" + }, + "manualInstructions": { + "copied": "{label} copiado.", + "copyFailed": "Error al copiar {label}.", + "copy": "Copiar", + "instructions": "Instrucciones", + "quoteSummary": "Resumen del Quote", + "quoteSummaryDescription": "Precio fijado para esta instrucción de fondeo.", + "finalAmount": "Monto final", + "depositAmount": "Monto del depósito", + "feesIncluded": "Comisiones incluidas", + "exchangeRate": "Tipo de cambio", + "expires": "Expira", + "bankName": "Nombre del banco", + "routingNumber": "Número de ruta", + "accountNumber": "Número de cuenta", + "walletAddress": "Dirección del Wallet", + "reference": "Referencia", + "supportedRails": "Rieles admitidos", + "notes": "Notas", + "depositAddress": "Dirección de depósito", + "bankCode": "Código bancario", + "paymentReference": "Referencia de pago", + "identityVerificationRequired": "Se requiere verificación de identidad", + "completeVerification": "Completar verificación", + "provisioningAccount": "BVNK está aprovisionando su cuenta bancaria virtual", + "verificationInReview": "Verificación en revisión", + "provisioningFundingAccount": "Aprovisionando la cuenta de fondeo", + "checkingVerificationStatus": "Verificando el estado de verificación", + "manualFundingInstructions": "Instrucciones de fondeo manual", + "defaultDescription": "Envíe {amount} usando uno de los rieles admitidos. Incluya la referencia exacta para que el provider vincule el depósito a este Quote.", + "quotedAmount": "el monto cotizado", + "cryptoDeposit": "Depósito de {currency}", + "virtualAccount": "Cuenta virtual en {currency}", + "payin": "Payin de {currency}" + }, + "providerRisk": { + "close": "Cerrar {title}", + "description": "Este control revisa factores de riesgo principales como exposición a sanciones y otras señales de cumplimiento de los providers conectados.", + "provider": "Provider", + "analysis": "Análisis", + "noTrmAttribution": "Sin atribución de TRM", + "unavailable": "No disponible", + "error": "Error", + "notAvailable": "N/D", + "dismiss": "Descartar" + }, + "counterparty": { + "loadFailed": "No se pudieron cargar los Counterparties", + "metadataMissing": "La respuesta de metadatos del Counterparty estaba vacía.", + "validation": { + "required": "Obligatorio", + "invalidEmail": "Email inválido", + "invalidDate": "Ingrese una fecha en formato AAAA-MM-DD.", + "dateMustBePast": "Debe ser una fecha pasada.", + "invalidPhone": "Ingrese un número de teléfono en formato E.164 (por ejemplo, +14155551234).", + "selectCountry": "Seleccione un país.", + "selectState": "Seleccione un estado." + }, + "addExternalAccount": "Agregar cuenta externa", + "addExternalAccountDescription": "Adjunte un Wallet cripto para este Counterparty. La dirección se analiza por riesgo antes de agregarse.", + "addCounterparty": "Agregar Counterparty", + "created": "{name} creado", + "createdSuccess": "Counterparty creado", + "transferType": "Tipo", + "transferProvider": "Provider", + "transferWallet": "Wallet", + "transferAmount": "Monto", + "transferStatus": "Estado", + "transferDate": "Fecha", + "allProviders": "Todos los providers", + "noFilteredTransactions": "Ninguna transacción coincide con los filtros seleccionados.", + "fullName": "Nombre completo", + "createdLabel": "Creado", + "youDeposit": "Usted deposita", + "youSend": "Usted envía", + "recipientGets": "El destinatario recibe", + "viewOnExplorer": "Ver en el explorador", + "deleted": "{name} eliminado", + "createdButUnavailable": "El Counterparty se creó pero no se pudo cargar.", + "somethingWentWrong": "Algo salió mal", + "addCryptoAccount": "Agregar una cuenta cripto", + "addCryptoAccountDescription": "Opcionalmente agregue un Wallet cripto para este Counterparty. Puede omitir esto y agregar cuentas después.", + "cryptoWallet": "Wallet cripto", + "done": "Listo", + "skip": "Omitir", + "displayName": "Nombre para mostrar", + "individualNamePlaceholder": "Juana Pérez", + "businessNamePlaceholder": "Acme Corp", + "email": "Email", + "emailPlaceholder": "contacto@ejemplo.com", + "externalId": "ID externo", + "optional": "(opcional)", + "externalIdPlaceholder": "su-id-interno", + "firstName": "Nombre", + "firstNamePlaceholder": "Juana", + "lastName": "Apellido", + "lastNamePlaceholder": "Pérez", + "dateOfBirth": "Fecha de nacimiento", + "phone": "Teléfono", + "phonePlaceholder": "+1 555 000 0000", + "line1": "Línea 1", + "line1Placeholder": "Calle Principal 123", + "line2": "Línea 2", + "line2Placeholder": "Oficina 400", + "city": "Ciudad", + "cityPlaceholder": "Nueva York", + "postalCode": "Código postal", + "country": "País", + "selectCountry": "Seleccionar país", + "searchCountries": "Buscar países…", + "state": "Estado", + "selectState": "Seleccionar estado", + "searchStates": "Buscar estados…", + "stateProvince": "Estado / Provincia", + "statePlaceholder": "NY", + "basics": "Datos básicos", + "entityType": "Tipo de entidad", + "individual": "Persona física", + "business": "Empresa", + "personalInfo": "Información personal", + "address": "Dirección", + "back": "Atrás", + "creating": "Creando", + "create": "Crear", + "next": "Siguiente", + "stepProgress": "Paso {current} de {total}", + "deleteCounterparty": "Eliminar Counterparty", + "deleteNamedCounterparty": "¿Seguro que desea eliminar {name}? Esto archivará el Counterparty y sus cuentas.", + "deleteThisCounterparty": "¿Seguro que desea eliminar este Counterparty?", + "cancel": "Cancelar", + "deleting": "Eliminando", + "delete": "Eliminar", + "basicInfo": "Información básica", + "basicInfoDescription": "Ingrese el nombre y los datos de contacto del Counterparty.", + "personal": "Personal", + "personalDetails": "Datos personales", + "personalDetailsDescription": "Información de identidad de esta persona.", + "location": "Ubicación", + "locationDescription": "Nos ayuda a verificar quiénes son y dónde están establecidos.", + "review": "Revisión", + "reviewCreate": "Revisar y crear", + "reviewCreateDescription": "Confirme que todo esté correcto antes de crear.", + "adding": "Agregando", + "screening": "Analizando", + "addAccount": "Agregar cuenta", + "cryptoAccountAttached": "Cuenta cripto adjuntada", + "label": "Etiqueta", + "accountLabelPlaceholder": "p. ej. Wallet Solana de Alicia", + "network": "Red", + "selectNetwork": "Seleccionar red", + "walletAddress": "Dirección del Wallet", + "destinationWalletAddress": "Dirección del Wallet de destino", + "screeningUnavailable": "No pudimos analizar esta dirección: el control de cumplimiento no está disponible. ¿Agregarla de todos modos?", + "screeningWarning": "Una o más verificaciones marcaron este Wallet o no pudieron completarse. ¿Agregarlo de todos modos?", + "holdToAddAnyway": "Mantenga presionado para agregar de todos modos", + "searchAddress": "Buscar dirección", + "searchAddressPlaceholder": "Buscar dirección o empresa…", + "failedToLoadPlaceDetails": "Error al cargar los detalles del lugar", + "searchFailed": "La búsqueda falló", + "searching": "Buscando…", + "noMatches": "No se encontraron coincidencias.", + "updating": "Actualizando…", + "searchToPreviewAddress": "Busque para previsualizar la dirección", + "complianceScreening": "Control de cumplimiento", + "checking": "Verificando…", + "directory": "Directorio", + "directoryDescription": "Personas y empresas registradas en su espacio de trabajo.", + "noCounterparties": "Aún no hay Counterparties", + "noCounterpartiesDescription": "Agregue su primera persona o empresa para comenzar.", + "type": "Tipo", + "manageCounterparty": "Gestionar Counterparty", + "counterpartyActions": "Acciones del Counterparty", + "transactionDetails": "Detalles de la transacción", + "playgroundProductName": "Counterparty", + "playgroundCounterpartyIdPlaceholder": "ID de Counterparty (p. ej. cpty_abc123)", + "listCounterparties": "Listar Counterparties", + "getCounterparty": "Obtener Counterparty", + "createCounterparty": "Crear Counterparty", + "playgroundEmailPlaceholder": "contact@acme.com", + "playgroundIndividualOnly": "Obligatorio cuando entityType es individual; deje en blanco para business.", + "playgroundAddressRequired": "Obligatorio para todos los tipos de entidad.", + "playgroundDateOfBirthPlaceholder": "1990-01-15", + "playgroundPhonePlaceholder": "+14155551234", + "selectEntityType": "Seleccionar tipo de entidad", + "updateCounterparty": "Actualizar Counterparty", + "updatedDisplayNamePlaceholder": "Nombre para mostrar actualizado", + "updatedEmailPlaceholder": "actualizado@ejemplo.com", + "noTransactions": "Aún no hay transacciones vinculadas a este Counterparty.", + "allTypes": "Todos los tipos", + "identity": "Identidad", + "personalInformation": "Información personal", + "noPersonalInformation": "No hay información personal registrada.", + "externalAccounts": "Cuentas externas", + "noExternalAccounts": "Aún no hay cuentas externas.", + "addExternalAccountTitle": "Agregar cuenta externa", + "manage": "Gestionar", + "details": "Detalles", + "transactions": "Transacciones", + "copyAddress": "Copiar dirección", + "addressCopied": "Dirección copiada" + }, + "playground": { + "moonPay": "MoonPay", + "lightspark": "Lightspark", + "bvnk": "BVNK", + "walletIdPlaceholder": "ID de Wallet (p. ej. wal_ops_123)", + "transferIdPlaceholder": "ID de transferencia (p. ej. xfr_123)", + "custodyWalletIdPlaceholder": "ID de Wallet de custodia (p. ej. wal_ops_123)", + "destinationWalletIdPlaceholder": "ID de Wallet de destino", + "sourceWalletIdPlaceholder": "ID de Wallet de origen", + "getWalletBalances": "Obtener saldos del Wallet", + "getWalletPolicy": "Obtener política del Wallet", + "updateWalletPolicy": "Actualizar política del Wallet", + "destinationAllowlistPlaceholder": "Direcciones de destino separadas por comas", + "executeTransfer": "Ejecutar transferencia", + "solanaAddressPlaceholder": "Dirección Solana (32-44 caracteres)", + "usdc": "USDC", + "optionalMemo": "Memo opcional", + "listTransfers": "Listar transferencias", + "getTransfer": "Obtener transferencia", + "createOnrampQuote": "Crear Quote de Onramp", + "selectProvider": "Seleccionar provider", + "counterpartyIdPlaceholder": "ID de Counterparty (p. ej. cpty_abc123)", + "selectFiatCurrency": "Seleccionar moneda fiat", + "onrampRedirectUrlPlaceholder": "https://app.example.com/payments/onramp/complete", + "createOfframpQuote": "Crear Quote de Offramp", + "offrampRedirectUrlPlaceholder": "https://app.example.com/payments/offramp/complete" + }, + "commandCenter": { + "moveMoney": "Mover dinero", + "moveMoneyDescription": "Inicie el flujo de pago que corresponda a lo que necesita hacer.", + "payDescription": "Onchain o fiat", + "depositDescription": "Recibir cripto o fiat", + "requestPayment": "Solicitar pago", + "requestPaymentDescription": "Comparta un QR o enlace patrocinado", + "schedule": "Programar", + "scheduleDescription": "Crear un pago recurrente", + "availableBalance": "Saldo disponible", + "availableBalanceDescription": "En {count} {walletLabel}", + "balanceUnavailable": "El saldo no está disponible temporalmente.", + "activity": "Actividad", + "activityDescription": "Últimas transferencias, Batches, depósitos y pagos.", + "activityUnavailable": "La actividad no está disponible temporalmente.", + "transfers": "Transferencias", + "batches": "Batches", + "typeDirection": "Tipo", + "amount": "Monto", + "upcomingOpen": "Próximos y abiertos", + "upcomingOpenDescription": "Tareas que pueden requerir atención.", + "activeSchedules": "Programaciones activas", + "openRequests": "Solicitudes de pago abiertas", + "upcomingUnavailable": "Los pagos próximos no están disponibles temporalmente.", + "paymentNetwork": "Red de pagos", + "paymentNetworkDescription": "Counterparties guardados y destinos de pago.", + "counterpartiesReady": "{count} Counterparties listos", + "counterparties": "Counterparties", + "providersEnabled": "providers habilitados", + "networkUnavailable": "La red de pagos no está disponible temporalmente.", + "manageCounterparties": "Gestionar Counterparties", + "viewRecurring": "Ver pagos recurrentes", + "viewRequests": "Ver solicitudes de pago" + }, + "totalSdpBalance": "Saldo total de SDP", + "aggregatedAcrossWallets": "Agregado en {count} {walletLabel}.", + "wallet": "Wallet", + "wallets": "Wallets", + "noUsdValuedAssets": "Aún no hay filas de Assets valorados en USD.", + "recentTransactions": "Transacciones recientes", + "recentTransactionsDescription": "Última actividad de transferencias en todos los Wallets de la organización.", + "viewAllTransactions": "Ver todas las transacciones", + "refreshing": "Actualizando...", + "refresh": "Actualizar", + "noTransactions": "Aún no se encontraron transacciones.", + "status": "Estado", + "transfer": "Transferencia", + "asset": "Asset", + "direction": "Dirección", + "counterpartyLabel": "Counterparty", + "signature": "Firma", + "createdLabel": "Creado", + "pending": "Pendiente", + "expired": "Expirado", + "unknown": "Desconocido", + "unavailable": "No disponible", + "deposit": "Depositar", + "pay": "Pagar", + "transferDetails": { + "providerFee": "Comisión del provider", + "networkFee": "Comisión de red", + "exchangeRate": "Tipo de cambio", + "fees": "Comisiones", + "provider": "Provider", + "transactionId": "ID de transacción", + "providerReference": "Referencia del provider", + "memo": "Memo", + "cashPickupCode": "Código de retiro en efectivo", + "moneygramTransactionId": "ID de transacción de MoneyGram", + "payoutStatus": "Estado del pago", + "payoutAmount": "Monto del pago", + "cryptoTransferId": "ID de transferencia cripto", + "solanaSignature": "Firma de Solana", + "moneygramError": "Error de MoneyGram", + "lastUpdated": "Última actualización", + "copy": "Copiar {label}" + }, + "requestFailed": "La solicitud falló.", + "submitting": "Enviando...", + "sendTransfer": "Enviar transferencia", + "sendBatch": "Enviar Batch", + "reviewAction": "Revisar", + "processing": "Procesando", + "verificationPending": "Verificación pendiente", + "completeVerification": "Completar verificación", + "previous": "Anterior", + "goToTransaction": "Ir a la transacción", + "method": "Método", + "wizardSummaryTitle": "Sus selecciones", + "viewSummary": "Ver resumen", + "payoutCurrency": "Moneda de pago", + "whoAreYouPaying": "¿A quién está pagando?", + "whoIsThisDepositFrom": "¿De quién proviene este depósito?", + "howWouldYouLikeToPay": "¿Cómo desea pagar?", + "howWouldYouLikeToDeposit": "¿Cómo desea depositar?", + "playgroundProductName": "Pagos", + "recurring": { + "emptyResponse": "{request} devolvió una respuesta vacía.", + "counterpartyStepTitle": "¿Para quién es este pago recurrente?", + "destination": "Destino", + "destinationStepTitle": "¿A dónde deben ir los pagos?", + "details": "Detalles", + "detailsStepTitle": "Definir los detalles del pago", + "reviewStepTitle": "Revisar pago recurrente", + "everyDay": "Cada día", + "collectDaily": "Cobrar una vez al día.", + "everyWeek": "Cada semana", + "collectWeekly": "Cobrar una vez por semana.", + "everyThirtyDays": "Cada 30 días", + "collectMonthly": "Cobrar aproximadamente una vez al mes.", + "custom": "Personalizado", + "customScheduleDescription": "Ingrese un intervalo en horas.", + "notSet": "Sin definir", + "customInterval": "Intervalo personalizado", + "everyHour": "Cada hora", + "everyHours": "Cada {count} horas", + "notSelected": "Sin seleccionar", + "destinationAccount": "Cuenta de destino", + "fundingWallet": "Wallet de fondeo", + "amount": "Monto", + "billingInterval": "Intervalo de facturación", + "firstPayment": "Primer pago", + "afterActivation": "Tras la activación", + "metadata": "Metadatos", + "creatingPayment": "Creando el pago recurrente.", + "paymentCreated": "Pago recurrente creado.", + "pendingActivationDescription": "Está pendiente de activación.", + "unableToCreate": "No se pudo crear el pago recurrente.", + "paymentNotCreated": "El pago recurrente no se creó.", + "createPayment": "Crear pago recurrente", + "loadingAccounts": "Cargando cuentas", + "noSolanaAccounts": "No hay cuentas Solana registradas", + "selectDestinationAccount": "Seleccionar una cuenta de destino", + "searchAccounts": "Buscar cuentas", + "needsCryptoAccount": "Este Counterparty necesita una cuenta de Wallet cripto Solana activa antes de poder crear un pago recurrente.", + "addSolanaAddress": "Agregar dirección Solana", + "noDestinationWallet": "{name} aún no tiene un Wallet de destino registrado.", + "attachDestinationWallet": "Adjunte otro Wallet de destino para este Counterparty.", + "selectFundingWallet": "Seleccionar un Wallet de fondeo", + "searchWallets": "Buscar Wallets", + "asset": "Asset", + "noTokenBalances": "No hay saldos de Tokens admitidos", + "selectAsset": "Seleccionar un Asset", + "selectWalletFirst": "Seleccione primero un Wallet", + "searchAssets": "Buscar Assets", + "unresolvedTokenBalances": "Este Wallet tiene saldos de Tokens, pero sus símbolos aún no se pudieron resolver.", + "nativeSolUnsupported": "Los pagos recurrentes requieren un saldo de Token. El SOL nativo no es compatible.", + "invalidAmount": "Ingrese un monto mayor que cero.", + "intervalHours": "Intervalo en horas", + "invalidInterval": "Ingrese un número entero de horas entre 1 y 8760.", + "invalidFirstPayment": "Elija una fecha y hora futuras.", + "startAfterActivation": "Deje en blanco para iniciar tras la activación.", + "metadataUrl": "URL de metadatos", + "metadataUrlPlaceholder": "https://example.com/metadata.json", + "invalidMetadataUrl": "Ingrese una URL válida de menos de 128 caracteres.", + "optional": "Opcional.", + "pendingRecordDescription": "Esto crea un registro de pago recurrente pendiente. La activación es un paso aparte.", + "pendingActivation": "Pendiente de activación", + "activating": "Activando", + "active": "Activo", + "updating": "Actualizando", + "canceling": "Cancelando", + "resuming": "Reanudando", + "paused": "En pausa", + "canceled": "Cancelado", + "expired": "Expirado", + "pending": "Pendiente", + "processing": "Procesando", + "collected": "Cobrado", + "failed": "Fallido", + "skipped": "Omitido", + "recurringPayments": "Programaciones de pago", + "recurringPaymentCount": "{count} pagos recurrentes", + "oneRecurringPayment": "1 pago recurrente", + "unableToLoad": "No se pudieron cargar los pagos recurrentes", + "noPayments": "Aún no hay pagos recurrentes.", + "paymentsAppearHere": "Los registros de pagos recurrentes creados aparecerán aquí.", + "interval": "Intervalo", + "nextPayment": "Próximo pago", + "counterpartyUnavailable": "Counterparty no disponible", + "payment": "Pago recurrente", + "receivingWallet": "Wallet receptor", + "starts": "Inicia", + "currency": "Moneda", + "paymentReference": "Referencia de pago", + "openMetadata": "Abrir metadatos", + "created": "Creado", + "updated": "Actualizado", + "edit": "Editar", + "copyValue": "Copiar valor", + "copied": "Copiado", + "openSignature": "Abrir firma", + "collectionHistory": "Historial de cobros", + "showingAttempts": "Mostrando {shown} de {total} intentos", + "oneAttempt": "1 intento", + "attempts": "{count} intentos", + "unableToLoadCollectionHistory": "No se pudo cargar el historial de cobros: {error}", + "noCollectionAttempts": "Aún no hay intentos de cobro. El próximo cobro programado se muestra arriba.", + "due": "Vencimiento", + "attempted": "Intentado", + "transfer": "Transferencia", + "explorer": "Explorador", + "everyWeeks": "Cada {count} semanas", + "everyDays": "Cada {count} días", + "paymentActivated": "Pago recurrente activado.", + "collectionSubmitted": "Cobro del pago recurrente enviado.", + "paymentCanceled": "Pago recurrente cancelado.", + "paymentResumed": "Pago recurrente reanudado.", + "activationFailed": "La activación falló", + "collectionFailed": "El cobro falló", + "cancellationFailed": "La cancelación falló", + "resumeFailed": "La reanudación falló", + "retryActivation": "Reintentar activación", + "activate": "Activar", + "retryCollection": "Reintentar cobro", + "collectNow": "Cobrar ahora", + "retryResume": "Reintentar reanudación", + "resume": "Reanudar", + "retryCancellation": "Reintentar cancelación", + "cancel": "Cancelar", + "actions": "Acciones", + "editPayment": "Editar pago", + "stopFutureCollections": "Detener cobros futuros", + "copyError": "Copiar error", + "readyToActivate": "Listo para activar", + "readyToActivateDescription": "Crea la suscripción y programa el primer pago.", + "lifecycleActionUnavailable": "Acción de ciclo de vida no disponible", + "lifecycleActionUnavailableDescription": "Este pago recurrente no puede modificarse desde su estado actual.", + "updatingPayment": "Actualizando el pago recurrente.", + "actionFailed": "La acción del pago recurrente falló.", + "alreadyFundingWallet": "{wallet} ya es el Wallet de fondeo.", + "updatingFundingWallet": "Actualizando el Wallet de fondeo.", + "fundingWalletUpdated": "Wallet de fondeo actualizado.", + "fundingWalletUpdateFailed": "Error al actualizar el Wallet de fondeo", + "paymentUpdateFailed": "Error al actualizar el pago recurrente.", + "selectReceivingWallet": "Seleccione un Wallet receptor.", + "alreadyReceivingWallet": "{wallet} ya es el Wallet receptor.", + "updatingReceivingWallet": "Actualizando el Wallet receptor.", + "receivingWalletUpdated": "Wallet receptor actualizado.", + "receivingWalletUpdateFailed": "Error al actualizar el Wallet receptor", + "alreadySet": "{value} ya está definido.", + "updatingBillingInterval": "Actualizando el intervalo de facturación.", + "billingIntervalUpdated": "Intervalo de facturación actualizado.", + "billingIntervalUpdateFailed": "Error al actualizar el intervalo de facturación", + "selectCurrency": "Seleccione una moneda.", + "alreadyCurrency": "{currency} ya es la moneda.", + "updatingCurrency": "Actualizando la moneda.", + "currencyUpdated": "Moneda actualizada.", + "currencyUpdateFailed": "Error al actualizar la moneda", + "updatingAmount": "Actualizando el monto.", + "amountUpdated": "Monto actualizado.", + "amountUpdateFailed": "Error al actualizar el monto", + "editFundingWallet": "Editar Wallet de fondeo", + "editFundingWalletDescription": "Elija el Wallet usado para fondear este pago recurrente.", + "editReceivingWallet": "Editar Wallet receptor", + "editReceivingWalletDescription": "Elija a dónde envía los fondos este pago recurrente.", + "editAmount": "Editar monto", + "editAmountDescription": "Defina el monto cobrado en cada período de facturación.", + "editBillingInterval": "Editar intervalo de facturación", + "editBillingIntervalDescription": "Elija con qué frecuencia debe cobrar este pago recurrente.", + "editCurrency": "Editar moneda", + "editCurrencyDescription": "Elija un saldo de Token del Wallet de fondeo.", + "cancelPaymentTitle": "¿Cancelar el pago recurrente?", + "cancelPaymentDescription": "Esto detiene los cobros futuros para {counterparty}. Puede reanudar el pago más tarde desde el menú Acciones.", + "keepPayment": "Mantener pago", + "cancelPayment": "Cancelar pago", + "save": "Guardar" + }, + "transactions": { + "searchPlaceholder": "Buscar ID, firma, dirección, referencia o Counterparty (3+ caracteres)", + "clearSearch": "Borrar búsqueda de transacciones", + "filters": "Filtros", + "activeFilters": "{count} activos", + "clearFilters": "Borrar filtros", + "allStatuses": "Todos los estados", + "allDirections": "Todas las direcciones", + "allTypes": "Todos los tipos", + "allWallets": "Todos los Wallets", + "allCounterparties": "Todos los Counterparties", + "allProviders": "Todos los providers", + "assetPlaceholder": "Asset o Mint", + "fromDate": "Fecha desde", + "toDate": "Fecha hasta", + "sort": "Ordenar", + "newest": "Más recientes primero", + "oldest": "Más antiguos primero", + "amountHigh": "Monto: de mayor a menor", + "amountLow": "Monto: de menor a mayor", + "statusAscending": "Estado: de A a Z", + "inbound": "Entrante", + "outbound": "Saliente", + "transfer": "Transferencia", + "confidentialTransfer": "Transferencia confidencial", + "batchTransfer": "Transferencia Batch", + "onramp": "Onramp", + "offramp": "Offramp", + "pending": "Pendiente", + "processing": "Procesando", + "confirmed": "Confirmada", + "finalized": "Finalizada", + "failed": "Fallida", + "awaitingPayment": "Esperando el pago", + "settling": "Liquidando", + "completed": "Completada", + "canceled": "Cancelada", + "expired": "Expirada", + "transaction": "Transacción", + "status": "Estado", + "amount": "Monto", + "direction": "Dirección", + "counterparty": "Counterparty", + "counterpartyId": "ID de Counterparty", + "wallet": "Wallet", + "provider": "Provider", + "created": "Creada", + "range": "{start}–{end} de {total}", + "noMatches": "Ninguna transacción coincide con estos filtros.", + "emptyProject": "Aún no hay transacciones.", + "loadError": "No se pudieron cargar las transacciones.", + "retry": "Reintentar", + "viewDetails": "Ver transacción {id}", + "details": "Detalles de la transacción", + "loadingDetails": "Cargando detalles de la transacción", + "detailLoadError": "No se pudieron cargar los detalles de la transacción.", + "transactionId": "ID de transacción", + "type": "Tipo", + "source": "Origen", + "destination": "Destino", + "signature": "Firma", + "providerReference": "Referencia del provider", + "memo": "Memo", + "updated": "Actualizada", + "viewOnExplorer": "Ver en Solana Explorer", + "unavailable": "No disponible", + "loadingOptions": "Cargando opciones…", + "includeObserved": "Incluir depósitos onchain", + "filterType": "Tipo", + "filterDirection": "Dirección", + "filterWallet": "Wallet", + "filterCounterparty": "Counterparty", + "filterProvider": "Provider", + "filterAsset": "Asset" + }, + "requests": { + "loadFailed": "No se pudieron cargar las solicitudes de pago", + "awaitingPayment": "Esperando el pago", + "paid": "Pagado", + "canceled": "Cancelado", + "expired": "Expirado", + "paymentLinkCreated": "Enlace de pago creado", + "createPaymentRequest": "Crear solicitud de pago", + "createPaymentLink": "Crear enlace de pago", + "createPaymentLinkDescription": "Solicite un pago fijo a uno de sus Wallets.", + "amount": "Monto", + "token": "Token", + "selectToken": "Seleccionar Token", + "destinationWallet": "Wallet de destino", + "selectWallet": "Seleccionar Wallet", + "fromCounterparty": "De (Counterparty)", + "anyoneWithLink": "Cualquiera con el enlace", + "loadingCryptoAccount": "Cargando cuenta cripto…", + "paysFrom": "Paga desde", + "noCryptoAccount": "No hay cuenta cripto registrada.", + "add": "Agregar", + "linkExpires": "El enlace expira", + "noExpiry": "Sin expiración", + "oneHour": "1 hora", + "twentyFourHours": "24 horas", + "sevenDays": "7 días", + "thirtyDays": "30 días", + "cancel": "Cancelar", + "creating": "Creando…", + "createLink": "Crear enlace", + "paymentRequests": "Solicitudes de pago", + "paymentRequestsDescription": "Enlaces compartibles que solicitan un pago fijo.", + "create": "Crear", + "noPaymentRequests": "Aún no hay solicitudes de pago", + "noPaymentRequestsDescription": "Cree un enlace de pago para solicitar un pago fijo.", + "from": "De", + "to": "Para", + "paymentRequestDetails": "Detalles de la solicitud de pago", + "paymentRequest": "Solicitud de pago", + "amountRequested": "Monto solicitado", + "paymentLinkCopied": "Enlace de pago copiado", + "copy": "Copiar", + "reference": "Referencia", + "expires": "Expira", + "destinationWalletId": "ID de Wallet de destino", + "splMintAddress": "Dirección de Mint SPL", + "listRequests": "Listar solicitudes de pago", + "createRequest": "Crear solicitud de pago", + "playgroundProductName": "Solicitudes de pago" + } + } +} diff --git a/apps/sdp-web/messages/es/dashboard-policies.json b/apps/sdp-web/messages/es/dashboard-policies.json new file mode 100644 index 000000000..18795a67d --- /dev/null +++ b/apps/sdp-web/messages/es/dashboard-policies.json @@ -0,0 +1,49 @@ +{ + "DashboardPolicies": { + "all": "Todos", + "wallets": "Wallets", + "apiKeys": "Claves API", + "searchPlaceholder": "Buscar Wallets o claves API", + "clearSearch": "Borrar búsqueda", + "allStatuses": "Todos los estados", + "defaultAllow": "Permitir por defecto", + "draft": "Borrador", + "active": "Activo", + "disabled": "Desactivado", + "configureControls": "Configurar controles", + "walletControls": "Controles de Wallet", + "apiKeyControls": "Controles de claves API", + "target": "Objetivo", + "status": "Estado", + "defaultAction": "Acción por defecto", + "rules": "Reglas", + "bindings": "Vinculaciones", + "lastUpdated": "Última actualización", + "actions": "Acciones", + "wallet": "Wallet", + "apiKey": "Clave API", + "allow": "Permitir", + "deny": "Denegar", + "approvalRequired": "Aprobación requerida", + "review": "Revisar", + "noRestrictions": "Sin restricciones", + "ruleCount": "{count} reglas", + "singleRule": "1 regla", + "allWallets": "Todos los Wallets", + "selectedWalletCount": "{count} Wallets seleccionados", + "singleSelectedWallet": "1 Wallet seleccionado", + "configureWalletControls": "Configurar controles", + "viewAudit": "Ver auditoría", + "viewRevisions": "Ver revisiones", + "configureScope": "Configurar alcance", + "viewBindings": "Ver vinculaciones", + "noMatches": "Ningún control coincide con estos filtros.", + "clearFilters": "Borrar filtros", + "emptyProject": "No hay controles de Wallet ni de clave API configurados.", + "emptyProjectWallets": "No hay controles de Wallet configurados.", + "emptyProjectApiKeys": "No hay controles de clave API configurados.", + "loadError": "No se pudieron cargar los controles de política.", + "retry": "Reintentar", + "range": "{start}–{end} de {total}" + } +} diff --git a/apps/sdp-web/messages/es/shared.json b/apps/sdp-web/messages/es/shared.json new file mode 100644 index 000000000..6e23a0a2b --- /dev/null +++ b/apps/sdp-web/messages/es/shared.json @@ -0,0 +1,262 @@ +{ + "tabs": { + "overview": "Resumen", + "apiPlayground": "API Playground" + }, + "authTerms": { + "prefix": "Al usar la app, acepta los", + "link": "Términos de servicio de Solana Foundation" + }, + "homeSignedIn": { + "loading": "Cargando...", + "selectOrganization": "Seleccione su organización", + "selectOrganizationDescription": "Elija o cree una organización para continuar.", + "loadingDashboard": "Cargando su dashboard..." + }, + "allowlist": { + "comingSoon": "Próximamente", + "description": "La gestión de Allowlist estará disponible en una próxima versión." + }, + "members": { + "title": "Miembros", + "description": "Personas con acceso a esta organización.", + "invite": "Invitar miembro", + "inviteEmail": "Correo electrónico", + "inviteEmailPlaceholder": "colega@empresa.com", + "inviteRole": "Rol", + "roleAdmin": "Administrador", + "roleMember": "Miembro", + "inviteSubmit": "Enviar invitación", + "inviteSending": "Enviando…", + "inviteSent": "Invitación enviada a {email}.", + "inviteFailed": "No se pudo enviar la invitación: {error}", + "emailRequired": "Ingrese un correo electrónico.", + "columnMember": "Miembro", + "columnRole": "Rol", + "columnJoined": "Se unió", + "empty": "Aún no hay miembros.", + "loadFailed": "No se pudieron cargar los miembros: {error}", + "unnamed": "Sin nombre", + "unnamedMember": "Miembro sin nombre", + "emailUnavailable": "Email no disponible", + "statusPending": "Pendiente", + "invitedOn": "Invitado el {date}", + "columnActions": "Acciones", + "copyInviteLink": "Copiar enlace de invitación", + "inviteLinkCopied": "Enlace de invitación copiado.", + "inviteLinkCopyFailed": "No se pudo copiar el enlace de invitación.", + "revokeInvite": "Revocar invitación", + "revoking": "Revocando…", + "revoked": "Invitación a {email} revocada.", + "revokeFailed": "No se pudo revocar la invitación: {error}", + "invitationActions": "Acciones para {email}", + "memberActions": "Acciones para {member}", + "removeMember": "Quitar miembro", + "removeConfirm": "{member} perderá de inmediato el acceso a esta organización. Esta acción es irreversible.", + "removing": "Quitando…", + "removed": "{member} fue quitado.", + "removeFailed": "No se pudo quitar al miembro: {error}", + "cannotRemoveSelf": "No puede quitarse a sí mismo", + "cannotRemoveLastAdmin": "El último administrador no puede ser quitado", + "cancel": "Cancelar" + }, + "SharedComponents": { + "copied": "Copiado", + "copy": "Copiar", + "apiDebugLogs": "Logs de debug API", + "pause": "Pausar", + "resume": "Reanudar", + "requestSummary": "Método, duración, resumen para copiar", + "query": "Query", + "requestBody": "Cuerpo de la solicitud", + "response": "Respuesta", + "createApiKey": "Crear clave API", + "selectApiKey": "Seleccionar clave API", + "selectOrganization": "Seleccionar organización", + "organizations": "Organizaciones", + "projects": "Proyectos", + "current": "Actual", + "noOrganizations": "Aún no hay organizaciones.", + "noProjects": "Aún no hay proyectos.", + "locked": "Bloqueado", + "sandboxOnly": "Por ahora solo se admite el modo Sandbox.", + "mainnetSoon": "Compatibilidad con Mainnet próximamente.", + "createOrganization": "Crear organización", + "manageOrganization": "Gestionar organización", + "clear": "Borrar", + "disable": "Desactivar", + "collapse": "Contraer", + "close": "Cerrar", + "closeModal": "Cerrar ventana", + "noRequests": "Aún no se han capturado solicitudes.", + "noPayload": "No se capturó query, cuerpo ni respuesta.", + "selectApiEndpoint": "Seleccionar endpoint API", + "request": "Solicitud", + "output": "Salida", + "pathParameters": "Parámetros de ruta", + "noPathParameters": "Este endpoint no requiere parámetros de ruta.", + "selectValue": "Seleccionar valor", + "noRequestBody": "Este endpoint no requiere un cuerpo JSON.", + "status": "Estado:", + "apiKeyRequired": "Cree primero una clave API para habilitar solicitudes en vivo.", + "runRequest": "Ejecutar", + "reset": "Restablecer", + "retry": "Reintentar", + "copyCode": "Copiar código", + "code": "Código", + "example": "Ejemplo", + "pending": "Pendiente", + "durationMilliseconds": "{duration}ms", + "networkDebugSummary": "{pending} pendientes, {completed} completadas", + "aiInstructions": "Instrucciones de IA", + "pageOf": "Página {page} de {pageCount}", + "previousPage": "Página anterior", + "nextPage": "Página siguiente", + "rowsPerPage": "Filas por página", + "loading": "Cargando…", + "noOptionsAvailable": "No hay opciones disponibles.", + "noSearchMatches": "Sin resultados para su búsqueda.", + "required": "(requerido)", + "selectAnOption": "Seleccionar una opción", + "search": "Buscar…", + "fillBeforeSending": "completar antes de enviar", + "noValue": "- ninguno", + "aiInstructionIntro": "Use el endpoint API de {productName} {method} {path}.", + "aiPathParameters": "Parámetros de ruta:", + "aiRequestBody": "Cuerpo de la solicitud:", + "aiInstructionOutro": "Devuelva el cuerpo de respuesta como JSON formateado e indique cualquier error de validación o de autenticación.", + "runRequestToInspectOutput": "Ejecute la solicitud para inspeccionar la salida API en vivo de este endpoint.", + "requestFailed": "Solicitud fallida", + "ready": "Listo", + "completeRequiredFields": "Complete los campos requeridos: {fields}", + "invalidJsonField": "{field} debe contener JSON válido.", + "invalidApiKeyFormat": "Formato de clave API no válido. Use una clave sin procesar como sk_test_... o sk_live_... con un sufijo válido.", + "playgroundExecutionFailed": "Falló la ejecución del Playground.", + "requestExecutionFailed": "Falló la ejecución de la solicitud." + }, + "dashboardShell": { + "workspace": "Espacio de trabajo", + "openNavigation": "Abrir navegación", + "primaryNavigation": "Principal", + "more": "Más", + "moreDescription": "Ir al resto del dashboard.", + "closeNavigation": "Cerrar navegación", + "sandbox": "Sandbox", + "loadingDashboard": "Cargando dashboard...", + "reloadDashboard": "Recargar dashboard", + "signInToContinue": "Inicie sesión para continuar", + "signInDescription": "Acceda a su espacio de organización y a los controles de Wallet.", + "signIn": "Iniciar sesión", + "selectOrganization": "Seleccionar una organización", + "selectOrganizationDescription": "Necesita una organización para continuar.", + "counterparty": "Counterparty", + "transactions": "Transacciones", + "pay": "Pagar", + "deposit": "Depositar", + "requests": "Solicitudes", + "recurring": "Recurrentes", + "privateChannels": "Private Channels", + "create": "Crear", + "manage": "Gestionar", + "home": "Inicio", + "wallets": "Wallets", + "issuance": "Emisión", + "payments": "Pagos", + "apiKeys": "Claves API", + "policies": "Políticas", + "newApiKey": "Nueva clave API", + "editApiKey": "Editar clave API", + "backToApiKeys": "Volver a claves API", + "approvals": "Aprobaciones", + "pendingApprovals": "{count} aprobaciones pendientes", + "apiDocs": "Docs API", + "settings": "Configuración", + "language": "Idioma", + "colorTheme": "Tema de color", + "chooseLanguage": "Elegir idioma", + "moreLanguagesHint": "Aquí aparecerán más idiomas a medida que estén disponibles.", + "collapseSidebar": "Contraer barra lateral", + "expandSidebar": "Expandir barra lateral", + "expandPaymentsMenu": "Expandir menú Pagos", + "collapsePaymentsMenu": "Contraer menú Pagos", + "closeNavigationOverlay": "Cerrar navegación", + "newCounterparty": "Nuevo Counterparty", + "manageCounterparty": "Gestionar Counterparty", + "backToCounterparty": "Volver a Counterparty", + "backToWallets": "Volver a Wallets", + "backToWalletDetail": "Volver al detalle del Wallet", + "backToWallet": "Volver al Wallet", + "walletControls": "Controles de Wallet", + "createWallet": "Crear Wallet", + "activateProvider": "Activar proveedor", + "newAsset": "Nuevo Asset", + "assetManagement": "Gestión del Asset", + "backToOverview": "Volver al resumen", + "recurringPayments": "Pagos recurrentes", + "recurringPayment": "Pago recurrente", + "backToRecurringPayments": "Volver a pagos recurrentes", + "receive": "Recibir", + "send": "Enviar", + "backToPayments": "Volver a pagos", + "backToApprovals": "Volver a aprobaciones", + "members": "Miembros", + "allowlist": "Allowlist" + }, + "validation": { + "allowlistValueRequired": "El valor de Allowlist es requerido", + "allowlistEntryIdRequired": "El ID de entrada de Allowlist es requerido", + "emailRequired": "El correo electrónico es requerido" + }, + "pay": { + "productName": "Solana Developer Platform", + "paymentReceived": "Pago recibido", + "paymentReceivedDescription": "Esta solicitud ya fue pagada. No hay nada más que hacer.", + "linkExpired": "Enlace expirado", + "linkExpiredDescription": "Este enlace de pago ya no es válido. Pida uno nuevo al remitente.", + "requestCanceled": "Solicitud cancelada", + "requestCanceledDescription": "Esta solicitud de pago fue cancelada por el remitente.", + "paymentRequest": "Solicitud de pago", + "scanWallet": "Escanee con un Wallet de Solana para pagar", + "openWallet": "Abrir en el Wallet", + "to": "Para", + "token": "Token", + "expires": "Expira", + "noExpiry": "Sin expiración", + "securedBySolanaPay": "Protegido por Solana Pay", + "qrCode": "Código QR de Solana Pay" + }, + "homeWorkspace": { + "unavailable": "No disponible", + "createFirstWalletBalances": "Cree su primer Wallet para empezar a seguir los saldos.", + "noTrackedBalances": "Aún no hay saldos registrados.", + "activityUnavailable": "La actividad no está disponible por el momento.", + "paymentActivityAfterWallet": "La actividad de pagos aparecerá después de crear un Wallet.", + "noPaymentVolume": "Aún no hay volumen de pagos registrado.", + "loadingPaymentActivity": "Cargando actividad de pagos...", + "createFirstWalletActivity": "Cree su primer Wallet para seguir saldos y actividad.", + "noRecentActivity": "Aún no hay actividad reciente.", + "loadingRecentActivity": "Cargando actividad reciente...", + "createWallet": "Crear Wallet", + "totalBalance": "Saldo total", + "todaysVolume": "Volumen de hoy", + "recentTransactions": "Transacciones recientes", + "activityDescription": "Última actividad de Wallets y emisión en la organización.", + "seeAllPayments": "Ver todos los pagos", + "time": "Hora", + "activity": "Actividad", + "type": "Tipo", + "token": "Token", + "amount": "Monto", + "address": "Dirección", + "send": "Enviar", + "receive": "Recibir", + "transfer": "Transferencia", + "untitledToken": "Token sin título", + "unableToLoadIssuanceTokens": "No se pudieron cargar los Tokens de emisión", + "someIssuanceActivityUnavailable": "Parte de la actividad de emisión no se pudo cargar.", + "paymentsActivityUnavailable": "La actividad de pagos no está disponible por el momento.", + "issuanceActivityUnavailable": "La actividad de emisión no está disponible por el momento.", + "failedToLoadActivity": "Error al cargar la actividad del dashboard", + "balanceDataUnavailable": "Los datos de saldo no están disponibles por el momento." + } +} diff --git a/apps/sdp-web/src/i18n/README.md b/apps/sdp-web/src/i18n/README.md index 6345b1f07..680b9422b 100644 --- a/apps/sdp-web/src/i18n/README.md +++ b/apps/sdp-web/src/i18n/README.md @@ -2,11 +2,11 @@ The dashboard keeps its supported BCP-47 locales in `config.ts` and its English source catalog in `../../messages/en.json`. -Supported locales today: `en`, `fr`. French catalogs live under `../../messages/fr/`. The release workflow restores 100% key parity with English before release; at runtime, a temporarily missing localized key falls back to its English source value. +Supported locales today: `en`, `es`, `fr`. Localized catalogs live under `../../messages//`. The release workflow restores 100% key parity with English before release; at runtime, a temporarily missing localized key falls back to its English source value. -Product PRs add or change copy only in the English source catalogs. Do not update French in the same PR: the release workflow asks Eve to fill missing locale keys on the repository-owned `codex/release-main` branch. The catalog policy verifies both that branch name and its source repository before allowing mixed catalog changes. A dedicated translation-quality PR may change localized catalogs as long as it does not also introduce English source changes. +Product PRs add or change copy only in the English source catalogs. Do not update localized catalogs in the same PR: the release workflow asks Eve to fill missing locale keys on the repository-owned `codex/release-main` branch. The catalog policy verifies both that branch name and its source repository before allowing mixed catalog changes. A dedicated translation-quality PR may change localized catalogs as long as it does not also introduce English source changes. -Eve receives the locale rules in `.github/translation-guidance.json` plus the namespace and nearby approved translations for every new string. That guidance is the terminology source of truth. In French, established product terms such as `Token` and `Wallet` stay in English; literal `jeton` and `portefeuille` variants are rejected by catalog validation. +Eve receives the locale rules in `.github/translation-guidance.json` plus the namespace and nearby approved translations for every new string. That guidance is the terminology source of truth. In French and Spanish, established product terms such as `Token` and `Wallet` stay in English; literal `jeton` and `portefeuille` variants are rejected by catalog validation. Use `await getTranslations()` in Server Components and `useTranslations()` in Client Components. Both accept only keys that exist in the English catalog. For dates, numbers, lists, and relative time, construct the native `Intl` formatter with the resolved locale rather than pinning it to `en-US`. diff --git a/apps/sdp-web/src/i18n/config.ts b/apps/sdp-web/src/i18n/config.ts index 51ebd22df..b4742f273 100644 --- a/apps/sdp-web/src/i18n/config.ts +++ b/apps/sdp-web/src/i18n/config.ts @@ -1,4 +1,4 @@ -export const supportedLocales = ["en", "fr"] as const; +export const supportedLocales = ["en", "es", "fr"] as const; export type AppLocale = (typeof supportedLocales)[number]; diff --git a/apps/sdp-web/src/i18n/messages.ts b/apps/sdp-web/src/i18n/messages.ts index 2a4b2ee0c..38bd8ece9 100644 --- a/apps/sdp-web/src/i18n/messages.ts +++ b/apps/sdp-web/src/i18n/messages.ts @@ -7,6 +7,13 @@ import dashboardPolicies from "../../messages/en/dashboard-policies.json"; import dashboardPrivateChannels from "../../messages/en/dashboard-private-channels.json"; import shared from "../../messages/en/shared.json"; import en from "../../messages/en.json"; +import esDashboardApprovals from "../../messages/es/dashboard-approvals.json"; +import esDashboardCustody from "../../messages/es/dashboard-custody.json"; +import esDashboardIssuance from "../../messages/es/dashboard-issuance.json"; +import esDashboardPayments from "../../messages/es/dashboard-payments.json"; +import esDashboardPolicies from "../../messages/es/dashboard-policies.json"; +import esShared from "../../messages/es/shared.json"; +import es from "../../messages/es.json"; import frDashboardApprovals from "../../messages/fr/dashboard-approvals.json"; import frDashboardCustody from "../../messages/fr/dashboard-custody.json"; import frDashboardIssuance from "../../messages/fr/dashboard-issuance.json"; @@ -59,6 +66,18 @@ function mergeLocalizedValue(fallback: unknown, localized: unknown): unknown { ); } +const esCatalog = { + ...es, + ...esDashboardApprovals, + ...esDashboardCustody, + ...esDashboardIssuance, + ...esDashboardPayments, + ...esDashboardPolicies, + Shared: esShared, +} satisfies LocalizedMessages; + +const esMessages = mergeLocalizedMessages(enMessages, esCatalog); + const frCatalog = { ...fr, ...frDashboardApprovals, @@ -84,6 +103,7 @@ export type TranslationValues = Record; const messagesByLocale: Record = { en: enMessages, + es: esMessages, fr: frMessages, }; diff --git a/apps/sdp-web/src/i18n/messages.unit.test.ts b/apps/sdp-web/src/i18n/messages.unit.test.ts index 986125dbb..363c1d1f2 100644 --- a/apps/sdp-web/src/i18n/messages.unit.test.ts +++ b/apps/sdp-web/src/i18n/messages.unit.test.ts @@ -20,12 +20,14 @@ function flattenKeys(value: unknown, prefix = ""): string[] { describe("i18n messages", () => { it("only accepts configured locales", () => { expect(isAppLocale("en")).toBe(true); + expect(isAppLocale("es")).toBe(true); expect(isAppLocale("fr")).toBe(true); expect(isAppLocale("de")).toBe(false); }); it("resolves typed catalog entries", () => { expect(translate(getMessages("en"), "Home.trySdp")).toBe("Try SDP"); + expect(translate(getMessages("es"), "Home.contactUs")).toBe("Contáctenos"); expect(translate(getMessages("fr"), "Home.contactUs")).toBe("Nous contacter"); });