Skip to content
Merged
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
184 changes: 184 additions & 0 deletions .github/translation-guidance.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,190 @@
]
},
"locales": {
"es": {
"context": {
"localeName": "español (Latinoamérica)",
"audience": "Spanish-speaking Web3 developers and institutional finance operators across Latin America",
"conventions": [
"Latin American Web3 practitioners commonly retain established English product terms.",
"Neutral Latin American Spanish; vosotros is never used.",
"Standard Latin American financial vocabulary is preferred when it is familiar to practitioners, such as activo, contraparte and custodia.",
"Wallet is treated as feminine (la Wallet) and Token as masculine (el Token)."
]
},
"instructions": [
"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.",
"Match the English form per string for enable and disable: infinitive action (habilitar, deshabilitar) versus participle state (habilitado, deshabilitado)."
],
"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": "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": "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": "expires / manage / remove / clear",
"preferred": "vencer y vencimiento / administrar / quitar / borrar",
"note": "Quitar detaches without destroying; eliminar is reserved for delete."
},
{
"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)."
}
],
"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": {
"context": {
"localeName": "français (France)",
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
Loading