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
157 changes: 157 additions & 0 deletions .github/translation-guidance.json
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,163 @@
"preferred": "allowlist"
}
]
},
"pt": {
"localeName": "português (Brasil)",
"voice": [
"Use natural professional Brazilian Portuguese and address the user with você.",
"Keep established Web3 terms in English when Brazilian practitioners normally use the English term.",
"Use Brazilian financial vocabulary when it is genuinely standard, such as ativo and contraparte."
],
"terminology": [
{
"source": "token / tokens",
"preferred": "Token / Tokens",
"avoid": "ficha / fichas",
"note": "Token is the established Web3 product noun. Use Portuguese grammar around it."
},
{
"source": "wallet / wallets",
"preferred": "Wallet / Wallets",
"avoid": "carteira / carteiras",
"note": "Wallet is the established product noun in this dashboard."
},
{
"source": "mint / burn",
"preferred": "mint / burn",
"avoid": "cunhar / cunhagem",
"note": "Keep protocol action names recognizable; write natural Portuguese around them, for example fazer mint de Tokens."
},
{
"source": "allowlist / blocklist",
"preferred": "allowlist / blocklist",
"avoid": "lista branca / lista negra / lista de permissões / lista de bloqueio",
"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": "ponto de extremidade / área de testes da API",
"note": "Use the established developer-facing product terms."
},
{
"source": "dashboard",
"preferred": "Dashboard",
"avoid": "painel / painel de controle",
"note": "Dashboard is the product surface name."
},
{
"source": "asset / counterparty",
"preferred": "ativo / contraparte",
"note": "These have natural, standard Brazilian financial equivalents."
},
{
"source": "transfer / provider / quote",
"preferred": "transferência / provedor / cotação",
"note": "Use the standard Brazilian product and financial terms, including in API error copy."
},
{
"source": "draft / deploy",
"preferred": "rascunho / deploy",
"note": "Deploy is an established loanword in Brazilian developer Portuguese, for example fazer o deploy; draft has a natural equivalent."
},
{
"source": "custody",
"preferred": "Custody for the product category; custódia in explanatory prose",
"note": "Choose from context instead of forcing one translation everywhere."
},
{
"source": "validator / account / transaction / signature / keypair / epoch",
"preferred": "validador / conta / transação / assinatura / par de chaves / época",
"note": "Follow the solanabr/solana-glossary conventions for protocol vocabulary with standard Portuguese equivalents."
},
{
"source": "decimals",
"preferred": "decimais / casas decimais",
"note": "Generic noun in this product; always translate."
},
{
"source": "custodian",
"preferred": "custodiante",
"note": "Standard CVM/B3 vocabulary for the regulated financial role."
},
{
"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 Portuguese.",
"note": "SDP is grammatically feminine: a SDP, da SDP, pela SDP."
},
{
"source": "block explorer / rent / rails / ramp / on-ramp / off-ramp",
"preferred": "explorer / rent / rails / ramp / on-ramp / off-ramp",
"note": "Established loanwords in Brazilian crypto usage; 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": "ativar / desativar / ativado / desativado",
"note": "Match the English form per string: infinitive action versus participle state. Never mix in the habilitar family."
},
{
"source": "funding account / compliance",
"preferred": "conta de fundos / Compliance",
"note": "Compliance is the established department name in Brazilian finance; keep it in English."
}
],
"forbiddenTerms": [
{
"label": "carteira / carteiras",
"pattern": "\\bcarteiras?\\b",
"flags": "iu",
"preferred": "Wallet / Wallets"
},
{
"label": "ficha / fichas",
"pattern": "\\bfichas?\\b",
"flags": "iu",
"preferred": "Token / Tokens"
},
{
"label": "ponto de extremidade",
"pattern": "\\bpontos? de extremidade\\b",
"flags": "iu",
"preferred": "endpoint / endpoints"
},
{
"label": "lista branca / lista negra",
"pattern": "\\blistas? (?:brancas?|negras?)\\b",
"flags": "iu",
"preferred": "allowlist / blocklist"
},
{
"label": "lista de permissões / lista de bloqueio",
"pattern": "\\blistas? de (?:permiss(?:ão|ões)|bloqueios?)\\b",
"flags": "iu",
"preferred": "allowlist / blocklist"
},
{
"label": "allow list",
"pattern": "\\ballow list\\b",
"flags": "iu",
"preferred": "allowlist"
},
{
"label": "cunhar / cunhagem",
"pattern": "\\bcunh(?:ar|agem)\\b",
"flags": "iu",
"preferred": "mint"
}
]
}
}
}
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/pt.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": "Crie qualquer produto financeiro sem se preocupar com a infraestrutura",
"description": "Seja emitindo uma stablecoin, orquestrando pagamentos transfronteiriços ou tokenizando ativos do mundo real, a SDP oferece as APIs e a infraestrutura mais confiáveis para tornar isso possível.",
"trySdp": "Experimente a SDP",
"contactUs": "Fale conosco",
"joinWaitlist": "Entre na lista de espera"
},
"NotFound": {
"solanaLogo": "Solana",
"title": "Página não encontrada",
"description": "A página que você está procurando não existe ou pode ter sido movida.",
"backToDashboard": "Voltar ao dashboard",
"goHome": "Ir para o início"
},
"Feedback": {
"label": "Feedback"
},
"Error": {
"tryAgain": "Tentar novamente",
"reportIssue": "Relatar este problema",
"viewTitle": "Não foi possível carregar esta visualização",
"viewDescription": "Algo deu errado ao carregar esta página. O restante do dashboard continua funcionando, então você pode tentar novamente ou continuar.",
"reference": "Referência {digest}"
}
}
113 changes: 113 additions & 0 deletions apps/sdp-web/messages/pt/dashboard-approvals.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
{
"DashboardApprovals": {
"pendingCount": "Pendentes: {count}",
"pendingTab": "Pendentes",
"historyTab": "Histórico",
"walletFilter": "Wallet",
"allWallets": "Todas as Wallets",
"statusFilter": "Status",
"allStatuses": "Todos os status",
"operationFilter": "Operação",
"allOperations": "Todas as operações",
"apiKeyFilter": "Chave de API",
"allApiKeys": "Todas as chaves de API",
"fromFilter": "De",
"toFilter": "Até",
"dateRangeLabel": "Data",
"dateAllTime": "Todo o período",
"dateLast7": "7 dias",
"dateLast30": "30 dias",
"dateLast90": "90 dias",
"dateCustom": "Personalizado",
"statusColumn": "Status",
"walletColumn": "Wallet",
"operationColumn": "Operação",
"amountAssetColumn": "Valor / ativo",
"destinationColumn": "Destino",
"requestedByColumn": "Solicitado por",
"policyReasonColumn": "Motivo da política",
"submittedColumn": "Enviado",
"openRequest": "Abrir solicitação de aprovação",
"emptyPending": "Nenhuma solicitação está aguardando aprovação",
"emptyPendingDescription": "Novas operações sujeitas a políticas aparecerão aqui assim que forem enviadas.",
"emptyHistory": "Ainda não há histórico de aprovações",
"emptyHistoryDescription": "Solicitações aprovadas, rejeitadas, canceladas, expiradas e com falha aparecerão aqui.",
"emptyFiltered": "Nenhuma solicitação corresponde a estes filtros",
"emptyFilteredDescription": "Remova um ou mais filtros para ver mais solicitações de aprovação.",
"range": "{from}-{to} de {total} solicitações",
"unableToLoad": "Não foi possível carregar as solicitações de aprovação",
"unableToLoadDescription": "Não foi possível obter a lista de solicitações. Tente carregá-la novamente.",
"reload": "Recarregar",
"autoRefresh": "Atualizando a cada 5 segundos",
"refreshFailed": "Não foi possível atualizar as solicitações de aprovação. Exibindo os últimos resultados carregados.",
"viewOnly": "Você pode revisar solicitações de aprovação, mas sua função não tem permissão para decidir sobre elas.",
"noAccess": "Solicitações de aprovação não estão disponíveis para sua função.",
"noAccessDescription": "Peça a um administrador da organização acesso de leitura à Wallet.",
"backToApprovals": "Voltar para Aprovações",
"reviewTitle": "Revisar {operation}",
"reviewDescription": "Confirme o contexto da política e os detalhes da operação antes de tomar uma decisão.",
"approve": "Aprovar",
"reject": "Rejeitar",
"cancel": "Cancelar",
"approveTitle": "Aprovar esta solicitação?",
"approveDescription": "A operação será liberada para execução. Esta decisão não pode ser desfeita.",
"approveConfirm": "Aprovar solicitação",
"rejectTitle": "Rejeitar esta solicitação?",
"rejectDescription": "A operação será cancelada e não poderá ser retomada a partir desta solicitação.",
"rejectConfirm": "Rejeitar solicitação",
"cancelTitle": "Cancelar esta solicitação?",
"cancelDescription": "A operação pendente será cancelada sem uma decisão de aprovação.",
"cancelConfirm": "Cancelar solicitação",
"notNow": "Agora não",
"decisionInProgress": "Atualizando solicitação...",
"approvedToast": "Solicitação aprovada",
"rejectedToast": "Solicitação rejeitada",
"canceledToast": "Solicitação cancelada",
"alreadyDecided": "Esta solicitação já foi decidida. O status mais recente agora é exibido.",
"forbiddenDecision": "Sua função não tem permissão para decidir sobre solicitações de aprovação.",
"decisionFailed": "Não foi possível atualizar a solicitação. Tente novamente.",
"requestSection": "Solicitação",
"policyDecisionSection": "Decisão da política",
"operationDetailsSection": "Detalhes da operação",
"matchedControlsSection": "Controles correspondentes",
"timelineSection": "Linha do tempo",
"submittedBy": "Enviado por",
"submittedAt": "Enviado em",
"expiresAt": "Expira em",
"policyDecision": "Decisão",
"policyReason": "Motivo",
"reasonCode": "Código do motivo",
"operationFamily": "Família da operação",
"operationType": "Tipo de operação",
"amount": "Valor",
"asset": "Ativo",
"destination": "Destino",
"source": "Origem",
"noMatchedControls": "Nenhum controle correspondente foi reportado para esta avaliação.",
"matchedControl": "Controle correspondente {number}",
"submittedEvent": "Solicitação enviada",
"submittedEventDescription": "A operação foi pausada para aprovação.",
"resolvedEvent": "Solicitação {status}",
"resolvedEventDescription": "Decisão registrada por {actor}.",
"metadata": "Contexto da solicitação",
"wallet": "Wallet",
"walletAddress": "Endereço da Wallet",
"requester": "Solicitante",
"apiKey": "Chave de API",
"walletRevision": "Revisão da Wallet",
"apiKeyRevision": "Revisão da chave de API",
"provider": "Provedor",
"providerStatus": "Status do provedor",
"requestId": "ID da solicitação",
"submitted": "Enviado",
"currentStatus": "Status atual",
"resolvedBy": "Resolvido por",
"resolvedAt": "Resolvido em",
"notReported": "Não reportado",
"directRequest": "Solicitação direta",
"approvalRequiredByPolicy": "Aprovação exigida pela política",
"copyRequestId": "Copiar ID da solicitação",
"requestIdCopied": "ID da solicitação copiado",
"loading": "Carregando aprovações..."
}
}
Loading