Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
179 changes: 179 additions & 0 deletions .github/translation-guidance.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,185 @@
]
},
"locales": {
"es": {
"localeName": "español (Latinoamérica)",
"voice": [
"Use natural professional Latin American Spanish and address the user with tú; use ustedes for plural and never vosotros.",
"Use inverted opening punctuation (¿ ¡) in questions and exclamations.",
"Keep established Web3 terms in English when Spanish-speaking practitioners normally use the English term.",
"Use standard Latin American financial vocabulary, such as activo and contraparte."
],
"terminology": [
{
"source": "token / tokens",
"preferred": "Token / Tokens",
"avoid": "ficha / fichas",
"note": "Token is the established Web3 product noun. Use Spanish grammar around it."
},
{
"source": "wallet / wallets",
"preferred": "Wallet / Wallets",
"avoid": "billetera / monedero / cartera",
"note": "Wallet is the established product noun in this dashboard."
},
{
"source": "mint / burn",
"preferred": "mint / burn",
"avoid": "acuñar / acuñación",
"note": "Keep protocol action names recognizable; write natural Spanish around them, for example hacer mint de Tokens."
},
{
"source": "allowlist / blocklist",
"preferred": "allowlist / blocklist",
"avoid": "lista blanca / lista negra / lista de permitidos / lista de bloqueo",
"note": "Keep the neutral technical terms used by the product."
},
{
"source": "on-chain / off-chain",
"preferred": "on-chain / off-chain"
},
{
"source": "stablecoin, API, RPC, webhook, blockchain, staking, airdrop",
"preferred": "Keep these established technical terms unchanged."
},
{
"source": "endpoint / API Playground",
"preferred": "endpoint / API Playground",
"avoid": "punto de conexión / punto final / zona de pruebas",
"note": "Use the established developer-facing product terms."
},
{
"source": "dashboard",
"preferred": "Dashboard",
"avoid": "panel / panel de control",
"note": "Dashboard is the product surface name."
},
{
"source": "asset / counterparty",
"preferred": "activo / contraparte",
"note": "These have natural, standard Latin American financial equivalents."
},
{
"source": "transfer / provider / quote",
"preferred": "transferencia / proveedor / cotización",
"note": "Use the standard Spanish product and financial terms, including in API error copy."
},
{
"source": "draft / deploy",
"preferred": "borrador / desplegar or despliegue",
"note": "Use the verb or noun that fits the sentence; do not insert the English word into Spanish grammar."
},
{
"source": "custody",
"preferred": "Custody for the product category; custodia in explanatory prose",
"note": "Choose from context instead of forcing one translation everywhere."
},
{
"source": "validator / account / transaction / signature / keypair / epoch",
"preferred": "validador / cuenta / transacción / firma / par de claves / época",
"note": "Follow the solanabr/solana-glossary conventions for protocol vocabulary with standard Spanish equivalents."
},
{
"source": "decimals",
"preferred": "decimales",
"note": "Generic noun in this product; always translate."
},
{
"source": "custodian",
"preferred": "custodio",
"note": "Standard regulated-finance vocabulary."
},
{
"source": "Mint Authority / Freeze Authority / Update Authority / Metadata Authority / Permanent Delegate",
"preferred": "Keep the whole SPL authority family in English as noun labels; verbs describing the action are written in Spanish."
},
{
"source": "compliance / payout / funding",
"preferred": "cumplimiento / pago saliente / fondeo",
"note": "Never retiro for payout (retiro is reserved for withdraw); never financiamiento for funding."
},
{
"source": "fee",
"preferred": "tarifa for network and transaction fees; comisión for provider and management fees",
"note": "Keep the split consistent."
},
{
"source": "ramp / on-ramp / off-ramp / rails / rent / block explorer",
"preferred": "ramp / on-ramp / off-ramp / rails / rent / explorador",
"note": "Ramp family, rails and Solana rent stay in English; block explorer translates to explorador (Solana Explorer stays as the brand name)."
},
{
"source": "Token-2022 extension names (Transfer Fee, Interest Bearing, Scaled UI Amount, Transfer Hook, Non-transferable, Default Account State)",
"preferred": "Keep extension names in English as labels; translate their descriptions and helper text."
},
{
"source": "enable / disable / enabled / disabled",
"preferred": "habilitar / deshabilitar / habilitado / deshabilitado",
"note": "Match the English form per string: infinitive action versus participle state. Never mix in the desactivar family for these senses."
},
{
"source": "expires / manage / remove / clear",
"preferred": "vencer y vencimiento / administrar / quitar / borrar",
"note": "Quitar detaches without destroying; eliminar is reserved for delete."
}
],
"forbiddenTerms": [
{
"label": "billetera / monedero",
"pattern": "\\b(?:billeteras?|monederos?)\\b",
"flags": "iu",
"preferred": "Wallet / Wallets"
},
{
"label": "cartera / carteras",
"pattern": "\\bcarteras?\\b",
"flags": "iu",
"preferred": "Wallet / Wallets"
},
{
"label": "ficha / fichas",
"pattern": "\\bfichas?\\b",
"flags": "iu",
"preferred": "Token / Tokens"
},
{
"label": "punto de conexión / punto final",
"pattern": "\\bpuntos? (?:de conexión|finales?)\\b",
"flags": "iu",
"preferred": "endpoint / endpoints"
},
{
"label": "zona de pruebas",
"pattern": "\\bzona de pruebas\\b",
"flags": "iu",
"preferred": "API Playground"
},
{
"label": "lista blanca / lista negra",
"pattern": "\\blistas? (?:blancas?|negras?)\\b",
"flags": "iu",
"preferred": "allowlist / blocklist"
},
{
"label": "lista de permitidos / lista de bloqueo",
"pattern": "\\blistas? de (?:permitidos|bloqueados|bloqueos?)\\b",
"flags": "iu",
"preferred": "allowlist / blocklist"
},
{
"label": "allow list",
"pattern": "\\ballow list\\b",
"flags": "iu",
"preferred": "allowlist"
},
{
"label": "acuñar / acuñación",
"pattern": "\\bacuñ(?:ar|ación)\\b",
"flags": "iu",
"preferred": "mint"
}
]
},
"fr": {
"localeName": "français (France)",
"voice": [
Expand Down
14 changes: 13 additions & 1 deletion apps/sdp-web/messages/en/dashboard-issuance.json
Original file line number Diff line number Diff line change
Expand Up @@ -476,10 +476,22 @@
"tokenIdCopied": "Token ID copied",
"loadingAuthorityWalletAccess": "Loading authority wallet access…",
"loadingComplianceControls": "Loading compliance controls…",
"deploySignerHint": "Pay the transaction and account fees from the signer wallet, or with Kora sponsorship.",
"deploySignerHint": "Transaction and account fees are paid from the signer wallet.",
"deployWithWallet": "Deploy with Wallet",
"koraUnavailable": "Kora sponsorship is unavailable right now.",
"deployWithKora": "Deploy with Kora",
"tokenizationEngineTitle": "Tokenization engine",
"tokenizationEngineHint": "Choose which engine deploys and manages this token onchain.",
"engineVulcanForgeName": "Vulcan Forge",
"engineVulcanForgeDescription": "Deploy onchain and tokenize on Vulcan Forge with built-in registry and indexing.",
"engineMosaicName": "SDP with Mosaic",
"engineMosaicDescription": "Deploy with SDP's built-in Mosaic engine on Token-2022.",
"comingSoon": "Coming soon",
"stepProgress": "Step {current} of {total}",
"vulcanForgeOnboardTitle": "Onboard token to Vulcan Forge",
"vulcanForgeOnboardDescription": "AlphaLedger keeps a registered offline twin for indexing and reporting.",
"engineStepLabel": "Engine",
"deployStepLabel": "Deploy",
"destinationNotAllowlisted": "Destination is not on this token's allowlist.",
"destinationDenylisted": "Destination is on this token's denylist.",
"actionPaused": "Token is paused. Unpause it to {action}.",
Expand Down
33 changes: 33 additions & 0 deletions apps/sdp-web/messages/es.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"Metadata": {
"title": "Solana Developer Platform",
"description": "Dashboard SDP"
},
"Home": {
"solanaLogo": "Solana",
"docs": "Docs",
"dashboard": "Dashboard",
"title": "Construye cualquier producto financiero sin preocuparte por la infraestructura",
"description": "Ya sea que estés emitiendo una stablecoin, orquestando pagos transfronterizos o tokenizando activos del mundo real, SDP ofrece las APIs y la infraestructura más confiables para lograrlo.",
"trySdp": "Prueba SDP",
"contactUs": "Contáctanos",
"joinWaitlist": "Únete a la lista de espera"
},
"NotFound": {
"solanaLogo": "Solana",
"title": "Página no encontrada",
"description": "La página que buscas no existe o es posible que se haya movido.",
"backToDashboard": "Volver al dashboard",
"goHome": "Ir al inicio"
},
"Feedback": {
"label": "Comentarios"
},
"Error": {
"tryAgain": "Reintentar",
"reportIssue": "Reportar este problema",
"viewTitle": "No se pudo cargar esta vista",
"viewDescription": "Ocurrió un error al cargar esta página. El resto del dashboard sigue funcionando, así que puedes reintentarlo o continuar.",
"reference": "Referencia {digest}"
}
}
113 changes: 113 additions & 0 deletions apps/sdp-web/messages/es/dashboard-approvals.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
{
"DashboardApprovals": {
"pendingCount": "Pendientes: {count}",
"pendingTab": "Pendientes",
"historyTab": "Historial",
"walletFilter": "Wallet",
"allWallets": "Todas las Wallets",
"statusFilter": "Estado",
"allStatuses": "Todos los estados",
"operationFilter": "Operación",
"allOperations": "Todas las operaciones",
"apiKeyFilter": "Clave de API",
"allApiKeys": "Todas las claves de API",
"fromFilter": "Desde",
"toFilter": "Hasta",
"dateRangeLabel": "Fecha",
"dateAllTime": "Todo el historial",
"dateLast7": "7 días",
"dateLast30": "30 días",
"dateLast90": "90 días",
"dateCustom": "Personalizado",
"statusColumn": "Estado",
"walletColumn": "Wallet",
"operationColumn": "Operación",
"amountAssetColumn": "Monto / activo",
"destinationColumn": "Destino",
"requestedByColumn": "Solicitado por",
"policyReasonColumn": "Motivo de política",
"submittedColumn": "Enviado",
"openRequest": "Abrir solicitud de aprobación",
"emptyPending": "No hay solicitudes en espera de aprobación",
"emptyPendingDescription": "Las nuevas operaciones retenidas por política aparecerán aquí en cuanto se envíen.",
"emptyHistory": "Aún no hay historial de aprobaciones",
"emptyHistoryDescription": "Las solicitudes aprobadas, rechazadas, canceladas, vencidas y fallidas aparecerán aquí.",
"emptyFiltered": "Ninguna solicitud coincide con estos filtros",
"emptyFilteredDescription": "Borra 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 obtener la lista de solicitudes. Intenta cargarla de nuevo.",
"reload": "Recargar",
"autoRefresh": "Actualizando cada 5 segundos",
"refreshFailed": "Las solicitudes de aprobación no se pudieron actualizar. Se muestran los últimos resultados cargados.",
"viewOnly": "Puedes revisar las solicitudes de aprobación, pero tu rol no puede decidir sobre ellas.",
"noAccess": "Las solicitudes de aprobación no están disponibles para tu rol.",
"noAccessDescription": "Solicita a un administrador de la organización acceso de lectura a las Wallets.",
"backToApprovals": "Volver a Aprobaciones",
"reviewTitle": "Revisar {operation}",
"reviewDescription": "Confirma 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 no se puede deshacer.",
"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 solicitud...",
"approvedToast": "Solicitud aprobada",
"rejectedToast": "Solicitud rechazada",
"canceledToast": "Solicitud cancelada",
"alreadyDecided": "Esta solicitud ya fue decidida. Ahora se muestra el estado más reciente.",
"forbiddenDecision": "Tu rol no tiene permiso para decidir sobre solicitudes de aprobación.",
"decisionFailed": "No se pudo actualizar la solicitud. Intenta de nuevo.",
"requestSection": "Solicitud",
"policyDecisionSection": "Decisión de política",
"operationDetailsSection": "Detalles de la operación",
"matchedControlsSection": "Controles coincidentes",
"timelineSection": "Línea de tiempo",
"submittedBy": "Enviado por",
"submittedAt": "Enviado el",
"expiresAt": "Vence el",
"policyDecision": "Decisión",
"policyReason": "Motivo",
"reasonCode": "Código de motivo",
"operationFamily": "Familia de operaciones",
"operationType": "Tipo de operación",
"amount": "Monto",
"asset": "Activo",
"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 de la Wallet",
"requester": "Solicitante",
"apiKey": "Clave de API",
"walletRevision": "Revisión de la Wallet",
"apiKeyRevision": "Revisión de la clave de API",
"provider": "Proveedor",
"providerStatus": "Estado del proveedor",
"requestId": "ID de solicitud",
"submitted": "Enviado",
"currentStatus": "Estado actual",
"resolvedBy": "Resuelto por",
"resolvedAt": "Resuelto el",
"notReported": "No reportado",
"directRequest": "Solicitud directa",
"approvalRequiredByPolicy": "Aprobación requerida por política",
"copyRequestId": "Copiar ID de solicitud",
"requestIdCopied": "ID de solicitud copiado",
"loading": "Cargando aprobaciones..."
}
}
Loading